summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBenjamin Drung <bdrung@ubuntu.com>2010-06-29 10:01:17 +0200
committerBenjamin Drung <bdrung@ubuntu.com>2010-06-29 10:01:17 +0200
commite8b98d4a2a505405b6380e206cc1e0f553753794 (patch)
tree4f7745e028b087f2d770b39ad20d90adac1af063 /src
parent42318926e1c1585ccc266c4607cb1d6e855bd0b9 (diff)
Imported Upstream version 2.4~alpha2
Diffstat (limited to 'src')
-rw-r--r--src/audacious/Makefile21
-rw-r--r--src/audacious/auddrct.c12
-rw-r--r--src/audacious/auddrct.h1
-rw-r--r--src/audacious/chardet.c25
-rw-r--r--src/audacious/credits.c3
-rw-r--r--src/audacious/dbus-service.h3
-rw-r--r--src/audacious/dbus.c21
-rw-r--r--src/audacious/input.c35
-rw-r--r--src/audacious/input.h15
-rw-r--r--src/audacious/objects.xml3
-rw-r--r--src/audacious/playback.c350
-rw-r--r--src/audacious/playback.h8
-rw-r--r--src/audacious/playlist-new.c38
-rw-r--r--src/audacious/plugin.h2
-rw-r--r--src/audacious/pluginenum.c16
-rw-r--r--src/audacious/probe.c8
-rw-r--r--src/audacious/ui/carbon-menubar.ui122
-rw-r--r--src/audacious/ui/equalizer.ui36
-rw-r--r--src/audacious/ui/mainwin.ui129
-rw-r--r--src/audacious/ui/player.ui60
-rw-r--r--src/audacious/ui/playlist.ui96
-rw-r--r--src/audacious/ui_albumart.c4
-rw-r--r--src/audacious/vis_runner.c8
-rw-r--r--src/audtool/audtool.h1
-rw-r--r--src/audtool/handlers_playlist.c7
-rw-r--r--src/audtool/main.c2
-rw-r--r--src/libaudclient/audctrl.c11
-rw-r--r--src/libaudclient/audctrl.h3
-rw-r--r--src/libaudcore/audstrings.h2
-rw-r--r--src/libaudcore/tuple.c13
-rw-r--r--src/libaudcore/tuple.h8
-rw-r--r--src/libaudcore/vfs.h2
-rw-r--r--src/libaudcore/vfs_buffer.c8
-rw-r--r--src/libaudcore/vfs_buffered_file.c19
-rw-r--r--src/libaudgui/Makefile4
-rw-r--r--src/libaudgui/effects-menu.c12
-rw-r--r--src/libaudgui/equalizer.c189
-rw-r--r--src/libaudgui/infowin.c59
-rw-r--r--src/libaudgui/libaudgui.h9
-rw-r--r--src/libaudgui/ui_gtk.c10
-rw-r--r--src/libaudgui/urilist.c149
-rw-r--r--src/libaudtag/Makefile4
-rw-r--r--src/libaudtag/aac/aac.c2
-rw-r--r--src/libaudtag/id3/id3-common.c102
-rw-r--r--src/libaudtag/id3/id3-common.h48
-rw-r--r--src/libaudtag/id3/id3v22.c362
-rw-r--r--src/libaudtag/id3/id3v24.c72
-rw-r--r--src/libaudtag/tag_module.c2
-rw-r--r--src/libaudtag/util.c2
-rw-r--r--src/libaudtag/util.h2
-rw-r--r--src/libeggsmclient/Makefile2
-rw-r--r--src/libguess/Makefile1
-rw-r--r--src/libguess/arabic_impl.c65
-rw-r--r--src/libguess/cjk_impl.c245
-rw-r--r--src/libguess/dfa.c62
-rw-r--r--src/libguess/dfa.h79
-rw-r--r--src/libguess/greek_impl.c66
-rw-r--r--src/libguess/guess.c11
-rw-r--r--src/libguess/guess.scm340
-rw-r--r--src/libguess/guess_tab.c739
-rw-r--r--src/libguess/hebrew_impl.c65
-rw-r--r--src/libguess/libguess.h7
-rw-r--r--src/libguess/polish_impl.c97
-rw-r--r--src/libguess/russian_impl.c258
-rw-r--r--src/libguess/russian_tab.c899
-rw-r--r--src/libguess/test.c34
-rw-r--r--src/libguess/turkish_impl.c63
67 files changed, 2463 insertions, 2690 deletions
diff --git a/src/audacious/Makefile b/src/audacious/Makefile
index 7b19c5c..5ad9f81 100644
--- a/src/audacious/Makefile
+++ b/src/audacious/Makefile
@@ -79,20 +79,15 @@ DATA = images/about-logo.png \
images/playback.png \
images/playlist.png \
images/plugins.png \
- images/replay_gain.png \
- ui/equalizer.ui \
- ui/mainwin.ui \
- ui/player.ui \
- ui/playlist.ui \
- ui/carbon-menubar.ui
+ images/replay_gain.png
CLEAN = build_stamp.c dbus-client-bindings.h dbus-server-bindings.h
EXT_DEPS = ../libguess/libguess.a
ifeq ($(USE_EGGSM),yes)
EXT_DEPS += ../libeggsmclient/libeggsmclient.a
-EGGSM_LIBS = ../libeggsmclient/libeggsmclient.a ${SM_LIBS}
-EGGSM_CFLAGS = -I../libeggsmclient ${SM_CFLAGS}
+EGGSM_LIBS = ../libeggsmclient/libeggsmclient.a ${SM_LIBS} ${ICE_LIBS}
+EGGSM_CFLAGS = -I../libeggsmclient ${SM_CFLAGS} ${ICE_CFLAGS}
endif
include ../../buildsys.mk
@@ -125,6 +120,7 @@ CPPFLAGS += -DHAVE_CONFIG_H \
-I../libaudtag
LIBS += ${LDADD} \
+ -lm \
-L../libaudcore -laudcore \
-L../libaudgui -laudgui \
-L../libaudtag -laudtag \
@@ -141,15 +137,6 @@ LIBS += ${LDADD} \
LDFLAGS += ${PROG_IMPLIB_LDFLAGS} ${AUDLDFLAGS}
-build_stamp.c:
- echo "#include <glib.h>" > build_stamp.c ; \
- if test -d ../../.hg ; then \
- revh=`hg tip --template 'const gchar *build_stamp = "{rev}:{node|short}";\n' 2>/dev/null`; \
- [ -z "$$revh" ] || echo "$$revh" >> build_stamp.c; \
- else \
- echo "const gchar *build_stamp = \"UNSUPPORTED VERSION\";" >> build_stamp.c; \
- fi
-
DBUS_BINDINGS_SOURCES = objects.xml \
mpris_root.xml \
mpris_tracklist.xml \
diff --git a/src/audacious/auddrct.c b/src/audacious/auddrct.c
index fc190cb..de6cd8f 100644
--- a/src/audacious/auddrct.c
+++ b/src/audacious/auddrct.c
@@ -104,7 +104,10 @@ void drct_play (void)
if (playback_get_playing () && playback_get_paused ())
playback_pause ();
else
+ {
+ playlist_set_playing (playlist_get_active ());
playback_initiate ();
+ }
return;
}
@@ -116,15 +119,6 @@ drct_pause ( void )
return;
}
-void
-drct_stop ( void )
-{
- ip_data.stop = TRUE;
- playback_stop();
- ip_data.stop = FALSE;
- return;
-}
-
gboolean
drct_get_playing ( void )
{
diff --git a/src/audacious/auddrct.h b/src/audacious/auddrct.h
index 7a62bcf..25a7480 100644
--- a/src/audacious/auddrct.h
+++ b/src/audacious/auddrct.h
@@ -42,7 +42,6 @@ void drct_activate(void);
void drct_initiate ( void );
void drct_play ( void );
void drct_pause ( void );
-void drct_stop ( void );
gboolean drct_get_playing ( void );
gboolean drct_get_paused ( void );
gboolean drct_get_stopped ( void );
diff --git a/src/audacious/chardet.c b/src/audacious/chardet.c
index bc6ae22..f4720a9 100644
--- a/src/audacious/chardet.c
+++ b/src/audacious/chardet.c
@@ -17,6 +17,7 @@
* Audacious or using our public API to be a derived work.
*/
+#define DEBUG
#include "config.h"
#include "chardet.h"
#include "audstrings.h"
@@ -95,12 +96,31 @@ cd_chardet_to_utf8(const gchar * str, gssize len, gsize * arg_bytes_read,
g_return_val_if_fail(str != NULL, NULL);
#ifdef USE_CHARDET
+ if (dfa_validate_utf8(str, len))
+ {
+ if (len < 0)
+ len = strlen (str);
+
+ ret = g_malloc (len + 1);
+ memcpy (ret, str, len);
+ ret[len] = 0;
+
+ if (arg_bytes_read != NULL)
+ * arg_bytes_read = len;
+ if (arg_bytes_write != NULL)
+ * arg_bytes_write = len;
+
+ return ret;
+ }
+
if (cfg.chardet_detector)
det = cfg.chardet_detector;
if (det)
{
- encoding = (gchar *) guess_encoding(str, strlen(str), det);
+ AUDDBG("guess encoding (%s) %s\n", det, str);
+ encoding = (gchar *) guess_encoding(str, len, det);
+ AUDDBG("encoding = %s\n", encoding);
if (encoding == NULL)
goto fallback;
@@ -150,7 +170,4 @@ void chardet_init(void)
{
str_to_utf8 = cd_str_to_utf8;
chardet_to_utf8 = cd_chardet_to_utf8;
-#ifdef USE_CHARDET
- guess_init();
-#endif
}
diff --git a/src/audacious/credits.c b/src/audacious/credits.c
index 7f6b135..9f5d816 100644
--- a/src/audacious/credits.c
+++ b/src/audacious/credits.c
@@ -98,11 +98,12 @@ static const gchar *credit_text[] = {
"Mark Glines",
"Hans de Goede",
"Jussi Judin",
- "Teru KAMOGASHIRA",
+ "Teru Kamogashira",
"Chris Kehler",
"Mark Loeser",
"Alex Maclean",
"Michael Hanselmann",
+ "Juho Heikkinen",
"Joseph Jezak",
"Henrik Johansson",
"Rodrigo Martins de Matos Ventura",
diff --git a/src/audacious/dbus-service.h b/src/audacious/dbus-service.h
index 249f5b1..0475e1b 100644
--- a/src/audacious/dbus-service.h
+++ b/src/audacious/dbus-service.h
@@ -221,4 +221,7 @@ gboolean audacious_rc_set_eq_preamp(RemoteObject *obj, gdouble preamp, GError **
gboolean audacious_rc_set_eq_band(RemoteObject *obj, gint band, gdouble value, GError **error);
gboolean audacious_rc_equalizer_activate(RemoteObject *obj, gboolean active, GError **error);
+/* new in 2.4 */
+gboolean audacious_rc_get_active_playlist_name(RemoteObject *obj, gchar **title, GError **error);
+
#endif /* AUDACIOUS_DBUS_SERVICE_H */
diff --git a/src/audacious/dbus.c b/src/audacious/dbus.c
index c75d7a6..a0b790c 100644
--- a/src/audacious/dbus.c
+++ b/src/audacious/dbus.c
@@ -59,7 +59,7 @@ struct InfoRequest
{
gint playlist; /* -1 = active, -2 = playing */
gint entry; /* -1 = current */
- gchar *filename, *title;
+ gchar *filename, *title, *pltitle;
gint length;
};
@@ -386,7 +386,7 @@ static void get_position(struct PositionRequest *request)
static gboolean get_info_cb(void *data)
{
struct InfoRequest *request = data;
- const gchar *filename, *title;
+ const gchar *filename, *title, *pltitle;
g_mutex_lock(info_mutex);
@@ -396,6 +396,8 @@ static gboolean get_info_cb(void *data)
title = playlist_entry_get_title(request->playlist, request->entry);
request->title = (title == NULL) ? NULL : g_strdup(title);
request->length = playlist_entry_get_length(request->playlist, request->entry);
+ pltitle = playlist_get_title(request->playlist);
+ request->pltitle = (pltitle == NULL) ? NULL : g_strdup(pltitle);
g_cond_signal(info_cond);
g_mutex_unlock(info_mutex);
@@ -737,7 +739,7 @@ gboolean mpris_player_get_status(MprisPlayer * obj, GValueArray * *status, GErro
gboolean mpris_player_get_metadata(MprisPlayer * obj, GHashTable * *metadata, GError * *error)
{
- struct MprisMetadataRequest request = {.playlist = -2,.entry = -1 };
+ struct MprisMetadataRequest request = {.playlist = -1,.entry = -1 };
get_mpris_metadata(&request);
*metadata = request.metadata;
@@ -1125,6 +1127,7 @@ gboolean audacious_rc_song_title(RemoteObject * obj, guint pos, gchar * *title,
get_info(&request);
g_free(request.filename);
+ g_free(request.pltitle);
*title = request.title;
return TRUE;
}
@@ -1136,6 +1139,7 @@ gboolean audacious_rc_song_filename(RemoteObject * obj, guint pos, gchar * *file
get_info(&request);
*filename = request.filename;
g_free(request.title);
+ g_free(request.pltitle);
return TRUE;
}
@@ -1153,6 +1157,7 @@ gboolean audacious_rc_song_frames(RemoteObject * obj, guint pos, gint * length,
get_info(&request);
g_free(request.filename);
g_free(request.title);
+ g_free(request.pltitle);
*length = request.length;
return TRUE;
}
@@ -1466,6 +1471,16 @@ gboolean audacious_rc_equalizer_activate(RemoteObject * obj, gboolean active, GE
return TRUE;
}
+gboolean audacious_rc_get_active_playlist_name(RemoteObject * obj, gchar * *title, GError * *error)
+{
+ struct InfoRequest request = {.playlist = -2 };
+
+ get_info(&request);
+ g_free(request.title);
+ g_free(request.filename);
+ *title = request.pltitle;
+ return TRUE;
+}
DBusGProxy *audacious_get_dbus_proxy(void)
{
diff --git a/src/audacious/input.c b/src/audacious/input.c
index c5a6025..df1c9e2 100644
--- a/src/audacious/input.c
+++ b/src/audacious/input.c
@@ -34,27 +34,6 @@
#include "output.h"
#include "plugin-registry.h"
-PlaybackData ip_data =
-{
- NULL,
- FALSE,
- FALSE,
- FALSE,
- NULL
-};
-
-InputPlayback *
-get_current_input_playback(void)
-{
- return ip_data.current_input_playback;
-}
-
-void
-set_current_input_playback(InputPlayback * ip)
-{
- ip_data.current_input_playback = ip;
-}
-
static gboolean plugin_list_func (void * plugin, void * data)
{
GList * * list = data;
@@ -76,9 +55,8 @@ GList * get_input_list (void)
void
input_get_volume(gint * l, gint * r)
{
- if (ip_data.playing && ip_data.current_input_playback &&
- ip_data.current_input_playback->plugin->get_volume &&
- ip_data.current_input_playback->plugin->get_volume (l, r))
+ if (current_playback && current_playback->plugin->get_volume &&
+ current_playback->plugin->get_volume (l, r))
return;
output_get_volume (l, r);
@@ -87,15 +65,12 @@ input_get_volume(gint * l, gint * r)
void
input_set_volume(gint l, gint r)
{
- gint h_vol[2];
+ gint h_vol[2] = {l, r};
- h_vol[0] = l;
- h_vol[1] = r;
hook_call("volume set", h_vol);
- if (ip_data.playing && ip_data.current_input_playback &&
- ip_data.current_input_playback->plugin->set_volume &&
- ip_data.current_input_playback->plugin->set_volume (l, r))
+ if (current_playback && current_playback->plugin->set_volume &&
+ current_playback->plugin->set_volume (l, r))
return;
output_set_volume (l, r);
diff --git a/src/audacious/input.h b/src/audacious/input.h
index 2ca35f5..f973961 100644
--- a/src/audacious/input.h
+++ b/src/audacious/input.h
@@ -28,16 +28,6 @@
#include "plugin.h"
-typedef struct
-{
- InputPlayback *current_input_playback;
- gboolean playing;
- gboolean paused;
- gboolean stop;
- GMutex *playback_mutex;
-}
-PlaybackData;
-
struct _VisNode {
gint time;
gint nch;
@@ -48,13 +38,10 @@ struct _VisNode {
typedef struct _VisNode VisNode;
GList *get_input_list(void);
-InputPlayback *get_current_input_playback(void);
-void set_current_input_playback(InputPlayback * ip);
-void set_current_input_data(void * data);
void input_get_volume(gint * l, gint * r);
void input_set_volume(gint l, gint r);
-extern PlaybackData ip_data;
+extern InputPlayback * current_playback;
#endif /* AUDACIOUS_INPUT_H */
diff --git a/src/audacious/objects.xml b/src/audacious/objects.xml
index 988c397..527171e 100644
--- a/src/audacious/objects.xml
+++ b/src/audacious/objects.xml
@@ -523,5 +523,8 @@
<arg type="b" name="active"/>
</method>
+ <method name="GetActivePlaylistName">
+ <arg type="s" direction="out" name="plname" />
+ </method>
</interface>
</node>
diff --git a/src/audacious/playback.c b/src/audacious/playback.c
index e19a38a..d09ad15 100644
--- a/src/audacious/playback.c
+++ b/src/audacious/playback.c
@@ -55,9 +55,13 @@ static void set_gain_from_playlist (InputPlayback * playback);
static gboolean playback_segmented_end(gpointer data);
+static void playback_free (InputPlayback * playback);
static gboolean playback_play_file (gint playlist, gint entry);
-static gboolean pause_when_ready;
+InputPlayback * current_playback = NULL;
+
+static gboolean paused;
+static gboolean stopping;
static gint seek_when_ready;
static gint ready_source;
static gint failed_entries;
@@ -110,18 +114,19 @@ static void read_gain_from_tuple (Tuple * tuple)
}
}
-static gboolean ready_cb (void * data)
+static gboolean ready_cb (void * unused)
{
- InputPlayback * playback = data;
-
- g_return_val_if_fail (playback != NULL, FALSE);
+ g_return_val_if_fail (current_playback != NULL, FALSE);
- g_mutex_lock (playback->pb_ready_mutex);
+ g_mutex_lock (current_playback->pb_ready_mutex);
ready_source = 0;
- g_mutex_unlock (playback->pb_ready_mutex);
+ g_mutex_unlock (current_playback->pb_ready_mutex);
- if (pause_when_ready)
+ if (paused)
+ {
+ paused = ! paused; /* playback_pause toggles it */
playback_pause ();
+ }
if (seek_when_ready > 0)
playback_seek (seek_when_ready);
@@ -130,15 +135,15 @@ static gboolean ready_cb (void * data)
return FALSE;
}
-static gboolean playback_is_ready (InputPlayback * playback)
+static gboolean playback_is_ready (void)
{
gboolean ready;
- g_return_val_if_fail (playback != NULL, FALSE);
+ g_return_val_if_fail (current_playback != NULL, FALSE);
- g_mutex_lock (playback->pb_ready_mutex);
- ready = (playback->pb_ready_val && ! ready_source);
- g_mutex_unlock (playback->pb_ready_mutex);
+ g_mutex_lock (current_playback->pb_ready_mutex);
+ ready = (current_playback->pb_ready_val && ! ready_source);
+ g_mutex_unlock (current_playback->pb_ready_mutex);
return ready;
}
@@ -147,7 +152,7 @@ playback_set_pb_ready(InputPlayback *playback)
{
g_mutex_lock(playback->pb_ready_mutex);
playback->pb_ready_val = 1;
- ready_source = g_timeout_add (0, ready_cb, playback);
+ ready_source = g_timeout_add (0, ready_cb, NULL);
g_cond_signal(playback->pb_ready_cond);
g_mutex_unlock(playback->pb_ready_mutex);
return 0;
@@ -163,15 +168,13 @@ playback_set_pb_change(InputPlayback *playback)
static void update_cb (void * hook_data, void * user_data)
{
- InputPlayback * playback;
- gint playlist, entry;
+ gint playlist, entry, length;
const gchar * title;
- playback = ip_data.current_input_playback;
- g_return_if_fail (playback != NULL);
+ g_return_if_fail (current_playback != NULL);
if (GPOINTER_TO_INT (hook_data) < PLAYLIST_UPDATE_METADATA ||
- ! playback_is_ready (playback))
+ ! playback_is_ready ())
return;
playlist = playlist_get_playing ();
@@ -180,32 +183,35 @@ static void update_cb (void * hook_data, void * user_data)
if ((title = playlist_entry_get_title (playlist, entry)) == NULL)
title = playlist_entry_get_filename (playlist, entry);
- g_free (playback->title);
- playback->title = g_strdup (title);
- playback->length = playlist_entry_get_length (playlist, entry);
+ length = playlist_entry_get_length (playlist, entry);
+ if (! strcmp (title, current_playback->title) && length ==
+ current_playback->length)
+ return;
+
+ g_free (current_playback->title);
+ current_playback->title = g_strdup (title);
+ current_playback->length = length;
hook_call ("title change", NULL);
}
static gint
playback_get_time_real(void)
{
- InputPlayback * playback;
gint time = -1;
- playback = ip_data.current_input_playback;
- g_return_val_if_fail (playback != NULL, 0);
+ g_return_val_if_fail (current_playback != NULL, 0);
- if (! playback_is_ready (playback))
+ if (! playback_is_ready ())
return seek_when_ready;
- if (! playback->playing || playback->eof || playback->error)
+ if (! current_playback->playing || current_playback->error)
return 0;
- if (playback->plugin->get_time != NULL)
- time = playback->plugin->get_time (playback);
+ if (current_playback->plugin->get_time != NULL)
+ time = current_playback->plugin->get_time (current_playback);
- if (time == -1)
+ if (time < 0)
time = get_output_time ();
return time;
@@ -213,13 +219,10 @@ playback_get_time_real(void)
gint playback_get_time (void)
{
- InputPlayback * playback;
-
- playback = ip_data.current_input_playback;
- g_return_val_if_fail (playback != NULL, 0);
+ g_return_val_if_fail (current_playback != NULL, 0);
- if (playback->start > 0)
- return playback_get_time_real () - playback->start;
+ if (current_playback->start > 0)
+ return playback_get_time_real () - current_playback->start;
else
return playback_get_time_real ();
}
@@ -260,28 +263,20 @@ void playback_initiate (void)
void playback_pause (void)
{
- InputPlayback * playback;
- gboolean paused;
+ g_return_if_fail (current_playback != NULL);
- playback = ip_data.current_input_playback;
- g_return_if_fail (playback != NULL);
+ paused = ! paused;
- if (playback_is_ready (playback))
+ if (playback_is_ready ())
{
- paused = ! ip_data.paused;
-
- if (playback->end_timeout)
- g_source_remove(playback->end_timeout);
-
- g_return_if_fail (playback->plugin->pause != NULL);
- playback->plugin->pause (playback, paused);
+ if (current_playback->end_timeout)
+ {
+ g_source_remove(current_playback->end_timeout);
+ current_playback->end_timeout = 0;
+ }
- ip_data.paused = paused;
- }
- else
- {
- paused = ! pause_when_ready;
- pause_when_ready = paused;
+ g_return_if_fail (current_playback->plugin->pause != NULL);
+ current_playback->plugin->pause (current_playback, paused);
}
if (paused)
@@ -290,20 +285,21 @@ void playback_pause (void)
{
hook_call("playback unpause", NULL);
- if (playback->end > 0)
- playback->end_timeout = g_timeout_add (playback->end -
- playback_get_time_real (), playback_segmented_end, playback);
+ if (current_playback->end > 0)
+ current_playback->end_timeout = g_timeout_add (current_playback->end
+ - playback_get_time_real (), playback_segmented_end, NULL);
}
}
-static void playback_finalize (InputPlayback * playback)
+static void playback_finalize (void)
{
hook_dissociate ("playlist update", update_cb);
- g_mutex_lock (playback->pb_ready_mutex);
+ g_mutex_lock (current_playback->pb_ready_mutex);
- while (! playback->pb_ready_val)
- g_cond_wait (playback->pb_ready_cond, playback->pb_ready_mutex);
+ while (! current_playback->pb_ready_val)
+ g_cond_wait (current_playback->pb_ready_cond,
+ current_playback->pb_ready_mutex);
if (ready_source)
{
@@ -311,36 +307,45 @@ static void playback_finalize (InputPlayback * playback)
ready_source = 0;
}
- g_mutex_unlock (playback->pb_ready_mutex);
+ g_mutex_unlock (current_playback->pb_ready_mutex);
- if (playback->playing)
- playback->plugin->stop (playback);
+ if (current_playback->playing)
+ current_playback->plugin->stop (current_playback);
/* some plugins do this themselves */
- if (playback->thread != NULL)
- g_thread_join (playback->thread);
+ if (current_playback->thread != NULL)
+ g_thread_join (current_playback->thread);
- playback_free (playback);
- ip_data.current_input_playback = NULL;
cancel_set_tuple ();
- if (playback->end_timeout)
- g_source_remove(playback->end_timeout);
+ if (current_playback->end_timeout)
+ g_source_remove (current_playback->end_timeout);
+
+ playback_free (current_playback);
+ current_playback = NULL;
}
-void playback_stop (void)
+static void complete_stop (void)
{
- g_return_if_fail (ip_data.current_input_playback != NULL);
+ output_drain ();
+ hook_call ("playback stop", NULL);
- ip_data.stop = TRUE;
+ if (cfg.stopaftersong)
+ {
+ cfg.stopaftersong = FALSE;
+ hook_call ("toggle stop after song", NULL);
+ }
+}
- playback_finalize (ip_data.current_input_playback);
+void playback_stop (void)
+{
+ g_return_if_fail (current_playback != NULL);
- ip_data.playing = FALSE;
- ip_data.stop = FALSE;
+ stopping = TRUE;
+ playback_finalize ();
+ stopping = FALSE;
- output_drain ();
- hook_call ("playback stop", NULL);
+ complete_stop ();
}
static gboolean playback_ended (void * user_data)
@@ -348,14 +353,14 @@ static gboolean playback_ended (void * user_data)
gint playlist = playlist_get_playing ();
gboolean play;
- g_return_val_if_fail (ip_data.current_input_playback != NULL, FALSE);
+ g_return_val_if_fail (current_playback != NULL, FALSE);
- if (ip_data.current_input_playback->error)
+ if (current_playback->error)
failed_entries ++;
else
failed_entries = 0;
- playback_finalize (ip_data.current_input_playback);
+ playback_finalize ();
while (1)
{
@@ -375,8 +380,7 @@ static gboolean playback_ended (void * user_data)
if (! play)
{
- output_drain ();
- hook_call ("playback stop", NULL);
+ complete_stop ();
break;
}
@@ -389,8 +393,7 @@ static gboolean playback_ended (void * user_data)
return FALSE;
}
-static gboolean
-playback_segmented_end(gpointer data)
+static gboolean playback_segmented_end (void * unused)
{
if (playlist_next_song (playlist_get_playing (), cfg.repeat))
playback_initiate ();
@@ -398,18 +401,20 @@ playback_segmented_end(gpointer data)
return FALSE;
}
-static gboolean
-playback_segmented_start(gpointer data)
+static gboolean playback_segmented_start (void * unused)
{
- InputPlayback *playback = (InputPlayback *) data;
+ g_return_val_if_fail (current_playback != NULL, FALSE);
- if (playback->plugin->mseek != NULL)
- playback->plugin->mseek (playback, playback->start);
- else if (playback->plugin->seek != NULL)
- playback->plugin->seek (playback, playback->start / 1000);
+ if (current_playback->plugin->mseek != NULL)
+ current_playback->plugin->mseek (current_playback,
+ current_playback->start);
+ else if (current_playback->plugin->seek != NULL)
+ current_playback->plugin->seek (current_playback,
+ current_playback->start / 1000);
- if (playback->end > 0)
- playback->end_timeout = g_timeout_add(playback->end - playback->start, playback_segmented_end, playback);
+ if (current_playback->end > 0)
+ current_playback->end_timeout = g_timeout_add (current_playback->end -
+ current_playback->start, playback_segmented_end, current_playback);
return FALSE;
}
@@ -417,16 +422,13 @@ playback_segmented_start(gpointer data)
static gpointer
playback_monitor_thread(gpointer data)
{
- InputPlayback *playback = (InputPlayback *) data;
+ if (current_playback->segmented)
+ g_idle_add (playback_segmented_start, current_playback);
- if (playback->segmented)
- g_idle_add(playback_segmented_start, playback);
+ current_playback->plugin->play_file (current_playback);
- plugin_set_current((Plugin *)(playback->plugin));
- playback->plugin->play_file(playback);
-
- g_mutex_lock (playback->pb_ready_mutex);
- playback->pb_ready_val = TRUE;
+ g_mutex_lock (current_playback->pb_ready_mutex);
+ current_playback->pb_ready_val = TRUE;
if (ready_source != 0)
{
@@ -434,10 +436,10 @@ playback_monitor_thread(gpointer data)
ready_source = 0;
}
- g_cond_signal (playback->pb_ready_cond);
- g_mutex_unlock (playback->pb_ready_mutex);
+ g_cond_signal (current_playback->pb_ready_cond);
+ g_mutex_unlock (current_playback->pb_ready_mutex);
- if (! ip_data.stop)
+ if (! stopping)
g_timeout_add (0, playback_ended, NULL);
return NULL;
@@ -470,8 +472,7 @@ static void playback_pass_audio (InputPlayback * playback, AFormat format, gint
playback->output->write_audio (data, size);
}
-InputPlayback *
-playback_new(void)
+static InputPlayback * playback_new (void)
{
InputPlayback *playback = (InputPlayback *) g_slice_new0(InputPlayback);
@@ -505,7 +506,7 @@ playback_new(void)
* other sources for allocated playback data (like filename and title)
* and this tries to deallocate all that data.
*/
-void playback_free(InputPlayback *playback)
+static void playback_free (InputPlayback * playback)
{
g_free(playback->filename);
g_free(playback->title);
@@ -519,18 +520,19 @@ void playback_free(InputPlayback *playback)
g_slice_free(InputPlayback, playback);
}
-void
-playback_run(InputPlayback *playback)
+static void playback_run (void)
{
- playback->playing = 0;
- playback->eof = 0;
- playback->error = 0;
+ current_playback->playing = FALSE;
+ current_playback->eof = FALSE;
+ current_playback->error = FALSE;
- pause_when_ready = FALSE;
+ paused = FALSE;
+ stopping = FALSE;
seek_when_ready = 0;
ready_source = 0;
- playback->thread = g_thread_create(playback_monitor_thread, playback, TRUE, NULL);
+ current_playback->thread = g_thread_create (playback_monitor_thread,
+ current_playback, TRUE, NULL);
}
static gboolean playback_play_file (gint playlist, gint entry)
@@ -539,7 +541,8 @@ static gboolean playback_play_file (gint playlist, gint entry)
const gchar * title = playlist_entry_get_title (playlist, entry);
InputPlugin * decoder = playlist_entry_get_decoder (playlist, entry);
Tuple * tuple = (Tuple *) playlist_entry_get_tuple (playlist, entry);
- InputPlayback *playback;
+
+ g_return_val_if_fail (current_playback == NULL, FALSE);
if (decoder == NULL)
decoder = file_find_decoder (filename, FALSE);
@@ -563,85 +566,70 @@ static gboolean playback_play_file (gint playlist, gint entry)
read_gain_from_tuple (tuple); /* even if tuple == NULL */
- ip_data.playing = TRUE;
- ip_data.paused = FALSE;
- ip_data.stop = FALSE;
-
- playback = playback_new();
-
- playback->plugin = decoder;
- playback->filename = g_strdup (filename);
- playback->title = g_strdup ((title != NULL) ? title : filename);
- playback->length = playlist_entry_get_length (playlist, entry);
- playback->segmented = playlist_entry_is_segmented (playlist, entry);
- playback->start = playlist_entry_get_start_time (playlist, entry);
- playback->end = playlist_entry_get_end_time (playlist, entry);
+ current_playback = playback_new ();
+ current_playback->plugin = decoder;
+ current_playback->filename = g_strdup (filename);
+ current_playback->title = g_strdup ((title != NULL) ? title : filename);
+ current_playback->length = playlist_entry_get_length (playlist, entry);
+ current_playback->segmented = playlist_entry_is_segmented (playlist, entry);
+ current_playback->start = playlist_entry_get_start_time (playlist, entry);
+ current_playback->end = playlist_entry_get_end_time (playlist, entry);
- set_current_input_playback(playback);
-
- playback_run(playback);
+ playback_run ();
#ifdef USE_DBUS
mpris_emit_track_change(mpris);
#endif
hook_associate ("playlist update", update_cb, NULL);
- hook_call ("playback begin", playback);
+ hook_call ("playback begin", NULL);
return TRUE;
}
gboolean playback_get_playing (void)
{
- return (ip_data.current_input_playback != NULL);
+ return (current_playback != NULL);
}
gboolean playback_get_paused (void)
{
- InputPlayback * playback;
-
- playback = ip_data.current_input_playback;
- g_return_val_if_fail (playback != NULL, FALSE);
+ g_return_val_if_fail (current_playback != NULL, FALSE);
- if (playback_is_ready (playback))
- return ip_data.paused;
- else
- return pause_when_ready;
+ return paused;
}
void playback_seek (gint time)
{
- InputPlayback * playback;
+ g_return_if_fail (current_playback != NULL);
- playback = ip_data.current_input_playback;
- g_return_if_fail (playback != NULL);
-
- if (playback->length <= 0)
+ if (current_playback->length <= 0)
return;
- time = CLAMP (time, 0, playback->length);
+ time = CLAMP (time, 0, current_playback->length);
- if (playback_is_ready (playback))
+ if (playback_is_ready ())
{
- if (playback->start > 0)
- time += playback->start;
+ if (current_playback->start > 0)
+ time += current_playback->start;
- if (playback->plugin->mseek != NULL)
- playback->plugin->mseek (playback, time);
- else if (playback->plugin->seek != NULL)
- playback->plugin->seek (playback, time / 1000);
+ if (current_playback->plugin->mseek != NULL)
+ current_playback->plugin->mseek (current_playback, time);
+ else if (current_playback->plugin->seek != NULL)
+ current_playback->plugin->seek (current_playback, time / 1000);
- if (playback->end > 0)
+ if (current_playback->end > 0)
{
- if (playback->end_timeout)
- g_source_remove(playback->end_timeout);
+ if (current_playback->end_timeout)
+ g_source_remove (current_playback->end_timeout);
- playback->end_timeout = g_timeout_add(playback->end - time, playback_segmented_end, playback);
+ current_playback->end_timeout = g_timeout_add (current_playback->end
+ - time, playback_segmented_end, NULL);
}
}
else
seek_when_ready = time;
- hook_call ("playback seek", playback);
+ hook_call ("playback seek", NULL);
}
static void set_params (InputPlayback * playback, const gchar * title, gint
@@ -658,21 +646,31 @@ static gboolean set_tuple_cb (void * unused)
{
gint playlist = playlist_get_playing ();
+ g_return_val_if_fail (current_playback != NULL, FALSE);
+ g_mutex_lock (current_playback->pb_ready_mutex);
+
playlist_entry_set_tuple (playlist, playlist_get_position (playlist),
tuple_to_be_set);
set_tuple_source = 0;
tuple_to_be_set = NULL;
+
+ g_mutex_unlock (current_playback->pb_ready_mutex);
+
return FALSE;
}
static void set_tuple (InputPlayback * playback, Tuple * tuple)
{
+ g_mutex_lock (playback->pb_ready_mutex);
+
/* playlist_entry_set_tuple must execute in main thread */
cancel_set_tuple ();
set_tuple_source = g_timeout_add (0, set_tuple_cb, NULL);
tuple_to_be_set = tuple;
read_gain_from_tuple (tuple);
+
+ g_mutex_unlock (playback->pb_ready_mutex);
}
static void set_gain_from_playlist (InputPlayback * playback)
@@ -682,24 +680,23 @@ static void set_gain_from_playlist (InputPlayback * playback)
gchar * playback_get_title (void)
{
- InputPlayback * playback;
gchar * suffix, * title;
- playback = ip_data.current_input_playback;
- g_return_val_if_fail (playback != NULL, NULL);
+ g_return_val_if_fail (current_playback != NULL, NULL);
- if (! playback_is_ready (playback))
+ if (! playback_is_ready ())
return g_strdup (_("Buffering ..."));
- suffix = (playback->length > 0) ? g_strdup_printf (" (%d:%02d)",
- playback->length / 60000, playback->length / 1000 % 60) : NULL;
+ suffix = (current_playback->length > 0) ? g_strdup_printf (" (%d:%02d)",
+ current_playback->length / 60000, current_playback->length / 1000 % 60) :
+ NULL;
if (cfg.show_numbers_in_pl)
title = g_strdup_printf ("%d. %s%s", 1 + playlist_get_position
- (playlist_get_playing ()), playback->title, (suffix != NULL) ? suffix :
- "");
+ (playlist_get_playing ()), current_playback->title, (suffix != NULL) ?
+ suffix : "");
else
- title = g_strdup_printf ("%s%s", playback->title, (suffix !=
+ title = g_strdup_printf ("%s%s", current_playback->title, (suffix !=
NULL) ? suffix : "");
g_free (suffix);
@@ -708,19 +705,16 @@ gchar * playback_get_title (void)
gint playback_get_length (void)
{
- g_return_val_if_fail (ip_data.current_input_playback != NULL, 0);
+ g_return_val_if_fail (current_playback != NULL, 0);
- return ip_data.current_input_playback->length;
+ return current_playback->length;
}
void playback_get_info (gint * bitrate, gint * samplerate, gint * channels)
{
- InputPlayback * playback;
-
- playback = ip_data.current_input_playback;
- g_return_if_fail (playback != NULL);
+ g_return_if_fail (current_playback != NULL);
- * bitrate = playback->rate;
- * samplerate = playback->freq;
- * channels = playback->nch;
+ * bitrate = current_playback->rate;
+ * samplerate = current_playback->freq;
+ * channels = current_playback->nch;
}
diff --git a/src/audacious/playback.h b/src/audacious/playback.h
index a745ac4..9093240 100644
--- a/src/audacious/playback.h
+++ b/src/audacious/playback.h
@@ -37,14 +37,6 @@ void playback_stop(void);
gboolean playback_get_playing(void);
gboolean playback_get_paused(void);
void playback_seek(gint time);
-InputPlayback *playback_new(void);
-void playback_free(InputPlayback *);
-void playback_run(InputPlayback *);
-
-/* deprecated */
-void ip_set_info (const gchar * title, gint length, gint bitrate, gint
- samplerate, gint channels);
-void ip_set_info_text (const gchar * title);
gchar * playback_get_title (void);
gint playback_get_length (void);
diff --git a/src/audacious/playlist-new.c b/src/audacious/playlist-new.c
index 635039f..a377705 100644
--- a/src/audacious/playlist-new.c
+++ b/src/audacious/playlist-new.c
@@ -33,6 +33,8 @@
#include "plugin.h"
#include "probe.h"
+#define SCAN_DEBUG(...)
+
#define STATE_FILE "playlist-state"
#define DECLARE_PLAYLIST \
@@ -139,6 +141,7 @@ static GCond * scan_cond;
static const gchar * scan_filename;
static InputPlugin * scan_decoder;
static Tuple * scan_tuple;
+static gboolean scan_quit;
static GThread * scan_thread;
static gint scan_position, updated_ago;
@@ -366,6 +369,7 @@ void scan_receive (void)
{
struct entry * entry = index_get (active_playlist->entries, scan_position);
+ SCAN_DEBUG ("scan_receive\n");
entry_set_tuple (active_playlist, entry, scan_tuple);
if (scan_tuple == NULL)
@@ -380,7 +384,9 @@ static gboolean scan_next (void * unused)
{
gint entries;
+ SCAN_DEBUG ("scan_next: locking...\n");
g_mutex_lock (scan_mutex);
+ SCAN_DEBUG (" ...ok\n");
if (scan_filename != NULL)
{
@@ -403,6 +409,7 @@ static gboolean scan_next (void * unused)
if (! entry->failed)
{
+ SCAN_DEBUG (" ...waking scanner\n");
scan_filename = entry->filename;
scan_decoder = entry->decoder;
g_cond_signal (scan_cond);
@@ -412,10 +419,12 @@ static gboolean scan_next (void * unused)
if (updated_ago >= 10 || (scan_position == entries && updated_ago > 0))
{
+ SCAN_DEBUG (" ...queueing update\n");
queue_update (PLAYLIST_UPDATE_METADATA);
updated_ago = 0;
}
+ SCAN_DEBUG (" ...unlocking\n");
scan_source = 0;
g_mutex_unlock (scan_mutex);
return FALSE;
@@ -423,11 +432,13 @@ static gboolean scan_next (void * unused)
static void scan_continue (void)
{
+ SCAN_DEBUG ("scan_continue\n");
scan_source = g_idle_add_full (G_PRIORITY_LOW, scan_next, NULL, NULL);
}
static void scan_reset (void)
{
+ SCAN_DEBUG ("scan_reset\n");
scan_position = 0;
updated_ago = 0;
scan_continue ();
@@ -435,7 +446,9 @@ static void scan_reset (void)
static void scan_stop (void)
{
+ SCAN_DEBUG ("scan_stop: locking...\n");
g_mutex_lock (scan_mutex);
+ SCAN_DEBUG (" ...ok\n");
if (scan_source != 0)
{
@@ -446,6 +459,7 @@ static void scan_stop (void)
if (scan_filename != NULL)
scan_receive ();
+ SCAN_DEBUG (" ...unlocking\n");
g_mutex_unlock (scan_mutex);
}
@@ -454,11 +468,22 @@ static void * scanner (void * unused)
{
for (;;)
{
+ SCAN_DEBUG ("scanner: waiting...\n");
g_cond_wait (scan_cond, scan_mutex);
- if (scan_filename == NULL)
+ if (scan_quit)
+ {
+ SCAN_DEBUG (" ...exiting\n");
return NULL;
+ }
+
+ if (scan_filename == NULL)
+ {
+ SCAN_DEBUG (" ...nothing to scan\n");
+ continue;
+ }
+ SCAN_DEBUG (" ...scanning\n");
scan_tuple = file_read_tuple (scan_filename, scan_decoder);
scan_continue ();
}
@@ -508,6 +533,7 @@ void playlist_init (void)
scan_tuple = NULL;
scan_source = 0;
g_mutex_lock (scan_mutex);
+ scan_quit = FALSE;
scan_thread = g_thread_create (scanner, NULL, TRUE, NULL);
scan_reset ();
}
@@ -518,7 +544,7 @@ void playlist_end(void)
scan_stop ();
g_mutex_lock (scan_mutex);
- scan_filename = NULL; /* tell scanner to quit */
+ scan_quit = TRUE;
g_cond_signal (scan_cond);
g_mutex_unlock (scan_mutex);
g_thread_join (scan_thread);
@@ -627,12 +653,12 @@ void playlist_set_filename(gint playlist_num, const gchar * filename)
DECLARE_PLAYLIST;
LOOKUP_PLAYLIST;
- METADATA_WILL_CHANGE;
+ PLAYLIST_WILL_CHANGE;
g_free(playlist->filename);
playlist->filename = g_strdup(filename);
- METADATA_HAS_CHANGED;
+ PLAYLIST_HAS_CHANGED;
}
const gchar *playlist_get_filename(gint playlist_num)
@@ -649,12 +675,12 @@ void playlist_set_title(gint playlist_num, const gchar * title)
DECLARE_PLAYLIST;
LOOKUP_PLAYLIST;
- METADATA_WILL_CHANGE;
+ PLAYLIST_WILL_CHANGE;
g_free(playlist->title);
playlist->title = g_strdup(title);
- METADATA_HAS_CHANGED;
+ PLAYLIST_HAS_CHANGED;
}
const gchar *playlist_get_title(gint playlist_num)
diff --git a/src/audacious/plugin.h b/src/audacious/plugin.h
index 01bc054..b65755e 100644
--- a/src/audacious/plugin.h
+++ b/src/audacious/plugin.h
@@ -172,7 +172,7 @@ struct _AudaciousFuncTableV1 {
/* VFS */
#ifdef __GNUC__
-#define WARN_RETURN __attribute__ ((warn_unused_result))
+#define WARN_RETURN /* __attribute__ ((warn_unused_result)) */
#else
#define WARN_RETURN
#endif
diff --git a/src/audacious/pluginenum.c b/src/audacious/pluginenum.c
index 9790648..37b0d2c 100644
--- a/src/audacious/pluginenum.c
+++ b/src/audacious/pluginenum.c
@@ -258,7 +258,7 @@ static struct _AudaciousFuncTableV1 _aud_papi_v1 = {
.drct_initiate = drct_initiate,
.drct_play = drct_play,
.drct_pause = drct_pause,
- .drct_stop = drct_stop,
+ .drct_stop = playback_stop,
.drct_get_playing = drct_get_playing,
.drct_get_paused = drct_get_paused,
.drct_get_stopped = drct_get_stopped,
@@ -838,12 +838,8 @@ void plugin_system_cleanup(void)
if (ep->cleanup)
ep->cleanup();
-
- g_free (ep->filename);
- GDK_THREADS_LEAVE();
- while (g_main_context_iteration(NULL, FALSE));
- GDK_THREADS_ENTER();
+ g_free (ep->filename);
}
}
@@ -864,10 +860,6 @@ void plugin_system_cleanup(void)
gp->cleanup();
g_free (gp->filename);
-
- GDK_THREADS_LEAVE();
- while (g_main_context_iteration(NULL, FALSE));
- GDK_THREADS_ENTER();
}
}
@@ -888,10 +880,6 @@ void plugin_system_cleanup(void)
vp->cleanup();
g_free (vp->filename);
-
- GDK_THREADS_LEAVE();
- while (g_main_context_iteration(NULL, FALSE));
- GDK_THREADS_ENTER();
}
}
diff --git a/src/audacious/probe.c b/src/audacious/probe.c
index 17c4b13..bc48f3f 100644
--- a/src/audacious/probe.c
+++ b/src/audacious/probe.c
@@ -21,6 +21,7 @@
#include <libaudcore/audstrings.h>
#include <libaudcore/vfs.h>
+#include <libaudcore/vfs_buffered_file.h>
#include <stdio.h>
#include <string.h>
@@ -36,6 +37,8 @@ typedef struct
}
ProbeState;
+// #define XXX_USE_BUFFERING
+
static gboolean check_opened (ProbeState * state)
{
if (state->handle != NULL)
@@ -43,8 +46,13 @@ static gboolean check_opened (ProbeState * state)
AUDDBG ("Opening %s.\n", state->filename);
+#ifndef XXX_USE_BUFFERING
if ((state->handle = vfs_fopen (state->filename, "r")) != NULL)
return TRUE;
+#else
+ if ((state->handle = vfs_buffered_file_new_from_uri(state->filename)) != NULL)
+ return TRUE;
+#endif
AUDDBG ("FAILED.\n");
return FALSE;
diff --git a/src/audacious/ui/carbon-menubar.ui b/src/audacious/ui/carbon-menubar.ui
deleted file mode 100644
index 2d1e11b..0000000
--- a/src/audacious/ui/carbon-menubar.ui
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" standalone="yes" encoding="utf-8" ?>
-
-<ui>
- <menubar name="carbon-menubar">
- <menu action="dummy" name="main-menu">
- <menu action="file">
- <menuitem action="play file" />
- <menuitem action="play location" />
- <separator />
- <menuitem action="preferences" />
- <menuitem action="quit" />
- </menu>
- <menu action="playback">
- <menuitem action="playback repeat" />
- <menuitem action="playback shuffle" />
- <menuitem action="playback no playlist advance" />
- <menuitem action="stop after current song" />
- <separator />
- <menuitem action="playback play" />
- <menuitem action="playback pause" />
- <menuitem action="playback stop" />
- <menuitem action="playback previous" />
- <menuitem action="playback next" />
- <separator />
- <menuitem action="jump to playlist start" />
- <separator />
- <menuitem action="ab set" />
- <menuitem action="ab clear" />
- <separator />
- <menuitem action="jump to file" />
- <menuitem action="jump to time" />
- <separator />
- <menuitem action="current track info" />
- </menu>
- <menu action="playlist">
- <menuitem action="playlist new" />
- <menuitem action="playlist delete" />
- <separator />
- <menuitem action="playlist select next" />
- <menuitem action="playlist select previous" />
- <separator />
- <menuitem action="playlist load" />
- <menuitem action="playlist save" />
- <menuitem action="playlist save default" />
- <separator />
- <menuitem action="playlist manager" />
- <separator />
- <menuitem action="playlist refresh" />
- <separator />
-<!-- <menuitem action="playlist delete" /> -->
- </menu>
- <menu action="view">
- <menuitem action="show player" />
- <menuitem action="show playlist editor" />
- <menuitem action="show equalizer" />
- <separator />
- <menuitem action="view time elapsed" />
- <menuitem action="view time remaining" />
- <separator />
- <menuitem action="view always on top" />
- <menuitem action="view put on all workspaces" />
- <menuitem action="autoscroll songname" />
- <separator />
- <menuitem action="roll up player" />
- <menuitem action="roll up playlist editor" />
- <menuitem action="roll up equalizer" />
- <separator />
- <menuitem action="view scaled" />
- <menuitem action="view easy move" />
- </menu>
- <menu action="visualization">
- <menu action="vismode">
- <menuitem action="vismode analyzer" />
- <menuitem action="vismode scope" />
- <menuitem action="vismode voiceprint" />
- <menuitem action="vismode off" />
- </menu>
- <menu action="anamode">
- <menuitem action="anamode normal" />
- <menuitem action="anamode fire" />
- <menuitem action="anamode vertical lines" />
- <separator />
- <menuitem action="anatype lines" />
- <menuitem action="anatype bars" />
- <separator />
- <menuitem action="anamode peaks" />
- </menu>
- <menu action="scomode">
- <menuitem action="scomode dot" />
- <menuitem action="scomode line" />
- <menuitem action="scomode solid" />
- </menu>
- <menu action="vprmode">
- <menuitem action="vprmode normal" />
- <menuitem action="vprmode fire" />
- <menuitem action="vprmode ice" />
- </menu>
- <menu action="wshmode">
- <menuitem action="wshmode normal" />
- <menuitem action="wshmode smooth" />
- </menu>
- <menu action="anafoff">
- <menuitem action="anafoff slowest" />
- <menuitem action="anafoff slow" />
- <menuitem action="anafoff medium" />
- <menuitem action="anafoff fast" />
- <menuitem action="anafoff fastest" />
- </menu>
- <menu action="peafoff">
- <menuitem action="peafoff slowest" />
- <menuitem action="peafoff slow" />
- <menuitem action="peafoff medium" />
- <menuitem action="peafoff fast" />
- <menuitem action="peafoff fastest" />
- </menu>
- </menu>
- <menu action="help">
- <menuitem action="about audacious" />
- </menu>
- </menu>
- </menubar>
-</ui>
diff --git a/src/audacious/ui/equalizer.ui b/src/audacious/ui/equalizer.ui
deleted file mode 100644
index 3d70c1b..0000000
--- a/src/audacious/ui/equalizer.ui
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" standalone="yes" encoding="utf-8" ?>
-
-<ui>
- <menubar name="equalizer-menus">
- <menu action="dummy" name="preset-menu">
- <menu action="equ preset load menu">
- <menuitem action="equ load preset" />
- <menuitem action="equ load auto preset" />
- <menuitem action="equ load default preset" />
- <separator />
- <menuitem action="equ zero preset" />
- <separator />
- <menuitem action="equ load preset file" />
- <menuitem action="equ load preset eqf" />
- </menu>
-
- <menu action="equ preset import menu">
- <menuitem action="equ import winamp presets" />
- </menu>
-
- <menu action="equ preset save menu">
- <menuitem action="equ save preset" />
- <menuitem action="equ save auto preset" />
- <menuitem action="equ save default preset" />
- <separator />
- <menuitem action="equ save preset file" />
- <menuitem action="equ save preset eqf" />
- </menu>
-
- <menu action="equ preset delete menu">
- <menuitem action="equ delete preset" />
- <menuitem action="equ delete auto preset" />
- </menu>
- </menu>
- </menubar>
-</ui>
diff --git a/src/audacious/ui/mainwin.ui b/src/audacious/ui/mainwin.ui
deleted file mode 100644
index 2d078ad..0000000
--- a/src/audacious/ui/mainwin.ui
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" standalone="yes" encoding="utf-8" ?>
-
-<ui>
- <menubar name="mainwin-menus">
- <menu action="dummy" name="songname-menu">
- <menuitem action="current track info" />
- <separator />
- <menuitem action="autoscroll songname" />
- <menuitem action="stop after current song" />
- </menu>
-
- <menu action="dummy" name="main-menu">
- <menuitem action="about audacious" />
- <separator />
- <menuitem action="play file" />
- <menuitem action="play location" />
- <separator />
- <menu action="visualization">
- <menu action="vismode">
- <menuitem action="vismode analyzer" />
- <menuitem action="vismode scope" />
- <menuitem action="vismode voiceprint" />
- <menuitem action="vismode off" />
- </menu>
- <menu action="anamode">
- <menuitem action="anamode normal" />
- <menuitem action="anamode fire" />
- <menuitem action="anamode vertical lines" />
- <separator />
- <menuitem action="anatype lines" />
- <menuitem action="anatype bars" />
- <separator />
- <menuitem action="anamode peaks" />
- </menu>
- <menu action="scomode">
- <menuitem action="scomode dot" />
- <menuitem action="scomode line" />
- <menuitem action="scomode solid" />
- </menu>
- <menu action="vprmode">
- <menuitem action="vprmode normal" />
- <menuitem action="vprmode fire" />
- <menuitem action="vprmode ice" />
- </menu>
- <menu action="wshmode">
- <menuitem action="wshmode normal" />
- <menuitem action="wshmode smooth" />
- </menu>
- <menu action="anafoff">
- <menuitem action="anafoff slowest" />
- <menuitem action="anafoff slow" />
- <menuitem action="anafoff medium" />
- <menuitem action="anafoff fast" />
- <menuitem action="anafoff fastest" />
- </menu>
- <menu action="peafoff">
- <menuitem action="peafoff slowest" />
- <menuitem action="peafoff slow" />
- <menuitem action="peafoff medium" />
- <menuitem action="peafoff fast" />
- <menuitem action="peafoff fastest" />
- </menu>
- </menu>
- <menu action="playback">
- <menuitem action="playback repeat" />
- <menuitem action="playback shuffle" />
- <menuitem action="playback no playlist advance" />
- <menuitem action="stop after current song" />
- <separator />
- <menuitem action="playback play" />
- <menuitem action="playback pause" />
- <menuitem action="playback stop" />
- <menuitem action="playback previous" />
- <menuitem action="playback next" />
- <separator />
- <menuitem action="jump to playlist start" />
- <separator />
- <menuitem action="ab set" />
- <menuitem action="ab clear" />
- <separator />
- <menuitem action="jump to file" />
- <menuitem action="jump to time" />
- <separator />
- <menuitem action="current track info" />
- </menu>
- <menu action="playlist">
- <menuitem action="playlist new" />
- <menuitem action="playlist delete" />
- <separator />
- <menuitem action="playlist select next" />
- <menuitem action="playlist select previous" />
- <separator />
- <menuitem action="playlist load" />
- <menuitem action="playlist save" />
- <menuitem action="playlist save all" />
- <separator />
- <menuitem action="playlist manager" />
- <separator />
- <menuitem action="playlist refresh" />
- <separator />
-<!-- <menuitem action="playlist delete" /> -->
- </menu>
- <menu action="view">
- <menuitem action="show player" />
- <menuitem action="show playlist editor" />
- <menuitem action="show equalizer" />
- <separator />
- <menuitem action="view time elapsed" />
- <menuitem action="view time remaining" />
- <separator />
- <menuitem action="view always on top" />
- <menuitem action="view put on all workspaces" />
- <menuitem action="autoscroll songname" />
- <separator />
- <menuitem action="roll up player" />
- <menuitem action="roll up playlist editor" />
- <menuitem action="roll up equalizer" />
- <separator />
- <menuitem action="view scaled" />
- <menuitem action="view easy move" />
- </menu>
- <separator />
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="preferences" />
- <menuitem action="quit" />
- </menu>
- </menubar>
-</ui>
diff --git a/src/audacious/ui/player.ui b/src/audacious/ui/player.ui
deleted file mode 100644
index de6800f..0000000
--- a/src/audacious/ui/player.ui
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" standalone="yes" encoding="utf-8" ?>
-
-<ui>
- <menubar name="mainwin-menus">
- <menu action="file">
- <menuitem action="play file" />
- <menuitem action="play location" />
- <menuitem action="playlist add files" />
- <menuitem action="playlist add url" />
- <separator />
- <menuitem action="preferences" />
- <menuitem action="quit" />
- </menu>
-
- <menu action="playback">
- <menuitem action="playback repeat" />
- <menuitem action="playback shuffle" />
- <menuitem action="playback no playlist advance" />
- <menuitem action="stop after current song" />
- <separator />
- <menuitem action="playback play" />
- <menuitem action="playback pause" />
- <menuitem action="playback stop" />
- <menuitem action="playback previous" />
- <menuitem action="playback next" />
- <separator />
- <menuitem action="jump to playlist start" />
- <separator />
- <menuitem action="ab set" />
- <menuitem action="ab clear" />
- <separator />
- <menuitem action="jump to file" />
- <menuitem action="jump to time" />
- <separator />
- <menuitem action="current track info" />
- </menu>
- <menu action="playlist">
- <menuitem action="playlist new" />
- <menuitem action="playlist delete" />
- <separator />
- <menuitem action="playlist select next" />
- <menuitem action="playlist select previous" />
- <separator />
- <menuitem action="playlist load" />
- <menuitem action="playlist save" />
- <menuitem action="playlist save all" />
- <separator />
- <menuitem action="playlist manager" />
- <separator />
- <menuitem action="playlist refresh" />
- <separator />
-<!-- <menuitem action="playlist delete" /> -->
- </menu>
- <menu action="plugins-menu" />
-
- <menu action="help">
- <menuitem action="about audacious" />
- </menu>
- </menubar>
-</ui>
diff --git a/src/audacious/ui/playlist.ui b/src/audacious/ui/playlist.ui
deleted file mode 100644
index 93b87b9..0000000
--- a/src/audacious/ui/playlist.ui
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" standalone="yes" encoding="utf-8" ?>
-
-<ui>
- <menubar name="playlist-menus">
- <menu action="dummy" name="playlist-rightclick-menu">
- <menuitem action="playlist track info" />
- <separator />
- <menuitem action="playlist remove selected" />
- <menuitem action="playlist remove unselected" />
- <menuitem action="playlist remove all" />
- <separator />
- <menuitem action="queue toggle" />
- <separator />
- <menuitem action="plugins-menu" />
- </menu>
-
- <menu action="dummy" name="add-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist add url" />
- <menuitem action="playlist add files" />
- </menu>
-
- <menu action="dummy" name="del-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist remove all" />
- <menuitem action="playlist clear queue" />
- <separator />
- <menuitem action="playlist remove unavailable" />
- <menu action="playlist remove dups menu">
- <menuitem action="playlist remove dups by title" />
- <menuitem action="playlist remove dups by filename" />
- <menuitem action="playlist remove dups by full path" />
- </menu>
- <separator />
- <menuitem action="playlist remove unselected" />
- <menuitem action="playlist remove selected" />
- </menu>
-
- <menu action="dummy" name="select-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist search and select" />
- <separator />
- <menuitem action="playlist invert selection" />
- <separator />
- <menuitem action="playlist select none" />
- <menuitem action="playlist select all" />
- </menu>
-
- <menu action="dummy" name="misc-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist randomize list" />
- <menuitem action="playlist reverse list" />
- <separator />
- <menu action="playlist sort menu">
- <menuitem action="playlist sort by title" />
- <menuitem action="playlist sort by album" />
- <menuitem action="playlist sort by artist" />
- <menuitem action="playlist sort by filename" />
- <menuitem action="playlist sort by full path" />
- <menuitem action="playlist sort by date" />
- <menuitem action="playlist sort by track number" />
- </menu>
- <menu action="playlist sort selected menu">
- <menuitem action="playlist sort selected by title" />
- <menuitem action="playlist sort selected by album" />
- <menuitem action="playlist sort selected by artist" />
- <menuitem action="playlist sort selected by filename" />
- <menuitem action="playlist sort selected by full path" />
- <menuitem action="playlist sort selected by date" />
- <menuitem action="playlist sort selected by track number" />
- </menu>
- </menu>
-
- <menu action="dummy" name="playlist-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist new" />
- <menuitem action="playlist delete" />
- <separator />
- <menuitem action="playlist select next" />
- <menuitem action="playlist select previous" />
- <separator />
- <menuitem action="playlist load" />
- <menuitem action="playlist save" />
- <menuitem action="playlist save all" />
- <separator />
- <menuitem action="playlist manager" />
- <separator />
- <menuitem action="playlist refresh" />
- </menu>
- </menubar>
-</ui>
diff --git a/src/audacious/ui_albumart.c b/src/audacious/ui_albumart.c
index 940ceed..8bb6c75 100644
--- a/src/audacious/ui_albumart.c
+++ b/src/audacious/ui_albumart.c
@@ -29,6 +29,7 @@
#include <string.h>
#include "audconfig.h"
+#include <libaudcore/audstrings.h>
static gboolean
has_front_cover_extension(const gchar *name)
@@ -123,6 +124,9 @@ static gchar * fileinfo_recursive_get_image (const gchar * path, const gchar *
if (cfg.recurse_for_cover && depth > cfg.recurse_for_cover_depth)
return NULL;
+ if (str_has_prefix_nocase(path, "file://"))
+ path += 7;
+
d = g_dir_open(path, 0, NULL);
if (d) {
diff --git a/src/audacious/vis_runner.c b/src/audacious/vis_runner.c
index 57cb592..3a4403d 100644
--- a/src/audacious/vis_runner.c
+++ b/src/audacious/vis_runner.c
@@ -111,6 +111,8 @@ static void flush_locked (void)
}
vis_tail = NULL;
+
+ clear_source = g_timeout_add (0, send_clear, NULL);
}
void vis_runner_init (void)
@@ -147,14 +149,9 @@ void vis_runner_start_stop (gboolean new_playing, gboolean new_paused)
}
if (! active)
- {
flush_locked ();
- clear_source = g_timeout_add (0, send_clear, NULL);
- }
else if (! paused)
- {
send_source = g_timeout_add (INTERVAL, send_audio, NULL);
- }
g_mutex_unlock (mutex);
}
@@ -236,7 +233,6 @@ void vis_runner_time_offset (gint offset)
void vis_runner_flush (void)
{
-
g_mutex_lock (mutex);
flush_locked ();
g_mutex_unlock (mutex);
diff --git a/src/audtool/audtool.h b/src/audtool/audtool.h
index c5653fb..f21808b 100644
--- a/src/audtool/audtool.h
+++ b/src/audtool/audtool.h
@@ -95,6 +95,7 @@ extern void playlist_tuple_field_data(gint, gchar **argv);
extern void playlist_show(gint, gchar **);
extern void playlist_enqueue_to_temp(gint argc, gchar **argv);
extern void playlist_ins_url_string(gint argc, gchar **argv);
+extern void playlist_title(gint, gchar **);
extern void playqueue_add(gint, gchar **);
extern void playqueue_remove(gint, gchar **);
diff --git a/src/audtool/handlers_playlist.c b/src/audtool/handlers_playlist.c
index 04cfd6b..c30d3e0 100644
--- a/src/audtool/handlers_playlist.c
+++ b/src/audtool/handlers_playlist.c
@@ -139,6 +139,13 @@ void playlist_song(gint argc, gchar **argv)
audtool_report("%s", song);
}
+void playlist_title(gint argc, gchar **argv)
+{
+ gchar *title;
+
+ title = audacious_remote_playlist_get_active_name(dbus_proxy);
+ audtool_report("%s", title);
+}
void playlist_song_length(gint argc, gchar **argv)
{
diff --git a/src/audtool/main.c b/src/audtool/main.c
index 7e7d83b..1666d41 100644
--- a/src/audtool/main.c
+++ b/src/audtool/main.c
@@ -78,7 +78,7 @@ struct commandhandler handlers[] = {
{"playlist-shuffle-status", playlist_shuffle_status, "returns the status of playlist shuffle", 0},
{"playlist-shuffle-toggle", playlist_shuffle_toggle, "toggles playlist shuffle", 0},
{"playlist-tuple-data", playlist_tuple_field_data, "returns the value of a tuple field for a song in the playlist", 2},
-
+ {"current-playlist-name", playlist_title, "returns the playlist title of the active playlist", 0},
{"<sep>", NULL, "Playqueue manipulation", 0},
{"playqueue-add", playqueue_add, "adds a song to the playqueue", 1},
diff --git a/src/libaudclient/audctrl.c b/src/libaudclient/audctrl.c
index 8fd66c5..1e3ca07 100644
--- a/src/libaudclient/audctrl.c
+++ b/src/libaudclient/audctrl.c
@@ -1024,3 +1024,14 @@ gchar **audacious_remote_get_tuple_fields(DBusGProxy *proxy) {
g_clear_error(&error);
return res;
}
+
+/**
+ * Returns the active playlist name.
+ */
+gchar *audacious_remote_playlist_get_active_name(DBusGProxy *proxy) {
+ char *string = NULL;
+ org_atheme_audacious_get_active_playlist_name (proxy, &string, &error);
+ g_clear_error(&error);
+
+ return (string ? string : NULL);
+}
diff --git a/src/libaudclient/audctrl.h b/src/libaudclient/audctrl.h
index e2a26fb..6942976 100644
--- a/src/libaudclient/audctrl.h
+++ b/src/libaudclient/audctrl.h
@@ -133,6 +133,9 @@ void audacious_remote_playlist_open_list (DBusGProxy * proxy, GList * list);
void audacious_remote_playlist_open_list_to_temp (DBusGProxy * proxy, GList *
list);
+/* Added in Audacious 2.4 */
+gchar *audacious_remote_playlist_get_active_name(DBusGProxy *proxy);
+
G_END_DECLS
#endif /* AUDACIOUS_AUDCTRL_H */
diff --git a/src/libaudcore/audstrings.h b/src/libaudcore/audstrings.h
index 5baf067..0f3144b 100644
--- a/src/libaudcore/audstrings.h
+++ b/src/libaudcore/audstrings.h
@@ -44,6 +44,8 @@ gboolean str_has_suffixes_nocase(const gchar * str, gchar * const *suffixes);
gchar *str_assert_utf8(const gchar *str);
extern gchar *(*str_to_utf8)(const gchar * str);
gchar *str_to_utf8_fallback(const gchar * str);
+extern gchar * (* chardet_to_utf8) (const gchar * string, gssize length, gsize *
+ bytes_read, gsize * bytes_written, GError * * error);
gchar *filename_to_utf8(const gchar * filename);
gchar *uri_to_display_basename(const gchar * uri);
diff --git a/src/libaudcore/tuple.c b/src/libaudcore/tuple.c
index ef360be..4962b0c 100644
--- a/src/libaudcore/tuple.c
+++ b/src/libaudcore/tuple.c
@@ -273,6 +273,8 @@ tuple_copy(const Tuple *src)
mowgli_dictionary_iteration_state_t state;
gint i;
+ g_return_val_if_fail(src != NULL, NULL);
+
TUPLE_LOCK_WRITE();
dst = tuple_new_unlocked();
@@ -547,8 +549,8 @@ tuple_disassociate(Tuple *tuple, const gint cnfield, const gchar *field)
* @param[in] field String acting as key name or NULL if nfield is used.
* @return #TupleValueType of the field or TUPLE_UNKNOWN if there was an error.
*/
-TupleValueType
-tuple_get_value_type(Tuple *tuple, const gint cnfield, const gchar *field)
+TupleValueType tuple_get_value_type (const Tuple * tuple, gint cnfield,
+ const gchar * field)
{
TupleValueType type = TUPLE_UNKNOWN;
gint nfield = cnfield;
@@ -584,8 +586,8 @@ tuple_get_value_type(Tuple *tuple, const gint cnfield, const gchar *field)
* @return Pointer to string or NULL if the field/key did not exist.
* The returned string is const, and must not be freed or modified.
*/
-const gchar *
-tuple_get_string(Tuple *tuple, const gint cnfield, const gchar *field)
+const gchar * tuple_get_string (const Tuple * tuple, gint cnfield, const gchar *
+ field)
{
TupleValue *value;
gint nfield = cnfield;
@@ -626,8 +628,7 @@ tuple_get_string(Tuple *tuple, const gint cnfield, const gchar *field)
*
* @bug There is no way to distinguish error situations if the associated value is zero.
*/
-gint
-tuple_get_int(Tuple *tuple, const gint cnfield, const gchar *field)
+gint tuple_get_int (const Tuple * tuple, gint cnfield, const gchar * field)
{
TupleValue *value;
gint nfield = cnfield;
diff --git a/src/libaudcore/tuple.h b/src/libaudcore/tuple.h
index 4823cb2..3ef8ca4 100644
--- a/src/libaudcore/tuple.h
+++ b/src/libaudcore/tuple.h
@@ -133,9 +133,11 @@ gboolean tuple_associate_string(Tuple *tuple, const gint nfield, const gchar *fi
gboolean tuple_associate_int(Tuple *tuple, const gint nfield, const gchar *field, gint integer);
void tuple_disassociate(Tuple *tuple, const gint nfield, const gchar *field);
void tuple_disassociate_now(TupleValue *value);
-TupleValueType tuple_get_value_type(Tuple *tuple, const gint nfield, const gchar *field);
-const gchar *tuple_get_string(Tuple *tuple, const gint nfield, const gchar *field);
-gint tuple_get_int(Tuple *tuple, const gint nfield, const gchar *field);
+TupleValueType tuple_get_value_type (const Tuple * tuple, gint nfield,
+ const gchar * field);
+const gchar * tuple_get_string (const Tuple * tuple, gint nfield, const gchar *
+ field);
+gint tuple_get_int (const Tuple * tuple, gint nfield, const gchar * field);
#define tuple_free(x) mowgli_object_unref(x);
G_END_DECLS
diff --git a/src/libaudcore/vfs.h b/src/libaudcore/vfs.h
index fc97884..3aab16c 100644
--- a/src/libaudcore/vfs.h
+++ b/src/libaudcore/vfs.h
@@ -95,7 +95,7 @@ struct _VFSConstructor {
};
#ifdef __GNUC__
-#define WARN_RETURN __attribute__ ((warn_unused_result))
+#define WARN_RETURN /* __attribute__ ((warn_unused_result)) */
#else
#define WARN_RETURN
#endif
diff --git a/src/libaudcore/vfs_buffer.c b/src/libaudcore/vfs_buffer.c
index ef2ad8f..a977fc7 100644
--- a/src/libaudcore/vfs_buffer.c
+++ b/src/libaudcore/vfs_buffer.c
@@ -108,7 +108,7 @@ buffer_vfs_ungetc_impl(gint c, VFSFile *stream)
static gint
buffer_vfs_fseek_impl(VFSFile * file,
- glong offset,
+ gint64 offset,
gint whence)
{
VFSBuffer *handle;
@@ -148,7 +148,7 @@ buffer_vfs_rewind_impl(VFSFile * file)
handle->iter = handle->data;
}
-static glong
+static gint64
buffer_vfs_ftell_impl(VFSFile * file)
{
VFSBuffer *handle;
@@ -175,12 +175,12 @@ buffer_vfs_feof_impl(VFSFile * file)
}
static gint
-buffer_vfs_truncate_impl(VFSFile * file, glong size)
+buffer_vfs_truncate_impl (VFSFile * file, gint64 size)
{
return 0;
}
-static off_t
+static gint64
buffer_vfs_fsize_impl(VFSFile * file)
{
VFSBuffer *handle;
diff --git a/src/libaudcore/vfs_buffered_file.c b/src/libaudcore/vfs_buffered_file.c
index f34a0e9..963754f 100644
--- a/src/libaudcore/vfs_buffered_file.c
+++ b/src/libaudcore/vfs_buffered_file.c
@@ -103,7 +103,7 @@ buffered_file_vfs_ungetc_impl(gint c, VFSFile *stream)
gint
buffered_file_vfs_fseek_impl(VFSFile * file,
- glong offset,
+ gint64 offset,
gint whence)
{
VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
@@ -117,11 +117,19 @@ buffered_file_vfs_fseek_impl(VFSFile * file,
vfs_fseek(handle->fd, offset, whence);
break;
case SEEK_CUR:
- if (vfs_ftell(handle->buffer) + offset > ((VFSBuffer *) handle->buffer->handle)->size)
+ if (vfs_ftell(handle->buffer) + offset >= ((VFSBuffer *) handle->buffer->handle)->size)
{
handle->which = TRUE;
vfs_fseek(handle->fd, offset, whence);
}
+ else
+ {
+ gint64 noff;
+
+ handle->which = FALSE;
+ noff = ((VFSBuffer *) handle->buffer->handle)->size - (vfs_ftell(handle->buffer) + offset);
+ vfs_fseek(handle->buffer, noff, whence);
+ }
break;
case SEEK_SET:
default:
@@ -146,10 +154,11 @@ buffered_file_vfs_rewind_impl(VFSFile * file)
VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
vfs_rewind(handle->buffer);
+ vfs_rewind(handle->fd);
handle->which = FALSE;
}
-glong
+gint64
buffered_file_vfs_ftell_impl(VFSFile * file)
{
VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
@@ -166,12 +175,12 @@ buffered_file_vfs_feof_impl(VFSFile * file)
}
gint
-buffered_file_vfs_truncate_impl(VFSFile * file, glong size)
+buffered_file_vfs_truncate_impl (VFSFile * file, gint64 size)
{
return 0;
}
-off_t
+gint64
buffered_file_vfs_fsize_impl(VFSFile * file)
{
VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
diff --git a/src/libaudgui/Makefile b/src/libaudgui/Makefile
index 9c88651..afa654a 100644
--- a/src/libaudgui/Makefile
+++ b/src/libaudgui/Makefile
@@ -4,6 +4,7 @@ LIB_MINOR = 0
SRCS = confirm.c \
effects-menu.c \
+ equalizer.c \
infopopup.c \
infowin.c \
init.c \
@@ -17,6 +18,7 @@ SRCS = confirm.c \
ui_about.c \
ui_credits.c \
ui_playlist_manager.c \
+ urilist.c \
util.c
INCLUDES = libaudgui.h \
@@ -30,4 +32,4 @@ includesubdir = libaudgui
CPPFLAGS += -DHAVE_CONFIG_H ${LIB_CPPFLAGS} -D_AUDACIOUS_CORE -I.. -I../.. -I../libaudcore -I../audacious ${GLIB_CFLASG} ${GTK_CFLAGS} ${DBUS_CFLAGS} ${LIBMCS_CFLAGS} ${AUDACIOUS_DEFINES} ${REGEX_CFLAGS}
CFLAGS += ${LIB_CFLAGS}
LDFLAGS += $(AUDLDFLAGS)
-LIBS += ${GLIB_LIBS} ${MOWGLI_LIBS} ${GTK_LIBS} ${REGEX_LIBS} -L../libaudcore -laudcore
+LIBS += -lm ${GLIB_LIBS} ${MOWGLI_LIBS} ${GTK_LIBS} ${REGEX_LIBS} -L../libaudcore -laudcore
diff --git a/src/libaudgui/effects-menu.c b/src/libaudgui/effects-menu.c
index 86ac6c2..3582c65 100644
--- a/src/libaudgui/effects-menu.c
+++ b/src/libaudgui/effects-menu.c
@@ -26,15 +26,6 @@
#include "libaudgui-gtk.h"
-static GtkWidget * create_title (void)
-{
- GtkWidget * title = gtk_menu_item_new_with_label (_("Effects"));
-
- gtk_widget_set_sensitive (title, FALSE);
- gtk_widget_show (title);
- return title;
-}
-
static void effect_item_toggled (GtkCheckMenuItem * item, void * data)
{
aud_enable_effect (data, gtk_check_menu_item_get_active (item));
@@ -71,9 +62,6 @@ GtkWidget * audgui_create_effects_menu (void)
GList * list = aud_get_effect_list ();
GList * node;
- gtk_menu_shell_append ((GtkMenuShell *) menu, create_title ());
- gtk_menu_shell_append ((GtkMenuShell *) menu, gtk_separator_menu_item_new ());
-
for (node = list; node != NULL; node = node->next)
{
EffectPlugin * effect = node->data;
diff --git a/src/libaudgui/equalizer.c b/src/libaudgui/equalizer.c
new file mode 100644
index 0000000..c3b1f56
--- /dev/null
+++ b/src/libaudgui/equalizer.c
@@ -0,0 +1,189 @@
+/*
+ * libaudgui/equalizer.c
+ * Copyright 2010 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+/*
+ * Note: Because some GTK developer had the bright idea to put the minimum at
+ * the top of a GtkVScale and the maximum at the bottom, we have to reverse the
+ * sign of the values we get.
+ */
+
+#include <math.h>
+
+#include <audacious/i18n.h>
+#include <audacious/plugin.h>
+
+#include "libaudgui-gtk.h"
+
+#define DB_RANGE 12
+
+typedef struct
+{
+ GtkWidget * slider;
+ gfloat * setting;
+}
+SliderPair;
+
+static void on_off_cb (GtkToggleButton * on_off, void * unused)
+{
+ gboolean active = gtk_toggle_button_get_active (on_off);
+
+ if (aud_cfg->equalizer_active != active)
+ {
+ aud_cfg->equalizer_active = active;
+ aud_hook_call ("equalizer changed", NULL);
+ }
+}
+
+static void on_off_update (void * unused, GtkWidget * on_off)
+{
+ gboolean active = gtk_toggle_button_get_active ((GtkToggleButton *) on_off);
+
+ if (active != aud_cfg->equalizer_active)
+ gtk_toggle_button_set_active ((GtkToggleButton *) on_off,
+ aud_cfg->equalizer_active);
+}
+
+static GtkWidget * create_on_off (void)
+{
+ GtkWidget * on_off;
+
+ on_off = gtk_check_button_new_with_mnemonic (_("_Enable"));
+ g_signal_connect ((GObject *) on_off, "toggled", (GCallback) on_off_cb, NULL);
+ aud_hook_associate ("equalizer changed", (HookFunction) on_off_update, on_off);
+
+ on_off_update (NULL, on_off);
+ return on_off;
+}
+
+static void slider_cb (GtkRange * slider, gfloat * setting)
+{
+ gint old = rintf (* setting);
+ gint new = rint (-gtk_range_get_value (slider));
+
+ if (old != new)
+ {
+ * setting = new;
+ aud_hook_call ("equalizer changed", NULL);
+ }
+}
+
+static void slider_update (void * unused, SliderPair * pair)
+{
+ gint old = rint (-gtk_range_get_value ((GtkRange *) pair->slider));
+ gint new = rintf (* pair->setting);
+
+ if (old != new)
+ gtk_range_set_value ((GtkRange *) pair->slider, -new);
+}
+
+static void set_slider_update (GtkWidget * slider, gfloat * setting)
+{
+ SliderPair * pair = g_slice_new (SliderPair);
+
+ pair->slider = slider;
+ pair->setting = setting;
+
+ aud_hook_associate ("equalizer changed", (HookFunction) slider_update, pair);
+ slider_update (NULL, pair);
+}
+
+static gchar * format_value (GtkScale * slider, gdouble value, void * unused)
+{
+ return g_strdup_printf ("%d", (gint) -value);
+}
+
+static GtkWidget * create_slider (const gchar * name, gfloat * setting)
+{
+ GtkWidget * vbox, * slider, * label;
+
+ vbox = gtk_vbox_new (FALSE, 6);
+
+ label = gtk_label_new (name);
+ gtk_label_set_angle ((GtkLabel *) label, 90);
+ gtk_box_pack_start ((GtkBox *) vbox, label, TRUE, FALSE, 0);
+
+ slider = gtk_vscale_new_with_range (-DB_RANGE, DB_RANGE, 1);
+ gtk_scale_set_draw_value ((GtkScale *) slider, TRUE);
+ gtk_scale_set_value_pos ((GtkScale *) slider, GTK_POS_BOTTOM);
+ gtk_widget_set_size_request (slider, -1, 120);
+ g_signal_connect ((GObject *) slider, "format-value", (GCallback)
+ format_value, NULL);
+ g_signal_connect ((GObject *) slider, "value-changed", (GCallback)
+ slider_cb, setting);
+ set_slider_update (slider, setting);
+ gtk_box_pack_start ((GtkBox *) vbox, slider, FALSE, FALSE, 0);
+
+ return vbox;
+}
+
+static GtkWidget * create_window (void)
+{
+ static const gchar * names[AUD_EQUALIZER_NBANDS] = {N_("60 Hz"),
+ N_("170 Hz"), N_("310 Hz"), N_("600 Hz"), N_("1 kHz"), N_("3 kHz"),
+ N_("6 kHz"), N_("12 kHz"), N_("14 kHz"), N_("16 kHz")};
+ GtkWidget * window, * vbox, * hbox;
+ gint i;
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title ((GtkWindow *) window, _("Equalizer"));
+ gtk_window_set_type_hint ((GtkWindow *) window, GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable ((GtkWindow *) window, FALSE);
+ gtk_container_set_border_width ((GtkContainer *) window, 6);
+ g_signal_connect ((GObject *) window, "delete-event", (GCallback)
+ gtk_widget_hide_on_delete, NULL);
+ audgui_hide_on_escape (window);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_add ((GtkContainer *) window, vbox);
+
+ gtk_box_pack_start ((GtkBox *) vbox, create_on_off (), FALSE, FALSE, 0);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start ((GtkBox *) hbox, create_slider (_("Preamp"),
+ & aud_cfg->equalizer_preamp), FALSE, FALSE, 0);
+
+ gtk_box_pack_start ((GtkBox *) hbox, gtk_vseparator_new (), FALSE, FALSE, 0);
+
+ for (i = 0; i < AUD_EQUALIZER_NBANDS; i ++)
+ gtk_box_pack_start ((GtkBox *) hbox, create_slider (_(names[i]),
+ & aud_cfg->equalizer_bands[i]), FALSE, FALSE, 0);
+
+ gtk_widget_show_all (vbox);
+ return window;
+}
+
+static GtkWidget * equalizer_window = NULL;
+
+void audgui_show_equalizer_window (void)
+{
+ if (equalizer_window == NULL)
+ equalizer_window = create_window ();
+
+ gtk_window_present ((GtkWindow *) equalizer_window);
+}
+
+void audgui_hide_equalizer_window (void)
+{
+ if (equalizer_window != NULL)
+ gtk_widget_hide (equalizer_window);
+}
diff --git a/src/libaudgui/infowin.c b/src/libaudgui/infowin.c
index ef58480..4dcaf74 100644
--- a/src/libaudgui/infowin.c
+++ b/src/libaudgui/infowin.c
@@ -114,8 +114,6 @@ static const gchar * genre_table[] =
N_("Anime"), N_("JPop"), N_("Synthpop")
};
-static GList * genre_list = NULL;
-
static void set_entry_str_from_field (GtkWidget * widget, Tuple * tuple,
gint fieldn, gboolean editable)
{
@@ -353,6 +351,24 @@ static GdkPixbuf * mime_icon_lookup (gint size, const gchar * mime_type)
return icon;
}
+gboolean genre_fill (GtkWidget * combo)
+{
+ GList * list = NULL;
+ GList * node;
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (genre_table); i ++)
+ list = g_list_prepend (list, _(genre_table[i]));
+
+ list = g_list_sort (list, (GCompareFunc) strcmp);
+
+ for (node = list; node != NULL; node = node->next)
+ gtk_combo_box_append_text ((GtkComboBox *) combo, node->data);
+
+ g_list_free (list);
+ return FALSE;
+}
+
void create_infowin (void)
{
GtkWidget * hbox;
@@ -383,7 +399,6 @@ void create_infowin (void)
GtkWidget * scrolledwindow;
GtkTreeViewColumn * column;
GtkCellRenderer * renderer;
- gint i;
infowin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width ((GtkContainer *) infowin, 6);
@@ -533,21 +548,9 @@ void create_infowin (void)
gtk_alignment_set_padding ((GtkAlignment *) alignment, 0, 6, 0, 0);
entry_genre = gtk_combo_box_entry_new_text ();
- if (genre_list == NULL)
- {
- GList * iter;
-
- for (i = 0; i < G_N_ELEMENTS (genre_table); i ++)
- genre_list = g_list_prepend (genre_list, _(genre_table[i]));
-
- genre_list = g_list_sort (genre_list, (GCompareFunc) g_utf8_collate);
-
- for (iter = genre_list; iter != NULL; iter = iter->next)
- gtk_combo_box_append_text ((GtkComboBox *) entry_genre, iter->data);
- }
-
gtk_container_add ((GtkContainer *) alignment, entry_genre);
g_signal_connect (entry_genre, "changed", (GCallback) entry_changed, NULL);
+ g_idle_add ((GSourceFunc) genre_fill, entry_genre);
alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
gtk_box_pack_start ((GtkBox *) vbox2, alignment, FALSE, FALSE, 0);
@@ -861,7 +864,7 @@ void audgui_infowin_show (gint playlist, gint entry)
{
const gchar * filename = aud_playlist_entry_get_filename (playlist, entry);
InputPlugin * decoder = aud_playlist_entry_get_decoder (playlist, entry);
- Tuple * tuple;
+ Tuple * tuple = (Tuple *) aud_playlist_entry_get_tuple (playlist, entry);
g_return_if_fail (filename != NULL);
@@ -876,23 +879,25 @@ void audgui_infowin_show (gint playlist, gint entry)
if (aud_custom_infowin (filename, decoder))
return;
- tuple = aud_file_read_tuple (filename, decoder);
-
if (tuple == NULL)
{
- gchar * message = g_strdup_printf (_("No info available for %s.\n"),
- filename);
+ tuple = aud_file_read_tuple (filename, decoder);
- aud_hook_call ("interface show error", message);
- g_free (message);
- return;
+ if (tuple == NULL)
+ {
+ gchar * message = g_strdup_printf (_("No info available for %s.\n"),
+ filename);
+
+ aud_hook_call ("interface show error", message);
+ g_free (message);
+ return;
+ }
+
+ aud_playlist_entry_set_tuple (playlist, entry, tuple);
}
infowin_show (filename, tuple, decoder, aud_file_can_write_tuple (filename,
decoder));
-
- aud_playlist_entry_set_tuple (playlist, entry, tuple);
- /* We do not unref the tuple, as the playlist takes ownership. */
}
void audgui_infowin_show_current (void)
diff --git a/src/libaudgui/libaudgui.h b/src/libaudgui/libaudgui.h
index 828fafd..6611a87 100644
--- a/src/libaudgui/libaudgui.h
+++ b/src/libaudgui/libaudgui.h
@@ -46,6 +46,10 @@ void audgui_hide_about_window(void);
/* confirm.c */
void audgui_confirm_playlist_delete (gint playlist);
+/* equalizer.c */
+void audgui_show_equalizer_window (void);
+void audgui_hide_equalizer_window (void);
+
/* infopopup.c */
void audgui_infopopup_show (gint playlist, gint entry);
void audgui_infopopup_show_current (void);
@@ -55,4 +59,9 @@ void audgui_infopopup_hide (void);
void audgui_infowin_show (gint playlist, gint entry);
void audgui_infowin_show_current (void);
+/* urilist.c */
+void audgui_urilist_open (const gchar * list);
+void audgui_urilist_insert (gint playlist, gint position, const gchar * list);
+gchar * audgui_urilist_create_from_selected (gint playlist);
+
#endif /* LIBAUDGUI_H */
diff --git a/src/libaudgui/ui_gtk.c b/src/libaudgui/ui_gtk.c
index 6142eba..fa8d4e8 100644
--- a/src/libaudgui/ui_gtk.c
+++ b/src/libaudgui/ui_gtk.c
@@ -18,15 +18,9 @@
*/
#include <gtk/gtk.h>
-#include "audacious/images/audacious_player.xpm"
-void
-audgui_set_default_icon(void)
+void audgui_set_default_icon (void)
{
- GdkPixbuf *icon;
-
- icon = gdk_pixbuf_new_from_xpm_data((const gchar **) audacious_player_xpm);
- gtk_window_set_default_icon(icon);
- g_object_unref(icon);
+ gtk_window_set_default_icon_name ("audacious");
}
diff --git a/src/libaudgui/urilist.c b/src/libaudgui/urilist.c
new file mode 100644
index 0000000..a8197ed
--- /dev/null
+++ b/src/libaudgui/urilist.c
@@ -0,0 +1,149 @@
+/*
+ * libaudgui/urilist.c
+ * Copyright 2010 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#include <string.h>
+#include <glib.h>
+#include <audacious/plugin.h>
+#include "util.h"
+
+typedef void (* ForEachFunc) (gchar *, void *);
+
+typedef struct
+{
+ gint playlist, at;
+ struct index * index;
+}
+AddState;
+
+static gchar * check_uri (gchar * name)
+{
+ gchar * new;
+
+ if (strstr (name, "://") || ! (new = g_filename_to_uri (name, NULL, NULL)))
+ return name;
+
+ g_free (name);
+ return new;
+}
+
+static void urilist_for_each (const gchar * list, ForEachFunc func, void * user)
+{
+ const gchar * end, * next;
+
+ while (list[0])
+ {
+ if ((end = strstr (list, "\r\n")))
+ next = end + 2;
+ else if ((end = strchr (list, '\n')))
+ next = end + 1;
+ else
+ next = end = strchr (list, 0);
+
+ func (check_uri (g_strndup (list, end - list)), user);
+ list = next;
+ }
+}
+
+static void add_to_glist (gchar * name, GList * * listp)
+{
+ * listp = g_list_prepend (* listp, name);
+}
+
+void audgui_urilist_open (const gchar * list)
+{
+ GList * glist = NULL;
+
+ urilist_for_each (list, (ForEachFunc) add_to_glist, & glist);
+ glist = g_list_reverse (glist);
+
+ audacious_drct_pl_open_list (glist);
+
+ g_list_foreach (glist, (GFunc) g_free, NULL);
+ g_list_free (glist);
+}
+
+static void add_full (gchar * name, AddState * state)
+{
+ if (aud_vfs_file_test (name, G_FILE_TEST_IS_DIR))
+ {
+ aud_playlist_insert_folder (state->playlist, state->at, name);
+ g_free (name);
+ }
+ else if (aud_filename_is_playlist (name))
+ {
+ gint entries = aud_playlist_entry_count (state->playlist);
+ aud_playlist_insert_playlist (state->playlist, state->at, name);
+ state->at += aud_playlist_entry_count (state->playlist) - entries;
+ }
+ else
+ index_append (state->index, name);
+}
+
+void audgui_urilist_insert (gint playlist, gint at, const gchar * list)
+{
+ AddState state = {playlist, at, index_new ()};
+
+ urilist_for_each (list, (ForEachFunc) add_full, & state);
+ aud_playlist_entry_insert_batch (playlist, state.at, state.index, NULL);
+}
+
+gchar * audgui_urilist_create_from_selected (gint playlist)
+{
+ gint entries = aud_playlist_entry_count (playlist);
+ gint space = 0;
+ gint count, length;
+ const gchar * name;
+ gchar * buffer, * set;
+
+ for (count = 0; count < entries; count ++)
+ {
+ if (! aud_playlist_entry_get_selected (playlist, count))
+ continue;
+
+ name = aud_playlist_entry_get_filename (playlist, count);
+ g_return_val_if_fail (name != NULL, NULL);
+ space += strlen (name) + 1;
+ }
+
+ if (! space)
+ return NULL;
+
+ buffer = g_malloc (space);
+ set = buffer;
+
+ for (count = 0; count < entries; count ++)
+ {
+ if (! aud_playlist_entry_get_selected (playlist, count))
+ continue;
+
+ name = aud_playlist_entry_get_filename (playlist, count);
+ g_return_val_if_fail (name != NULL, NULL);
+ length = strlen (name);
+ g_return_val_if_fail (length + 1 <= space, NULL);
+ memcpy (set, name, length);
+ set += length;
+ * set ++ = '\n';
+ space -= length + 1;
+ }
+
+ * -- set = 0; /* last newline replaced with null */
+ return buffer;
+}
diff --git a/src/libaudtag/Makefile b/src/libaudtag/Makefile
index 127c8c7..a440424 100644
--- a/src/libaudtag/Makefile
+++ b/src/libaudtag/Makefile
@@ -5,7 +5,9 @@ LIB_MINOR = 0
SRCS = audtag.c \
util.c \
tag_module.c \
+ id3/id3-common.c \
id3/id3v1.c \
+ id3/id3v22.c \
id3/id3v24.c \
ape/ape.c
@@ -16,4 +18,4 @@ include ../../extra.mk
CPPFLAGS += ${LIB_CPPFLAGS} ${GLIB_CFLAGS} ${MOWGLI_CFLAGS} -D_AUDACIOUS_CORE -I.. -I../..
CFLAGS += ${LIB_CFLAGS}
-LIBS += ${GLIB_LIBS} ${MOWGLI_LIBS}
+LIBS += ${GLIB_LIBS} ${MOWGLI_LIBS} -L../libaudcore -laudcore
diff --git a/src/libaudtag/aac/aac.c b/src/libaudtag/aac/aac.c
index 87f63f9..0053cd5 100644
--- a/src/libaudtag/aac/aac.c
+++ b/src/libaudtag/aac/aac.c
@@ -37,7 +37,7 @@ static const char *ID3v1GenreList[] = {
"Ethnic", "Gothic", "Darkwave", "Techno-Industrial", "Electronic", "Pop-Folk",
"Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta",
"Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native American", "Cabaret",
- "New Wave", "Psychadelic", "Rave", "Showtunes", "Trailer", "Lo-Fi",
+ "New Wave", "Psychedelic", "Rave", "Showtunes", "Trailer", "Lo-Fi",
"Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical",
"Rock & Roll", "Hard Rock", "Folk", "Folk/Rock", "National Folk", "Swing",
"Fast-Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde",
diff --git a/src/libaudtag/id3/id3-common.c b/src/libaudtag/id3/id3-common.c
new file mode 100644
index 0000000..9a07ba6
--- /dev/null
+++ b/src/libaudtag/id3/id3-common.c
@@ -0,0 +1,102 @@
+/*
+ * id3-common.c
+ * Copyright 2010 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#include <string.h>
+
+#include <glib.h>
+
+#include <libaudcore/audstrings.h>
+
+#include "../util.h"
+#include "id3-common.h"
+
+gchar * convert_text (const gchar * text, gint length, gint encoding, gboolean
+ nulled, gint * _converted, const gchar * * after)
+{
+ gchar * buffer = NULL;
+ gsize converted = 0;
+
+ AUDDBG ("length = %d, encoding = %d, nulled = %d\n", length, encoding,
+ nulled);
+
+ if (nulled)
+ {
+ const guchar null16[] = {0, 0};
+ const gchar * null;
+
+ switch (encoding)
+ {
+ case 0:
+ case 3:
+ if ((null = memchr (text, 0, length)) == NULL)
+ return NULL;
+
+ length = null - text;
+ AUDDBG ("length before null = %d\n", length);
+
+ if (after != NULL)
+ * after = null + 1;
+
+ break;
+ case 1:
+ case 2:
+ if ((null = memfind (text, length, null16, 2)) == NULL)
+ return NULL;
+
+ length = null - text;
+ AUDDBG ("length before null = %d\n", length);
+
+ if (after != NULL)
+ * after = null + 2;
+
+ break;
+ }
+ }
+
+ switch (encoding)
+ {
+ case 0:
+ case 3:
+ buffer = chardet_to_utf8 (text, length, NULL, & converted, NULL);
+ break;
+ case 1:
+ if (text[0] == (gchar) 0xff)
+ buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16LE", NULL,
+ & converted, NULL);
+ else
+ buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16BE", NULL,
+ & converted, NULL);
+
+ break;
+ case 2:
+ buffer = g_convert (text, length, "UTF-8", "UTF-16BE", NULL,
+ & converted, NULL);
+ break;
+ }
+
+ AUDDBG ("length converted: %d\n", (gint) converted);
+ AUDDBG ("string: %s\n", buffer);
+
+ if (_converted != NULL)
+ * _converted = converted;
+
+ return buffer;
+}
diff --git a/src/libaudtag/id3/id3-common.h b/src/libaudtag/id3/id3-common.h
new file mode 100644
index 0000000..b3e53e5
--- /dev/null
+++ b/src/libaudtag/id3/id3-common.h
@@ -0,0 +1,48 @@
+/*
+ * id3-common.h
+ * Copyright 2010 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#ifndef AUDTAG_ID3_COMMON_H
+#define AUDTAG_ID3_COMMON_H
+
+#include <glib.h>
+
+/*
+ * text: A pointer to the text data to be converted.
+ * length: The size in bytes of the text data.
+ * encoding: 0 = ISO-8859-1 or a similar 8-bit character set, 1 = UTF-16 with
+ * BOM, 2 = UTF-16BE without BOM, 3 = UTF-8.
+ * nulled: Whether the text data is null-terminated. If this flag is set and no
+ * null character is found, an error occurs. If this flag is not set, any null
+ * characters found are included in the converted text.
+ * converted: A location in which to store the number of bytes converted, or
+ * NULL. This count does not include the null character appended to the
+ * converted text, but may include null characters present in the text data.
+ * This count is undefined if an error occurs.
+ * after: A location in which to store a pointer to the next character after a
+ * terminating null character, or NULL. This pointer is undefined if the
+ * "nulled" flag is not used or if an error occurs.
+ * returns: A pointer to the converted text with a null character appended, or
+ * NULL if an error occurs. The text must be freed when no longer needed.
+ */
+gchar * convert_text (const gchar * text, gint length, gint encoding, gboolean
+ nulled, gint * _converted, const gchar * * after);
+
+#endif
diff --git a/src/libaudtag/id3/id3v22.c b/src/libaudtag/id3/id3v22.c
index 4699bf7..0bc1490 100644
--- a/src/libaudtag/id3/id3v22.c
+++ b/src/libaudtag/id3/id3v22.c
@@ -2,6 +2,7 @@
* Copyright 2009 Paula Stanciu
* Copyright 2010 John Lindgren
* Copyright 2010 Tony Vroon
+ * Copyright 2010 William Pitcock
*
* This file is part of Audacious.
*
@@ -24,6 +25,7 @@
#include <libaudcore/audstrings.h>
+#include "id3-common.h"
#include "id3v22.h"
#include "../util.h"
@@ -44,11 +46,12 @@ enum
ID3_ENCODER,
ID3_TXX,
ID3_RVA,
+ ID3_FUCKO_ARTIST,
ID3_TAGS_NO
};
static const gchar * id3_frames[ID3_TAGS_NO] = {"TAL", "TT2", "TCM", "TCR",
-"TDA", "TIM", "TLE", "TPE", "TRK", "TYE", "TCO", "COM", "TSS", "TXX", "RVA"};
+"TDA", "TIM", "TLE", "TPE", "TRK", "TYE", "TCO", "COM", "TSS", "TXX", "RVA", "TP1"};
#pragma pack(push) /* must be byte-aligned */
#pragma pack(1)
@@ -65,7 +68,7 @@ ID3v2Header;
typedef struct
{
gchar key[3];
- guint32 size;
+ gchar size[3];
}
ID3v2FrameHeader;
#pragma pack(pop)
@@ -83,22 +86,19 @@ GenericFrame;
#define TAG_SIZE 1
-static mowgli_dictionary_t * frames = NULL;
-static mowgli_list_t * frameIDs = NULL;
-
#define write_syncsafe_int32(x) vfs_fput_be32 (syncsafe32 (x))
-static gboolean validate_header (ID3v2Header * header, gboolean is_footer)
+static gboolean validate_header (ID3v2Header * header)
{
- if (memcmp (header->magic, is_footer ? "3DI" : "ID3", 3))
+ if (memcmp (header->magic, "ID3", 3))
return FALSE;
- if ((header->version != 2) || header->revision != 0)
+ if ((header->version != 2))
return FALSE;
- header->size = unsyncsafe32 (GUINT32_FROM_BE (header->size));
+ header->size = GUINT32_FROM_BE (header->size);
- AUDDBG ("Found ID3v2 %s:\n", is_footer ? "footer" : "header");
+ AUDDBG ("Found ID3v2 header:\n");
AUDDBG (" magic = %.3s\n", header->magic);
AUDDBG (" version = %d\n", (gint) header->version);
AUDDBG (" revision = %d\n", (gint) header->revision);
@@ -108,10 +108,9 @@ static gboolean validate_header (ID3v2Header * header, gboolean is_footer)
}
static gboolean read_header (VFSFile * handle, gint * version, gboolean *
- syncsafe, gsize * offset, gint * header_size, gint * data_size, gint *
- footer_size)
+ syncsafe, gsize * offset, gint * header_size, gint * data_size)
{
- ID3v2Header header, footer;
+ ID3v2Header header;
if (vfs_fseek (handle, 0, SEEK_SET))
return FALSE;
@@ -120,78 +119,28 @@ static gboolean read_header (VFSFile * handle, gint * version, gboolean *
(ID3v2Header))
return FALSE;
- if (validate_header (& header, FALSE))
+ if (validate_header (& header))
{
* offset = 0;
* version = header.version;
* header_size = sizeof (ID3v2Header);
* data_size = header.size;
- }
- else
- {
- gsize end = vfs_fsize (handle);
-
- if (end < 0)
- return FALSE;
-
- if (vfs_fseek (handle, end - sizeof (ID3v2Header), SEEK_SET))
- return FALSE;
-
- if (vfs_fread (& footer, 1, sizeof (ID3v2Header), handle) != sizeof
- (ID3v2Header))
- return FALSE;
-
- if (! validate_header (& footer, TRUE))
- return FALSE;
-
- * offset = end - 2 * sizeof (ID3v2Header) - footer.size;
- * version = footer.version;
- * header_size = sizeof (ID3v2Header);
- * data_size = footer.size;
- * footer_size = sizeof (ID3v2Header);
-
- if (vfs_fseek (handle, * offset, SEEK_SET))
- return FALSE;
-
- if (vfs_fread (& header, 1, sizeof (ID3v2Header), handle) != sizeof
- (ID3v2Header))
- return FALSE;
-
- if (! validate_header (& header, FALSE))
- return FALSE;
- }
+ } else return FALSE;
* syncsafe = (header.flags & ID3_HEADER_SYNCSAFE) ? TRUE : FALSE;
- AUDDBG ("Offset = %d, header size = %d, data size = %d, footer size = "
- "%d.\n", (gint) * offset, * header_size, * data_size, * footer_size);
+ AUDDBG ("Offset = %d, header size = %d, data size = %d\n",
+ (gint) * offset, * header_size, * data_size);
return TRUE;
}
-static gint unsyncsafe (guchar * data, gint size)
-{
- guchar * get = data, * set = data;
-
- while (size --)
- {
- guchar c = * set ++ = * get ++;
-
- if (c == 0xff && size && ! get[0])
- {
- size --;
- get ++;
- }
- }
-
- return set - data;
-}
-
static gboolean read_frame (VFSFile * handle, gint max_size, gint version,
gboolean syncsafe, gint * frame_size, gchar * key, guchar * * data, gint * size)
{
ID3v2FrameHeader header;
gint skip = 0;
+ guint32 hdrsz;
if ((max_size -= sizeof (ID3v2FrameHeader)) < 0)
return FALSE;
@@ -203,119 +152,32 @@ static gboolean read_frame (VFSFile * handle, gint max_size, gint version,
if (! header.key[0]) /* padding */
return FALSE;
- header.size = (version == 3) ? GUINT32_FROM_BE (header.size) : unsyncsafe32
- (GUINT32_FROM_BE (header.size));
- header.flags = GUINT16_FROM_BE (header.flags);
+ hdrsz = (header.size[2] << 24 | header.size[1] << 16 | header.size[0] << 8);
+ hdrsz = GUINT32_FROM_BE(hdrsz);
- if (header.size > max_size)
+ if (hdrsz > max_size || hdrsz == 0)
return FALSE;
AUDDBG ("Found frame:\n");
- AUDDBG (" key = %.4s\n", header.key);
- AUDDBG (" size = %d\n", (gint) header.size);
- AUDDBG (" flags = %x\n", (gint) header.flags);
-
- * frame_size = sizeof (ID3v2FrameHeader) + header.size;
- sprintf (key, "%.4s", header.key);
-
- if (header.flags & (ID3_FRAME_COMPRESSED | ID3_FRAME_ENCRYPTED))
- {
- AUDDBG ("Hit compressed/encrypted frame %s.\n", key);
- return FALSE;
- }
+ AUDDBG (" key = %.3s\n", header.key);
+ AUDDBG (" size = %d\n", (gint) hdrsz);
- if (header.flags & ID3_FRAME_HAS_GROUP)
- skip ++;
- if (header.flags & ID3_FRAME_HAS_LENGTH)
- skip += 4;
+ * frame_size = sizeof (ID3v2FrameHeader) + hdrsz;
+ sprintf (key, "%.3s", header.key);
if (skip > 0 && vfs_fseek (handle, skip, SEEK_CUR))
return FALSE;
- * size = header.size - skip;
+ * size = hdrsz - skip;
* data = g_malloc (* size);
if (vfs_fread (* data, 1, * size, handle) != * size)
return FALSE;
- if (syncsafe || (header.flags & ID3_FRAME_SYNCSAFE))
- * size = unsyncsafe (* data, * size);
-
AUDDBG ("Data size = %d.\n", * size);
return TRUE;
}
-static gchar * convert_text (const gchar * text, gint length, gint encoding,
- gboolean nulled, gint * _converted, const gchar * * after)
-{
- gchar * buffer = NULL;
- gsize converted = 0;
-
- if (nulled)
- {
- const guchar null16[] = {0, 0};
- const gchar * null;
-
- switch (encoding)
- {
- case 0:
- case 3:
- if ((null = memchr (text, 0, length)) == NULL)
- return NULL;
-
- length = null - text;
-
- if (after != NULL)
- * after = null + 1;
-
- break;
- case 1:
- case 2:
- if ((null = memfind (text, length, null16, 2)) == NULL)
- return NULL;
-
- length = null - text;
-
- if (after != NULL)
- * after = null + 2;
-
- break;
- }
- }
-
- switch (encoding)
- {
- case 0:
- buffer = g_convert (text, length, "UTF-8", "ISO-8859-1", NULL,
- & converted, NULL);
- break;
- case 1:
- if (text[0] == (gchar) 0xff)
- buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16LE", NULL,
- & converted, NULL);
- else
- buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16BE", NULL,
- & converted, NULL);
-
- break;
- case 2:
- buffer = g_convert (text, length, "UTF-8", "UTF-16BE", NULL,
- & converted, NULL);
- break;
- case 3:
- buffer = g_malloc (length + 1);
- memcpy (buffer, text, length);
- buffer[length] = 0;
- converted = length;
- break;
- }
-
- if (_converted != NULL)
- * _converted = converted;
-
- return buffer;
-}
-
static gchar * decode_text_frame (const guchar * data, gint size)
{
return convert_text ((const gchar *) data + 1, size - 1, data[0], FALSE,
@@ -342,96 +204,6 @@ static gboolean decode_comment_frame (const guchar * _data, gint size, gchar * *
return TRUE;
}
-static void free_generic_frame (GenericFrame * frame)
-{
- g_free (frame->data);
- g_free (frame);
-}
-
-static void read_all_frames (VFSFile * handle, gint version, gboolean syncsafe,
- gint data_size)
-{
- gint pos;
-
- for (pos = 0; pos < data_size; )
- {
- gint frame_size, size;
- gchar key[5];
- guchar * data;
- GenericFrame * frame;
-
- if (! read_frame (handle, data_size - pos, version, syncsafe,
- & frame_size, key, & data, & size))
- break;
-
- frame = g_malloc (sizeof (GenericFrame));
- strcpy (frame->key, key);
- frame->data = data;
- frame->size = size;
-
- mowgli_dictionary_add (frames, frame->key, frame);
- mowgli_node_add (frame->key, mowgli_node_create (), frameIDs);
-
- pos += frame_size;
- }
-}
-
-static gboolean write_frame (VFSFile * handle, GenericFrame * frame, gint *
- frame_size)
-{
- ID3v2FrameHeader header;
-
- memcpy (header.key, frame->key, 4);
- header.size = syncsafe32 (frame->size);
- header.size = GUINT32_TO_BE (header.size);
- header.flags = 0;
-
- if (vfs_fwrite (& header, 1, sizeof (ID3v2FrameHeader), handle) != sizeof
- (ID3v2FrameHeader))
- return FALSE;
-
- if (vfs_fwrite (frame->data, 1, frame->size, handle) != frame->size)
- return FALSE;
-
- * frame_size = sizeof (ID3v2FrameHeader) + frame->size;
- return TRUE;
-}
-
-static guint32 writeAllFramesToFile (VFSFile * fd)
-{
- guint32 size = 0;
- mowgli_node_t *n, *tn;
- MOWGLI_LIST_FOREACH_SAFE(n, tn, frameIDs->head)
- {
- GenericFrame *frame = (GenericFrame *) mowgli_dictionary_retrieve(frames, (gchar *) (n->data));
- if (frame)
- {
- gint frame_size;
-
- if (! write_frame (fd, frame, & frame_size))
- break;
-
- size += frame_size;
- }
- }
- return size;
-}
-
-static gboolean write_header (VFSFile * handle, gint size, gboolean is_footer)
-{
- ID3v2Header header;
-
- memcpy (header.magic, is_footer ? "3DI" : "ID3", 3);
- header.version = 4;
- header.revision = 0;
- header.flags = ID3_HEADER_HAS_FOOTER;
- header.size = syncsafe32 (size);
- header.size = GUINT32_TO_BE (header.size);
-
- return vfs_fwrite (& header, 1, sizeof (ID3v2Header), handle) == sizeof
- (ID3v2Header);
-}
-
static gint get_frame_id (const gchar * key)
{
gint id;
@@ -651,78 +423,29 @@ static void decode_genre (Tuple * tuple, const guchar * data, gint size)
return;
}
-static GenericFrame * add_generic_frame (gint id, gint size)
-{
- GenericFrame * frame = mowgli_dictionary_retrieve (frames, id3_frames[id]);
-
- if (frame == NULL)
- {
- frame = g_malloc (sizeof (GenericFrame));
- strcpy (frame->key, id3_frames[id]);
- mowgli_dictionary_add (frames, frame->key, frame);
- mowgli_node_add (frame->key, mowgli_node_create (), frameIDs);
- }
- else
- g_free (frame->data);
-
- frame->data = g_malloc (size);
- frame->size = size;
- return frame;
-}
-
-static void add_text_frame (gint id, const gchar * text)
-{
- gint length = strlen (text);
- GenericFrame * frame = add_generic_frame (id, length + 1);
-
- frame->data[0] = 3; /* UTF-8 encoding */
- memcpy (frame->data + 1, text, length);
-}
-
-static void add_comment_frame (const gchar * text)
-{
- gint length = strlen (text);
- GenericFrame * frame = add_generic_frame (ID3_COMMENT, length + 5);
-
- frame->data[0] = 3; /* UTF-8 encoding */
- strcpy ((gchar *) frame->data + 1, "eng"); /* well, it *might* be English */
- memcpy (frame->data + 5, text, length);
-}
-
-static void add_frameFromTupleStr (Tuple * tuple, int field, int id3_field)
-{
- add_text_frame (id3_field, tuple_get_string (tuple, field, NULL));
-}
-
-static void add_frameFromTupleInt (Tuple * tuple, int field, int id3_field)
-{
- gchar scratch[16];
-
- snprintf (scratch, sizeof scratch, "%d", tuple_get_int (tuple, field, NULL));
- add_text_frame (id3_field, scratch);
-}
-
static gboolean id3v22_can_handle_file (VFSFile * handle)
{
- gint version, header_size, data_size, footer_size;
+ gint version, header_size, data_size;
gboolean syncsafe;
gsize offset;
return read_header (handle, & version, & syncsafe, & offset, & header_size,
- & data_size, & footer_size);
+ & data_size);
}
-static gboolean id3v22_read_tag (Tuple * tuple, VFSFile * handle)
+gboolean id3v22_read_tag (Tuple * tuple, VFSFile * handle)
{
- gint version, header_size, data_size, footer_size;
+ gint version, header_size, data_size;
gboolean syncsafe;
gsize offset;
gint pos;
if (! read_header (handle, & version, & syncsafe, & offset, & header_size,
- & data_size, & footer_size))
+ & data_size))
return FALSE;
+ AUDDBG("Reading tags from %i bytes of ID3 data in %s\n", data_size, handle->uri);
+
for (pos = 0; pos < data_size; )
{
gint frame_size, size, id;
@@ -731,7 +454,10 @@ static gboolean id3v22_read_tag (Tuple * tuple, VFSFile * handle)
if (! read_frame (handle, data_size - pos, version, syncsafe,
& frame_size, key, & data, & size))
+ {
+ AUDDBG("read_frame failed at pos %i\n", pos);
break;
+ }
id = get_frame_id (key);
@@ -758,6 +484,7 @@ static gboolean id3v22_read_tag (Tuple * tuple, VFSFile * handle)
case ID3_LENGTH:
associate_int (tuple, FIELD_LENGTH, NULL, data, size);
break;
+ case ID3_FUCKO_ARTIST:
case ID3_ARTIST:
associate_string (tuple, FIELD_ARTIST, NULL, data, size);
break;
@@ -820,13 +547,13 @@ static gboolean parse_pic (const guchar * data, gint size, gchar * * mime,
static gboolean id3v22_read_image (VFSFile * handle, void * * image_data, gint *
image_size)
{
- gint version, header_size, data_size, footer_size, parsed;
+ gint version, header_size, data_size, parsed;
gboolean syncsafe;
gsize offset;
gboolean found = FALSE;
if (! read_header (handle, & version, & syncsafe, & offset, & header_size,
- & data_size, & footer_size))
+ & data_size))
return FALSE;
for (parsed = 0; parsed < data_size && ! found; )
@@ -864,23 +591,12 @@ static gboolean id3v22_read_image (VFSFile * handle, void * * image_data, gint *
return found;
}
-static void free_frame_cb (mowgli_dictionary_elem_t * element, void * unused)
-{
- free_generic_frame (element->data);
-}
-
-static void free_frame_dictionary (void)
-{
- mowgli_dictionary_destroy (frames, free_frame_cb, NULL);
- frames = NULL;
-}
-
static gboolean id3v22_write_tag (Tuple * tuple, VFSFile * f)
{
return FALSE;
}
-tag_module_t id3v24 =
+tag_module_t id3v22 =
{
.name = "ID3v2.2",
.can_handle_file = id3v22_can_handle_file,
diff --git a/src/libaudtag/id3/id3v24.c b/src/libaudtag/id3/id3v24.c
index 499048d..ed93264 100644
--- a/src/libaudtag/id3/id3v24.c
+++ b/src/libaudtag/id3/id3v24.c
@@ -23,6 +23,7 @@
#include <libaudcore/audstrings.h>
+#include "id3-common.h"
#include "id3v24.h"
#include "../util.h"
@@ -344,77 +345,6 @@ static gboolean read_frame (VFSFile * handle, gint max_size, gint version,
return TRUE;
}
-static gchar * convert_text (const gchar * text, gint length, gint encoding,
- gboolean nulled, gint * _converted, const gchar * * after)
-{
- gchar * buffer = NULL;
- gsize converted = 0;
-
- if (nulled)
- {
- const guchar null16[] = {0, 0};
- const gchar * null;
-
- switch (encoding)
- {
- case 0:
- case 3:
- if ((null = memchr (text, 0, length)) == NULL)
- return NULL;
-
- length = null - text;
-
- if (after != NULL)
- * after = null + 1;
-
- break;
- case 1:
- case 2:
- if ((null = memfind (text, length, null16, 2)) == NULL)
- return NULL;
-
- length = null - text;
-
- if (after != NULL)
- * after = null + 2;
-
- break;
- }
- }
-
- switch (encoding)
- {
- case 0:
- buffer = g_convert (text, length, "UTF-8", "ISO-8859-1", NULL,
- & converted, NULL);
- break;
- case 1:
- if (text[0] == (gchar) 0xff)
- buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16LE", NULL,
- & converted, NULL);
- else
- buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16BE", NULL,
- & converted, NULL);
-
- break;
- case 2:
- buffer = g_convert (text, length, "UTF-8", "UTF-16BE", NULL,
- & converted, NULL);
- break;
- case 3:
- buffer = g_malloc (length + 1);
- memcpy (buffer, text, length);
- buffer[length] = 0;
- converted = length;
- break;
- }
-
- if (_converted != NULL)
- * _converted = converted;
-
- return buffer;
-}
-
static gchar * decode_text_frame (const guchar * data, gint size)
{
return convert_text ((const gchar *) data + 1, size - 1, data[0], FALSE,
diff --git a/src/libaudtag/tag_module.c b/src/libaudtag/tag_module.c
index e8c8b3f..cc860a7 100644
--- a/src/libaudtag/tag_module.c
+++ b/src/libaudtag/tag_module.c
@@ -27,6 +27,7 @@
#include "tag_module.h"
#include "wma/module.h"
#include "id3/id3v1.h"
+#include "id3/id3v22.h"
#include "id3/id3v24.h"
#include "ape/ape.h"
/* #include "aac/aac.h" */
@@ -34,6 +35,7 @@
void init_tag_modules(void)
{
mowgli_node_add((void *)&id3v24, &id3v24.node, &tag_modules);
+ mowgli_node_add((void *)&id3v22, &id3v22.node, &tag_modules);
mowgli_node_add((void *)&ape, &ape.node, &tag_modules);
mowgli_node_add((void *)&id3v1, &id3v1.node, &tag_modules);
}
diff --git a/src/libaudtag/util.c b/src/libaudtag/util.c
index d1c0bea..0cd4a75 100644
--- a/src/libaudtag/util.c
+++ b/src/libaudtag/util.c
@@ -389,7 +389,7 @@ gchar *convert_numericgenre_to_text(gint numericgenre)
{GENRE_NATIVE_AMERICAN, "Native American"},
{GENRE_CABARET, "Cabaret"},
{GENRE_NEW_WAVE, "New Wave"},
- {GENRE_PSYCHADELIC, "Psychadelic"},
+ {GENRE_PSYCHEDELIC, "Psychedelic"},
{GENRE_RAVE, "Rave"},
{GENRE_SHOWTUNES, "Showtunes"},
{GENRE_TRAILER, "Trailer"},
diff --git a/src/libaudtag/util.h b/src/libaudtag/util.h
index 0e6a4f3..5a2919b 100644
--- a/src/libaudtag/util.h
+++ b/src/libaudtag/util.h
@@ -96,7 +96,7 @@ enum {
GENRE_NATIVE_AMERICAN,
GENRE_CABARET,
GENRE_NEW_WAVE,
- GENRE_PSYCHADELIC,
+ GENRE_PSYCHEDELIC,
GENRE_RAVE,
GENRE_SHOWTUNES,
GENRE_TRAILER,
diff --git a/src/libeggsmclient/Makefile b/src/libeggsmclient/Makefile
index b124d60..fbe40e7 100644
--- a/src/libeggsmclient/Makefile
+++ b/src/libeggsmclient/Makefile
@@ -18,4 +18,4 @@ include ../../buildsys.mk
include ../../extra.mk
CPPFLAGS += ${INCLUDES} ${GLIB_CFLAGS} ${GTK_CFLAGS} -I../.. -I. -I../audacious/platform ${platform_defines}
-LIBS += ${GLIB_LIBS} ${GTK_LIBS} ${ICE_LIBS} ${platform_libs}
+LIBS += ${GLIB_LIBS} ${GTK_LIBS} ${platform_libs}
diff --git a/src/libguess/Makefile b/src/libguess/Makefile
index e2f6937..98061bb 100644
--- a/src/libguess/Makefile
+++ b/src/libguess/Makefile
@@ -1,5 +1,6 @@
STATIC_LIB_NOINST = libguess.a
SRCS = guess.c \
+ dfa.c \
arabic_impl.c \
cjk_impl.c \
greek_impl.c \
diff --git a/src/libguess/arabic_impl.c b/src/libguess/arabic_impl.c
index 24b5608..9cb64c6 100644
--- a/src/libguess/arabic_impl.c
+++ b/src/libguess/arabic_impl.c
@@ -1,28 +1,55 @@
#include "libguess.h"
+#include "dfa.h"
+#include "guess_tab.c"
-static const char *_guess_ar(const unsigned char *ptr, int size)
+/* precedence order */
+#define ORDER &utf8, &iso8859_6, &cp1256
+
+const char *guess_ar(const char *buf, int buflen)
{
int i;
+ const char *rv = NULL;
- for (i = 0; i < size; i++)
- {
- if ((ptr[i] >= 0x80 && ptr[i] <= 0x9F) ||
- ptr[i] == 0xA1 || ptr[i] == 0xA2 || ptr[i] == 0xA3 ||
- (ptr[i] >= 0xA5 && ptr[i] <= 0xAB) ||
- (ptr[i] >= 0xAE && ptr[i] <= 0xBA) ||
- ptr[i] == 0xBC || ptr[i] == 0xBD ||
- ptr[i] == 0xBE || ptr[i] == 0xC0 ||
- (ptr[i] >= 0xDB && ptr[i] <= 0xDF) || (ptr[i] >= 0xF3))
- return "CP1256";
- }
+ /* encodings */
+ guess_dfa cp1256 = DFA_INIT(guess_cp1256_st, guess_cp1256_ar, "CP1256");
+ guess_dfa iso8859_6 = DFA_INIT(guess_iso8859_6_st, guess_iso8859_6_ar, "ISO-8859-6");
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
- return "ISO-8859-6";
-}
+ guess_dfa *top = NULL;
+ guess_dfa *order[] = { ORDER, NULL };
-const char *guess_ar(const char *ptr, int size)
-{
- if (dfa_validate_utf8(ptr, size))
- return "UTF-8";
+ for (i = 0; i < buflen; i++) {
+ int c = (unsigned char) buf[i];
+
+ /* special treatment of BOM */
+ if (i == 0 && c == 0xff) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xfe)
+ return UCS_2LE;
+ }
+ }
+ if (i == 0 && c == 0xfe) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xff)
+ return UCS_2BE;
+ }
+ }
+
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
+
+ if (dfa_none(order)) {
+ /* we ran out the possibilities */
+ return NULL;
+ }
+ }
- return _guess_ar((const unsigned char *)ptr, size);
+ top = dfa_top(order);
+ if (top)
+ return top->name;
+ else
+ return NULL;
}
diff --git a/src/libguess/cjk_impl.c b/src/libguess/cjk_impl.c
index d8937c0..37a996e 100644
--- a/src/libguess/cjk_impl.c
+++ b/src/libguess/cjk_impl.c
@@ -4,14 +4,14 @@
*/
/*
- * guess.c - guessing character encoding
+ * guess.c - guessing character encoding
*
* Copyright (c) 2000-2003 Shiro Kawai, All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
@@ -38,6 +38,9 @@
*/
#include "libguess.h"
+#include "dfa.h"
+
+#include <stdio.h>
/* take precedence if scores are same. you can customize the order as: */
/* ORDER_** &highest, &second, ... &lowest */
@@ -46,62 +49,13 @@
#define ORDER_CN &utf8, &gb2312, &gb18030
#define ORDER_KR &utf8, &euck, &johab
-/* workaround for that glib's g_convert can't convert
- properly from UCS-2BE/LE trailing after BOM. */
-#define WITH_G_CONVERT 1
-/* #undef WITH_G_CONVERT */
-
-#ifdef WITH_G_CONVERT
-const char UCS_2BE[] = "UTF-16";
-const char UCS_2LE[] = "UTF-16";
-#else
-const char UCS_2BE[] = "UCS-2BE";
-const char UCS_2LE[] = "UCS-2LE";
-#endif
-
-/* data types */
-typedef struct guess_arc_rec
-{
- unsigned int next; /* next state */
- double score; /* score */
-} guess_arc;
-
-typedef struct guess_dfa_rec
-{
- signed char (*states)[256];
- guess_arc *arcs;
- int state;
- double score;
-} guess_dfa;
-
-/* macros */
-#define DFA_INIT(st, ar) \
- { st, ar, 0, 1.0 }
-
-#define DFA_NEXT(dfa, ch) \
- do { \
- int arc__; \
- if (dfa.state >= 0) { \
- arc__ = dfa.states[dfa.state][ch]; \
- if (arc__ < 0) { \
- dfa.state = -1; \
- } else { \
- dfa.state = dfa.arcs[arc__].next; \
- dfa.score *= dfa.arcs[arc__].score; \
- } \
- } \
- } while (0)
-
-#define DFA_ALIVE(dfa) (dfa.state >= 0)
-
/* include DFA table generated by guess.scm */
#include "guess_tab.c"
-
int dfa_validate_utf8(const char *buf, int buflen)
{
int i;
- guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar);
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
for (i = 0; i < buflen; i++) {
int c = (unsigned char) buf[i];
@@ -116,16 +70,17 @@ int dfa_validate_utf8(const char *buf, int buflen)
if(DFA_ALIVE(utf8))
return 1;
- else
+ else
return 0;
}
const char *guess_jp(const char *buf, int buflen)
{
int i;
- guess_dfa eucj = DFA_INIT(guess_eucj_st, guess_eucj_ar);
- guess_dfa sjis = DFA_INIT(guess_sjis_st, guess_sjis_ar);
- guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar);
+ const char *rv = NULL;
+ guess_dfa eucj = DFA_INIT(guess_eucj_st, guess_eucj_ar, "EUC-JP");
+ guess_dfa sjis = DFA_INIT(guess_sjis_st, guess_sjis_ar, "SJIS");
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
guess_dfa *top = NULL;
guess_dfa *order[] = { ORDER_JP, NULL };
@@ -158,51 +113,29 @@ const char *guess_jp(const char *buf, int buflen)
}
}
- if (DFA_ALIVE(eucj)) {
- if (!DFA_ALIVE(sjis) && !DFA_ALIVE(utf8))
- return "EUC-JP";
- DFA_NEXT(eucj, c);
- }
- if (DFA_ALIVE(sjis)) {
- if (!DFA_ALIVE(eucj) && !DFA_ALIVE(utf8))
- return "SJIS";
- DFA_NEXT(sjis, c);
- }
- if (DFA_ALIVE(utf8)) {
- if (!DFA_ALIVE(sjis) && !DFA_ALIVE(eucj))
- return "UTF-8";
- DFA_NEXT(utf8, c);
- }
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
- if (!DFA_ALIVE(eucj) && !DFA_ALIVE(sjis) && !DFA_ALIVE(utf8)) {
+ if (dfa_none(order)) {
/* we ran out the possibilities */
return NULL;
}
}
- /* Now, we have ambigous code. Pick the highest score. If more than
- one candidate tie, pick the default encoding. */
- for (i = 0; order[i] != NULL; i++) {
- if (order[i]->state >= 0) { //DFA_ALIVE()
- if (top == NULL || order[i]->score > top->score)
- top = order[i];
- }
- }
-
- if (top == &eucj)
- return "EUC-JP";
- if (top == &utf8)
- return "UTF-8";
- if (top == &sjis)
- return "SJIS";
- return NULL;
+ top = dfa_top(order);
+ if(top)
+ return top->name;
+ else
+ return NULL;
}
const char *guess_tw(const char *buf, int buflen)
{
int i;
- guess_dfa big5 = DFA_INIT(guess_big5_st, guess_big5_ar);
- guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar);
+ const char *rv = NULL;
+ guess_dfa big5 = DFA_INIT(guess_big5_st, guess_big5_ar, "BIG5");
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
guess_dfa *top = NULL;
guess_dfa *order[] = { ORDER_TW, NULL };
@@ -235,45 +168,30 @@ const char *guess_tw(const char *buf, int buflen)
}
}
- if (DFA_ALIVE(big5)) {
- if (!DFA_ALIVE(utf8))
- return "BIG5";
- DFA_NEXT(big5, c);
- }
- if (DFA_ALIVE(utf8)) {
- if (!DFA_ALIVE(big5))
- return "UTF-8";
- DFA_NEXT(utf8, c);
- }
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
- if (!DFA_ALIVE(big5) && !DFA_ALIVE(utf8)) {
+ if (dfa_none(order)) {
/* we ran out the possibilities */
return NULL;
}
}
- /* Now, we have ambigous code. Pick the highest score. If more than
- one candidate tie, pick the default encoding. */
- for (i = 0; order[i] != NULL; i++) {
- if (order[i]->state >= 0) { //DFA_ALIVE()
- if (top == NULL || order[i]->score > top->score)
- top = order[i];
- }
- }
-
- if (top == &big5)
- return "BIG5";
- if (top == &utf8)
- return "UTF-8";
- return NULL;
+ top = dfa_top(order);
+ if (top)
+ return top->name;
+ else
+ return NULL;
}
const char *guess_cn(const char *buf, int buflen)
{
int i;
- guess_dfa gb2312 = DFA_INIT(guess_gb2312_st, guess_gb2312_ar);
- guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar);
- guess_dfa gb18030 = DFA_INIT(guess_gb18030_st, guess_gb18030_ar);
+ const char *rv = NULL;
+ guess_dfa gb2312 = DFA_INIT(guess_gb2312_st, guess_gb2312_ar, "GB2312");
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
+ guess_dfa gb18030 = DFA_INIT(guess_gb18030_st, guess_gb18030_ar, "GB18030");
guess_dfa *top = NULL;
guess_dfa *order[] = { ORDER_CN, NULL };
@@ -308,52 +226,30 @@ const char *guess_cn(const char *buf, int buflen)
}
}
- if (DFA_ALIVE(gb2312)) {
- if (!DFA_ALIVE(utf8) && !DFA_ALIVE(gb18030))
- return "GB2312";
- DFA_NEXT(gb2312, c);
- }
- if (DFA_ALIVE(utf8)) {
- if (!DFA_ALIVE(gb2312) && !DFA_ALIVE(gb18030))
- return "UTF-8";
- DFA_NEXT(utf8, c);
- }
- if (DFA_ALIVE(gb18030)) {
- if (!DFA_ALIVE(utf8) && !DFA_ALIVE(gb2312))
- return "GB18030";
- DFA_NEXT(gb18030, c);
- }
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
- if (!DFA_ALIVE(gb2312) && !DFA_ALIVE(utf8) && !DFA_ALIVE(gb18030)) {
+ if (dfa_none(order)) {
/* we ran out the possibilities */
return NULL;
}
}
- /* Now, we have ambigous code. Pick the highest score. If more than
- one candidate tie, pick the default encoding. */
- for (i = 0; order[i] != NULL; i++) {
- if (order[i]->state >= 0) { //DFA_ALIVE()
- if (top == NULL || order[i]->score > top->score)
- top = order[i];
- }
- }
-
- if (top == &gb2312)
- return "GB2312";
- if (top == &utf8)
- return "UTF-8";
- if (top == &gb18030)
- return "GB18030";
- return NULL;
+ top = dfa_top(order);
+ if(top)
+ return top->name;
+ else
+ return NULL;
}
const char *guess_kr(const char *buf, int buflen)
{
int i;
- guess_dfa euck = DFA_INIT(guess_euck_st, guess_euck_ar);
- guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar);
- guess_dfa johab = DFA_INIT(guess_johab_st, guess_johab_ar);
+ const char *rv = NULL;
+ guess_dfa euck = DFA_INIT(guess_euck_st, guess_euck_ar, "EUC-KR");
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
+ guess_dfa johab = DFA_INIT(guess_johab_st, guess_johab_ar, "JOHAB");
guess_dfa *top = NULL;
guess_dfa *order[] = { ORDER_KR, NULL };
@@ -388,42 +284,19 @@ const char *guess_kr(const char *buf, int buflen)
}
}
- if (DFA_ALIVE(euck)) {
- if (!DFA_ALIVE(johab) && !DFA_ALIVE(utf8))
- return "EUC-KR";
- DFA_NEXT(euck, c);
- }
- if (DFA_ALIVE(johab)) {
- if (!DFA_ALIVE(euck) && !DFA_ALIVE(utf8))
- return "JOHAB";
- DFA_NEXT(johab, c);
- }
- if (DFA_ALIVE(utf8)) {
- if (!DFA_ALIVE(euck) && !DFA_ALIVE(johab))
- return "UTF-8";
- DFA_NEXT(utf8, c);
- }
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
- if (!DFA_ALIVE(euck) && !DFA_ALIVE(johab) && !DFA_ALIVE(utf8)) {
+ if (dfa_none(order)) {
/* we ran out the possibilities */
return NULL;
}
}
- /* Now, we have ambigous code. Pick the highest score. If more than
- one candidate tie, pick the default encoding. */
- for (i = 0; order[i] != NULL; i++) {
- if (order[i]->state >= 0) { //DFA_ALIVE()
- if (top == NULL || order[i]->score > top->score)
- top = order[i];
- }
- }
-
- if (top == &euck)
- return "EUC-KR";
- if (top == &utf8)
- return "UTF-8";
- if (top == &johab)
- return "JOHAB";
- return NULL;
+ top = dfa_top(order);
+ if(top)
+ return top->name;
+ else
+ return NULL;
}
diff --git a/src/libguess/dfa.c b/src/libguess/dfa.c
new file mode 100644
index 0000000..a7d5943
--- /dev/null
+++ b/src/libguess/dfa.c
@@ -0,0 +1,62 @@
+#include "libguess.h"
+#include "dfa.h"
+
+boolean
+dfa_alone(guess_dfa *dfa, guess_dfa *order[])
+{
+ int i;
+
+ if (dfa->state < 0)
+ return FALSE;
+
+ for (i = 0; order[i] != NULL; i++) {
+ if (order[i] != dfa && order[i]->state >= 0) { //DFA_ALIVE()
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+boolean
+dfa_none(guess_dfa *order[])
+{
+ int i;
+
+ for (i = 0; order[i] != NULL; i++) {
+ if (order[i]->state >= 0) { //DFA_ALIVE()
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+guess_dfa *
+dfa_top(guess_dfa *order[])
+{
+ int i;
+ guess_dfa *top = NULL;
+ for (i = 0; order[i] != NULL; i++) {
+ if (order[i]->state >= 0) { //DFA_ALIVE()
+ if (top == NULL || order[i]->score > top->score)
+ top = order[i];
+ }
+ }
+ return top;
+}
+
+const char *
+dfa_process(guess_dfa *order[], int c)
+{
+ int i;
+ for (i = 0; order[i] != NULL; i++) {
+ if (DFA_ALIVE_P(order[i])) {
+ if (dfa_alone(order[i], order))
+ return order[i]->name;
+ DFA_NEXT_P(order[i], c);
+ }
+ }
+
+ return NULL;
+}
diff --git a/src/libguess/dfa.h b/src/libguess/dfa.h
new file mode 100644
index 0000000..122db0c
--- /dev/null
+++ b/src/libguess/dfa.h
@@ -0,0 +1,79 @@
+#ifndef __DFA_H__
+#define __DFA_H__
+
+typedef int boolean;
+#define TRUE 1
+#define FALSE 0
+
+/* workaround for that glib's g_convert can't convert
+ properly from UCS-2BE/LE trailing after BOM. */
+#define WITH_G_CONVERT 1
+/* #undef WITH_G_CONVERT */
+
+#ifdef WITH_G_CONVERT
+#define UCS_2BE "UTF-16"
+#define UCS_2LE "UTF-16"
+#else
+#define UCS_2BE "UCS_2BE"
+#define UCS_2LE "UCS_2LE"
+#endif
+
+/* data types */
+typedef struct guess_arc_rec
+{
+ unsigned int next; /* next state */
+ double score; /* score */
+} guess_arc;
+
+typedef struct guess_dfa_rec
+{
+ signed char (*states)[256];
+ guess_arc *arcs;
+ int state;
+ double score;
+ char *name;
+} guess_dfa;
+
+/* macros */
+#define DFA_INIT(st, ar, name) \
+ { st, ar, 0, 1.0 ,name}
+
+#define DFA_NEXT(dfa, ch) \
+ do { \
+ int arc__; \
+ if (dfa.state >= 0) { \
+ arc__ = dfa.states[dfa.state][ch]; \
+ if (arc__ < 0) { \
+ dfa.state = -1; \
+ } else { \
+ dfa.state = dfa.arcs[arc__].next; \
+ dfa.score *= dfa.arcs[arc__].score; \
+ } \
+ } \
+ } while (0)
+
+#define DFA_ALIVE(dfa) (dfa.state >= 0)
+
+#define DFA_NEXT_P(dfa, ch) \
+ do { \
+ int arc__; \
+ if (dfa->state >= 0) { \
+ arc__ = dfa->states[dfa->state][ch]; \
+ if (arc__ < 0) { \
+ dfa->state = -1; \
+ } else { \
+ dfa->state = dfa->arcs[arc__].next; \
+ dfa->score *= dfa->arcs[arc__].score; \
+ } \
+ } \
+ } while (0)
+
+#define DFA_ALIVE_P(dfa) (dfa->state >= 0)
+
+/* prototypes */
+boolean dfa_alone(guess_dfa *dfa, guess_dfa *order[]);
+boolean dfa_none(guess_dfa *order[]);
+guess_dfa *dfa_top(guess_dfa *order[]);
+const char *dfa_process(guess_dfa *order[], int c);
+
+#endif
diff --git a/src/libguess/greek_impl.c b/src/libguess/greek_impl.c
index ae9d148..0117a4a 100644
--- a/src/libguess/greek_impl.c
+++ b/src/libguess/greek_impl.c
@@ -1,22 +1,56 @@
-static const char *_guess_gr(const unsigned char *ptr, int size)
+#include "libguess.h"
+#include "dfa.h"
+#include "guess_tab.c"
+
+/* precedence order */
+#define ORDER &utf8, &iso8859_7, &cp1253
+
+/* common */
+const char *guess_gr(const char *buf, int buflen)
{
int i;
+ const char *rv = NULL;
- for (i = 0; i < size; i++)
- {
- if (ptr[i] == 0x80 ||
- (ptr[i] >= 0x82 && ptr[i] <= 0x87) ||
- ptr[i] == 0x89 || ptr[i] == 0x8B ||
- (ptr[i] >= 0x91 && ptr[i] <= 0x97) ||
- ptr[i] == 0x99 || ptr[i] == 0x9B || ptr[i] == 0xA4 ||
- ptr[i] == 0xA5 || ptr[i] == 0xAE)
- return "CP1253";
- }
+ /* encodings */
+ guess_dfa cp1253 = DFA_INIT(guess_cp1253_st, guess_cp1253_ar, "CP1253");
+ guess_dfa iso8859_7 = DFA_INIT(guess_iso8859_7_st, guess_iso8859_7_ar, "ISO-8859-7");
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
- return "ISO-8859-7";
-}
+ guess_dfa *top = NULL;
+ guess_dfa *order[] = { ORDER, NULL };
-const char *guess_gr(const char *ptr, int size)
-{
- return _guess_gr((const unsigned char *) ptr, size);
+ for (i = 0; i < buflen; i++) {
+ int c = (unsigned char) buf[i];
+
+ /* special treatment of BOM */
+ if (i == 0 && c == 0xff) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xfe)
+ return UCS_2LE;
+ }
+ }
+ if (i == 0 && c == 0xfe) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xff)
+ return UCS_2BE;
+ }
+ }
+
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
+
+ if (dfa_none(order)) {
+ /* we ran out the possibilities */
+ return NULL;
+ }
+ }
+
+ top = dfa_top(order);
+ if (top)
+ return top->name;
+ else
+ return NULL;
}
diff --git a/src/libguess/guess.c b/src/libguess/guess.c
index 847972e..fd50397 100644
--- a/src/libguess/guess.c
+++ b/src/libguess/guess.c
@@ -8,8 +8,9 @@ typedef struct _guess_impl {
static guess_impl *guess_impl_list = NULL;
-void guess_impl_register(const char *lang,
- const char *(*impl)(const char *buf, int len))
+static void
+guess_impl_register(const char *lang,
+ const char *(*impl)(const char *buf, int len))
{
guess_impl *iptr = calloc(sizeof(guess_impl), 1);
@@ -20,7 +21,8 @@ void guess_impl_register(const char *lang,
guess_impl_list = iptr;
}
-void guess_init(void)
+static void
+guess_init(void)
{
/* check if already initialized */
if (guess_impl_list != NULL)
@@ -38,7 +40,8 @@ void guess_init(void)
guess_impl_register(GUESS_REGION_PL, guess_pl);
}
-const char *guess_encoding(const char *inbuf, int buflen, const char *lang)
+const char *
+guess_encoding(const char *inbuf, int buflen, const char *lang)
{
guess_impl *iter;
diff --git a/src/libguess/guess.scm b/src/libguess/guess.scm
index 363d6c4..acdf7a1 100644
--- a/src/libguess/guess.scm
+++ b/src/libguess/guess.scm
@@ -5,24 +5,24 @@
;;;
;;; Auxiliary script to generate japanese code guessing table
-;;;
+;;;
;;; Copyright (c) 2000-2003 Shiro Kawai, All rights reserved.
-;;;
+;;;
;;; Redistribution and use in source and binary forms, with or without
;;; modification, are permitted provided that the following conditions
;;; are met:
-;;;
+;;;
;;; 1. Redistributions of source code must retain the above copyright
;;; notice, this list of conditions and the following disclaimer.
-;;;
+;;;
;;; 2. Redistributions in binary form must reproduce the above copyright
;;; notice, this list of conditions and the following disclaimer in the
;;; documentation and/or other materials provided with the distribution.
-;;;
+;;;
;;; 3. Neither the name of the authors nor the names of its contributors
;;; may be used to endorse or promote products derived from this
;;; software without specific prior written permission.
-;;;
+;;;
;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -34,10 +34,27 @@
;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-;;;
+;;;
;;; $Id: guess.scm,v 1.3 2003/07/05 03:29:10 shirok Exp $
;;;
+;;;
+;;; To rebuild DFA tables, install Gauche and run the following in
+;;; the libguess source directory:
+;;;
+;;; $ gosh guess.scm guess_tab.c
+;;;
+;;; DFAs are defined such as:
+;;;
+;;; (define-dfa c-prefix-name
+;;; (init
+;;; (((byte sequence)) step-name confidence-score)
+;;; (((byte sequence)) step-name confidence-score)))
+;;;
+;;; DFAs can have infinite steps, the table defines how the DFA behaves.
+;;; 'init' is the name of the first step.
+;;;
+
(use srfi-1)
(use gauche.sequence)
@@ -156,6 +173,8 @@
(lambda ()
(print "/* State transition table for character code guessing */")
(print "/* This file is automatically generated by guess.scm */")
+ (print "")
+ (print "#include \"dfa.h\"")
(newline)
(for-each emit-dfa-table (all-dfas))))
0)
@@ -174,19 +193,16 @@
(((#x00 #x7f)) init 1.0) ; ASCII range
((#x8e) jis0201_kana 0.8) ; JISX 0201 kana
((#x8f) jis0213_2 0.95) ; JISX 0213 plane 2
- (((#xa1 #xfe)) jis0213_1 1.0) ; JISX 0213 plane 1
- )
+ (((#xa1 #xfe)) jis0213_1 1.0)) ; JISX 0213 plane 1
;; jis x 0201 kana
(jis0201_kana
- (((#xa1 #xdf)) init 1.0)
- )
+ (((#xa1 #xdf)) init 1.0))
;; jis x 0208 and jis x 0213 plane 1
(jis0213_1
(((#xa1 #xfe)) init 1.0))
;; jis x 0213 plane 2
(jis0213_2
- (((#xa1 #xfe)) init 1.0))
- )
+ (((#xa1 #xfe)) init 1.0)))
;;;
;;; Shift_JIS
@@ -201,8 +217,7 @@
(((#xf0 #xfc)) jis0213 0.95) ;jisx0213 plane 2
(((#xfd #xff)) init 0.8)) ;vendor extension
(jis0213
- (((#x40 #x7e) (#x80 #xfc)) init 1.0))
- )
+ (((#x40 #x7e) (#x80 #xfc)) init 1.0)))
;;;
;;; UTF-8
@@ -225,42 +240,57 @@
(4byte_more
(((#x80 #xbf)) 3byte_more 1.0))
(5byte_more
- (((#x80 #xbf)) 4byte_more 1.0))
- )
+ (((#x80 #xbf)) 4byte_more 1.0)))
;;;
;;; UCS-2LE
;;;
-; (define-dfa ucs2le
-; (init
-; ((#xff) le 1.0)
-; (((#x00 #x7f)) ascii 1.0)
-; (((#x00 #xff)) multi 1.0))
-; (le
-; ((#xfe) init 1.0))
-; (ascii
-; ((#x00) init 1.0))
-; (multi
-; (((#x00 #xff)) init 1.0)))
+(define-dfa ucs2le
+ (init
+ ((#xfe) bom-be 1.0)
+ ((#xff) bom-le 1.0)
+ (((#x00 #xfd)) byte2 1.0))
+ (bom-le
+ (((#x00 #xff)) init 1.0))
+ (bom-be
+ (((#x00 #xfe)) init 1.0)) ;; if be (0xfeff), die.
+ (byte2
+ (((#x00 #xff)) init 1.0)))
;;;
;;; UCS-2BE
;;;
-; (define-dfa ucs2be
-; (init
-; ((#xfe) be 1.0)
-; ((#x00) ascii 1.0)
-; (((#x00 #xff)) multi 1.0))
-; (be
-; ((#xff) init 1.0))
-; (ascii
-; (((#x00 #x7f)) init 1.0))
-; (multi
-; (((#x00 #xff)) init 1.0)))
+(define-dfa ucs2be
+ (init
+ ((#xfe) bom-be 1.0)
+ ((#xff) bom-le 1.0)
+ (((#x00 #xfd)) byte2 1.0))
+ (bom-le
+ (((#x00 #xfd)) init 1.0)
+ ((#xff) init 1.0)) ;; if le (0xfffe), die.
+ (bom-be
+ (((#x00 #xff)) init 1.0))
+ (byte2
+ (((#x00 #xff)) init 1.0)))
+;;;
+;;; UTF-16
+;;;
+(define-dfa utf16
+ (init
+ ((#xfe) bom-be 1.0)
+ ((#xff) bom-le 1.0))
+ (init1
+ (((#x00 #xff)) byte2 1.0))
+ (bom-be
+ ((#xff) init1 1.0))
+ (bom-le
+ ((#xfe) init1 1.0))
+ (byte2
+ (((#x00 #xff)) init1 1.0)))
;;;
-;;; JIS (ISO2022JP)
+;;; ISO2022JP (JIS)
;;;
;; NB: for now, we just check the sequence of <ESC> $ or <ESC> '('.
@@ -269,22 +299,18 @@
((#x1b) esc 1.0)
(((#x00 #x1a) (#x1c #x1f)) init 1.0) ;C0
(((#x20 #x7f)) init 1.0) ;ASCII
- (((#xa1 #xdf)) init 0.7) ;JIS8bit kana
- )
+ (((#xa1 #xdf)) init 0.7)) ;JIS8bit kana
(esc
((#x0d #x0a) init 0.9) ;cancel
((#\( ) esc-paren 1.0)
((#\$ ) esc-$ 1.0)
- ((#\& ) esc-& 1.0)
- )
+ ((#\& ) esc-& 1.0))
(esc-paren
((#\B #\J #\H) init 1.0)
- ((#\I) jis0201kana 0.8)
- )
+ ((#\I) jis0201kana 0.8))
(esc-$
((#\@ #\B) kanji 1.0)
- ((#\( ) esc-$-paren 1.0)
- )
+ ((#\( ) esc-$-paren 1.0))
(esc-$-paren
((#\D #\O #\P) kanji 1.0))
(esc-&
@@ -296,8 +322,7 @@
((#x1b) esc 1.0)
(((#x21 #x7e)) kanji-2 1.0))
(kanji-2
- (((#x21 #x7e)) kanji 1.0))
- )
+ (((#x21 #x7e)) kanji 1.0)) )
;;;
;;; Big5
@@ -306,12 +331,10 @@
(define-dfa big5
;; first byte
(init
- (((#x00 #x7f)) init 1.0) ;ascii
- (((#xa1 #xfe)) 2byte 1.0) ;big5-2byte
- )
+ (((#x00 #x7f)) init 1.0) ;ascii
+ (((#xa1 #xfe)) 2byte 1.0)) ;big5-2byte
(2byte
- (((#x40 #x7e) (#xa1 #xfe)) init 1.0))
- )
+ (((#x40 #x7e) (#xa1 #xfe)) init 1.0)))
;;;
;;; GB2312 (EUC-CN?)
@@ -320,12 +343,10 @@
(define-dfa gb2312
;; first byte
(init
- (((#x00 #x7f)) init 1.0) ;ascii
- (((#xa1 #xfe)) 2byte 1.0) ;gb2312 2byte
- )
+ (((#x00 #x7f)) init 1.0) ;ascii
+ (((#xa1 #xfe)) 2byte 1.0)) ;gb2312 2byte
(2byte
- (((#xa1 #xfe)) init 1.0))
- )
+ (((#xa1 #xfe)) init 1.0)))
;;;
;;; GB18030
@@ -336,8 +357,7 @@
(init
(((#x00 #x80)) init 1.0) ;ascii
(((#x81 #xfe)) 2byte 1.0) ;gb18030 2byte
- (((#x81 #xfe)) 4byte2 1.0) ;gb18030 2byte
- )
+ (((#x81 #xfe)) 4byte2 1.0)) ;gb18030 2byte
(2byte
(((#x40 #x7e) (#x80 #xfe)) init 1.0))
(4byte2
@@ -345,8 +365,7 @@
(4byte3
(((#x81 #xfe)) 4byte4 1.0))
(4byte4
- (((#x30 #x39)) init 1.0))
- )
+ (((#x30 #x39)) init 1.0)) )
;;;
;;; EUC-KR
@@ -356,12 +375,10 @@
;; first byte
(init
(((#x00 #x7f)) init 1.0) ; ASCII range
- (((#xa1 #xfe)) ks1001 1.0) ; KSX 1001
- )
+ (((#xa1 #xfe)) ks1001 1.0)) ; KSX 1001
;; ks x 1001
(ks1001
- (((#xa1 #xfe)) init 1.0))
- )
+ (((#xa1 #xfe)) init 1.0)))
;;;
;;; Johab
@@ -372,12 +389,191 @@
(init
(((#x00 #x7f)) init 1.0) ; ASCII range
(((#x84 #xd3)) jamo51 1.0) ; jamo51
- (((#xd8 #xde) (#xe0 #xf9)) jamo42 0.95) ; jamo42
- )
+ (((#xd8 #xde) (#xe0 #xf9)) jamo42 0.95)) ; jamo42
;; second byte
(jamo51
(((#x41 #x7e) (#x81 #xfe)) init 1.0))
(jamo42
- (((#x31 #x7e) (#x91 #xfe)) init 1.0))
- )
+ (((#x31 #x7e) (#x91 #xfe)) init 1.0)))
+
+
+
+
+
+
+;;;
+;;; arabic
+;;;
+
+(define-dfa iso8859_6
+ (init
+ (((#x00 #x7f)) init 1.0) ;ascii
+ ((#xa0) init 1.0)
+ ((#xa4) init 1.0)
+ ((#xac) init 1.0)
+ ((#xad) init 1.0) ;SHY xxx
+ ((#xbb) init 1.0)
+ ((#xbf) init 1.0)
+ (((#xc1 #xda)) init 1.0)
+ (((#xe0 #xf2)) init 1.0)))
+
+(define-dfa cp1256
+ (init
+ (((#x00 #x7f)) init 1.0) ;ascii
+ (((#x80 #xff)) init 1.0))) ;high bit
+
+
+;;;
+;;; greek
+;;;
+
+(define-dfa iso8859_7
+ (init
+ (((#x00 #x7f)) init 1.0) ;ascii
+ (((#xa0 #xad)) init 1.0)
+ (((#xaf #xd1)) init 1.0)
+ (((#xd3 #xfe)) init 1.0)))
+
+(define-dfa cp1253
+ (init
+ (((#x00 #x7f)) init 1.0) ;ascii
+ ((#x80) init 1.0)
+ (((#x82 #x87)) init 1.0)
+ ((#x89) init 1.0)
+ ((#x8b) init 1.0)
+ (((#x91 #x97)) init 1.0)
+ ((#x99) init 1.0)
+ ((#x9b) init 1.0)
+ (((#xa0 #xa9)) init 1.0)
+ (((#xab #xd1)) init 1.0)
+ (((#xd3 #xfe)) init 1.0)))
+
+;;;
+;;; hebrew
+;;;
+
+(define-dfa iso8859_8
+ (init
+ (((#x00 #x7f)) init 1.0) ;ascii
+ ((#xa0) init 1.0)
+ (((#xa2 #xbe)) init 1.0)
+ (((#xdf #xfa)) init 1.0)
+ (((#xfd #xfe)) init 1.0)))
+
+(define-dfa cp1255
+ (init
+ (((#x00 #x7f)) init 1.0) ;ascii
+ ((#x80) init 1.0)
+ (((#x82 #x89)) init 1.0)
+ ((#x8b) init 1.0)
+ (((#x91 #x99)) init 1.0)
+ ((#x9b) init 1.0)
+ (((#xa0 #xc9)) init 1.0)
+ (((#xcb #xd8)) init 1.0)
+ (((#xe0 #xfa)) init 1.0)
+ (((#xfd #xfe)) init 1.0)))
+
+;;;
+;;; turkish
+;;;
+
+(define-dfa iso8859_9
+ (init
+ (((#x00 #x7f)) init 1.0) ;ascii
+ (((#xa0 #xff)) init 1.0)))
+
+(define-dfa cp1254
+ (init
+ (((#x00 #x7f)) init 1.0) ;ascii
+ ((#x80) init 1.0)
+ (((#x82 #x8c)) init 1.0)
+ (((#x91 #x9c)) init 1.0)
+ (((#x9f #xff)) init 1.0)))
+
+;;;
+;;; russian
+;;;
+
+(define-dfa iso8859_5
+ (init
+ (((#x00 #x7f)) init 1.0) ; ascii
+ (((#xa0 #xff)) init 1.0)))
+
+(define-dfa koi8_r
+ (init
+ (((#x20 #x7f)) init 1.0) ; ascii
+ ((#xa3) init 1.0)
+ ((#xb3) init 1.0)
+ (((#xc0 #xff)) init 1.0)))
+
+(define-dfa koi8_u
+ (init
+ (((#x20 #x7f)) init 1.0) ; ascii
+ (((#xa3 #xa4)) init 1.0)
+ (((#xa6 #xa7)) init 1.0)
+ ((#xad) init 1.0)
+ (((#xb3 #xb4)) init 1.0)
+ (((#xb6 #xb7)) init 1.0)
+ ((#xbd) init 1.0)
+ (((#xc0 #xff)) init 1.0)))
+
+(define-dfa cp866
+ (init
+ (((#x00 #x7f)) init 1.0) ; ascii
+ (((#x80 #xaf)) init 1.0)
+ (((#xe0 #xf7)) init 1.0)))
+
+(define-dfa cp1251
+ (init
+ (((#x00 #x7f)) init 1.0) ; ascii
+ (((#x80 #x81)) init 1.0)
+ ((#x83) init 1.0)
+ ((#x8a) init 1.0)
+ (((#x8c #x90)) init 1.0)
+ ((#x9a) init 1.0)
+ (((#x9c #xa3)) init 1.0)
+ ((#xa5) init 1.0)
+ ((#xa8) init 1.0)
+ ((#xaa) init 1.0)
+ ((#xaf) init 1.0)
+ (((#xb2 #xb4)) init 1.0)
+ ((#xb8) init 1.0)
+ ((#xba) init 1.0)
+ (((#xbc #xff)) init 1.0)))
+
+;;;
+;;; polish
+;;;
+
+(define-dfa iso8859_2
+ (init
+ (((#x20 #x7e)) init 1.0)
+ ((#xa1) init 1.0)
+ ((#xa3) init 1.0)
+ (((#xa5 #xa6)) init 1.0)
+ (((#xa9 #xac)) init 1.0)
+ (((#xae #xaf)) init 1.0)
+ ((#xb1) init 1.0)
+ ((#xb3) init 1.0)
+ (((#xb5 #xb6)) init 1.0)
+ (((#xb9 #xbc)) init 1.0)
+ (((#xbe #xbf)) init 1.0)
+ (((#xc0 #xd6)) init 1.0)
+ (((#xd8 #xf6)) init 1.0)
+ (((#xf8 #xfe)) init 1.0)))
+
+(define-dfa cp1250
+ (init
+ (((#x20 #x7e)) init 1.0)
+ ((#xa3) init 1.0)
+ ((#xa5) init 1.0)
+ ((#xaa) init 1.0)
+ ((#xaf) init 1.0)
+ ((#xb3) init 1.0)
+ (((#xb9 #xba)) init 1.0)
+ ((#xbc) init 1.0)
+ (((#xbe #xbf)) init 1.0)
+ (((#xc0 #xd6)) init 1.0)
+ (((#xd8 #xf6)) init 1.0)
+ (((#xf8 #xfe)) init 1.0)))
diff --git a/src/libguess/guess_tab.c b/src/libguess/guess_tab.c
index 02941b5..a260dff 100644
--- a/src/libguess/guess_tab.c
+++ b/src/libguess/guess_tab.c
@@ -1,6 +1,8 @@
/* State transition table for character code guessing */
/* This file is automatically generated by guess.scm */
+#include "dfa.h"
+
static signed char guess_eucj_st[][256] = {
{ /* state init */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -259,6 +261,277 @@ static guess_arc guess_utf8_ar[] = {
{ 4, 1.0 }, /* 5byte_more -> 4byte_more */
};
+static signed char guess_ucs2le_st[][256] = {
+ { /* state init */
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1,
+ },
+ { /* state bom-le */
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ },
+ { /* state bom-be */
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -1,
+ },
+ { /* state byte2 */
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ },
+};
+
+static guess_arc guess_ucs2le_ar[] = {
+ { 2, 1.0 }, /* init -> bom-be */
+ { 1, 1.0 }, /* init -> bom-le */
+ { 3, 1.0 }, /* init -> byte2 */
+ { 0, 1.0 }, /* bom-le -> init */
+ { 0, 1.0 }, /* bom-be -> init */
+ { 0, 1.0 }, /* byte2 -> init */
+};
+
+static signed char guess_ucs2be_st[][256] = {
+ { /* state init */
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1,
+ },
+ { /* state bom-le */
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1, 4,
+ },
+ { /* state bom-be */
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ },
+ { /* state byte2 */
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ },
+};
+
+static guess_arc guess_ucs2be_ar[] = {
+ { 2, 1.0 }, /* init -> bom-be */
+ { 1, 1.0 }, /* init -> bom-le */
+ { 3, 1.0 }, /* init -> byte2 */
+ { 0, 1.0 }, /* bom-le -> init */
+ { 0, 1.0 }, /* bom-le -> init */
+ { 0, 1.0 }, /* bom-be -> init */
+ { 0, 1.0 }, /* byte2 -> init */
+};
+
+static signed char guess_utf16_st[][256] = {
+ { /* state init */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1,
+ },
+ { /* state init1 */
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ },
+ { /* state bom-be */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
+ },
+ { /* state bom-le */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1,
+ },
+ { /* state byte2 */
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ },
+};
+
+static guess_arc guess_utf16_ar[] = {
+ { 2, 1.0 }, /* init -> bom-be */
+ { 3, 1.0 }, /* init -> bom-le */
+ { 4, 1.0 }, /* init1 -> byte2 */
+ { 1, 1.0 }, /* bom-be -> init1 */
+ { 1, 1.0 }, /* bom-le -> init1 */
+ { 1, 1.0 }, /* byte2 -> init1 */
+};
+
static signed char guess_big5_st[][256] = {
{ /* state init */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -562,3 +835,469 @@ static guess_arc guess_johab_ar[] = {
{ 0, 1.0 }, /* jamo42 -> init */
};
+static signed char guess_iso8859_6_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 3, 4, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, 6,
+ -1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, -1, -1, -1, -1, -1,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ },
+};
+
+static guess_arc guess_iso8859_6_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_cp1256_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ },
+};
+
+static guess_arc guess_cp1256_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_iso8859_7_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, -1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1,
+ },
+};
+
+static guess_arc guess_iso8859_7_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_cp1253_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, -1, 2, 2, 2, 2, 2, 2, -1, 3, -1, 4, -1, -1, -1, -1,
+ -1, 5, 5, 5, 5, 5, 5, 5, -1, 6, -1, 7, -1, -1, -1, -1,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, -1, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, -1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -1,
+ },
+};
+
+static guess_arc guess_cp1253_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_iso8859_8_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 1, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1, -1, 4, 4, -1,
+ },
+};
+
+static guess_arc guess_iso8859_8_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_cp1255_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, -1, 2, 2, 2, 2, 2, 2, 2, 2, -1, 3, -1, -1, -1, -1,
+ -1, 4, 4, 4, 4, 4, 4, 4, 4, 4, -1, 5, -1, -1, -1, -1,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -1, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, -1, -1, 9, 9, -1,
+ },
+};
+
+static guess_arc guess_cp1255_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_iso8859_9_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ },
+};
+
+static guess_arc guess_iso8859_9_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_cp1254_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, -1,
+ -1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1, -1, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ },
+};
+
+static guess_arc guess_cp1254_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_iso8859_5_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ },
+};
+
+static guess_arc guess_iso8859_5_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_koi8_r_st[][256] = {
+ { /* state init */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ },
+};
+
+static guess_arc guess_koi8_r_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_koi8_u_st[][256] = {
+ { /* state init */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1, 1, -1, 2, 2, -1, -1, -1, -1, -1, 3, -1, -1,
+ -1, -1, -1, 4, 4, -1, 5, 5, -1, -1, -1, -1, -1, 6, -1, -1,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ },
+};
+
+static guess_arc guess_koi8_u_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_cp866_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1,
+ },
+};
+
+static guess_arc guess_cp866_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_cp1251_st[][256] = {
+ { /* state init */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, -1, 2, -1, -1, -1, -1, -1, -1, 3, -1, 4, 4, 4, 4,
+ 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, 6, 6, 6, 6,
+ 6, 6, 6, 6, -1, 7, -1, -1, 8, -1, 9, -1, -1, -1, -1, 10,
+ -1, -1, 11, 11, 11, -1, -1, -1, 12, -1, 13, -1, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ },
+};
+
+static guess_arc guess_cp1251_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_iso8859_2_st[][256] = {
+ { /* state init */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 1, -1, 2, -1, 3, 3, -1, -1, 4, 4, 4, 4, -1, 5, 5,
+ -1, 6, -1, 7, -1, 8, 8, -1, -1, 9, 9, 9, 9, -1, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, -1, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, -1, 13, 13, 13, 13, 13, 13, 13, -1,
+ },
+};
+
+static guess_arc guess_iso8859_2_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
+static signed char guess_cp1250_st[][256] = {
+ { /* state init */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1, -1, 2, -1, -1, -1, -1, 3, -1, -1, -1, -1, 4,
+ -1, -1, -1, 5, -1, -1, -1, -1, -1, 6, 6, -1, 7, -1, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, -1, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, -1, 11, 11, 11, 11, 11, 11, 11, -1,
+ },
+};
+
+static guess_arc guess_cp1250_ar[] = {
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+ { 0, 1.0 }, /* init -> init */
+};
+
diff --git a/src/libguess/hebrew_impl.c b/src/libguess/hebrew_impl.c
index b3d5327..8e45ed7 100644
--- a/src/libguess/hebrew_impl.c
+++ b/src/libguess/hebrew_impl.c
@@ -1,23 +1,56 @@
-const char *_guess_hw(const unsigned char *ptr, int size)
+#include "libguess.h"
+#include "dfa.h"
+#include "guess_tab.c"
+
+/* precedence order */
+#define ORDER &utf8, &iso8859_8, &cp1255
+
+/* common */
+const char *guess_hw(const char *buf, int buflen)
{
int i;
+ const char *rv = NULL;
- for (i = 0; i < size; i++)
- {
- if (ptr[i] == 0x80 || (ptr[i] >= 0x82 && ptr[i] <= 0x89) || ptr[i] == 0x8B ||
- (ptr[i] >= 0x91 && ptr[i] <= 0x99) || ptr[i] == 0x9B || ptr[i] == 0xA1 ||
- (ptr[i] >= 0xBF && ptr[i] <= 0xC9) ||
- (ptr[i] >= 0xCB && ptr[i] <= 0xD8))
- return "CP1255";
+ /* encodings */
+ guess_dfa cp1255 = DFA_INIT(guess_cp1255_st, guess_cp1255_ar, "CP1255");
+ guess_dfa iso8859_8 = DFA_INIT(guess_iso8859_8_st, guess_iso8859_8_ar, "ISO-8859-8-I");
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
- if (ptr[i] == 0xDF)
- return "ISO-8859-8-I";
- }
+ guess_dfa *top = NULL;
+ guess_dfa *order[] = { ORDER, NULL };
- return "ISO-8859-8-I";
-}
+ for (i = 0; i < buflen; i++) {
+ int c = (unsigned char) buf[i];
-const char *guess_hw(const char *ptr, int size)
-{
- return _guess_hw((const unsigned char *) ptr, size);
+ /* special treatment of BOM */
+ if (i == 0 && c == 0xff) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xfe)
+ return UCS_2LE;
+ }
+ }
+ if (i == 0 && c == 0xfe) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xff)
+ return UCS_2BE;
+ }
+ }
+
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
+
+ if (dfa_none(order)) {
+ /* we ran out the possibilities */
+ return NULL;
+ }
+ }
+
+ top = dfa_top(order);
+ if (top)
+ return top->name;
+ else
+ return NULL;
}
diff --git a/src/libguess/libguess.h b/src/libguess/libguess.h
index 1528f0a..d7755f4 100644
--- a/src/libguess/libguess.h
+++ b/src/libguess/libguess.h
@@ -5,11 +5,11 @@
/*
* Copyright (c) 2000-2003 Shiro Kawai, All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
@@ -66,8 +66,5 @@ int dfa_validate_utf8(const char *buf, int buflen);
#define GUESS_REGION_PL "polish"
const char *guess_encoding(const char *buf, int buflen, const char *lang);
-void guess_init(void);
-void guess_impl_register(const char *name,
- const char *(impl)(const char *buf, int buflen));
#endif
diff --git a/src/libguess/polish_impl.c b/src/libguess/polish_impl.c
index b72cfcb..d194a64 100644
--- a/src/libguess/polish_impl.c
+++ b/src/libguess/polish_impl.c
@@ -1,53 +1,56 @@
-/*
- * Copyright 2010 Michał Lipski <tallica@o2.pl>
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-static const char *_guess_pl(const unsigned char *ptr, int size)
+#include "libguess.h"
+#include "dfa.h"
+#include "guess_tab.c"
+
+/* precedence order */
+#define ORDER &utf8, &cp1250, &iso8859_2
+
+/* common */
+const char *guess_pl(const char *buf, int buflen)
{
int i;
+ const char *rv = NULL;
- for (i = 0; i < size; i++)
- {
- if (ptr[i] == 0xB9 || //ą
- ptr[i] == 0xE6 || //ć
- ptr[i] == 0xEA || //ę
- ptr[i] == 0xB3 || //ł
- ptr[i] == 0xF1 || //ń
- ptr[i] == 0xF3 || //ó
- ptr[i] == 0x9C || //ś
- ptr[i] == 0x9F || //ź
- ptr[i] == 0xBF || //ż
- ptr[i] == 0xA5 || //Ą
- ptr[i] == 0xC6 || //Ć
- ptr[i] == 0xCA || //Ę
- ptr[i] == 0xA3 || //Ł
- ptr[i] == 0xD1 || //Ń
- ptr[i] == 0xD3 || //Ó
- ptr[i] == 0x8C || //Ś
- ptr[i] == 0x8F || //Ź
- ptr[i] == 0xAF) //Ż
-
- return "CP1250";
- }
+ /* encodings */
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
+ guess_dfa cp1250 = DFA_INIT(guess_cp1250_st, guess_cp1250_ar, "CP1250");
+ guess_dfa iso8859_2 = DFA_INIT(guess_iso8859_2_st, guess_iso8859_2_ar, "ISO-8859-2");
- return "ISO-8859-2";
-}
+ guess_dfa *top = NULL;
+ guess_dfa *order[] = { ORDER, NULL };
-const char *guess_pl(const char *ptr, int size)
-{
- return _guess_pl((const unsigned char *) ptr, size);
+ for (i = 0; i < buflen; i++) {
+ int c = (unsigned char) buf[i];
+
+ /* special treatment of BOM */
+ if (i == 0 && c == 0xff) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xfe)
+ return UCS_2LE;
+ }
+ }
+ if (i == 0 && c == 0xfe) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xff)
+ return UCS_2BE;
+ }
+ }
+
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
+
+ if (dfa_none(order)) {
+ /* we ran out the possibilities */
+ return NULL;
+ }
+ }
+
+ top = dfa_top(order);
+ if (top)
+ return top->name;
+ else
+ return NULL;
}
diff --git a/src/libguess/russian_impl.c b/src/libguess/russian_impl.c
index 5f329a2..487c4d4 100644
--- a/src/libguess/russian_impl.c
+++ b/src/libguess/russian_impl.c
@@ -1,218 +1,60 @@
-/*
- * This code is derivitive of librcd.
- * No copyright notice was found.
- */
-
-#include <stdio.h>
-#include <string.h>
-
#include "libguess.h"
+#include "dfa.h"
+#include "guess_tab.c"
-#define NF_VALUE -2
-#define max(a,b) ((a>b)?a:b)
-#define min(a,b) ((a<b)?a:b)
-#define bit(i) (1<<i)
-
-typedef struct lng_stat2 {
- unsigned char a;
- unsigned char b;
- double rate;
- double srate;
- double erate;
-} lng_stat2;
-
-#include "russian_tab.c"
-
+/* precedence order */
+#define ORDER &utf8, &cp1251, &koi8_u, &koi8_r, &cp866, &iso8859_2, &iso8859_5
-static int end_symbol(char ch) {
- if (ch=='\r'||ch=='\n'||ch==0||ch==' '||ch=='\t'||ch==','||ch=='.'||ch=='!'||ch=='?'||ch==';'||ch=='-'||ch==':'||ch=='"'||ch=='\''||ch==')') return 1;
- return 0;
-}
-
-static int start_symbol(char ch) {
- if ((ch=='\t')||ch=='\r'||ch=='\n'||(ch==' ')||(ch=='(')||(ch=='"')||(ch=='\'')) return 1;
- return 0;
-}
-
-typedef const struct lng_stat2 *lng_stat2_ptr;
-
-static void bfind(const unsigned char *a, lng_stat2_ptr *w, lng_stat2_ptr *k, lng_stat2_ptr *al) {
- const struct lng_stat2 *winptr, *koiptr,*altptr;
- int ki,wi,ai,d,ws=0,ks=0,as=0;
- d=npow2>>1;
- wi=d;
- ki=d;
- ai=d;
- winptr=0;
- koiptr=0;
- altptr=0;
- do{
- d>>=1;
-
- if(!ws){
- if (wi>indexes2) wi-=d;
- else {
- winptr=enc_win+wi-1;
- if(a[0]==winptr->a){
- if(a[1]==winptr->b){
- ws=1;
- }else if(a[1]<winptr->b){
- wi-=d;
- }else{ //b>win[wi].b
- wi+=d;
- }
- }else if(a[0]<winptr->a){
- wi-=d;
- }else{ //a>win[wi].a
- wi+=d;
- }
- }
- }
- if(!ks){
- if (ki>indexes2) ki-=d;
- else {
- koiptr=enc_koi+ki-1;
- if(a[0]==koiptr->a){
- if(a[1]==koiptr->b){
- ks=1;
- }else if(a[1]<koiptr->b){
- ki-=d;
- }else{ //b>win[wi].b
- ki+=d;
- }
- }else if(a[0]<koiptr->a){
- ki-=d;
- }else{ //a>win[wi].a
- ki+=d;
+/* common */
+const char *guess_ru(const char *buf, int buflen)
+{
+ int i;
+ const char *rv = NULL;
+
+ /* encodings */
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
+ guess_dfa cp1251 = DFA_INIT(guess_cp1251_st, guess_cp1251_ar, "CP1251");
+ guess_dfa cp866 = DFA_INIT(guess_cp866_st, guess_cp866_ar, "CP866");
+ guess_dfa koi8_u = DFA_INIT(guess_koi8_u_st, guess_koi8_u_ar, "KOI8-U");
+ guess_dfa koi8_r = DFA_INIT(guess_koi8_r_st, guess_koi8_r_ar, "KOI8-R");
+ guess_dfa iso8859_2 = DFA_INIT(guess_iso8859_2_st, guess_iso8859_2_ar, "ISO-8859-2");
+ guess_dfa iso8859_5 = DFA_INIT(guess_iso8859_5_st, guess_iso8859_5_ar, "ISO-8859-5");
+
+ guess_dfa *top = NULL;
+ guess_dfa *order[] = { ORDER, NULL };
+
+ for (i = 0; i < buflen; i++) {
+ int c = (unsigned char) buf[i];
+
+ /* special treatment of BOM */
+ if (i == 0 && c == 0xff) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xfe)
+ return UCS_2LE;
+ }
}
- }
- }
- if(!as){
- if (ai>indexes2) ai-=d;
- else {
- altptr=enc_alt+ai-1;
- if(a[0]==altptr->a){
- if(a[1]==altptr->b){
- as=1;
- }else if(a[1]<altptr->b){
- ai-=d;
- }else{ //b>win[wi].b
- ai+=d;
- }
- }else if(a[0]<altptr->a){
- ai-=d;
- }else{ //a>win[wi].a
- ai+=d;
+ if (i == 0 && c == 0xfe) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xff)
+ return UCS_2BE;
+ }
}
- }
- }
- }while(d);
- if (ws) *w=winptr;
- else *w=NULL;
- if (ks) *k=koiptr;
- else *k=NULL;
- if (as) *al=altptr;
- else *al=NULL;
-}
-static double calculate(double s, double m, double e) {
- return s+m+e;
-}
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
-static const char *is_win_charset2(const unsigned char *txt, int len){
- const struct lng_stat2 *winptr, *koiptr,*altptr;
- double winstep,koistep,altstep,winestep,koiestep,altestep,winsstep,koisstep,altsstep;
- double winstat=0,koistat=0,altstat=0,winestat=0,koiestat=0,altestat=0,winsstat=0,koisstat=0,altsstat=0;
- long j;
-
-#ifdef _AUTO_DEBUG
- fprintf(stderr,"Word: %s\n",txt);
-#endif
- for(j=0;j<len-1;j++){
- //skip bottom half of table
- if(txt[j]<128 || txt[j+1]<128) continue;
-#ifdef _AUTO_DEBUG
- fprintf(stderr,"Pair: %c%c",txt[j],txt[j+1]);
-#endif
- bfind(txt+j,&winptr,&koiptr,&altptr);
-
- if ((j==0)||(start_symbol(txt[j-1]))) {
- if (winptr) winsstep=winptr->srate;
- else winsstep=NF_VALUE;
- if (koiptr) koisstep=koiptr->srate;
- else koisstep=NF_VALUE;
- if (altptr) altsstep=altptr->srate;
- else altsstep=NF_VALUE;
- winestep=0;
- koiestep=0;
- altestep=0;
- winstep=0;
- koistep=0;
- altstep=0;
-#ifdef _AUTO_DEBUG
- fprintf(stderr,", Win %lf, Koi %lf, Alt: %lf\n",winsstep,koisstep,altsstep);
-#endif
- } else if ((j==len-2)||(end_symbol(txt[j+2]))) {
- if (winptr) winestep=winptr->erate;
- else winestep=NF_VALUE;
- if (koiptr) koiestep=koiptr->erate;
- else koiestep=NF_VALUE;
- if (altptr) altestep=altptr->erate;
- else altestep=NF_VALUE;
- winsstep=0;
- koisstep=0;
- altsstep=0;
- winstep=0;
- koistep=0;
- altstep=0;
-#ifdef _AUTO_DEBUG
- fprintf(stderr,", Win %lf, Koi %lf, Alt %lf\n",winestep,koiestep,altestep);
-#endif
- } else {
- if (winptr) winstep=winptr->rate;
- else winstep=NF_VALUE;
- if (koiptr) koistep=koiptr->rate;
- else koistep=NF_VALUE;
- if (altptr) altstep=altptr->rate;
- else altstep=NF_VALUE;
- winsstep=0;
- winestep=0;
- koisstep=0;
- koiestep=0;
- altsstep=0;
- altestep=0;
-#ifdef _AUTO_DEBUG
- fprintf(stderr,", Win %lf, Koi %lf, Alt %lf\n",winstep,koistep,altstep);
-#endif
+ if (dfa_none(order)) {
+ /* we ran out the possibilities */
+ return NULL;
+ }
}
-
- winstat+=winstep;
- koistat+=koistep;
- altstat+=altstep;
- winsstat+=winsstep;
- koisstat+=koisstep;
- altsstat+=altsstep;
- winestat+=winestep;
- koiestat+=koiestep;
- altestat+=altestep;
- }
-
-#ifdef _AUTO_DEBUG
- fprintf(stderr,"Start. Win: %lf, Koi: %lf, Alt: %lf\n",winsstat,koisstat,altsstat);
- fprintf(stderr,"Middle. Win: %lf, Koi: %lf, Alt: %lf\n",winstat,koistat,altstat);
- fprintf(stderr,"End. Win: %lf, Koi: %lf, Alt: %lf\n",winestat,koiestat,altestat);
- fprintf(stderr,"Final. Win: %lf, Koi: %lf, Alt: %lf\n",calculate(winsstat,winstat,winestat),calculate(koisstat,koistat,koiestat),calculate(altsstat,altstat,altestat));
-#endif
- if ((calculate(altsstat,altstat,altestat)>calculate(koisstat,koistat,koiestat))&&(calculate(altsstat,altstat,altestat)>calculate(winsstat,winstat,winestat))) return "CP866";
- if (calculate(koisstat,koistat,koiestat)>calculate(winsstat,winstat,winestat)) return "KOI8-R";
- return "CP1251";
-}
-
-const char *guess_ru(const char *buf, int len)
-{
- if (dfa_validate_utf8(buf, len))
- return "UTF-8";
- return is_win_charset2((const unsigned char *) buf, len);
+ top = dfa_top(order);
+ if (top)
+ return top->name;
+ else
+ return NULL;
}
-
diff --git a/src/libguess/russian_tab.c b/src/libguess/russian_tab.c
deleted file mode 100644
index 6b9fd10..0000000
--- a/src/libguess/russian_tab.c
+++ /dev/null
@@ -1,899 +0,0 @@
-static const lng_stat2 enc_koi[]={
-{'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.544068,0.778151,0.698970},
-{'','',1.949390,-2.000000,0.698970}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, {'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030},
-{'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',2.187521,0.698970,-2.000000}, {'','',0.778151,0.698970,0.477121}, {'','',1.505150,-2.000000,0.477121}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',2.603144,-2.000000,1.204120},
-{'','',3.235528,-2.000000,3.228144}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',2.884795,1.301030,0.602060}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',2.269513,1.973128,2.103804}, {'','',3.408749,2.796574,1.973128},
-{'','',3.176959,2.136721,3.241546}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000},
-{'','',3.446848,1.863323,1.278754}, {'','',2.975432,-2.000000,3.740994}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',3.684756,1.591065,1.612784}, {'','',3.977312,1.838849,2.736397},
-{'','',3.967501,1.698970,3.025715}, {'','',3.457125,-2.000000,2.478566}, {'','',2.012837,-2.000000,-2.000000}, {'','',2.847573,-2.000000,1.322219}, {'','',3.496653,-2.000000,1.939519}, {'','',0.778151,1.041393,-2.000000}, {'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000},
-{'','',1.672098,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',0.954243,-2.000000,-2.000000}, {'','',2.064458,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, {'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000},
-{'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',2.448706,-2.000000,3.211654}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620},
-{'','',2.071882,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',2.068186,1.724276,1.113943}, {'','',3.068186,3.948217,3.158965}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000},
-{'','',1.568202,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',1.113943,-2.000000,0.301030}, {'','',3.072985,1.939519,3.070038}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.966142,2.863323,2.898176}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000},
-{'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',-2.000000,0.477121,0.778151}, {'','',1.568202,0.477121,2.597695}, {'','',1.662758,2.060698,0.000000},
-{'','',0.602060,-2.000000,0.845098}, {'','',2.093422,1.518514,2.846955}, {'','',2.149219,2.079181,0.954243}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000},
-{'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',2.678518,2.453318,2.550228}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822},
-{'','',1.716003,3.116940,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',2.887054,1.579784,3.237795}, {'','',2.993436,2.401401,2.866878}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000},
-{'','',1.462398,-2.000000,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',2.627366,0.301030,3.066326}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',1.819544,0.000000,1.732394},
-{'','',3.832445,3.449324,2.363612}, {'','',2.981366,2.565848,2.936011}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454},
-{'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',2.841359,-2.000000,2.127105}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',3.389166,2.158362,2.212188},
-{'','',3.679610,2.413300,2.906335}, {'','',3.492621,1.716003,3.151370}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',3.590396,-2.000000,1.799341}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.105169,-2.000000,-2.000000},
-{'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030},
-{'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',2.477121,0.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',-2.000000,1.462398,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222},
-{'','',0.301030,-2.000000,-2.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, {'','',0.301030,0.000000,0.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000},
-{'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',1.000000,1.579784,-2.000000},
-{'','',-2.000000,1.342423,-2.000000}, {'','',1.397940,0.845098,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.181844,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000},
-{'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',2.630428,2.725912,-2.000000}, {'','',-2.000000,0.000000,-2.000000},
-{'','',1.255273,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, {'','',3.406881,1.079181,2.103804},
-{'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.743510,-2.000000,1.812913}, {'','',3.038223,2.281033,2.232996}, {'','',3.008600,2.872156,3.443263}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107},
-{'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',2.866878,-2.000000,3.425208}, {'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398},
-{'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.949878,1.146128,0.778151}, {'','',3.806994,2.618048,2.845718}, {'','',-2.000000,-2.000000,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.402089,3.567497,2.037426}, {'','',3.360593,1.568202,1.079181},
-{'','',1.079181,-2.000000,-2.000000}, {'','',2.721811,1.724276,1.518514}, {'','',3.547405,-2.000000,2.677607}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, {'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',0.301030,-2.000000,0.477121},
-{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000},
-{'','',-2.000000,-2.000000,0.301030}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.792392,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.964919,3.984122,3.731830}, {'','',1.886491,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.819544,-2.000000,-2.000000},
-{'','',0.301030,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156},
-{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.547775,2.082785,0.477121},
-{'','',1.732394,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',4.028083,2.858537,3.912966},
-{'','',1.732394,1.602060,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',0.903090,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',0.698970,-2.000000,0.477121}, {'','',3.966892,3.456366,4.024568},
-{'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.571592,1.690196,3.195069}, {'','',3.772835,-2.000000,-2.000000},
-{'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',2.894870,1.477121,-2.000000}, {'','',2.017033,-2.000000,-2.000000}, {'','',4.066214,1.732394,3.082785}, {'','',3.395501,1.857332,2.587711}, {'','',1.924279,-2.000000,1.176091}, {'','',1.505150,-2.000000,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.690196,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679},
-{'','',1.322219,-2.000000,0.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000},
-{'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.530200,2.227887,2.985875}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.531479,-2.000000,-2.000000},
-{'','',1.991226,-2.000000,2.130334}, {'','',3.191171,3.276462,2.357935}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',2.315970,0.954243,2.600973},
-{'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',1.000000,-2.000000,-2.000000},
-{'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.719331,1.505150,3.569374},
-{'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',3.227887,0.301030,3.521269}, {'','',3.922622,1.875061,3.260071},
-{'','',1.778151,-2.000000,0.477121}, {'','',1.414973,-2.000000,-2.000000}, {'','',0.000000,0.477121,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',2.866287,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',1.146128,0.000000,0.602060},
-{'','',3.844664,3.655810,2.542825}, {'','',2.514548,1.732394,-2.000000}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',2.885361,1.748188,1.255273}, {'','',4.169674,2.836957,2.929419}, {'','',3.269980,2.445604,2.318063}, {'','',3.363424,0.000000,2.735599},
-{'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',3.244772,-2.000000,2.688420},
-{'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',3.853941,2.320146,1.908485}, {'','',4.293738,1.707570,3.375846}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.539452,2.184691,1.579784},
-{'','',3.478278,2.245513,1.556303}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.756636,2.149219,0.000000}, {'','',3.779813,3.175222,0.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',3.467312,3.637189,2.209515}, {'','',2.387390,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000},
-{'','',3.575072,3.529302,1.819544}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226},
-{'','',2.863917,0.000000,0.301030}, {'','',2.786041,2.619093,0.903090}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',1.826075,2.093422,1.612784}, {'','',2.907949,2.474216,1.944483},
-{'','',0.778151,1.176091,-2.000000}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',1.944483,-2.000000,1.707570},
-{'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.588832,0.845098,1.000000}, {'','',1.913814,0.000000,2.650308}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275},
-{'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',1.826075,-2.000000,2.336460}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000},
-{'','',2.716838,-2.000000,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',3.467904,2.214844,0.477121}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.527630,0.000000,1.954243}, {'','',2.247973,1.113943,2.540329}, {'','',4.153266,3.863620,3.359835},
-{'','',2.582063,-2.000000,1.000000}, {'','',2.240549,-2.000000,-2.000000}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',2.187521,-2.000000,2.315970}, {'','',2.633468,-2.000000,1.812913}, {'','',2.423246,-2.000000,2.079181}, {'','',4.150449,2.653213,3.242293},
-{'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',3.447778,2.491362,2.760422}, {'','',2.164353,-2.000000,-2.000000},
-{'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',3.033021,1.342423,0.301030}, {'','',3.130977,1.959041,-2.000000}, {'','',2.853090,0.000000,3.227115}, {'','',3.478566,2.406540,2.940018}, {'','',2.193125,0.000000,0.477121},
-{'','',2.892651,-2.000000,1.000000}, {'','',0.778151,0.301030,0.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',2.527630,-2.000000,0.778151}, {'','',1.913814,2.414973,2.413300}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',1.939519,1.591065,-2.000000},
-{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',1.000000,1.763428,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',2.693727,2.298853,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754},
-{'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',3.035830,1.278754,4.148757}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545},
-{'','',2.924279,3.172311,2.450249}, {'','',-2.000000,2.004321,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',2.944483,-2.000000,3.992465}, {'','',2.578639,2.701568,2.563481}, {'','',-2.000000,1.591065,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',-2.000000,3.283527,-2.000000},
-{'','',0.477121,-2.000000,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',1.968483,1.845098,1.079181}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000},
-{'','',3.929266,3.701654,3.580126}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060},
-{'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',2.966142,2.569374,2.804139}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785},
-{'','',0.301030,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',3.614686,1.977724,4.250152}, {'','',3.296007,3.418301,2.948413}, {'','',1.301030,-2.000000,-2.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',2.705864,-2.000000,0.000000},
-{'','',1.431364,-2.000000,0.000000}, {'','',2.584331,1.518514,3.410440}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',1.176091,1.361728,-2.000000}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.121231,-2.000000,1.397940},
-{'','',3.296884,2.769377,3.048053}, {'','',2.843855,2.580925,2.530200}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498},
-{'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',1.806180,1.255273,1.838849}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.366983,3.468938,1.919078},
-{'','',2.942008,2.998695,2.117271}, {'','',2.585461,2.642465,1.579784}, {'','',3.348500,2.309630,1.819544}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.998695,1.146128,0.000000}, {'','',3.448242,2.468347,1.301030}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.521661,2.713491,2.460898},
-{'','',2.230449,0.477121,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.204120,1.255273,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000},
-{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',1.591065,0.698970,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',1.812913,1.431364,-2.000000},
-{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',2.361728,1.230449,-2.000000}, {'','',-2.000000,2.017033,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000},
-{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.812913,1.653213,1.113943}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000},
-{'','',3.110253,1.681241,2.832509}, {'','',-2.000000,0.903090,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.396199,1.477121,2.558709}, {'','',3.355068,3.777717,2.657056}, {'','',1.591065,3.207096,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',0.477121,1.857332,-2.000000},
-{'','',1.342423,0.602060,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.484300,-2.000000,0.477121}, {'','',2.539076,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, {'','',3.015779,-2.000000,2.685742},
-{'','',1.633468,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000},
-{'','',1.845098,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',2.612784,-2.000000,2.849419}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.685742,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000},
-{'','',0.698970,-2.000000,-2.000000}, {'','',1.602060,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, {'','',2.509203,-2.000000,0.301030},
-{'','',2.816241,0.000000,3.393224}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, {'','',0.000000,-2.000000,0.000000},
-{'','',2.677607,-2.000000,-2.000000}, {'','',1.653213,-2.000000,0.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.149219,-2.000000,0.698970}, {'','',3.412124,-2.000000,1.812913},
-{'','',2.315970,-2.000000,0.301030}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',2.858537,-2.000000,1.845098}, {'','',0.602060,-2.000000,2.361728}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',1.000000,-2.000000,-2.000000},
-{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',3.019532,-2.000000,1.255273}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, {'','',3.494711,3.455454,0.477121},
-{'','',3.147985,2.626340,1.857332}, {'','',2.797268,0.903090,2.796574}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',2.359835,-2.000000,-2.000000}, {'','',3.361161,2.567026,0.301030},
-{'','',2.257679,-2.000000,3.261263}, {'','',2.983626,0.903090,2.212188}, {'','',1.755875,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081},
-{'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,-2.000000,0.000000}, {'','',3.643749,2.823474,3.224792}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000},
-{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',1.176091,2.017033,-2.000000},
-{'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.477121,1.255273,-2.000000}, {'','',0.301030,1.662758,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.000000,2.056905,0.903090},
-{'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664}, {'','',0.000000,1.113943,-2.000000},
-{'','',2.214844,3.899437,1.397940}, {'','',-2.000000,1.204120,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.000000,1.113943,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, {'','',0.301030,0.000000,-2.000000},
-{'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.255273,-2.000000,1.903090},
-{'','',3.780389,2.989450,2.786751}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000},
-{'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.698970,0.477121,-2.000000}, {'','',2.475671,2.071882,2.809560},
-{'','',2.752048,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000},
-{'','',1.230449,-2.000000,-2.000000}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.544068,0.778151,0.698970}, {'','',1.949390,-2.000000,0.698970}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394},
-{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',2.187521,0.698970,-2.000000},
-{'','',0.778151,0.698970,0.477121}, {'','',1.505150,-2.000000,0.477121}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000},
-{'','',1.230449,-2.000000,-2.000000}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.544068,0.778151,0.698970}, {'','',1.949390,-2.000000,0.698970}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394},
-{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',2.187521,0.698970,-2.000000},
-{'','',0.778151,0.698970,0.477121}, {'','',1.505150,-2.000000,0.477121}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',3.235528,-2.000000,3.228144}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728},
-{'','',2.884795,1.301030,0.602060}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',2.269513,1.973128,2.103804}, {'','',3.408749,2.796574,1.973128}, {'','',3.176959,2.136721,3.241546}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672},
-{'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',2.975432,-2.000000,3.740994}, {'','',3.877717,2.579784,2.348305},
-{'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',3.684756,1.591065,1.612784}, {'','',3.977312,1.838849,2.736397}, {'','',3.967501,1.698970,3.025715}, {'','',3.457125,-2.000000,2.478566}, {'','',2.012837,-2.000000,-2.000000},
-{'','',2.847573,-2.000000,1.322219}, {'','',3.496653,-2.000000,1.939519}, {'','',3.235528,-2.000000,3.228144}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',2.884795,1.301030,0.602060}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292},
-{'','',2.269513,1.973128,2.103804}, {'','',3.408749,2.796574,1.973128}, {'','',3.176959,2.136721,3.241546}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023},
-{'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',2.975432,-2.000000,3.740994}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243},
-{'','',3.684756,1.591065,1.612784}, {'','',3.977312,1.838849,2.736397}, {'','',3.967501,1.698970,3.025715}, {'','',3.457125,-2.000000,2.478566}, {'','',2.012837,-2.000000,-2.000000}, {'','',2.847573,-2.000000,1.322219}, {'','',3.496653,-2.000000,1.939519}, {'','',0.778151,1.041393,-2.000000},
-{'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',0.954243,-2.000000,-2.000000}, {'','',2.064458,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060},
-{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',2.448706,-2.000000,3.211654}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030},
-{'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620}, {'','',2.071882,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',2.068186,1.724276,1.113943}, {'','',3.068186,3.948217,3.158965}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000},
-{'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',0.954243,-2.000000,-2.000000}, {'','',2.064458,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, {'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000},
-{'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',2.448706,-2.000000,3.211654}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620}, {'','',2.071882,-2.000000,-2.000000},
-{'','',2.123852,-2.000000,-2.000000}, {'','',2.068186,1.724276,1.113943}, {'','',3.068186,3.948217,3.158965}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000},
-{'','',2.625312,-2.000000,-2.000000}, {'','',1.113943,-2.000000,0.301030}, {'','',3.072985,1.939519,3.070038}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.966142,2.863323,2.898176}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',2.882525,1.785330,0.954243},
-{'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',-2.000000,0.477121,0.778151}, {'','',1.568202,0.477121,2.597695}, {'','',1.662758,2.060698,0.000000}, {'','',0.602060,-2.000000,0.845098},
-{'','',2.093422,1.518514,2.846955}, {'','',1.113943,-2.000000,0.301030}, {'','',3.072985,1.939519,3.070038}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.966142,2.863323,2.898176}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',2.882525,1.785330,0.954243},
-{'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',-2.000000,0.477121,0.778151}, {'','',1.568202,0.477121,2.597695}, {'','',1.662758,2.060698,0.000000}, {'','',0.602060,-2.000000,0.845098},
-{'','',2.093422,1.518514,2.846955}, {'','',2.149219,2.079181,0.954243}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.431364,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000},
-{'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',2.678518,2.453318,2.550228}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',1.716003,3.116940,-2.000000},
-{'','',2.831230,3.243782,-2.000000}, {'','',2.887054,1.579784,3.237795}, {'','',2.993436,2.401401,2.866878}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000},
-{'','',2.149219,2.079181,0.954243}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.431364,-2.000000,-2.000000},
-{'','',2.204120,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308},
-{'','',2.378398,-2.000000,-2.000000}, {'','',2.678518,2.453318,2.550228}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',1.716003,3.116940,-2.000000}, {'','',2.831230,3.243782,-2.000000},
-{'','',2.887054,1.579784,3.237795}, {'','',2.993436,2.401401,2.866878}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.330414,1.204120,2.632457},
-{'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',2.627366,0.301030,3.066326}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',1.819544,0.000000,1.732394}, {'','',3.832445,3.449324,2.363612}, {'','',2.981366,2.565848,2.936011},
-{'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393},
-{'','',2.841359,-2.000000,2.127105}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',3.389166,2.158362,2.212188}, {'','',3.679610,2.413300,2.906335}, {'','',3.492621,1.716003,3.151370},
-{'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',3.590396,-2.000000,1.799341}, {'','',2.330414,1.204120,2.632457}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',2.627366,0.301030,3.066326}, {'','',3.936262,2.687529,2.945469},
-{'','',2.977266,3.058046,3.325926}, {'','',1.819544,0.000000,1.732394}, {'','',3.832445,3.449324,2.363612}, {'','',2.981366,2.565848,2.936011}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452},
-{'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',2.841359,-2.000000,2.127105}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713},
-{'','',2.637490,-2.000000,-2.000000}, {'','',3.389166,2.158362,2.212188}, {'','',3.679610,2.413300,2.906335}, {'','',3.492621,1.716003,3.151370}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',3.590396,-2.000000,1.799341}, {'','',2.772322,2.448706,2.578639},
-{'','',2.342423,2.450249,1.579784}, {'','',3.105169,-2.000000,-2.000000}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',2.477121,0.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',-2.000000,1.462398,-2.000000}, {'','',0.602060,-2.000000,-2.000000},
-{'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.105169,-2.000000,-2.000000}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',2.477121,0.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',-2.000000,1.462398,-2.000000},
-{'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, {'','',0.301030,0.000000,0.000000}, {'','',3.289589,2.103804,2.824126},
-{'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000},
-{'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',1.000000,1.579784,-2.000000}, {'','',-2.000000,1.342423,-2.000000}, {'','',1.397940,0.845098,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000},
-{'','',2.181844,-2.000000,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, {'','',0.301030,0.000000,0.000000}, {'','',3.289589,2.103804,2.824126},
-{'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000},
-{'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',1.000000,1.579784,-2.000000}, {'','',-2.000000,1.342423,-2.000000}, {'','',1.397940,0.845098,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000},
-{'','',2.181844,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000},
-{'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000},
-{'','',1.690196,2.396199,2.406540}, {'','',2.630428,2.725912,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008},
-{'','',0.301030,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000},
-{'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',2.630428,2.725912,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423},
-{'','',3.406881,1.079181,2.103804}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.743510,-2.000000,1.812913}, {'','',3.038223,2.281033,2.232996}, {'','',3.008600,2.872156,3.443263}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548},
-{'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',2.866878,-2.000000,3.425208}, {'','',3.342028,2.133539,2.628389},
-{'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.949878,1.146128,0.778151}, {'','',3.806994,2.618048,2.845718}, {'','',-2.000000,-2.000000,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.402089,3.567497,2.037426},
-{'','',3.360593,1.568202,1.079181}, {'','',1.079181,-2.000000,-2.000000}, {'','',2.721811,1.724276,1.518514}, {'','',3.547405,-2.000000,2.677607}, {'','',1.342423,0.954243,2.897077}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, {'','',3.406881,1.079181,2.103804},
-{'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.743510,-2.000000,1.812913}, {'','',3.038223,2.281033,2.232996}, {'','',3.008600,2.872156,3.443263}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107},
-{'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',2.866878,-2.000000,3.425208}, {'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398},
-{'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.949878,1.146128,0.778151}, {'','',3.806994,2.618048,2.845718}, {'','',-2.000000,-2.000000,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.402089,3.567497,2.037426}, {'','',3.360593,1.568202,1.079181},
-{'','',1.079181,-2.000000,-2.000000}, {'','',2.721811,1.724276,1.518514}, {'','',3.547405,-2.000000,2.677607}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, {'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',0.301030,-2.000000,0.477121},
-{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000},
-{'','',-2.000000,-2.000000,0.301030}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.792392,-2.000000,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, {'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000},
-{'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030},
-{'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.792392,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.964919,3.984122,3.731830}, {'','',1.886491,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000},
-{'','',0.698970,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000},
-{'','',-2.000000,-2.000000,0.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.547775,2.082785,0.477121}, {'','',1.732394,-2.000000,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.964919,3.984122,3.731830}, {'','',1.886491,-2.000000,-2.000000},
-{'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030},
-{'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243},
-{'','',3.261501,3.144574,3.448088}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.547775,2.082785,0.477121}, {'','',1.732394,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000},
-{'','',0.301030,-2.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',0.903090,-2.000000,-2.000000},
-{'','',2.738781,1.361728,1.255273}, {'','',0.698970,-2.000000,0.477121}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162},
-{'','',2.257679,-2.000000,0.698970}, {'','',3.571592,1.690196,3.195069}, {'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',2.894870,1.477121,-2.000000}, {'','',2.017033,-2.000000,-2.000000}, {'','',4.066214,1.732394,3.082785},
-{'','',3.395501,1.857332,2.587711}, {'','',1.924279,-2.000000,1.176091}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',4.028083,2.858537,3.912966},
-{'','',1.732394,1.602060,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',0.903090,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',0.698970,-2.000000,0.477121}, {'','',3.966892,3.456366,4.024568},
-{'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.571592,1.690196,3.195069}, {'','',3.772835,-2.000000,-2.000000},
-{'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',2.894870,1.477121,-2.000000}, {'','',2.017033,-2.000000,-2.000000}, {'','',4.066214,1.732394,3.082785}, {'','',3.395501,1.857332,2.587711}, {'','',1.924279,-2.000000,1.176091}, {'','',1.505150,-2.000000,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.690196,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679},
-{'','',1.322219,-2.000000,0.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000},
-{'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.530200,2.227887,2.985875}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.531479,-2.000000,-2.000000},
-{'','',1.991226,-2.000000,2.130334}, {'','',3.191171,3.276462,2.357935}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',3.729813,3.633771,3.109241},
-{'','',1.819544,-2.000000,0.477121}, {'','',1.690196,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',1.322219,-2.000000,0.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',3.206826,3.250664,3.673113},
-{'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.530200,2.227887,2.985875}, {'','',2.475671,2.089905,-2.000000},
-{'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.531479,-2.000000,-2.000000}, {'','',1.991226,-2.000000,2.130334}, {'','',3.191171,3.276462,2.357935}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.908485,-2.000000,1.579784},
-{'','',3.885700,4.392978,3.638689}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',1.000000,-2.000000,-2.000000}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000},
-{'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.719331,1.505150,3.569374}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366},
-{'','',1.690196,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',3.227887,0.301030,3.521269}, {'','',3.922622,1.875061,3.260071}, {'','',1.778151,-2.000000,0.477121}, {'','',1.414973,-2.000000,-2.000000}, {'','',0.000000,0.477121,-2.000000}, {'','',2.589950,-2.000000,-2.000000},
-{'','',2.866287,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689},
-{'','',2.021189,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',1.000000,-2.000000,-2.000000}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121},
-{'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.719331,1.505150,3.569374}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, {'','',1.690196,-2.000000,-2.000000},
-{'','',1.255273,-2.000000,-2.000000}, {'','',3.227887,0.301030,3.521269}, {'','',3.922622,1.875061,3.260071}, {'','',1.778151,-2.000000,0.477121}, {'','',1.414973,-2.000000,-2.000000}, {'','',0.000000,0.477121,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',2.866287,-2.000000,-2.000000},
-{'','',-2.000000,-2.000000,0.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',2.514548,1.732394,-2.000000}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',2.885361,1.748188,1.255273},
-{'','',4.169674,2.836957,2.929419}, {'','',3.269980,2.445604,2.318063}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341},
-{'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',3.244772,-2.000000,2.688420}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',3.853941,2.320146,1.908485},
-{'','',4.293738,1.707570,3.375846}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.539452,2.184691,1.579784}, {'','',3.478278,2.245513,1.556303}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.756636,2.149219,0.000000}, {'','',3.779813,3.175222,0.000000}, {'','',2.107210,-2.000000,3.054613},
-{'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',2.514548,1.732394,-2.000000}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',2.885361,1.748188,1.255273}, {'','',4.169674,2.836957,2.929419}, {'','',3.269980,2.445604,2.318063},
-{'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276},
-{'','',3.244772,-2.000000,2.688420}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',3.853941,2.320146,1.908485}, {'','',4.293738,1.707570,3.375846}, {'','',0.000000,-2.000000,-2.000000},
-{'','',3.539452,2.184691,1.579784}, {'','',3.478278,2.245513,1.556303}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.756636,2.149219,0.000000}, {'','',3.779813,3.175222,0.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',3.467312,3.637189,2.209515}, {'','',2.387390,-2.000000,-2.000000},
-{'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000},
-{'','',3.748110,4.432617,1.991226}, {'','',2.863917,0.000000,0.301030}, {'','',2.786041,2.619093,0.903090}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',1.826075,2.093422,1.612784},
-{'','',2.907949,2.474216,1.944483}, {'','',0.778151,1.176091,-2.000000}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',3.467312,3.637189,2.209515}, {'','',2.387390,-2.000000,-2.000000},
-{'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000},
-{'','',3.748110,4.432617,1.991226}, {'','',2.863917,0.000000,0.301030}, {'','',2.786041,2.619093,0.903090}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',1.826075,2.093422,1.612784},
-{'','',2.907949,2.474216,1.944483}, {'','',0.778151,1.176091,-2.000000}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000},
-{'','',1.944483,-2.000000,1.707570}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.588832,0.845098,1.000000}, {'','',1.913814,0.000000,2.650308}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075},
-{'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',1.826075,-2.000000,2.336460}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828},
-{'','',0.903090,-2.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',3.467904,2.214844,0.477121}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.527630,0.000000,1.954243}, {'','',2.396199,-2.000000,2.143015},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',1.944483,-2.000000,1.707570}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.588832,0.845098,1.000000}, {'','',1.913814,0.000000,2.650308}, {'','',2.029384,0.602060,0.301030},
-{'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',1.826075,-2.000000,2.336460}, {'','',2.155336,2.988559,1.176091},
-{'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',3.467904,2.214844,0.477121}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000},
-{'','',2.527630,0.000000,1.954243}, {'','',2.247973,1.113943,2.540329}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, {'','',2.240549,-2.000000,-2.000000}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',2.187521,-2.000000,2.315970},
-{'','',2.633468,-2.000000,1.812913}, {'','',2.423246,-2.000000,2.079181}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921},
-{'','',2.448706,-2.000000,-2.000000}, {'','',3.447778,2.491362,2.760422}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',3.033021,1.342423,0.301030}, {'','',3.130977,1.959041,-2.000000},
-{'','',2.853090,0.000000,3.227115}, {'','',3.478566,2.406540,2.940018}, {'','',2.193125,0.000000,0.477121}, {'','',2.892651,-2.000000,1.000000}, {'','',0.778151,0.301030,0.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',2.527630,-2.000000,0.778151}, {'','',2.247973,1.113943,2.540329},
-{'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, {'','',2.240549,-2.000000,-2.000000}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',2.187521,-2.000000,2.315970}, {'','',2.633468,-2.000000,1.812913}, {'','',2.423246,-2.000000,2.079181},
-{'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',3.447778,2.491362,2.760422},
-{'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',3.033021,1.342423,0.301030}, {'','',3.130977,1.959041,-2.000000}, {'','',2.853090,0.000000,3.227115}, {'','',3.478566,2.406540,2.940018},
-{'','',2.193125,0.000000,0.477121}, {'','',2.892651,-2.000000,1.000000}, {'','',0.778151,0.301030,0.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',2.527630,-2.000000,0.778151}, {'','',1.913814,2.414973,2.413300}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000},
-{'','',1.939519,1.591065,-2.000000}, {'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',1.000000,1.763428,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',2.693727,2.298853,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390},
-{'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',3.035830,1.278754,4.148757}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211},
-{'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',-2.000000,2.004321,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',2.944483,-2.000000,3.992465}, {'','',2.578639,2.701568,2.563481}, {'','',-2.000000,1.591065,-2.000000}, {'','',2.453318,0.778151,-2.000000},
-{'','',-2.000000,3.283527,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',1.939519,1.591065,-2.000000},
-{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',1.000000,1.763428,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',2.693727,2.298853,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754},
-{'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',3.035830,1.278754,4.148757}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545},
-{'','',2.924279,3.172311,2.450249}, {'','',-2.000000,2.004321,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',2.944483,-2.000000,3.992465}, {'','',2.578639,2.701568,2.563481}, {'','',-2.000000,1.591065,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',-2.000000,3.283527,-2.000000},
-{'','',0.477121,-2.000000,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',1.968483,1.845098,1.079181}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000},
-{'','',3.929266,3.701654,3.580126}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060},
-{'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',2.966142,2.569374,2.804139}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785},
-{'','',0.301030,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',3.614686,1.977724,4.250152}, {'','',3.296007,3.418301,2.948413}, {'','',1.301030,-2.000000,-2.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',2.705864,-2.000000,0.000000},
-{'','',1.431364,-2.000000,0.000000}, {'','',1.968483,1.845098,1.079181}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126}, {'','',0.954243,-2.000000,-2.000000},
-{'','',1.322219,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582},
-{'','',2.574031,-2.000000,-2.000000}, {'','',2.966142,2.569374,2.804139}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033},
-{'','',3.614686,1.977724,4.250152}, {'','',3.296007,3.418301,2.948413}, {'','',1.301030,-2.000000,-2.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',2.584331,1.518514,3.410440},
-{'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',1.176091,1.361728,-2.000000}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.121231,-2.000000,1.397940}, {'','',3.296884,2.769377,3.048053}, {'','',2.843855,2.580925,2.530200},
-{'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509},
-{'','',1.806180,1.255273,1.838849}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.366983,3.468938,1.919078}, {'','',2.942008,2.998695,2.117271}, {'','',2.585461,2.642465,1.579784},
-{'','',3.348500,2.309630,1.819544}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.998695,1.146128,0.000000}, {'','',3.448242,2.468347,1.301030}, {'','',2.584331,1.518514,3.410440}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',1.176091,1.361728,-2.000000},
-{'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.121231,-2.000000,1.397940}, {'','',3.296884,2.769377,3.048053}, {'','',2.843855,2.580925,2.530200}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462},
-{'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',1.806180,1.255273,1.838849}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151},
-{'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.366983,3.468938,1.919078}, {'','',2.942008,2.998695,2.117271}, {'','',2.585461,2.642465,1.579784}, {'','',3.348500,2.309630,1.819544}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.998695,1.146128,0.000000},
-{'','',3.448242,2.468347,1.301030}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.204120,1.255273,-2.000000},
-{'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, {'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000},
-{'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',1.591065,0.698970,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000},
-{'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.204120,1.255273,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000},
-{'','',1.838849,-2.000000,-2.000000}, {'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354},
-{'','',1.591065,0.698970,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000},
-{'','',1.812913,1.431364,-2.000000}, {'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',2.361728,1.230449,-2.000000}, {'','',-2.000000,2.017033,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000},
-{'','',3.317854,2.462398,0.000000}, {'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.812913,1.653213,1.113943}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000},
-{'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, {'','',-2.000000,0.903090,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.396199,1.477121,2.558709}, {'','',3.355068,3.777717,2.657056}, {'','',1.591065,3.207096,-2.000000}, {'','',3.294466,0.301030,-2.000000},
-{'','',0.477121,1.857332,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',1.812913,1.431364,-2.000000},
-{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',2.361728,1.230449,-2.000000}, {'','',-2.000000,2.017033,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000},
-{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.812913,1.653213,1.113943}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000},
-{'','',3.110253,1.681241,2.832509}, {'','',-2.000000,0.903090,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.396199,1.477121,2.558709}, {'','',3.355068,3.777717,2.657056}, {'','',1.591065,3.207096,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',0.477121,1.857332,-2.000000},
-{'','',1.342423,0.602060,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.484300,-2.000000,0.477121}, {'','',2.539076,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, {'','',3.015779,-2.000000,2.685742},
-{'','',1.633468,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000},
-{'','',1.845098,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',2.612784,-2.000000,2.849419}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.685742,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000},
-{'','',0.698970,-2.000000,-2.000000}, {'','',1.602060,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.484300,-2.000000,0.477121}, {'','',2.539076,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, {'','',3.015779,-2.000000,2.685742},
-{'','',1.633468,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000},
-{'','',1.845098,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',2.612784,-2.000000,2.849419}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.685742,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000},
-{'','',0.698970,-2.000000,-2.000000}, {'','',1.602060,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, {'','',2.509203,-2.000000,0.301030},
-{'','',2.816241,0.000000,3.393224}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, {'','',0.000000,-2.000000,0.000000},
-{'','',2.677607,-2.000000,-2.000000}, {'','',1.653213,-2.000000,0.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.149219,-2.000000,0.698970}, {'','',3.412124,-2.000000,1.812913},
-{'','',2.315970,-2.000000,0.301030}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',2.858537,-2.000000,1.845098}, {'','',2.943495,-2.000000,0.000000}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730},
-{'','',2.509203,-2.000000,0.301030}, {'','',2.816241,0.000000,3.393224}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606},
-{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',1.653213,-2.000000,0.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.149219,-2.000000,0.698970},
-{'','',3.412124,-2.000000,1.812913}, {'','',2.315970,-2.000000,0.301030}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',2.858537,-2.000000,1.845098}, {'','',0.602060,-2.000000,2.361728}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000},
-{'','',1.000000,-2.000000,-2.000000}, {'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',3.019532,-2.000000,1.255273}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392},
-{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.797268,0.903090,2.796574}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',2.359835,-2.000000,-2.000000},
-{'','',3.361161,2.567026,0.301030}, {'','',2.257679,-2.000000,3.261263}, {'','',2.983626,0.903090,2.212188}, {'','',1.755875,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',0.602060,-2.000000,2.361728},
-{'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',3.019532,-2.000000,1.255273}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000},
-{'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, {'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.797268,0.903090,2.796574}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000},
-{'','',3.008174,2.149219,2.641474}, {'','',2.359835,-2.000000,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',2.257679,-2.000000,3.261263}, {'','',2.983626,0.903090,2.212188}, {'','',1.755875,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000},
-{'','',1.832509,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,-2.000000,0.000000}, {'','',3.643749,2.823474,3.224792}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.631342,2.372912,2.641474},
-{'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, {'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',1.176091,2.017033,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081},
-{'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,-2.000000,0.000000}, {'','',3.643749,2.823474,3.224792}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000},
-{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',1.176091,2.017033,-2.000000},
-{'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.477121,1.255273,-2.000000}, {'','',0.301030,1.662758,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.000000,2.056905,0.903090},
-{'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664}, {'','',0.000000,1.113943,-2.000000},
-{'','',2.214844,3.899437,1.397940}, {'','',-2.000000,1.204120,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.000000,1.113943,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.477121,1.255273,-2.000000}, {'','',0.301030,1.662758,-2.000000}, {'','',-2.000000,1.477121,-2.000000},
-{'','',0.000000,2.056905,0.903090}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664},
-{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',-2.000000,1.204120,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.000000,1.113943,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754},
-{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',0.301030,-2.000000,-2.000000},
-{'','',1.255273,-2.000000,1.903090}, {'','',3.025306,1.079181,1.897627}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, {'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.255273,-2.000000,1.903090}, {'','',3.780389,2.989450,2.786751}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098},
-{'','',0.000000,-2.000000,-2.000000}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000},
-{'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.698970,0.477121,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',2.752048,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.780389,2.989450,2.786751},
-{'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000},
-{'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.698970,0.477121,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',2.752048,-2.000000,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}
-};
-
-static const lng_stat2 enc_win[]={
-{'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, {'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715},
-{'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754},
-{'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, {'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519},
-{'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, {'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397},
-{'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847},
-{'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093},
-{'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, {'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, {'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000},
-{'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634},
-{'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, {'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453},
-{'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000},
-{'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965}, {'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',3.068557,3.068928,2.720986},
-{'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060},
-{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000},
-{'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965},
-{'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000},
-{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000},
-{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509},
-{'','',-2.000000,2.017033,-2.000000}, {'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709},
-{'','',0.477121,1.857332,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000}, {'','',2.727541,2.992995,-2.000000},
-{'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, {'','',1.397940,2.607455,0.301030},
-{'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, {'','',-2.000000,2.017033,-2.000000},
-{'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709}, {'','',0.477121,1.857332,-2.000000},
-{'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461},
-{'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.397940,0.845098,0.000000},
-{'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461},
-{'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.397940,0.845098,0.000000},
-{'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515},
-{'','',1.716003,3.116940,-2.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000},
-{'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000},
-{'','',2.900367,-2.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, {'','',2.149219,2.079181,0.954243},
-{'','',2.678518,2.453318,2.550228}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, {'','',1.716003,3.116940,-2.000000},
-{'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308},
-{'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000},
-{'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, {'','',2.149219,2.079181,0.954243}, {'','',2.678518,2.453318,2.550228},
-{'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370},
-{'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393},
-{'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, {'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341},
-{'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612},
-{'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452},
-{'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000},
-{'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, {'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105},
-{'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059},
-{'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, {'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000},
-{'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000},
-{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273},
-{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392},
-{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000},
-{'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000},
-{'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273}, {'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000},
-{'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, {'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474},
-{'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574},
-{'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, {'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426},
-{'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276},
-{'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607},
-{'','',3.360593,1.568202,1.079181}, {'','',2.721811,1.724276,1.518514}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',2.439333,1.414973,0.000000},
-{'','',3.192567,1.929419,1.342423}, {'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, {'','',1.591065,0.000000,3.152594},
-{'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',3.342028,2.133539,2.628389},
-{'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, {'','',3.360593,1.568202,1.079181},
-{'','',2.721811,1.724276,1.518514}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000},
-{'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754},
-{'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.158362,-2.000000,0.698970}, {'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',2.861534,-2.000000,-2.000000},
-{'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060},
-{'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970},
-{'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000},
-{'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000},
-{'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000},
-{'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000},
-{'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101},
-{'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926},
-{'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000},
-{'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273},
-{'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, {'','',1.924279,-2.000000,1.176091}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970},
-{'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188},
-{'','',3.571592,1.690196,3.195069}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000},
-{'','',1.924279,-2.000000,1.176091}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970},
-{'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000},
-{'','',0.778151,-2.000000,-2.000000}, {'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',3.571592,1.690196,3.195069}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121},
-{'','',1.531479,-2.000000,-2.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000},
-{'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084},
-{'','',1.322219,-2.000000,0.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.530200,2.227887,2.985875}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.531479,-2.000000,-2.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679},
-{'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000},
-{'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.322219,-2.000000,0.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000},
-{'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.530200,2.227887,2.985875}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000},
-{'','',1.255273,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060},
-{'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466},
-{'','',3.881556,3.212454,3.188366}, {'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000},
-{'','',3.922622,1.875061,3.260071}, {'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000},
-{'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000},
-{'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366},
-{'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.922622,1.875061,3.260071},
-{'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419},
-{'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791},
-{'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090},
-{'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, {'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, {'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000},
-{'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127},
-{'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341},
-{'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063},
-{'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, {'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420},
-{'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226},
-{'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000},
-{'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090},
-{'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226},
-{'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000},
-{'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090},
-{'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, {'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121},
-{'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000},
-{'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000},
-{'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018}, {'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000},
-{'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784},
-{'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334},
-{'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018},
-{'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000},
-{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000},
-{'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000},
-{'','',2.693727,2.298853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465},
-{'','',-2.000000,3.283527,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',0.301030,2.826075,-2.000000},
-{'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000},
-{'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000}, {'','',2.693727,2.298853,-2.000000},
-{'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465}, {'','',-2.000000,3.283527,-2.000000},
-{'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126},
-{'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582},
-{'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000},
-{'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, {'','',2.966142,2.569374,2.804139},
-{'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000},
-{'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483},
-{'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000},
-{'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, {'','',2.966142,2.569374,2.804139}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362},
-{'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, {'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033},
-{'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151},
-{'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, {'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, {'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000},
-{'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419},
-{'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, {'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390},
-{'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940},
-{'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, {'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849},
-{'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',1.342423,2.000000,0.000000},
-{'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, {'','',-2.000000,1.462398,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000},
-{'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000},
-{'','',-2.000000,1.462398,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950},
-{'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030},
-{'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000},
-{'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000},
-{'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540},
-{'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000},
-{'','',2.966142,2.863323,2.898176}, {'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000},
-{'','',0.845098,-2.000000,-2.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000},
-{'','',2.966142,2.863323,2.898176}, {'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000},
-{'','',0.845098,-2.000000,-2.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814},
-{'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560},
-{'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000},
-{'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',3.279211,2.887054,2.691081}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474},
-{'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, {'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000},
-{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000},
-{'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754},
-{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090},
-{'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, {'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090}, {'','',2.332438,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000},
-{'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, {'','',2.149219,-2.000000,0.698970},
-{'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, {'','',0.000000,-2.000000,0.000000},
-{'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.858537,-2.000000,1.845098},
-{'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730},
-{'','',2.149219,-2.000000,0.698970}, {'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606},
-{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000},
-{'','',2.858537,-2.000000,1.845098}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970},
-{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000},
-{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000},
-{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970},
-{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000},
-{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000},
-{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.477121,1.255273,-2.000000},
-{'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664},
-{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000},
-{'','',0.477121,1.255273,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000},
-{'','',2.683047,0.903090,3.158664}, {'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000},
-{'','',0.778151,0.698970,0.477121}, {'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394},
-{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.949390,-2.000000,0.698970}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000},
-{'','',0.778151,0.698970,0.477121}, {'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394},
-{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.949390,-2.000000,0.698970}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000},
-{'','',2.806858,2.477121,1.505150}, {'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514},
-{'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828},
-{'','',0.903090,-2.000000,0.000000}, {'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121},
-{'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091},
-{'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000}, {'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000},
-{'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, {'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292},
-{'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959},
-{'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546},
-{'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, {'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, {'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',3.068557,3.068928,2.720986},
-{'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060},
-{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000},
-{'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965},
-{'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000},
-{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000},
-{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509},
-{'','',-2.000000,2.017033,-2.000000}, {'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709},
-{'','',0.477121,1.857332,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000},
-{'','',2.638489,3.002166,2.585461}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000},
-{'','',1.397940,0.845098,0.000000}, {'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000},
-{'','',3.952889,3.690728,3.209515}, {'','',1.716003,3.116940,-2.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000},
-{'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.204120,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795},
-{'','',2.149219,2.079181,0.954243}, {'','',2.678518,2.453318,2.550228}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926},
-{'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454},
-{'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011},
-{'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000},
-{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273},
-{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392},
-{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000},
-{'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423},
-{'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548},
-{'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398},
-{'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, {'','',3.360593,1.568202,1.079181}, {'','',2.721811,1.724276,1.518514},
-{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',2.861534,-2.000000,-2.000000},
-{'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060},
-{'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970},
-{'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000},
-{'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000},
-{'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000},
-{'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000},
-{'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, {'','',1.924279,-2.000000,1.176091},
-{'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.772835,-2.000000,-2.000000},
-{'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000},
-{'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',3.571592,1.690196,3.195069}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.531479,-2.000000,-2.000000},
-{'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943},
-{'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.322219,-2.000000,0.000000},
-{'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.530200,2.227887,2.985875}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000},
-{'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000},
-{'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, {'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000},
-{'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.922622,1.875061,3.260071}, {'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374},
-{'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784},
-{'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276},
-{'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, {'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000},
-{'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, {'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000},
-{'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226}, {'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030},
-{'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000},
-{'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000},
-{'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784},
-{'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334},
-{'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018},
-{'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000},
-{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000},
-{'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000},
-{'','',2.693727,2.298853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465},
-{'','',-2.000000,3.283527,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000},
-{'','',3.929266,3.701654,3.580126}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000},
-{'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000},
-{'','',2.262451,-2.000000,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181},
-{'','',2.966142,2.569374,2.804139}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078},
-{'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000},
-{'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, {'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000},
-{'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784},
-{'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000},
-{'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, {'','',-2.000000,1.462398,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008},
-{'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000},
-{'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',0.000000,-2.000000,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000}, {'','',2.966142,2.863323,2.898176},
-{'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000},
-{'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000},
-{'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000},
-{'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',3.279211,2.887054,2.691081},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000},
-{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000},
-{'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754},
-{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090},
-{'','',2.332438,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730},
-{'','',2.149219,-2.000000,0.698970}, {'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606},
-{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000},
-{'','',2.858537,-2.000000,1.845098}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970},
-{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000},
-{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000},
-{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.477121,1.255273,-2.000000},
-{'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664},
-{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, {'','',0.778151,0.698970,0.477121},
-{'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, {'','',1.602060,0.602060,-2.000000},
-{'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.949390,-2.000000,0.698970},
-{'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',2.806858,2.477121,1.505150},
-{'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075},
-{'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000},
-{'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460}
-};
-
-static const lng_stat2 enc_alt[]={
-{'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, {'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715},
-{'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754},
-{'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, {'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519},
-{'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, {'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397},
-{'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847},
-{'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093},
-{'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, {'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, {'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000},
-{'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634},
-{'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, {'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453},
-{'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000},
-{'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965}, {'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',3.068557,3.068928,2.720986},
-{'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060},
-{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000},
-{'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965},
-{'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000},
-{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000},
-{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509},
-{'','',-2.000000,2.017033,-2.000000}, {'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709},
-{'','',0.477121,1.857332,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000}, {'','',2.727541,2.992995,-2.000000},
-{'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, {'','',1.397940,2.607455,0.301030},
-{'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, {'','',-2.000000,2.017033,-2.000000},
-{'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709}, {'','',0.477121,1.857332,-2.000000},
-{'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461},
-{'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.397940,0.845098,0.000000},
-{'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461},
-{'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.397940,0.845098,0.000000},
-{'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515},
-{'','',1.716003,3.116940,-2.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000},
-{'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000},
-{'','',2.900367,-2.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, {'','',2.149219,2.079181,0.954243},
-{'','',2.678518,2.453318,2.550228}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, {'','',1.716003,3.116940,-2.000000},
-{'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308},
-{'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000},
-{'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, {'','',2.149219,2.079181,0.954243}, {'','',2.678518,2.453318,2.550228},
-{'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370},
-{'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393},
-{'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, {'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341},
-{'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612},
-{'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452},
-{'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000},
-{'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, {'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105},
-{'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059},
-{'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, {'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000},
-{'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000},
-{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273},
-{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392},
-{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000},
-{'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000},
-{'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273}, {'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000},
-{'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, {'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474},
-{'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574},
-{'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, {'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426},
-{'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276},
-{'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607},
-{'','',3.360593,1.568202,1.079181}, {'','',2.721811,1.724276,1.518514}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',2.439333,1.414973,0.000000},
-{'','',3.192567,1.929419,1.342423}, {'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, {'','',1.591065,0.000000,3.152594},
-{'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',3.342028,2.133539,2.628389},
-{'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, {'','',3.360593,1.568202,1.079181},
-{'','',2.721811,1.724276,1.518514}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000},
-{'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754},
-{'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.158362,-2.000000,0.698970}, {'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',2.861534,-2.000000,-2.000000},
-{'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060},
-{'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970},
-{'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000},
-{'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000},
-{'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000},
-{'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000},
-{'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101},
-{'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926},
-{'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000},
-{'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273},
-{'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, {'','',1.924279,-2.000000,1.176091}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970},
-{'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188},
-{'','',3.571592,1.690196,3.195069}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000},
-{'','',1.924279,-2.000000,1.176091}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970},
-{'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000},
-{'','',0.778151,-2.000000,-2.000000}, {'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',3.571592,1.690196,3.195069}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121},
-{'','',1.531479,-2.000000,-2.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000},
-{'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084},
-{'','',1.322219,-2.000000,0.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.530200,2.227887,2.985875}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.531479,-2.000000,-2.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679},
-{'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000},
-{'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.322219,-2.000000,0.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000},
-{'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.530200,2.227887,2.985875}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000},
-{'','',1.255273,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060},
-{'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466},
-{'','',3.881556,3.212454,3.188366}, {'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000},
-{'','',3.922622,1.875061,3.260071}, {'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000},
-{'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000},
-{'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366},
-{'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.922622,1.875061,3.260071},
-{'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419},
-{'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791},
-{'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090},
-{'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, {'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, {'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000},
-{'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127},
-{'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341},
-{'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063},
-{'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, {'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420},
-{'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226},
-{'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000},
-{'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090},
-{'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226},
-{'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000},
-{'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090},
-{'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, {'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121},
-{'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000},
-{'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000},
-{'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018}, {'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000},
-{'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784},
-{'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334},
-{'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018},
-{'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000},
-{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000},
-{'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000},
-{'','',2.693727,2.298853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465},
-{'','',-2.000000,3.283527,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',0.301030,2.826075,-2.000000},
-{'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000},
-{'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000}, {'','',2.693727,2.298853,-2.000000},
-{'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465}, {'','',-2.000000,3.283527,-2.000000},
-{'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126},
-{'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582},
-{'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000},
-{'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, {'','',2.966142,2.569374,2.804139},
-{'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000},
-{'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483},
-{'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000},
-{'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, {'','',2.966142,2.569374,2.804139}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362},
-{'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, {'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033},
-{'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151},
-{'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, {'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, {'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000},
-{'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419},
-{'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, {'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390},
-{'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940},
-{'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, {'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849},
-{'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',1.342423,2.000000,0.000000},
-{'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, {'','',-2.000000,1.462398,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000},
-{'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000},
-{'','',-2.000000,1.462398,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950},
-{'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030},
-{'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000},
-{'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000},
-{'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540},
-{'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000},
-{'','',2.966142,2.863323,2.898176}, {'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000},
-{'','',0.845098,-2.000000,-2.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000},
-{'','',2.966142,2.863323,2.898176}, {'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000},
-{'','',0.845098,-2.000000,-2.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814},
-{'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560},
-{'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000},
-{'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',3.279211,2.887054,2.691081}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474},
-{'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, {'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000},
-{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000},
-{'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754},
-{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090},
-{'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, {'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090}, {'','',2.332438,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000},
-{'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, {'','',2.149219,-2.000000,0.698970},
-{'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, {'','',0.000000,-2.000000,0.000000},
-{'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.858537,-2.000000,1.845098},
-{'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730},
-{'','',2.149219,-2.000000,0.698970}, {'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606},
-{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000},
-{'','',2.858537,-2.000000,1.845098}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970},
-{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000},
-{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000},
-{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970},
-{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000},
-{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000},
-{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.477121,1.255273,-2.000000},
-{'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664},
-{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000},
-{'','',0.477121,1.255273,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000},
-{'','',2.683047,0.903090,3.158664}, {'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000},
-{'','',0.778151,0.698970,0.477121}, {'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394},
-{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.949390,-2.000000,0.698970}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000},
-{'','',0.778151,0.698970,0.477121}, {'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394},
-{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.949390,-2.000000,0.698970}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000},
-{'','',2.806858,2.477121,1.505150}, {'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514},
-{'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828},
-{'','',0.903090,-2.000000,0.000000}, {'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121},
-{'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091},
-{'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000}, {'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000},
-{'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, {'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292},
-{'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959},
-{'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546},
-{'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, {'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, {'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',3.068557,3.068928,2.720986},
-{'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060},
-{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000},
-{'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965},
-{'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000},
-{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000},
-{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509},
-{'','',-2.000000,2.017033,-2.000000}, {'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709},
-{'','',0.477121,1.857332,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000},
-{'','',2.638489,3.002166,2.585461}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495},
-{'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000},
-{'','',1.397940,0.845098,0.000000}, {'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000},
-{'','',3.952889,3.690728,3.209515}, {'','',1.716003,3.116940,-2.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000},
-{'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.204120,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795},
-{'','',2.149219,2.079181,0.954243}, {'','',2.678518,2.453318,2.550228}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926},
-{'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454},
-{'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011},
-{'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000},
-{'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000},
-{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000},
-{'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273},
-{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392},
-{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000},
-{'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423},
-{'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548},
-{'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398},
-{'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, {'','',3.360593,1.568202,1.079181}, {'','',2.721811,1.724276,1.518514},
-{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',2.861534,-2.000000,-2.000000},
-{'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060},
-{'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970},
-{'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000},
-{'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000},
-{'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000},
-{'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000},
-{'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, {'','',1.924279,-2.000000,1.176091},
-{'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.772835,-2.000000,-2.000000},
-{'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000},
-{'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',3.571592,1.690196,3.195069}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.531479,-2.000000,-2.000000},
-{'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943},
-{'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.322219,-2.000000,0.000000},
-{'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, {'','',0.000000,-2.000000,-2.000000},
-{'','',2.530200,2.227887,2.985875}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000},
-{'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000},
-{'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, {'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000},
-{'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.922622,1.875061,3.260071}, {'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374},
-{'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784},
-{'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276},
-{'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, {'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000},
-{'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, {'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000},
-{'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226}, {'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030},
-{'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000},
-{'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000},
-{'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784},
-{'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334},
-{'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018},
-{'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000},
-{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000},
-{'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000},
-{'','',2.693727,2.298853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465},
-{'','',-2.000000,3.283527,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000},
-{'','',3.929266,3.701654,3.580126}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000},
-{'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000},
-{'','',2.262451,-2.000000,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181},
-{'','',2.966142,2.569374,2.804139}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078},
-{'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000},
-{'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, {'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000},
-{'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784},
-{'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000},
-{'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, {'','',-2.000000,1.462398,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008},
-{'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000},
-{'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',0.000000,-2.000000,-2.000000},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000}, {'','',2.966142,2.863323,2.898176},
-{'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000},
-{'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000},
-{'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000},
-{'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',3.279211,2.887054,2.691081},
-{'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000},
-{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000},
-{'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754},
-{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090},
-{'','',2.332438,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730},
-{'','',2.149219,-2.000000,0.698970}, {'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606},
-{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000},
-{'','',2.858537,-2.000000,1.845098}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970},
-{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000},
-{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000},
-{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.477121,1.255273,-2.000000},
-{'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664},
-{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, {'','',0.778151,0.698970,0.477121},
-{'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, {'','',1.602060,0.602060,-2.000000},
-{'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.949390,-2.000000,0.698970},
-{'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',2.806858,2.477121,1.505150},
-{'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075},
-{'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000},
-{'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460}
-};
-
-static unsigned int indexes2=2367;
-static unsigned int npow2=4096;
diff --git a/src/libguess/test.c b/src/libguess/test.c
new file mode 100644
index 0000000..8af51d8
--- /dev/null
+++ b/src/libguess/test.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "libguess.h"
+
+int main(int argc, char **argv)
+{
+ FILE *fp;
+ char buf[1024 * 1024];
+
+ if (argc != 2)
+ exit(1);
+
+ fp = fopen(*(argv + 1), "r");
+ if (!fp) {
+ printf("cannot open file \"%s\"\n", *(argv + 1));
+ exit(1);
+ }
+
+ while (fgets(buf, 1024 * 1024 - 1, fp)) {
+// printf("%s\n", buf);
+ printf("length = %d\n", strlen(buf));
+ printf("jp = %s\n", guess_jp(buf, strlen(buf)));
+ printf("tw = %s\n", guess_tw(buf, strlen(buf)));
+ printf("cn = %s\n", guess_cn(buf, strlen(buf)));
+ printf("kr = %s\n", guess_kr(buf, strlen(buf)));
+ printf("ru = %s\n", guess_ru(buf, strlen(buf)));
+ printf("ar = %s\n", guess_ar(buf, strlen(buf)));
+ printf("tr = %s\n", guess_tr(buf, strlen(buf)));
+ printf("gr = %s\n", guess_gr(buf, strlen(buf)));
+ printf("hw = %s\n", guess_hw(buf, strlen(buf)));
+ }
+ fclose(fp);
+}
diff --git a/src/libguess/turkish_impl.c b/src/libguess/turkish_impl.c
index 4ef3419..5c2bf81 100644
--- a/src/libguess/turkish_impl.c
+++ b/src/libguess/turkish_impl.c
@@ -1,25 +1,56 @@
#include "libguess.h"
+#include "dfa.h"
+#include "guess_tab.c"
-static const char *_guess_tr(const unsigned char *ptr, int size)
+/* precedence order */
+#define ORDER &utf8, &iso8859_9, &cp1254
+
+/* common */
+const char *guess_tr(const char *buf, int buflen)
{
int i;
+ const char *rv = NULL;
- for (i = 0; i < size; i++)
- {
- if (ptr[i] == 0x80 ||
- (ptr[i] >= 0x82 && ptr[i] <= 0x8C) ||
- (ptr[i] >= 0x91 && ptr[i] <= 0x9C) ||
- ptr[ i ] == 0x9F)
- return "CP1254";
- }
+ /* encodings */
+ guess_dfa cp1254 = DFA_INIT(guess_cp1253_st, guess_cp1253_ar, "CP1254");
+ guess_dfa iso8859_9 = DFA_INIT(guess_iso8859_9_st, guess_iso8859_9_ar, "ISO-8859-9");
+ guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8");
- return "ISO-8859-9";
-}
+ guess_dfa *top = NULL;
+ guess_dfa *order[] = { ORDER, NULL };
-const char *guess_tr(const char *ptr, int size)
-{
- if (dfa_validate_utf8(ptr, size))
- return "UTF-8";
+ for (i = 0; i < buflen; i++) {
+ int c = (unsigned char) buf[i];
+
+ /* special treatment of BOM */
+ if (i == 0 && c == 0xff) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xfe)
+ return UCS_2LE;
+ }
+ }
+ if (i == 0 && c == 0xfe) {
+ if (i < buflen - 1) {
+ c = (unsigned char) buf[i + 1];
+ if (c == 0xff)
+ return UCS_2BE;
+ }
+ }
+
+ rv = dfa_process(order, c);
+ if(rv)
+ return rv;
+
+ if (dfa_none(order)) {
+ /* we ran out the possibilities */
+ return NULL;
+ }
+ }
- return _guess_tr((const unsigned char *)ptr, size);
+ top = dfa_top(order);
+ if (top)
+ return top->name;
+ else
+ return NULL;
}