Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
AGULLO Emmanuel
Chameleon
Commits
fd42e344
Commit
fd42e344
authored
Dec 06, 2016
by
Mathieu Faverge
Browse files
Forgot to move some declarations outside the MAGMA section
parent
31f3a887
Changes
1
Show whitespace changes
Inline
Side-by-side
cudablas/include/cudablas_z.h
View file @
fd42e344
...
@@ -39,6 +39,7 @@ int CUDA_zgemm( MORSE_enum transa, MORSE_enum transb, int m, int n, int k, cuDo
...
@@ -39,6 +39,7 @@ int CUDA_zgemm( MORSE_enum transa, MORSE_enum transb, int m, int n, int k, cuDo
int
CUDA_zhemm
(
MORSE_enum
side
,
MORSE_enum
uplo
,
int
m
,
int
n
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
const
cuDoubleComplex
*
B
,
int
ldb
,
cuDoubleComplex
*
beta
,
cuDoubleComplex
*
C
,
int
ldc
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zhemm
(
MORSE_enum
side
,
MORSE_enum
uplo
,
int
m
,
int
n
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
const
cuDoubleComplex
*
B
,
int
ldb
,
cuDoubleComplex
*
beta
,
cuDoubleComplex
*
C
,
int
ldc
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zher2k
(
MORSE_enum
uplo
,
MORSE_enum
trans
,
int
n
,
int
k
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
const
cuDoubleComplex
*
B
,
int
ldb
,
double
*
beta
,
cuDoubleComplex
*
C
,
int
ldc
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zher2k
(
MORSE_enum
uplo
,
MORSE_enum
trans
,
int
n
,
int
k
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
const
cuDoubleComplex
*
B
,
int
ldb
,
double
*
beta
,
cuDoubleComplex
*
C
,
int
ldc
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zherk
(
MORSE_enum
uplo
,
MORSE_enum
trans
,
int
n
,
int
k
,
double
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
double
*
beta
,
cuDoubleComplex
*
B
,
int
ldb
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zherk
(
MORSE_enum
uplo
,
MORSE_enum
trans
,
int
n
,
int
k
,
double
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
double
*
beta
,
cuDoubleComplex
*
B
,
int
ldb
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zlarfb
(
MORSE_enum
side
,
MORSE_enum
trans
,
MORSE_enum
direct
,
MORSE_enum
storev
,
int
M
,
int
N
,
int
K
,
const
cuDoubleComplex
*
V
,
int
LDV
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
C
,
int
LDC
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zparfb
(
MORSE_enum
side
,
MORSE_enum
trans
,
MORSE_enum
direct
,
MORSE_enum
storev
,
int
M1
,
int
N1
,
int
M2
,
int
N2
,
int
K
,
int
L
,
cuDoubleComplex
*
A1
,
int
LDA1
,
cuDoubleComplex
*
A2
,
int
LDA2
,
const
cuDoubleComplex
*
V
,
int
LDV
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
cuDoubleComplex
*
WORKC
,
int
LDWORKC
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zparfb
(
MORSE_enum
side
,
MORSE_enum
trans
,
MORSE_enum
direct
,
MORSE_enum
storev
,
int
M1
,
int
N1
,
int
M2
,
int
N2
,
int
K
,
int
L
,
cuDoubleComplex
*
A1
,
int
LDA1
,
cuDoubleComplex
*
A2
,
int
LDA2
,
const
cuDoubleComplex
*
V
,
int
LDV
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
cuDoubleComplex
*
WORKC
,
int
LDWORKC
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zsymm
(
MORSE_enum
side
,
MORSE_enum
uplo
,
int
m
,
int
n
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
const
cuDoubleComplex
*
B
,
int
ldb
,
cuDoubleComplex
*
beta
,
cuDoubleComplex
*
C
,
int
ldc
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zsymm
(
MORSE_enum
side
,
MORSE_enum
uplo
,
int
m
,
int
n
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
const
cuDoubleComplex
*
B
,
int
ldb
,
cuDoubleComplex
*
beta
,
cuDoubleComplex
*
C
,
int
ldc
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zsyr2k
(
MORSE_enum
uplo
,
MORSE_enum
trans
,
int
n
,
int
k
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
const
cuDoubleComplex
*
B
,
int
ldb
,
cuDoubleComplex
*
beta
,
cuDoubleComplex
*
C
,
int
ldc
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zsyr2k
(
MORSE_enum
uplo
,
MORSE_enum
trans
,
int
n
,
int
k
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
const
cuDoubleComplex
*
B
,
int
ldb
,
cuDoubleComplex
*
beta
,
cuDoubleComplex
*
C
,
int
ldc
,
CUBLAS_STREAM_PARAM
);
...
@@ -47,6 +48,8 @@ int CUDA_ztrmm( MORSE_enum side, MORSE_enum uplo, MORSE_enum transa, MORSE_enum
...
@@ -47,6 +48,8 @@ int CUDA_ztrmm( MORSE_enum side, MORSE_enum uplo, MORSE_enum transa, MORSE_enum
int
CUDA_ztrsm
(
MORSE_enum
side
,
MORSE_enum
uplo
,
MORSE_enum
transa
,
MORSE_enum
diag
,
int
m
,
int
n
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
cuDoubleComplex
*
B
,
int
ldb
,
CUBLAS_STREAM_PARAM
);
int
CUDA_ztrsm
(
MORSE_enum
side
,
MORSE_enum
uplo
,
MORSE_enum
transa
,
MORSE_enum
diag
,
int
m
,
int
n
,
cuDoubleComplex
*
alpha
,
const
cuDoubleComplex
*
A
,
int
lda
,
cuDoubleComplex
*
B
,
int
ldb
,
CUBLAS_STREAM_PARAM
);
int
CUDA_ztsmlq
(
MORSE_enum
side
,
MORSE_enum
trans
,
int
M1
,
int
N1
,
int
M2
,
int
N2
,
int
K
,
int
IB
,
cuDoubleComplex
*
A1
,
int
LDA1
,
cuDoubleComplex
*
A2
,
int
LDA2
,
const
cuDoubleComplex
*
V
,
int
LDV
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
cuDoubleComplex
*
WORKC
,
int
LDWORKC
,
CUBLAS_STREAM_PARAM
);
int
CUDA_ztsmlq
(
MORSE_enum
side
,
MORSE_enum
trans
,
int
M1
,
int
N1
,
int
M2
,
int
N2
,
int
K
,
int
IB
,
cuDoubleComplex
*
A1
,
int
LDA1
,
cuDoubleComplex
*
A2
,
int
LDA2
,
const
cuDoubleComplex
*
V
,
int
LDV
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
cuDoubleComplex
*
WORKC
,
int
LDWORKC
,
CUBLAS_STREAM_PARAM
);
int
CUDA_ztsmqr
(
MORSE_enum
side
,
MORSE_enum
trans
,
int
M1
,
int
N1
,
int
M2
,
int
N2
,
int
K
,
int
IB
,
cuDoubleComplex
*
A1
,
int
LDA1
,
cuDoubleComplex
*
A2
,
int
LDA2
,
const
cuDoubleComplex
*
V
,
int
LDV
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
cuDoubleComplex
*
WORKC
,
int
LDWORKC
,
CUBLAS_STREAM_PARAM
);
int
CUDA_ztsmqr
(
MORSE_enum
side
,
MORSE_enum
trans
,
int
M1
,
int
N1
,
int
M2
,
int
N2
,
int
K
,
int
IB
,
cuDoubleComplex
*
A1
,
int
LDA1
,
cuDoubleComplex
*
A2
,
int
LDA2
,
const
cuDoubleComplex
*
V
,
int
LDV
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
cuDoubleComplex
*
WORKC
,
int
LDWORKC
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zunmlqt
(
MORSE_enum
side
,
MORSE_enum
trans
,
int
M
,
int
N
,
int
K
,
int
IB
,
const
cuDoubleComplex
*
A
,
int
LDA
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
C
,
int
LDC
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zunmqrt
(
MORSE_enum
side
,
MORSE_enum
trans
,
int
M
,
int
N
,
int
K
,
int
IB
,
const
cuDoubleComplex
*
A
,
int
LDA
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
C
,
int
LDC
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
CUBLAS_STREAM_PARAM
);
#if defined(CHAMELEON_USE_MAGMA)
#if defined(CHAMELEON_USE_MAGMA)
int
CUDA_zgelqt
(
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
nb
,
magmaDoubleComplex
*
da
,
magma_int_t
ldda
,
magmaDoubleComplex
*
v
,
magma_int_t
ldv
,
magmaDoubleComplex
*
dt
,
magma_int_t
lddt
,
magmaDoubleComplex
*
t
,
magma_int_t
ldt
,
magmaDoubleComplex
*
dd
,
magmaDoubleComplex
*
d
,
magma_int_t
ldd
,
magmaDoubleComplex
*
tau
,
magmaDoubleComplex
*
hwork
,
magmaDoubleComplex
*
dwork
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zgelqt
(
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
nb
,
magmaDoubleComplex
*
da
,
magma_int_t
ldda
,
magmaDoubleComplex
*
v
,
magma_int_t
ldv
,
magmaDoubleComplex
*
dt
,
magma_int_t
lddt
,
magmaDoubleComplex
*
t
,
magma_int_t
ldt
,
magmaDoubleComplex
*
dd
,
magmaDoubleComplex
*
d
,
magma_int_t
ldd
,
magmaDoubleComplex
*
tau
,
magmaDoubleComplex
*
hwork
,
magmaDoubleComplex
*
dwork
,
CUBLAS_STREAM_PARAM
);
...
@@ -54,7 +57,6 @@ int CUDA_zgeqrt( magma_int_t m, magma_int_t n, magma_int_t nb, magmaDoubleComple
...
@@ -54,7 +57,6 @@ int CUDA_zgeqrt( magma_int_t m, magma_int_t n, magma_int_t nb, magmaDoubleComple
int
CUDA_zgessm
(
char
storev
,
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
k
,
magma_int_t
ib
,
magma_int_t
*
ipiv
,
cuDoubleComplex
*
dL1
,
magma_int_t
lddl1
,
cuDoubleComplex
*
dL
,
magma_int_t
lddl
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
magma_int_t
*
info
);
int
CUDA_zgessm
(
char
storev
,
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
k
,
magma_int_t
ib
,
magma_int_t
*
ipiv
,
cuDoubleComplex
*
dL1
,
magma_int_t
lddl1
,
cuDoubleComplex
*
dL
,
magma_int_t
lddl
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
magma_int_t
*
info
);
int
CUDA_zgetrf_incpiv
(
char
storev
,
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
ib
,
cuDoubleComplex
*
hA
,
magma_int_t
ldha
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
cuDoubleComplex
*
hL
,
magma_int_t
ldhl
,
cuDoubleComplex
*
dL
,
magma_int_t
lddl
,
magma_int_t
*
ipiv
,
cuDoubleComplex
*
dwork
,
magma_int_t
lddwork
,
magma_int_t
*
info
);
int
CUDA_zgetrf_incpiv
(
char
storev
,
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
ib
,
cuDoubleComplex
*
hA
,
magma_int_t
ldha
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
cuDoubleComplex
*
hL
,
magma_int_t
ldhl
,
cuDoubleComplex
*
dL
,
magma_int_t
lddl
,
magma_int_t
*
ipiv
,
cuDoubleComplex
*
dwork
,
magma_int_t
lddwork
,
magma_int_t
*
info
);
int
CUDA_zgetrf_nopiv
(
magma_int_t
m
,
magma_int_t
n
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
magma_int_t
*
info
);
int
CUDA_zgetrf_nopiv
(
magma_int_t
m
,
magma_int_t
n
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
magma_int_t
*
info
);
int
CUDA_zlarfb
(
MORSE_enum
side
,
MORSE_enum
trans
,
MORSE_enum
direct
,
MORSE_enum
storev
,
int
M
,
int
N
,
int
K
,
const
cuDoubleComplex
*
V
,
int
LDV
,
const
cuDoubleComplex
*
T
,
int
LDT
,
cuDoubleComplex
*
C
,
int
LDC
,
cuDoubleComplex
*
WORK
,
int
LDWORK
,
CUBLAS_STREAM_PARAM
);
int
CUDA_zlauum
(
char
uplo
,
magma_int_t
n
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
magma_int_t
*
info
);
int
CUDA_zlauum
(
char
uplo
,
magma_int_t
n
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
magma_int_t
*
info
);
int
CUDA_zpotrf
(
magma_uplo_t
uplo
,
magma_int_t
n
,
magmaDoubleComplex
*
dA
,
magma_int_t
ldda
,
magma_int_t
*
info
);
int
CUDA_zpotrf
(
magma_uplo_t
uplo
,
magma_int_t
n
,
magmaDoubleComplex
*
dA
,
magma_int_t
ldda
,
magma_int_t
*
info
);
int
CUDA_zssssm
(
magma_storev_t
storev
,
magma_int_t
m1
,
magma_int_t
n1
,
magma_int_t
m2
,
magma_int_t
n2
,
magma_int_t
k
,
magma_int_t
ib
,
magmaDoubleComplex
*
dA1
,
magma_int_t
ldda1
,
magmaDoubleComplex
*
dA2
,
magma_int_t
ldda2
,
magmaDoubleComplex
*
dL1
,
magma_int_t
lddl1
,
magmaDoubleComplex
*
dL2
,
magma_int_t
lddl2
,
magma_int_t
*
IPIV
,
magma_int_t
*
info
);
int
CUDA_zssssm
(
magma_storev_t
storev
,
magma_int_t
m1
,
magma_int_t
n1
,
magma_int_t
m2
,
magma_int_t
n2
,
magma_int_t
k
,
magma_int_t
ib
,
magmaDoubleComplex
*
dA1
,
magma_int_t
ldda1
,
magmaDoubleComplex
*
dA2
,
magma_int_t
ldda2
,
magmaDoubleComplex
*
dL1
,
magma_int_t
lddl1
,
magmaDoubleComplex
*
dL2
,
magma_int_t
lddl2
,
magma_int_t
*
IPIV
,
magma_int_t
*
info
);
...
@@ -62,8 +64,6 @@ int CUDA_ztrtri( magma_uplo_t uplo, magma_diag_t diag, magma_int_t n, magmaDoubl
...
@@ -62,8 +64,6 @@ int CUDA_ztrtri( magma_uplo_t uplo, magma_diag_t diag, magma_int_t n, magmaDoubl
int
CUDA_ztslqt
(
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
nb
,
magmaDoubleComplex
*
da1
,
magma_int_t
ldda1
,
magmaDoubleComplex
*
da2
,
magma_int_t
ldda2
,
magmaDoubleComplex
*
a2
,
magma_int_t
lda2
,
magmaDoubleComplex
*
dt
,
magma_int_t
lddt
,
magmaDoubleComplex
*
t
,
magma_int_t
ldt
,
magmaDoubleComplex
*
dd
,
magmaDoubleComplex
*
d
,
magma_int_t
ldd
,
magmaDoubleComplex
*
tau
,
magmaDoubleComplex
*
hwork
,
magmaDoubleComplex
*
dwork
,
CUBLAS_STREAM_PARAM
);
int
CUDA_ztslqt
(
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
nb
,
magmaDoubleComplex
*
da1
,
magma_int_t
ldda1
,
magmaDoubleComplex
*
da2
,
magma_int_t
ldda2
,
magmaDoubleComplex
*
a2
,
magma_int_t
lda2
,
magmaDoubleComplex
*
dt
,
magma_int_t
lddt
,
magmaDoubleComplex
*
t
,
magma_int_t
ldt
,
magmaDoubleComplex
*
dd
,
magmaDoubleComplex
*
d
,
magma_int_t
ldd
,
magmaDoubleComplex
*
tau
,
magmaDoubleComplex
*
hwork
,
magmaDoubleComplex
*
dwork
,
CUBLAS_STREAM_PARAM
);
int
CUDA_ztsqrt
(
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
nb
,
magmaDoubleComplex
*
da1
,
magma_int_t
ldda1
,
magmaDoubleComplex
*
da2
,
magma_int_t
ldda2
,
magmaDoubleComplex
*
a2
,
magma_int_t
lda2
,
magmaDoubleComplex
*
dt
,
magma_int_t
lddt
,
magmaDoubleComplex
*
t
,
magma_int_t
ldt
,
magmaDoubleComplex
*
dd
,
magmaDoubleComplex
*
d
,
magma_int_t
ldd
,
magmaDoubleComplex
*
tau
,
magmaDoubleComplex
*
hwork
,
magmaDoubleComplex
*
dwork
,
CUBLAS_STREAM_PARAM
);
int
CUDA_ztsqrt
(
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
nb
,
magmaDoubleComplex
*
da1
,
magma_int_t
ldda1
,
magmaDoubleComplex
*
da2
,
magma_int_t
ldda2
,
magmaDoubleComplex
*
a2
,
magma_int_t
lda2
,
magmaDoubleComplex
*
dt
,
magma_int_t
lddt
,
magmaDoubleComplex
*
t
,
magma_int_t
ldt
,
magmaDoubleComplex
*
dd
,
magmaDoubleComplex
*
d
,
magma_int_t
ldd
,
magmaDoubleComplex
*
tau
,
magmaDoubleComplex
*
hwork
,
magmaDoubleComplex
*
dwork
,
CUBLAS_STREAM_PARAM
);
int
CUDA_ztstrf
(
char
storev
,
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
ib
,
magma_int_t
nb
,
cuDoubleComplex
*
hU
,
magma_int_t
ldhu
,
cuDoubleComplex
*
dU
,
magma_int_t
lddu
,
cuDoubleComplex
*
hA
,
magma_int_t
ldha
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
cuDoubleComplex
*
hL
,
magma_int_t
ldhl
,
cuDoubleComplex
*
dL
,
magma_int_t
lddl
,
magma_int_t
*
ipiv
,
cuDoubleComplex
*
hwork
,
magma_int_t
ldhwork
,
cuDoubleComplex
*
dwork
,
magma_int_t
lddwork
,
magma_int_t
*
info
);
int
CUDA_ztstrf
(
char
storev
,
magma_int_t
m
,
magma_int_t
n
,
magma_int_t
ib
,
magma_int_t
nb
,
cuDoubleComplex
*
hU
,
magma_int_t
ldhu
,
cuDoubleComplex
*
dU
,
magma_int_t
lddu
,
cuDoubleComplex
*
hA
,
magma_int_t
ldha
,
cuDoubleComplex
*
dA
,
magma_int_t
ldda
,
cuDoubleComplex
*
hL
,
magma_int_t
ldhl
,
cuDoubleComplex
*
dL
,
magma_int_t
lddl
,
magma_int_t
*
ipiv
,
cuDoubleComplex
*
hwork
,
magma_int_t
ldhwork
,
cuDoubleComplex
*
dwork
,
magma_int_t
lddwork
,
magma_int_t
*
info
);
int
CUDA_zunmlqt
(
magma_side_t
side
,
magma_trans_t
trans
,
magma_int_t
M
,
magma_int_t
N
,
magma_int_t
K
,
magma_int_t
IB
,
const
magmaDoubleComplex
*
A
,
magma_int_t
LDA
,
const
magmaDoubleComplex
*
T
,
magma_int_t
LDT
,
magmaDoubleComplex
*
C
,
magma_int_t
LDC
,
magmaDoubleComplex
*
WORK
,
magma_int_t
LDWORK
);
int
CUDA_zunmqrt
(
magma_side_t
side
,
magma_trans_t
trans
,
magma_int_t
M
,
magma_int_t
N
,
magma_int_t
K
,
magma_int_t
IB
,
const
magmaDoubleComplex
*
A
,
magma_int_t
LDA
,
const
magmaDoubleComplex
*
T
,
magma_int_t
LDT
,
magmaDoubleComplex
*
C
,
magma_int_t
LDC
,
magmaDoubleComplex
*
WORK
,
magma_int_t
LDWORK
);
#endif
#endif
#ifdef __cplusplus
#ifdef __cplusplus
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment