Commit 98adcc78 authored by Emmanuel Bertin's avatar Emmanuel Bertin
Browse files

Set XMODEL_IMAGE and YMODEL_IMAGE data types back to double precision (thanks to S.Desai).

Fixed various compilation warnings.
parent 8888bb8d
...@@ -4447,7 +4447,7 @@ fi ...@@ -4447,7 +4447,7 @@ fi
# Override automatic CFLAGS and LDFLAGS with those of user # Override automatic CFLAGS and LDFLAGS with those of user
if test "$enable_auto_flags" = "yes"; then if test "$enable_auto_flags" = "yes"; then
CFLAGS="" CFLAGS=""
LDFLAGS ="" LDFLAGS=""
   
msg="for C compiler optimization flags" msg="for C compiler optimization flags"
{ $as_echo "$as_me:$LINENO: checking $msg" >&5 { $as_echo "$as_me:$LINENO: checking $msg" >&5
......
...@@ -61,7 +61,7 @@ AC_ISC_POSIX ...@@ -61,7 +61,7 @@ AC_ISC_POSIX
# Override automatic CFLAGS and LDFLAGS with those of user # Override automatic CFLAGS and LDFLAGS with those of user
if test "$enable_auto_flags" = "yes"; then if test "$enable_auto_flags" = "yes"; then
CFLAGS="" CFLAGS=""
LDFLAGS ="" LDFLAGS=""
ACX_PROG_CC_OPTIM ACX_PROG_CC_OPTIM
fi fi
AC_PROG_LIBTOOL AC_PROG_LIBTOOL
......
.TH SEXTRACTOR "1" "November 2009" "SWarp 2.9.9" "User Commands" .TH SEXTRACTOR "1" "December 2009" "SWarp 2.9.9" "User Commands"
.SH NAME .SH NAME
sex \- extract a source catalog from an astronomical FITS image sex \- extract a source catalog from an astronomical FITS image
.SH SYNOPSIS .SH SYNOPSIS
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* Contents: analyse(), endobject()...: measurements on detections. * Contents: analyse(), endobject()...: measurements on detections.
* *
* Last modify: 01/10/2009 * Last modify: 01/12/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -397,6 +397,8 @@ void endobject(picstruct *field, picstruct *dfield, picstruct *wfield, ...@@ -397,6 +397,8 @@ void endobject(picstruct *field, picstruct *dfield, picstruct *wfield,
if (FLAG(obj2.analtime)) if (FLAG(obj2.analtime))
analtime1 = counter_seconds(); analtime1 = counter_seconds();
else
analtime1 = 0.0; /* To avoid gcc -Wall warnings */
obj = &objlist->obj[n]; obj = &objlist->obj[n];
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* Contents: Routines dealing with float precision FFT. * Contents: Routines dealing with float precision FFT.
* *
* Last modify: 17/11/2009 * Last modify: 01/12/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -133,12 +133,11 @@ OUTPUT -. ...@@ -133,12 +133,11 @@ OUTPUT -.
NOTES For data1 and fdata2, memory must be allocated for NOTES For data1 and fdata2, memory must be allocated for
size[0]* ... * 2*(size[naxis-1]/2+1) floats (padding required). size[0]* ... * 2*(size[naxis-1]/2+1) floats (padding required).
AUTHOR E. Bertin (IAP) AUTHOR E. Bertin (IAP)
VERSION 08/10/2009 VERSION 01/12/2009
***/ ***/
void fft_conv(float *data1, float *fdata2, int *size) void fft_conv(float *data1, float *fdata2, int *size)
{ {
fftwf_complex *fdata0; float *fdata1p,*fdata2p,
float *fdata1p,*fdata2p,*data0,
real,imag, fac; real,imag, fac;
int i, npix,npix2; int i, npix,npix2;
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* Contents: Handle memory allocation for FITS bodies. * Contents: Handle memory allocation for FITS bodies.
* *
* Last modify: 02/11/2009 * Last modify: 19/11/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -191,7 +191,7 @@ INPUT A pointer to the tab structure, ...@@ -191,7 +191,7 @@ INPUT A pointer to the tab structure,
OUTPUT -. OUTPUT -.
NOTES . NOTES .
AUTHOR E. Bertin (IAP) AUTHOR E. Bertin (IAP)
VERSION 02/11/2009 VERSION 19/11/2009
***/ ***/
void read_body(tabstruct *tab, PIXTYPE *ptr, size_t size) void read_body(tabstruct *tab, PIXTYPE *ptr, size_t size)
{ {
...@@ -334,14 +334,14 @@ void read_body(tabstruct *tab, PIXTYPE *ptr, size_t size) ...@@ -334,14 +334,14 @@ void read_body(tabstruct *tab, PIXTYPE *ptr, size_t size)
llblank = (LONGLONG)tab->blank; llblank = (LONGLONG)tab->blank;
for (i=spoonful; i--; bufdata += sizeof(LONGLONG)) for (i=spoonful; i--; bufdata += sizeof(LONGLONG))
*(ptr++) = ((llval = *((LONGLONG *)bufdata)) == llblank)? *(ptr++) = ((llval = *((LONGLONG *)bufdata)) == llblank)?
-BIG : ival*bs + bz; -BIG : llval*bs + bz;
} }
else else
{ {
llublank = (ULONGLONG)tab->blank; llublank = (ULONGLONG)tab->blank;
for (i=spoonful; i--; bufdata += sizeof(ULONGLONG)) for (i=spoonful; i--; bufdata += sizeof(ULONGLONG))
*(ptr++) = ((lluval = *((ULONGLONG *)bufdata)) == llublank)? *(ptr++) = ((lluval = *((ULONGLONG *)bufdata)) == llublank)?
-BIG : iuval*bs + bz; -BIG : lluval*bs + bz;
} }
} }
else else
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* Contents: functions for converting LDAC FITS catalogs. * Contents: functions for converting LDAC FITS catalogs.
* *
* Last modify: 02/11/2009 * Last modify: 19/11/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -133,14 +133,14 @@ INPUT Pointer to element to convert, ...@@ -133,14 +133,14 @@ INPUT Pointer to element to convert,
OUTPUT -. OUTPUT -.
NOTES ttypeconv does not yet handle arrays. NOTES ttypeconv does not yet handle arrays.
AUTHOR E. Bertin (IAP) AUTHOR E. Bertin (IAP)
VERSION 02/11/2009 VERSION 19/11/2009
***/ ***/
void ttypeconv(void *ptrin, void *ptrout, t_type ttypein, t_type ttypeout) void ttypeconv(void *ptrin, void *ptrout, t_type ttypein, t_type ttypeout)
{ {
union {char tbyte; short tshort; int tlong; LONGLONG tlonglong; // union {char tbyte; short tshort; int tlong; LONGLONG tlonglong;
float tfloat; double tdouble; char tstring;} ival; // float tfloat; double tdouble; char tstring;} ival;
#ifdef HAVE_LONG_LONG_INT #ifdef HAVE_LONG_LONG_INT
#define OUTCONV(x, y) \ #define OUTCONV(x, y) \
......
...@@ -900,7 +900,7 @@ int AX_EQ_B_LU(LM_REAL *A, LM_REAL *B, LM_REAL *x, int m) ...@@ -900,7 +900,7 @@ int AX_EQ_B_LU(LM_REAL *A, LM_REAL *B, LM_REAL *x, int m)
__STATIC__ void *buf=NULL; __STATIC__ void *buf=NULL;
__STATIC__ int buf_sz=0; __STATIC__ int buf_sz=0;
int a_sz, ipiv_sz, b_sz, work_sz, tot_sz; int a_sz, ipiv_sz, b_sz, tot_sz;
register int i, j; register int i, j;
int info, *ipiv; int info, *ipiv;
LM_REAL *a, *b; LM_REAL *a, *b;
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* Contents: Model-fitting parameter list for catalog data. * Contents: Model-fitting parameter list for catalog data.
* *
* Last modify: 12/10/2009 * Last modify: 01/12/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -67,10 +67,10 @@ ...@@ -67,10 +67,10 @@
"phot.mag.sb;stat.mean;stat.fit.param", "mag.arcsec-2"}, "phot.mag.sb;stat.mean;stat.fit.param", "mag.arcsec-2"},
{"XMODEL_IMAGE", "X coordinate from model-fitting", {"XMODEL_IMAGE", "X coordinate from model-fitting",
&outobj2.x_prof, H_FLOAT, T_FLOAT, "%10.3f", "pixel", &outobj2.x_prof, H_FLOAT, T_DOUBLE, "%10.3f", "pixel",
"pos.cartesian.x;stat.fit.param;instr.det;meta.main", "pix"}, "pos.cartesian.x;stat.fit.param;instr.det;meta.main", "pix"},
{"YMODEL_IMAGE", "Y coordinate from model-fitting", {"YMODEL_IMAGE", "Y coordinate from model-fitting",
&outobj2.y_prof, H_FLOAT, T_FLOAT, "%10.3f", "pixel", &outobj2.y_prof, H_FLOAT, T_DOUBLE, "%10.3f", "pixel",
"pos.cartesian.y;stat.fit.param;instr.det;meta.main", "pix"}, "pos.cartesian.y;stat.fit.param;instr.det;meta.main", "pix"},
{"XFOCAL_WORLD", "Fitted position along focal-plane x axis", {"XFOCAL_WORLD", "Fitted position along focal-plane x axis",
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* Contents: Generate and handle image patterns for image fitting. * Contents: Generate and handle image patterns for image fitting.
* *
* Last modify: 18/03/2009 * Last modify: 01/12/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -394,7 +394,7 @@ INPUT Pointer to pattern structure, ...@@ -394,7 +394,7 @@ INPUT Pointer to pattern structure,
OUTPUT -. OUTPUT -.
NOTES -. NOTES -.
AUTHOR E. Bertin (IAP) AUTHOR E. Bertin (IAP)
VERSION 18/11/2009 VERSION 01/12/2009
***/ ***/
void pattern_create(patternstruct *pattern, profitstruct *profit) void pattern_create(patternstruct *pattern, profitstruct *profit)
{ {
...@@ -719,7 +719,7 @@ void pattern_create(patternstruct *pattern, profitstruct *profit) ...@@ -719,7 +719,7 @@ void pattern_create(patternstruct *pattern, profitstruct *profit)
pix -= npix; pix -= npix;
pnorm = norm*sbd*sbd; pnorm = norm*sbd*sbd;
norm = (norm > 0.0? 1.0/sqrt(norm) : 1.0); norm = (norm > 0.0? 1.0/sqrt(norm) : 1.0);
*(normt++) = pnorm > 1.0/BIG? norm0/sqrt(pnorm) : 0.0; *(normt++) = pnorm > 1.0/BIG? norm/sqrt(pnorm) : 0.0;
fnorm = (float)norm; fnorm = (float)norm;
for (i=npix; i--;) for (i=npix; i--;)
*(pix++) *= fnorm; *(pix++) *= fnorm;
...@@ -739,7 +739,7 @@ void pattern_create(patternstruct *pattern, profitstruct *profit) ...@@ -739,7 +739,7 @@ void pattern_create(patternstruct *pattern, profitstruct *profit)
pix -= npix; pix -= npix;
pnorm = norm*sbd*sbd; pnorm = norm*sbd*sbd;
norm = (norm > 0.0? 1.0/sqrt(norm) : 1.0); norm = (norm > 0.0? 1.0/sqrt(norm) : 1.0);
*(normt++) = pnorm > 1.0/BIG? norm0/sqrt(pnorm) : 0.0; *(normt++) = pnorm > 1.0/BIG? norm/sqrt(pnorm) : 0.0;
fnorm = (float)norm; fnorm = (float)norm;
for (i=npix; i--;) for (i=npix; i--;)
*(pix++) *= fnorm; *(pix++) *= fnorm;
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* Contents: Fit an arbitrary profile combination to a detection. * Contents: Fit an arbitrary profile combination to a detection.
* *
* Last modify: 19/10/2009 * Last modify: 01/12/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -173,7 +173,7 @@ OUTPUT Pointer to an allocated fit structure (containing details about the ...@@ -173,7 +173,7 @@ OUTPUT Pointer to an allocated fit structure (containing details about the
fit). fit).
NOTES It is a modified version of the lm_minimize() of lmfit. NOTES It is a modified version of the lm_minimize() of lmfit.
AUTHOR E. Bertin (IAP) AUTHOR E. Bertin (IAP)
VERSION 19/10/2009 VERSION 01/12/2009
***/ ***/
void profit_fit(profitstruct *profit, void profit_fit(profitstruct *profit,
picstruct *field, picstruct *wfield, picstruct *field, picstruct *wfield,
...@@ -363,14 +363,14 @@ the_gal++; ...@@ -363,14 +363,14 @@ the_gal++;
/*-- Model coordinates follow the FITS convention (first pixel at 1,1) */ /*-- Model coordinates follow the FITS convention (first pixel at 1,1) */
if (profit->paramlist[PARAM_X]) if (profit->paramlist[PARAM_X])
{ {
obj2->x_prof = profit->ix + *profit->paramlist[PARAM_X] + 1.0; obj2->x_prof = (double)profit->ix + *profit->paramlist[PARAM_X] + 1.0;
obj2->poserrmx2_prof = emx2 = profit->covar[i*(nparam+1)]; obj2->poserrmx2_prof = emx2 = profit->covar[i*(nparam+1)];
} }
else else
emx2 = 0.0; emx2 = 0.0;
if (profit->paramlist[PARAM_Y]) if (profit->paramlist[PARAM_Y])
{ {
obj2->y_prof = profit->iy + *profit->paramlist[PARAM_Y] + 1.0; obj2->y_prof = (double)profit->iy + *profit->paramlist[PARAM_Y] + 1.0;
obj2->poserrmy2_prof = emy2 = profit->covar[j*(nparam+1)]; obj2->poserrmy2_prof = emy2 = profit->covar[j*(nparam+1)];
} }
else else
...@@ -1319,7 +1319,7 @@ INPUT Pointer to the profit structure, ...@@ -1319,7 +1319,7 @@ INPUT Pointer to the profit structure,
OUTPUT The number of valid pixels copied. OUTPUT The number of valid pixels copied.
NOTES Global preferences are used. NOTES Global preferences are used.
AUTHOR E. Bertin (IAP) AUTHOR E. Bertin (IAP)
VERSION 07/10/2009 VERSION 01/12/2009
***/ ***/
int profit_copyobjpix(profitstruct *profit, picstruct *field, int profit_copyobjpix(profitstruct *profit, picstruct *field,
picstruct *wfield) picstruct *wfield)
...@@ -1328,7 +1328,7 @@ int profit_copyobjpix(profitstruct *profit, picstruct *field, ...@@ -1328,7 +1328,7 @@ int profit_copyobjpix(profitstruct *profit, picstruct *field,
PIXTYPE *pixin,*spixin, *wpixin,*swpixin, *pixout,*wpixout, PIXTYPE *pixin,*spixin, *wpixin,*swpixin, *pixout,*wpixout,
backnoise2, invgain, satlevel, wthresh, pix,spix, wpix,swpix; backnoise2, invgain, satlevel, wthresh, pix,spix, wpix,swpix;
int i,x,y, xmin,xmax,ymin,ymax, w,h,dw, npix, off, gainflag, int i,x,y, xmin,xmax,ymin,ymax, w,h,dw, npix, off, gainflag,
badflag, sflag, sx,sy,sn,sw, rem, ix,iy; badflag, sflag, sx,sy,sn,sw, ix,iy;
/* First put the image background to -BIG */ /* First put the image background to -BIG */
pixout = profit->objpix; pixout = profit->objpix;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* Contents: Fit the PSF to a detection. * Contents: Fit the PSF to a detection.
* *
* Last modify: 19/08/2009 * Last modify: 01/12/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -329,7 +329,7 @@ void psf_fit(psfstruct *psf, picstruct *field, picstruct *wfield, ...@@ -329,7 +329,7 @@ void psf_fit(psfstruct *psf, picstruct *field, picstruct *wfield,
r2, valmax, psf_fwhm; r2, valmax, psf_fwhm;
float **psfmasks, **psfmaskx,**psfmasky, float **psfmasks, **psfmaskx,**psfmasky,
*ps, *dh, *wh, pixstep,fluxerr; *ps, *dh, *wh, pixstep,fluxerr;
PIXTYPE *datah, *weighth, *cpix; PIXTYPE *datah, *weighth;
int i,j,p, npsf,npsfmax, npix, nppix, ix,iy,niter, int i,j,p, npsf,npsfmax, npix, nppix, ix,iy,niter,
width, height, pwidth,pheight, x,y, width, height, pwidth,pheight, x,y,
xmax,ymax, wbad, gainflag, convflag, npsfflag, xmax,ymax, wbad, gainflag, convflag, npsfflag,
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* Contents: functions for extraction of connected pixels from * Contents: functions for extraction of connected pixels from
* a pixmap. * a pixmap.
* *
* Last modify: 01/10/2009 * Last modify: 01/12/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -48,7 +48,7 @@ INPUT Measurement field pointer, ...@@ -48,7 +48,7 @@ INPUT Measurement field pointer,
OUTPUT -. OUTPUT -.
NOTES -. NOTES -.
AUTHOR E. Bertin (IAP) AUTHOR E. Bertin (IAP)
VERSION 01/10/2009 VERSION 01/12/2009
***/ ***/
void scanimage(picstruct *field, picstruct *dfield, picstruct **pffield, void scanimage(picstruct *field, picstruct *dfield, picstruct **pffield,
int nffield, picstruct *wfield, picstruct *dwfield) int nffield, picstruct *wfield, picstruct *dwfield)
...@@ -290,14 +290,11 @@ void scanimage(picstruct *field, picstruct *dfield, picstruct **pffield, ...@@ -290,14 +290,11 @@ void scanimage(picstruct *field, picstruct *dfield, picstruct **pffield,
else else
dscan = scan; dscan = scan;
if (cdwfield && PLISTEXIST(wflag))
/*------ Copy the previously filtered weight line to track bad pixel limits */
{
}
if (prefs.filter_flag) if (prefs.filter_flag)
{ {
filter(cfield, cdscan, cfield->y); filter(cfield, cdscan, cfield->y);
if (cdwfield) if (cdwfield)
{
if (PLISTEXIST(wflag)) if (PLISTEXIST(wflag))
{ {
if (yl==0) if (yl==0)
...@@ -311,6 +308,7 @@ void scanimage(picstruct *field, picstruct *dfield, picstruct **pffield, ...@@ -311,6 +308,7 @@ void scanimage(picstruct *field, picstruct *dfield, picstruct **pffield,
} }
else else
filter(cdwfield, cdwscan, yl); filter(cdwfield, cdwscan, yl);
}
} }
else else
{ {
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* Contents: global type definitions. * Contents: global type definitions.
* *
* Last modify: 01/10/2009 * Last modify: 01/12/2009
* *
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/ */
...@@ -325,7 +325,7 @@ typedef struct ...@@ -325,7 +325,7 @@ typedef struct
float mumax_prof; /* Model peak surf. bri. */ float mumax_prof; /* Model peak surf. bri. */
float mueff_prof; /* Model effective surf. bri. */ float mueff_prof; /* Model effective surf. bri. */
float mumean_prof; /* Mean model effective SB */ float mumean_prof; /* Mean model effective SB */
float x_prof, y_prof; /* Coords from model-fitting*/ double x_prof, y_prof; /* Coords from model-fitting*/
double xf_prof, yf_prof; /* FOCAL coordinates */ double xf_prof, yf_prof; /* FOCAL coordinates */
double xw_prof, yw_prof; /* WORLD coords */ double xw_prof, yw_prof; /* WORLD coords */
double alphas_prof, deltas_prof; /* native alpha, delta */ double alphas_prof, deltas_prof; /* native alpha, delta */
......
Supports Markdown
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