samsung.user
Anmeldungsdatum: 26. Oktober 2010
Beiträge: 91
|
Jap geht war mein Internet. Entschuldige. Auf m kleinen 32bit Lapi läufts wunderbar. Bis jetzt mal nur eine Instanz getestet. Läuft seit ner Stunde. Jetzt 3 Instanzen und Prozessorlast (Atom 1 Kern 1,6Ghz) ist auf 100%. Am großen muss ich mal testen, sobal ich multiple use patch hab. Aber ifgendwie will s nicht: heyda@andyou:~/Downloads/vagalume$ dpkg-source -x vagalume_*.dsc
gpgv: Signatur am Mo 27 Dez 2010 17:17:33 CET mit DSA Schlüssel, ID C9B55DAC, erfolgt
gpgv: Unterschrift kann nicht geprüft werden: Öffentlicher Schlüssel nicht gefunden
dpkg-source: Warnung: Fehler beim Überprüfen der Signatur von ./vagalume_0.8.4-1.dsc
dpkg-source: Information: vagalume wird nach vagalume-0.8.4 extrahiert
dpkg-source: Information: vagalume_0.8.4.orig.tar.gz wird entpackt
dpkg-source: Information: vagalume_0.8.4-1.debian.tar.gz wird entpackt
heyda@andyou:~/Downloads/vagalume$ patch -p0 <
03_multiple-us.patch vagalume_0.8.4-1.debian.tar.gz
save-song-v11b.patch vagalume_0.8.4-1.dsc
vagalume-0.8.4/ vagalume_0.8.4.orig.tar.gz
heyda@andyou:~/Downloads/vagalume$ patch -p0 < save-song-v11b.patch
patching file vagalume-0.8.4//configure.ac
patching file vagalume-0.8.4/src/audio.c
patching file vagalume-0.8.4/src/controller.c
patching file vagalume-0.8.4/src/controller.h
patching file vagalume-0.8.4/src/uimisc.c
patching file vagalume-0.8.4/src/uimisc-gtk.c
patching file vagalume-0.8.4/src/userconfig.c
patching file vagalume-0.8.4/src/userconfig.h
patching file vagalume-0.8.4/src/vgl-main-menu-gtk.c
patching file vagalume-0.8.4/src/vgl-main-menu.h
patching file vagalume-0.8.4/src/vgl-main-window.c
patching file vagalume-0.8.4/src/vgl-main-window.h
heyda@andyou:~/Downloads/vagalume$ patch -p0 < 03_multiple-us.patch
patching file vagalume-0.8.4/src/audio.c
Hunk #1 FAILED at 298.
1 out of 1 hunk FAILED -- saving rejects to file vagalume-0.8.4/src/audio.c.rej
patching file vagalume-0.8.4/src/dbus.c
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file vagalume-0.8.4/src/dbus.c.rej
patching file vagalume-0.8.4/src/controller.c
Hunk #1 FAILED at 1174.
1 out of 1 hunk FAILED -- saving rejects to file vagalume-0.8.4/src/controller.c.rej
heyda@andyou:~/Downloads/vagalume$ hab multible Patch runtergeladen und an Version 0.8.4 angepasst. multible Patch:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 | --- vagalume-0.8.4/src/audio.c.old 2008-10-04 00:14:47.000000000 +0200
+++ vagalume-0.8.4/src/audio.c 2008-10-04 00:04:35.000000000 +0200
@@ -298,9 +301,9 @@ lastfm_audio_init(void)
// Create the temp file and link it to giosink
GFile *dumpfile;
char *dumpuri;
- dumppath = g_strdup_printf ("%s/vagalume-%s", g_get_tmp_dir (), g_get_user_name ());
+ dumppath = g_strdup_printf ("%s/vagalume-%s", g_get_tmp_dir (), usercfg->username);
dumpfile = g_file_new_for_path (dumppath);
- controller_del_dump (dumppath); // delete the previous dump file if any
+// controller_del_dump (dumppath); // delete the previous dump file if any
dumpuri = g_file_get_uri (dumpfile);
g_object_set (G_OBJECT (giosink), "location", dumpuri, NULL);
--- vagalume-0.8.4/src/dbus.c.old 2008-08-16 22:34:41.000000000 +0200
+++ vagalume-0.8.4/src/dbus.c 2008-10-04 00:05:25.000000000 +0200
@@ -477,11 +477,6 @@ lastfm_dbus_init(void)
return DBUS_INIT_ERROR;
}
- if (result == DBUS_REQUEST_NAME_REPLY_EXISTS) {
- g_debug("Another instance is running");
- return DBUS_INIT_ALREADY_RUNNING;
- }
-
return DBUS_INIT_OK;
}
--- vagalume-0.8.4/src/controller.c.old 2008-10-04 00:14:47.000000000 +0200
+++ vagalume-0.8.4/src/controller.c 2008-10-04 00:03:50.000000000 +0200
@@ -1174,7 +1174,7 @@ controller_save_song (void)
savedfile = g_strconcat (usercfg->download_dir, "/", filename, ".", usercfg->extension, NULL);
// Create the destination path if it doesn't exist
- srcpath = g_file_new_for_path (g_strdup_printf ("%s/vagalume-%s", g_get_tmp_dir (), g_get_user_name ()));
+ srcpath = g_file_new_for_path (g_strdup_printf ("%s/vagalume-%s", g_get_tmp_dir (), usercfg->username));
destpath = g_file_new_for_path (savedfile);
pathparent = g_file_get_parent (destpath);
|
Muss ich da noch mehr verändern? Inhalt vagalume-0.8.4/src/audio.c.rej:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | --- vagalume-0.8.4/src/audio.c.old 2008-10-04 00:14:47.000000000 +0200
+++ vagalume-0.8.4/src/audio.c 2008-10-04 00:04:35.000000000 +0200
@@ -298,9 +301,9 @@
// Create the temp file and link it to giosink
GFile *dumpfile;
char *dumpuri;
- dumppath = g_strdup_printf ("%s/vagalume-%s", g_get_tmp_dir (), g_get_user_name ());
+ dumppath = g_strdup_printf ("%s/vagalume-%s", g_get_tmp_dir (), usercfg->username);
dumpfile = g_file_new_for_path (dumppath);
- controller_del_dump (dumppath); // delete the previous dump file if any
+// controller_del_dump (dumppath); // delete the previous dump file if any
dumpuri = g_file_get_uri (dumpfile);
g_object_set (G_OBJECT (giosink), "location", dumpuri, NULL);
|
Inhalt vagalume-0.8.4/src/dbus.c.rej:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | --- vagalume-0.8.4/src/dbus.c.old 2008-08-16 22:34:41.000000000 +0200
+++ vagalume-0.8.4/src/dbus.c 2008-10-04 00:05:25.000000000 +0200
@@ -477,11 +477,6 @@
return DBUS_INIT_ERROR;
}
- if (result == DBUS_REQUEST_NAME_REPLY_EXISTS) {
- g_debug("Another instance is running");
- return DBUS_INIT_ALREADY_RUNNING;
- }
-
return DBUS_INIT_OK;
}
|
Inhalt vagalume-0.8.4/src/controller.c.rej:
| --- vagalume-0.8.4/src/controller.c.old 2008-10-04 00:14:47.000000000 +0200
+++ vagalume-0.8.4/src/controller.c 2008-10-04 00:03:50.000000000 +0200
@@ -1174,7 +1174,7 @@
savedfile = g_strconcat (usercfg->download_dir, "/", filename, ".", usercfg->extension, NULL);
// Create the destination path if it doesn't exist
- srcpath = g_file_new_for_path (g_strdup_printf ("%s/vagalume-%s", g_get_tmp_dir (), g_get_user_name ()));
+ srcpath = g_file_new_for_path (g_strdup_printf ("%s/vagalume-%s", g_get_tmp_dir (), usercfg->username));
destpath = g_file_new_for_path (savedfile);
pathparent = g_file_get_parent (destpath);
|
Edit: Dateiinhalte eingefügt
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11314
Wohnort: Bremen
|
Hm, sollte eigentlich nicht nötig sein; ich hab's aber nicht getestet. Versuch mal, den multiple-patch in das Vagalume-0.8.4-Verzeichnis zu stecken, und dann mit patch -p1 < 03_multiple-us.patch Ansonsten einfach händisch die betreffenden Datei ändern, ist, wie geschrieben, nicht viel. so long hank
|
samsung.user
Anmeldungsdatum: 26. Oktober 2010
Beiträge: 91
|
32-Bit Version jetzt seit über 24h am laufen. 4 Instanzen. Läuft einwandfrei! Lediglich die Lautstärkeregelung vermisse ich noch. Die Lautstärke der einzelnen Instanzen lässt sich zwar getrennt über die Audio-Einstellungen regeln, aber nach jedem Song ist die Einstellung wieder hin. Wenn z.B. 3 Instanzen auf "Stumm" geschaltet sind und die 4. das Lied wechselt, ist diese auch auf "Stumm" Ansonsten klappt alles wunderbar!
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11314
Wohnort: Bremen
|
Hi! Die CPU-Last-Geschichte ist bei mir auch nicht konstant; z.T. läuft es eine ganze Zeit auch mit mehreren Instanzen ohne Probleme, aber meist schnellt irgendwann mindestens einer der Kerne auf dauerhafte 100% hoch. Das mit der Lautstärke-Regelung ist noch nicht so ausgereift 😉. Ich hatte den Patch für den Schieber im Fenster selbst versuchsweise mal eingebaut; allerdings gab es da anscheinend Probleme mit dem DBUS-System, so dass die Regelung im Player selbst auf das gesamte Audiosystem Einfluss hatte, und bei jedem Betätigen der Gesamtton ganz runtergeregelt wurde. Ggf. ginge es mit dem Laustärke-Regler-patch, wenn man das Paket ohne DBUS-Support konfiguieren würde (gibt eine Option dazu), müsste ich aber noch mal genauer erforschen. so long hank
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11314
Wohnort: Bremen
|
Hi! Der Patch läuft mit etwas Anpassung auch für 0.8.5. hänge das modifizierte Teil mal an. Die Einschränkungen gelten genauso wie für die alte Version; also bei Erstinstallation erstmal die Konfiguration anpassen (siehe oben im Threda). Allerdings ist der Speicherzugriffsfehler hier meiner Erfahrung nach noch häufiger... Abhilfe schafft die Verwendung des Watchdog.py-Skripts aus dem Vagamule-Artikel; die WatchCat.sh-Version hingegen bricht ab, wenn der Fehler auftritt - weiß der Geier warum. so long hank
- savesong12.patch (57.1 KiB)
- Download savesong12.patch
|
Fischli08
Anmeldungsdatum: 1. November 2011
Beiträge: 6
|
Hallo, finds wirklich klasse dass ihr hier soviel rumpatcht und so. Leider scheinen die Patches auf Ubuntu 11.10 nichtmehr zu laufen. Er sagt immer, dass er das Paket "gnome-media-profiles" nicht findet. Hat das evtl was mit unity zu tun? Weil eig habe ich das Paket schon mehrfach installiert.
Das Prble tritt mit allen gepatchten Versionen auf. Die Originalen lassen sich installieren und auch ausführen ☹
Hab versucht manuell die Paketüberprüfung aus den Patches rauszunehmen (also alles wo gnome-media drin vorkommt gelöscht), hat aber auch nix geholfen.
Wäre für Hilfe dankbar
Fischli Noch der Code:
brems@StefLaptop:~/Desktop/vagalume/vagalume-0.8.4$ ./autogen.sh
+ libtoolize --automake --copy --force
+ aclocal
+ autoconf --force
+ autoheader --force
+ automake --add-missing --copy --force-missing --foreign
+ glib-gettextize --force --copy
Copying file mkinstalldirs
Copying file po/Makefile.in.in
Please add the files
codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 lcmessage.m4
progtest.m4
from the /aclocal directory to your autoconf macro directory
or directly to your aclocal.m4 file.
You will also need config.guess and config.sub, which you can get from
ftp://ftp.gnu.org/pub/gnu/config/.
+ intltoolize --copy --force --automake
+ test x = x
+ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking how to print strings... printf
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking whether the shell understands some XSI constructs... yes
checking whether the shell understands "+="... yes
checking how to convert i686-pc-linux-gnu file names to i686-pc-linux-gnu format... func_convert_file_noop
checking how to convert i686-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for mt... mt
checking if mt is a manifest tool... no
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking whether ln -s works... yes
checking for ANSI C header files... (cached) yes
checking whether NLS is requested... yes
checking for intltool >= 0.35.0... 0.41.1 found
checking for intltool-update... /usr/bin/intltool-update
checking for intltool-merge... /usr/bin/intltool-merge
checking for intltool-extract... /usr/bin/intltool-extract
checking for xgettext... /usr/bin/xgettext
checking for msgmerge... /usr/bin/msgmerge
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/msgfmt
checking for perl... /usr/bin/perl
checking for perl >= 5.8.1... 5.12.4
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for Gtk2... yes
checking for GStreamer... yes
checking for libxml2... yes
checking for libcurl... yes
checking for GIO... yes
checking for dbus_glib... yes
checking for libnotify... yes
checking for Gst_mixer... no
checking for Gtk2 >= 2.10... yes
checking for Gtk2 >= 2.12... yes
checking for Gtk2 >= 2.14... yes
checking for glib >= 2.16... yes
checking for getopt in -lc... yes
checking for curl_easy_escape in -lcurl... yes
"Set IM status" feature enabled
Compiling for Gnome
checking for GIO... yes
checking for MEDIA_PROFILES... no
configure: error: Package requirements (gnome-media-profiles >= 2.11.91) were not met:
No package 'gnome-media-profiles' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables MEDIA_PROFILES_CFLAGS
and MEDIA_PROFILES_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11314
Wohnort: Bremen
|
Hi! Das Problem ist bekannt, leider reichen aber meine Kenntnisse nicht aus, es zu lösen. Das Problem scheint die Umstellung von gtk2 auf gtk3 zu sein, jedenfalls bekomme ich ein entsprechende Meldungen, wenn ich eine auf Natty kompilierte Version unter Oneiric starte. Im Patch wird wohl auf einige derartige Funktionen zurückgegriffen; ich hatte ähnliche Probleme, aber bekomme es nicht in den Griff. Ich verstehe auch nicht ganz, warum das gnome-media-profiles-Paket nicht akzeptiert wird, aber das "alte" lässt sich nicht so installieren. Leider haben sich die "Programmierkundigeren" schon mit der Lastfm-Umstellung auf "Bezahlen für nicht-GB/US/DE-Nutzer" vom Projekt verabschiedet. Leider ist auch TheLastRipper nicht mehr lauffähig, und aus den Paketquellen geflogen. Hilft wohl bald nur noch eine "Virtuelle Maschine"... so long hank
|
Fischli08
Anmeldungsdatum: 1. November 2011
Beiträge: 6
|
Aber wirklich...ich überlege mir wieder auf Ubuntu 11.04 downzugraden...
gibts denn ne Alternative zu Last.fm? Außer libre.fm das weder richtig tut noch die Musik besitzt die man sucht?
Naja, bleibt nurnoch zu hoffen dass ein Programmierkundiger aus DE/GB/USA oder einer der sich mit Proxys auskennt sich dem Projekt wieder annimmt...
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11314
Wohnort: Bremen
|
Hi! Zumindest für TheLastRipper gibt es inzwischen eine Lösung, siehe 3640207 so long hank
|
Fischli08
Anmeldungsdatum: 1. November 2011
Beiträge: 6
|
Heinrich, du bist mein Held.
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11314
Wohnort: Bremen
|
Hi! Inzwischen läuft Vagamule 0.8.5 auch unter Oneiric; allerdings sind einige Anpassungen nötig. Benötigt wird das Paket libgnome-media-profiles-dev; libgnome-media-dev gibts unter Oneiric nicht mehr. In der gepatchten configure.ac die Zeile 407 in
PKG_CHECK_MODULES(MEDIA_PROFILES, libgnome-media-profiles-3.0 >= 3.0.0)
umwandeln. Außerdem müssen die "includes" in src/audio.c, controller.c, uimisc.c und uimisc-gtk.c
#include <profiles/gnome-media-profiles.h>
#include <profiles/audio-profile.h>
jeweils in
#include <libgnome-media-profiles-3.0/libgnome-media-profiles/gnome-media-profiles.h>
#include <libgnome-media-profiles-3.0/libgnome-media-profiles/audio-profile.h> umgeändert werden, weil die includes mit dem neuen Paket einen anderen Pfad haben. Außerdem in uimisc-gtk.c Zeile 452 in
GtkWidget *owadjust;
EDIT oops, muss GtkWidget sein! umwandeln (GtkObject gibts anscheinend nicht mehr). Dann beim Kompilieren ./configure --with-gtk-version=3 verwenden, und nicht autogen.sh einsetzen, sonst gibt's beim Startversuch später eine Fehlermeldung, dass nicht gtk2 und gtk3 gleichzeitig in einem Prozess eingesetzt werden können, der Player startet nicht. Danach sollte es gehen, Voraussetzung ist wieder die Existenz der erweiterten config.xml in ~.vagalume, (siehe oben ) sonst gibts beim Starten erstmal 'nen Speicherzugriffsfehler. Die Version läuft bei mir momentan recht stabil. Hoffe, ich hab' nicht vergessen 😉 Wenn ich Zeit und Lust hab, bau ich vielleicht noch 'nen angepassten Patch für 0.8.5. so long hank
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11314
Wohnort: Bremen
|
Hi! Hab' noch etwas gefeilt und einen patch gebaut; jetzt sollte es einfacher gehen. wget http://vagalume.igalia.com/files/source/vagalume-0.8.5.tar.gz Entpacken, den savesong13-oneiric.patch aus dem Anhang in das entstandene Verzeichnis vagalume-0.8.5 kopieren. In das Verzeichnis wechseln, dort patch -p1 <savesong13-oneiric.patch
./autogen.sh --with-gtk-version=3
make
sudo checkinstall --fstrans=no ausführen. Nicht vergessen, die config.xml zu erstellen/anzupassen! so long hank
- savesong13-oneiric.patch (58.4 KiB)
- Download savesong13-oneiric.patch
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11314
Wohnort: Bremen
|
Hi! Hier noch der Volume-Bar-Patch für die gepatchte Version 0.8.5, getestet mit Lucid. Ob es mit Unity geht, weiß ich nicht, teste ich demnächst, für den ungepatchten Player dürfte es nicht funktionieren. Verfahren wie oben, also in den vagalume-0.8.5-Ordner speichern und nach dem savesong-patch einspielen. so long hank
- volbar085.patch (12.6 KiB)
- Download volbar085.patch
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11314
Wohnort: Bremen
|
Hi! 0.8.5 läuft mit savesong12.patch auch unter Natty, in der config.xml fehlt aber weiterhin Wenn das eingefügt wird, läuft es. Ich finde aber nicht raus, warum das nicht angelegt wird; das Auslesen ist dann ja nicht das Problem... Der 085volbar.patch geht unter natty auch mit Unity. Allerdings darf man nicht die build-deps von Vagalume installieren lassen, oder zumindest dann das Paket libgstreamer-plugins-base0.10-dev wieder entfernen, sonst gibts Komplikationen mit der Systemweiten Lautstärkesteuerung 😉 so long hank
|
samsung.user
Anmeldungsdatum: 26. Oktober 2010
Beiträge: 91
|
Vielen Dank für den Patch! Läuft wunderbar. Seit 2 Tagen ohne aussetzer. Hat n bisschen gedauert bis ich s bauen konnte (lag wahrscheinlich daran das ich jetzt Lubuntu benutze aber nachdem ich alles fehlende installiert hab konnte ich es tatsächlich bauen und auch benutzen. Hab mal wieder Probleme mit den gstreamer gehabt, welche sich aber auch bald gelöst haben. Das mit der config.xml stellt doch niemand vor große Herausforderungen. Könnte man mit dem Patch aber doch in die autogen.sh schreiben, sodass diese dann direkt erzeugt wird. Oder darf autogen.sh nicht dazu "missbraucht" werden? EDIT: Es muss halt dann jeder seine eigene Version bauen. Fertige Packete sind von dem Problem wieder betroffen.
|