Commit f50d5557 authored by Sebastian Dröge's avatar Sebastian Dröge

Release 1.1.1

parent 143abd26
This source diff could not be displayed because it is too large. You can view the blob instead.
This is GStreamer 1.0.2
Changes since 1.0.1:
* Parallel installability with 0.10.x series
* collectpads: ensure all timestamps are in same time domain
* gobject-introspection: fix GstSample annotations
* add GstElement::post_message() vfunc
* info: allow gst_debug_add_log_function() to be called before gst_init()
* event: allow GST_CLOCK_TIME_NONE as duration for GAP events
* documentation: new chapters and updates for the application development manual and the plugin writer's guide
Bugs fixed since 1.0.1:
* 686456 : g_type_init is no longer required
* 686658 : allocator: fix memory leak in _fallback_mem_copy
* 686659 : preset: remove variable not read
* 686723 : basesrc: generic/states test in -base now hangs with appsrc
* 686787 : testrtpool must be linked to pthreads
Changes since 1.0.0:
* Capsfilter prefers filter caps over passthrough now
* Application Development Manual, Plugin Writer's Guide and other documentation updated and extended for 1.0
* Bug fixes
Bugs fixed since 1.0.0:
* 680862 : identity with single-segment=true gives buffer.pts of CLOCK_TIME_NONE
* 684538 : baseparse: no timestamps after seeking in mp3 or aac
* 684755 : typo - whithin > within
* 684765 : Plugins without a klass in the metadata crashes autoaudiosink
* 684809 : proxypad don't hold a ref to their internal pad while streaming through it
* 684970 : Don't register printf extension for %p when glib is not using system printf
* 684981 : Pipeline hangs on PREROLLING negotiating caps
* 685072 : memory: map(READ)/unmap clears the READONLY status
API additions since 1.0.0:
* gst_base_transform_set_prefer_passthrough()
New features in 1.0.0:
* Parallel installability with 0.10.x series
* See release notes for more details
This is GStreamer 1.1.1
Release notes for GStreamer 1.0.2
Release notes for GStreamer 1.1.1
The GStreamer team is proud to announce a new bug-fix release
......@@ -42,21 +42,62 @@ contains a set of codecs plugins based on libav (formerly gst-ffmpeg)
Features of this release
* Parallel installability with 0.10.x series
* collectpads: ensure all timestamps are in same time domain
* gobject-introspection: fix GstSample annotations
* add GstElement::post_message() vfunc
* info: allow gst_debug_add_log_function() to be called before gst_init()
* event: allow GST_CLOCK_TIME_NONE as duration for GAP events
* documentation: new chapters and updates for the application development manual and the plugin writer's guide
Bugs fixed in this release
* 686456 : g_type_init is no longer required
* 686658 : allocator: fix memory leak in _fallback_mem_copy
* 686659 : preset: remove variable not read
* 686723 : basesrc: generic/states test in -base now hangs with appsrc
* 686787 : testrtpool must be linked to pthreads
* 571832 : [API] add gst_plugin_feature_get_plugin_name()
* 613081 : info: make GST_PTR_FORMAT etc. work on win32, OSX and non-glibc systems
* 638749 : (Duration) queries on a source-only bin are currently not supported
* 679152 : add gst_debug_set_threshold_from_string function ()
* 679315 : g-i: avoid multiple libraries in the shared-library tag
* 683012 : check: add GstTestClock for use in unit testing
* 685555 : collectpads unit test fails
* 685650 : GStreamer should not set the locale
* 687523 : gst-launch: use GST_TIME_FORMAT to report execution time
* 687899 : queue event handling broken with unlinked queue and sticky events
* 688130 : Compilation error when debugging disabled
* 688785 : Provide single include headers
* 688824 : queue: Dropping sticky events on flush without resending them later
* 689043 : gstreamer-1.0.pc declares public dependency on libgthread
* 690515 : tools: bash tab-completion for gst-launch pipelines
* 690557 : Corrected the control of whether a SingleQueue is full or not
* 690908 : adapter: wrong return value on gst_adapter_masked_scan_*
* 690936 : [basesink] Lateness check should be done before ::prepare()
* 691370 : caps intersection is broken for channel-layout / bitmasks
* 691475 : [API] baseparse: need vfunc to intercept queries
* 691828 : GstABI and LibsABI checks fail on ARM
* 692612 : tests: use g_timeout_add_seconds where possible
* 692784 : typefind element pushes caps event before stream_start
* 692809 : gstbitreader-docs.h : Align the comments correctly with the API declaration
* 693314 : gst_element_send_event on GstBin without sink/src element but with sink/src ghostpads
* 693481 : gst-launch: Use signalfd() to handle keyboard interruption
* 694717 : gst_memory_share: assertion `!GST_MEMORY_FLAG_IS_SET (mem, GST_MEMORY_FLAG_NO_SHARE)' failed in flacparse unit test
* 695035 : Recent GstMemory changes cause leaks all over the place
* 695599 : tests: test_read_macros doesn't pass on ARM / raspberry pi
* 695937 : gst-uninstalled script should add gst-editing-services typelib path to GI_TYPELIB_PATH
* 696911 : GstSegment adds lot of warning noise
* 697058 : " git-update.sh " script is missing some modules.
* 697093 : gst-uninstalled script should add orc/orc-test/.libs paths
* 697549 : clock: Make use of HAVE_CLOCK_GETTIME
* 697550 : clock: Winpthreads compatibility
* 697551 : libsabi: W32-compatible ABI tests
* 697608 : netclientclock: gst_net_client_clock_start() always fails on windows
* 697609 : tests: skip GstPoll tests on windows as they are broken
* 697610 : gstpad test fails due to unclean buffers list
* 697872 : plugin: fix name expansion in GST_PLUGIN_DEFINE() macro
* 697970 : info: glibc " %n in writable segment detected " with new printf implementation
* 697990 : pluginfeature: Fix the GstPluginFeature name comparison.
* 698209 : READMEs all claim to be part of 0.10 or 0.9 releases
* 698242 : printf: abort() in custom printf with old printf extension specifiers
* 699767 : typefind: send stream-start after caps
* 699827 : controller: Fix the function signature and a minor typo fix
* 699937 : pad: Event mis-orderng caused by " 418dcd72 pad: Remove SEGMENT sticky events when flushing "
* 699968 : capsfilter: Send caps after segment if source has no caps
* 700806 : pad: Sticky events are dropped before stored on a pad and nothing is resending them
* 701177 : scripts: improve git-update.sh status message
* 701323 : input-selector: crash when requesting " active " property of pad with no selector
* 701632 : gstvalue: Add _append_and_take_value() public variants
* 701633 : gstbuffer: Use internal function for buffer_new_wrapped
==== Download ====
......@@ -93,11 +134,48 @@ subscribe to the gstreamer-devel list.
Contributors to this release
* Alessandro Decina
* Alexander Schrab
* Andre Moreira Magalhaes (andrunko)
* Andrzej Bieniek
* Arnaud Vrac
* B.Prathibha
* Branko Subasic
* Brendan Long
* Christian Fredrik Kalager Schaller
* Daniel Díaz
* David Rothlisberger
* David Schleef
* Douglas Bagnall
* Edward Hervey
* Evan Nemerson
* Gert Michael Kulyk
* Gwenole Beauchesne
* Jan Schmidt
* Jonas Holmberg
* Jose Antonio Santos Cadenas
* Josep Torra
* Krzysztof Konopko
* Luis de Bethencourt
* Mark Nauwelaerts
* Michael Smith
* Miguel Angel Cabrera Moya
* Matthew Waters
* Nate Bogdanowicz
* Nicolas Dufresne
* Niv Sardi
* Olivier Crête
* Philippe Normand
* Sebastian Dröge
* Sebastian Rasmussen
* Simon Feltman
* Sreerenj Balachandran
* Stefan Sauer
* Thiago Santos
* Thibault Saunier
* Thijs Vermeir
* Tim 'mithro' Ansell
* Tim-Philipp Müller
* Vincent Penquerc'h
* Wim Taymans
* italarab@gmail.com
* Руслан Ижбулатов
 
 
\ No newline at end of file
common @ 098c0d74
Subproject commit 01a7a46e258177ffe9cdb09c6518db749b2325d4
Subproject commit 098c0d7432be323d631b95b5d35f6f0840bf21bd
......@@ -4,7 +4,7 @@ dnl initialize autoconf
dnl when going to/from release please set the nano (fourth number) right !
dnl releases only do Wall, git and prerelease does Werror too
dnl
AC_INIT([GStreamer],[1.1.0.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer])
AC_INIT([GStreamer],[1.1.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer])
AG_GST_INIT
dnl initialize automake (we require GNU make)
......@@ -64,7 +64,7 @@ dnl 1.2.5 => 205
dnl 1.10.9 (who knows) => 1009
dnl
dnl sets GST_LT_LDFLAGS
AS_LIBTOOL(GST, 100, 0, 100)
AS_LIBTOOL(GST, 101, 0, 101)
dnl *** autotools stuff ****
......
......@@ -44,7 +44,7 @@
<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>Allocation Src Pad</NICK>
<BLURB>The pad used for gst_pad_alloc_buffer.</BLURB>
<BLURB>The pad ALLOCATION queries will be proxied to (unused).</BLURB>
<DEFAULT></DEFAULT>
</ARG>
......
......@@ -2,7 +2,7 @@ GObject
GInitiallyUnowned
GstObject
GstAllocator
GstDefaultAllocator
GstAllocatorSysmem
GstBus
GstClock
GstControlBinding
......
......@@ -3,10 +3,10 @@
<description>GStreamer core elements</description>
<filename>../../plugins/elements/.libs/libgstcoreelements.so</filename>
<basename>libgstcoreelements.so</basename>
<version>1.1.0.1</version>
<version>1.1.1</version>
<license>LGPL</license>
<source>gstreamer</source>
<package>GStreamer git</package>
<package>GStreamer source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
......
......@@ -38,6 +38,16 @@ hierarchy, and a set of media-agnostic core elements.
</GitRepository>
</repository>
<release>
<Version>
<revision>1.1.1</revision>
<branch>1.1</branch>
<name></name>
<created>2013-06-05</created>
<file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.1.1.tar.xz" />
</Version>
</release>
<release>
<Version>
<revision>1.0.2</revision>
......
......@@ -56,13 +56,16 @@
#define GST_LICENSE "LGPL"
/* package name in plugins */
#define GST_PACKAGE_NAME "GStreamer git"
#define GST_PACKAGE_NAME "GStreamer source release"
/* package origin */
#define GST_PACKAGE_ORIGIN "Unknown package origin"
/* GStreamer package release date/time for plugins as YYYY-MM-DD */
#define GST_PACKAGE_RELEASE_DATETIME "2012-10-25T11:05Z"
#define GST_PACKAGE_RELEASE_DATETIME "2013-06-05"
/* Define if static plugins should be built */
#undef GST_PLUGIN_BUILD_STATIC
/* location of the installed gst-plugin-scanner */
#define GST_PLUGIN_SCANNER_INSTALLED LIBDIR "\\gst-plugin-scanner"
......@@ -166,12 +169,25 @@
/* Define if you have the iconv() function and it works. */
#undef HAVE_ICONV
/* Define to 1 if the system has the type `intmax_t'. */
#undef HAVE_INTMAX_T
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
declares uintmax_t. */
#undef HAVE_INTTYPES_H_WITH_UINTMAX
/* Define to 1 if you have the `localtime_r' function. */
#undef HAVE_LOCALTIME_R
/* Define to 1 if the system has the type long long */
#undef HAVE_LONG_LONG
/* Define to 1 if the system has the type `long long int'. */
#undef HAVE_LONG_LONG_INT
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
......@@ -202,9 +218,6 @@
/* defined if the compiler implements __PRETTY_FUNCTION__ */
#undef HAVE_PRETTY_FUNCTION
/* Defined if we have printf specifier extensions available */
#undef HAVE_PRINTF_EXTENSION
/* Define to 1 if you have the <process.h> header file. */
#define HAVE_PROCESS_H 1
......@@ -217,21 +230,22 @@
/* Have PTHREAD_PRIO_INHERIT. */
#undef HAVE_PTHREAD_PRIO_INHERIT
/* Define to 1 if the system has the type `ptrdiff_t'. */
#undef HAVE_PTRDIFF_T
/* Define if RDTSC is available */
#undef HAVE_RDTSC
/* Define to 1 if you have the `register_printf_function' function. */
#undef HAVE_REGISTER_PRINTF_FUNCTION
/* Define to 1 if you have the `register_printf_specifier' function. */
#undef HAVE_REGISTER_PRINTF_SPECIFIER
/* Define to 1 if you have the `sigaction' function. */
#undef HAVE_SIGACTION
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
uintmax_t. */
#undef HAVE_STDINT_H_WITH_UINTMAX
/* Define to 1 if you have the <stdio_ext.h> header file. */
#undef HAVE_STDIO_EXT_H
......@@ -289,6 +303,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if the system has the type `unsigned long long int'. */
#undef HAVE_UNSIGNED_LONG_LONG_INT
/* Define if valgrind should be used */
#undef HAVE_VALGRIND
......@@ -340,7 +357,7 @@
#define PACKAGE_NAME "GStreamer"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "GStreamer 1.1.0.1"
#define PACKAGE_STRING "GStreamer 1.1.1"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gstreamer"
......@@ -349,7 +366,7 @@
#undef PACKAGE_URL
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.1.0.1"
#define PACKAGE_VERSION "1.1.1"
/* directory where plugins are located */
#ifdef _DEBUG
......@@ -387,7 +404,7 @@
#undef USE_POISONING
/* Version number of package */
#define VERSION "1.1.0.1"
#define VERSION "1.1.1"
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
......@@ -417,3 +434,10 @@
/* We need at least WinXP SP2 for __stat64 */
#undef __MSVCRT_VERSION__
/* Define to the widest signed integer type if <stdint.h> and <inttypes.h> do
not define. */
#undef intmax_t
/* Define to `unsigned int' if <sys/types.h> does not define. */
#undef size_t
......@@ -51,6 +51,7 @@ gst_bin_flags_get_type (void)
{
static gsize id = 0;
static const GFlagsValue values[] = {
{C_FLAGS (GST_BIN_FLAG_NO_RESYNC), "GST_BIN_FLAG_NO_RESYNC", "no-resync"},
{C_FLAGS (GST_BIN_FLAG_LAST), "GST_BIN_FLAG_LAST", "last"},
{0, NULL, NULL}
};
......@@ -107,6 +108,7 @@ gst_buffer_copy_flags_get_type (void)
{C_FLAGS (GST_BUFFER_COPY_META), "GST_BUFFER_COPY_META", "meta"},
{C_FLAGS (GST_BUFFER_COPY_MEMORY), "GST_BUFFER_COPY_MEMORY", "memory"},
{C_FLAGS (GST_BUFFER_COPY_MERGE), "GST_BUFFER_COPY_MERGE", "merge"},
{C_FLAGS (GST_BUFFER_COPY_DEEP), "GST_BUFFER_COPY_DEEP", "deep"},
{0, NULL, NULL}
};
......@@ -597,6 +599,7 @@ gst_event_type_get_type (void)
{C_ENUM (GST_EVENT_SINK_MESSAGE), "GST_EVENT_SINK_MESSAGE", "sink-message"},
{C_ENUM (GST_EVENT_EOS), "GST_EVENT_EOS", "eos"},
{C_ENUM (GST_EVENT_TOC), "GST_EVENT_TOC", "toc"},
{C_ENUM (GST_EVENT_CONTEXT), "GST_EVENT_CONTEXT", "context"},
{C_ENUM (GST_EVENT_SEGMENT_DONE), "GST_EVENT_SEGMENT_DONE", "segment-done"},
{C_ENUM (GST_EVENT_GAP), "GST_EVENT_GAP", "gap"},
{C_ENUM (GST_EVENT_QOS), "GST_EVENT_QOS", "qos"},
......@@ -647,6 +650,27 @@ gst_qos_type_get_type (void)
return (GType) id;
}
GType
gst_stream_flags_get_type (void)
{
static gsize id = 0;
static const GFlagsValue values[] = {
{C_FLAGS (GST_STREAM_FLAG_NONE), "GST_STREAM_FLAG_NONE", "none"},
{C_FLAGS (GST_STREAM_FLAG_SPARSE), "GST_STREAM_FLAG_SPARSE", "sparse"},
{C_FLAGS (GST_STREAM_FLAG_SELECT), "GST_STREAM_FLAG_SELECT", "select"},
{C_FLAGS (GST_STREAM_FLAG_UNSELECT), "GST_STREAM_FLAG_UNSELECT",
"unselect"},
{0, NULL, NULL}
};
if (g_once_init_enter (&id)) {
GType tmp = g_flags_register_static ("GstStreamFlags", values);
g_once_init_leave (&id, tmp);
}
return (GType) id;
}
/* enumerations from "gstformat.h" */
GType
gst_format_get_type (void)
......@@ -819,6 +843,10 @@ gst_message_type_get_type (void)
{C_FLAGS (GST_MESSAGE_RESET_TIME), "GST_MESSAGE_RESET_TIME", "reset-time"},
{C_FLAGS (GST_MESSAGE_STREAM_START), "GST_MESSAGE_STREAM_START",
"stream-start"},
{C_FLAGS (GST_MESSAGE_NEED_CONTEXT), "GST_MESSAGE_NEED_CONTEXT",
"need-context"},
{C_FLAGS (GST_MESSAGE_HAVE_CONTEXT), "GST_MESSAGE_HAVE_CONTEXT",
"have-context"},
{C_FLAGS (GST_MESSAGE_ANY), "GST_MESSAGE_ANY", "any"},
{0, NULL, NULL}
};
......@@ -941,6 +969,10 @@ gst_memory_flags_get_type (void)
"zero-prefixed"},
{C_FLAGS (GST_MEMORY_FLAG_ZERO_PADDED), "GST_MEMORY_FLAG_ZERO_PADDED",
"zero-padded"},
{C_FLAGS (GST_MEMORY_FLAG_PHYSICALLY_CONTIGUOUS),
"GST_MEMORY_FLAG_PHYSICALLY_CONTIGUOUS", "physically-contiguous"},
{C_FLAGS (GST_MEMORY_FLAG_NOT_MAPPABLE), "GST_MEMORY_FLAG_NOT_MAPPABLE",
"not-mappable"},
{C_FLAGS (GST_MEMORY_FLAG_LAST), "GST_MEMORY_FLAG_LAST", "last"},
{0, NULL, NULL}
};
......@@ -1164,6 +1196,26 @@ gst_pad_probe_type_get_type (void)
"GST_PAD_PROBE_TYPE_QUERY_UPSTREAM", "query-upstream"},
{C_FLAGS (GST_PAD_PROBE_TYPE_PUSH), "GST_PAD_PROBE_TYPE_PUSH", "push"},
{C_FLAGS (GST_PAD_PROBE_TYPE_PULL), "GST_PAD_PROBE_TYPE_PULL", "pull"},
{C_FLAGS (GST_PAD_PROBE_TYPE_BLOCKING), "GST_PAD_PROBE_TYPE_BLOCKING",
"blocking"},
{C_FLAGS (GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM),
"GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM", "data-downstream"},
{C_FLAGS (GST_PAD_PROBE_TYPE_DATA_UPSTREAM),
"GST_PAD_PROBE_TYPE_DATA_UPSTREAM", "data-upstream"},
{C_FLAGS (GST_PAD_PROBE_TYPE_DATA_BOTH), "GST_PAD_PROBE_TYPE_DATA_BOTH",
"data-both"},
{C_FLAGS (GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM),
"GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM", "block-downstream"},
{C_FLAGS (GST_PAD_PROBE_TYPE_BLOCK_UPSTREAM),
"GST_PAD_PROBE_TYPE_BLOCK_UPSTREAM", "block-upstream"},
{C_FLAGS (GST_PAD_PROBE_TYPE_EVENT_BOTH), "GST_PAD_PROBE_TYPE_EVENT_BOTH",
"event-both"},
{C_FLAGS (GST_PAD_PROBE_TYPE_QUERY_BOTH), "GST_PAD_PROBE_TYPE_QUERY_BOTH",
"query-both"},
{C_FLAGS (GST_PAD_PROBE_TYPE_ALL_BOTH), "GST_PAD_PROBE_TYPE_ALL_BOTH",
"all-both"},
{C_FLAGS (GST_PAD_PROBE_TYPE_SCHEDULING), "GST_PAD_PROBE_TYPE_SCHEDULING",
"scheduling"},
{0, NULL, NULL}
};
......@@ -1421,6 +1473,7 @@ gst_query_type_get_type (void)
{C_ENUM (GST_QUERY_ACCEPT_CAPS), "GST_QUERY_ACCEPT_CAPS", "accept-caps"},
{C_ENUM (GST_QUERY_CAPS), "GST_QUERY_CAPS", "caps"},
{C_ENUM (GST_QUERY_DRAIN), "GST_QUERY_DRAIN", "drain"},
{C_ENUM (GST_QUERY_CONTEXT), "GST_QUERY_CONTEXT", "context"},
{0, NULL, NULL}
};
......@@ -1462,8 +1515,7 @@ gst_scheduling_flags_get_type (void)
{C_FLAGS (GST_SCHEDULING_FLAG_SEQUENTIAL), "GST_SCHEDULING_FLAG_SEQUENTIAL",
"sequential"},
{C_FLAGS (GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED),
"GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED",
"bandwidth-limited"},
"GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED", "bandwidth-limited"},
{0, NULL, NULL}
};
......@@ -1552,6 +1604,7 @@ gst_clock_type_get_type (void)
{C_ENUM (GST_CLOCK_TYPE_REALTIME), "GST_CLOCK_TYPE_REALTIME", "realtime"},
{C_ENUM (GST_CLOCK_TYPE_MONOTONIC), "GST_CLOCK_TYPE_MONOTONIC",
"monotonic"},
{C_ENUM (GST_CLOCK_TYPE_OTHER), "GST_CLOCK_TYPE_OTHER", "other"},
{0, NULL, NULL}
};
......
......@@ -81,6 +81,8 @@ GType gst_event_type_get_type (void);
#define GST_TYPE_EVENT_TYPE (gst_event_type_get_type())
GType gst_qos_type_get_type (void);
#define GST_TYPE_QOS_TYPE (gst_qos_type_get_type())
GType gst_stream_flags_get_type (void);
#define GST_TYPE_STREAM_FLAGS (gst_stream_flags_get_type())
/* enumerations from "gstformat.h" */
GType gst_format_get_type (void);
......
......@@ -57,14 +57,14 @@ G_BEGIN_DECLS
*
* The micro version of GStreamer at compile time:
*/
#define GST_VERSION_MICRO (0)
#define GST_VERSION_MICRO (1)
/**
* GST_VERSION_NANO:
*
* The nano version of GStreamer at compile time:
* Actual releases have 0, GIT versions have 1, prerelease versions have 2-...
*/
#define GST_VERSION_NANO (1)
#define GST_VERSION_NANO (0)
/**
* GST_CHECK_VERSION:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment