[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: RE: RE: Compile errors building Etrax 82 tools



Nathan,

I've had very good results since you wrote your suggestions.  I'm still
working on getting our code to compile, but making progress steadily.  In
the process, I've been writing a set of documentation to step a new Axis 82
user like me through the setup.  I'll post it here for comments once it's
complete.

AXIS support has been dismally dissapointing.  I filed a support request
with them, sent an email and even phoned them and none of these have been
replied to.  They must be busy or short-staffed.


>>  echo -e "blah" < /dev/ttyS0

Would that be echo -e "blah" > /dev/ttyS0  ??

Have you considered using a scripted terminal program for the purpose of
talking to your serial-connected data logger?



Mark Richards



> -----Original Message-----
> From: owner-dev-etrax@xxxxxxx.com
> [mailto:owner-dev-etrax@xxxxxxx.com] On Behalf Of Nathan.Smith@xxxxxxx.gov
> Sent: Tuesday, July 06, 2004 08:37
> To: Mark Richards
> Cc: dev-etrax@xxxxxxx.com
> Subject: Re: RE: RE: Compile errors building Etrax 82 tools
>
>
> Mark,
>
> As I understand it, our current setup uses Campbell
> Scientific- data logger and ethernet interface hardware- and
> a Sprint wireless modem to communicate the information that
> the data logger collects. By replacing the ethernet interface
> hardware with the Axis box, which is smaller and more
> powerful, we may be able to do better remote
> configuration/programming of the system.
>
> At this point I'm compiling some of the programs that we use
> as tools in setting up the systems as we use them now. I've
> got a few of the automated tools done. I was trying to see if
> I could send some commands with the console of a linux box,
> using echo -e "blah" < /dev/ttyS0 (it would be /dev/ttyS2 for
> com2 on the Axis) into the data logger, unable to get it to
> go into a mode I was looking for. So I'll compile another of
> their testing tools made for sending ASCII characters to the logger.
>
> Good luck,
> Nathan
>
> ----- Original Message -----
> From: "Mark Richards" <mark.richards@xxxxxxx.com>
> Date: Saturday, July 3, 2004 12:39 pm
> Subject: RE: RE: Compile errors building Etrax 82 tools
>
> > Nathan,
> >
> > Your reply was enormously helpful.  I think it's rather apalling
> > that the
> > documentation is so lacking in this area.  As I'm going along I'm
> > documenting my own proess.  I'll post it here for comments,
> > corrections,etc.
> >
> > The fundamentals that you outlined work perfectly and it was nice
> > to have
> > sermon running, although the boot_linux -f echoes back as it's
> > erasing...writing... erasing... writing, leaving nothing to guess.
> >
> > My goal was by the end of the weekend to get the thing re-flashed
> > and with a
> > test application.  That's done thanks to your help.
> >
> > We are sort-of data logging.  The device will sit at a
> remote site and
> > through either an RS232-connected modem or via ethernet
> will transfer
> > temperature and other readings to a remote server.
> >
> > What interface are you looking to build for the 82?
> >
> > Mark Richards
> >
> >
> >
> > > -----Original Message-----
> > > From: Nathan.Smith@xxxxxxx.gov">mailto:Nathan.Smith@xxxxxxx.gov]
> > > Sent: Friday, July 02, 2004 17:45
> > > To: Mark Richards
> > > Cc: dev-etrax@xxxxxxx.com
> > > Subject: Re: RE: Compile errors building Etrax 82 tools
> > >
> > >
> > > Mark,
> > > Oh yes, I remember when I was in your shoes. The online
> docs leave
> > > out a lot of tidbits, and in some cases have information that is
> > > from older releases, and no longer are fully correct. Anyway, the
> > > doc you may be looking for is linked from the
> Documentation page...
> > > http://developer.axis.com/doc/software/apps/apps-howto.html
> > > That document takes you through information about how to
> > > 'install' a hello world application. There are a couple
> > > things that come to my mind that might help you. In spite of
> > > all the web docs, doing a "make help" in the devboard_82
> > > directory will tell you about all the "make <options>" available.
> > >
> > > One make of interest is "make images". In
> > > /devboard/target/cris-axis-linux-gnu/  there is a mirror
> of what is
> > > put onto your axis device. Make images (when run from
> > > devboard/) as far as I can tell, simply puts those things into a
> > > couple of image files, kimage and fimage.
> > >
> > > So what puts stuff into the target/cris-axis-linux-gnu
> directory to
> > > be made into images? Whenever you do "make install" in
> devboard/ it
> > > runs the make installs in probably all of the directories in
> > > devboard/apps/ and puts the binaries into
> > > devboard/target/cris-axis-linux-gnu/. "make kernel" is for the
> > > kernel (obviously) and "make files" is for anything else I guess.
> > > Anytime you do one of those 3 makes, you will need to remake the
> > > images.
> > >
> > > One thing the docs have been bad for are for how to get the new
> > > images onto the axis device. I usually like to run sermon in
> > > tools/build/sermon  because it lets me know when the
> device reboots
> > > itself (indicating a finished image write). You'll need a
> null modem
> > > cable for sermon. Now, there seem to be 4 ways to write
> images (in
> > > order of 'permanence'): ktest (writes to RAM) kflash (writes to
> > > flash) boot_linux -f (permantently written) boot_linux -F (writes
> > > like -f but also overwrites the 'rescue' partition) I fail to see
> > > the difference between ktest and kflash, I think they both  lose
> > > their changes when the unit is rebooted. boot_linux is
> > > permanent, and one should never use -F, AFAIK. You do not
> > > need any arguments for ktest of kflash. Once the image is
> > > written, sermon will show the device rebooting, and then u
> > > can login and try uname -a and see if ur kernel is  updated.
> > >
> > > I'm just a summer student here, so I have time to play
> around with
> > > this thing. I've successfully re-compiled the kernel for
> the ability
> > > to mount a usb stick, although I've only tested it on 2 sticks, a
> > > sony (worked) and a pny attache (didn't work). You don't
> happen to
> > > be using the axis for data logging do you? I'd like to
> hear if you
> > > can successfully interface with another comp through serial.
> > >
> > > Good luck getting the tools running,
> > > -Nathan
> > >
> > >
> > > ----- Original Message -----
> > > From: "Mark Richards" <mark.richards@xxxxxxx.com>
> > > Date: Friday, July 2, 2004 12:15 pm
> > > Subject: RE: Compile errors building Etrax 82 tools
> > >
> > > > Nathan,
> > > >
> > > > Thanks for offering your assistance.
> > > >
> > > > You had it right.  I ended up re-building the box
> (redhat 7.3 with
> > > > the stock kernel and tools) and the process is now underway.  I
> > > > didn't like some of
> > > > the errors I've seen during the compilation process,
> but with such
> > > > a complex
> > > > system and different levels of tools, it's understandable.
> > > >
> > > > Following this I need to figure out how to get the
> kernel and then
> > > > the rest of the O/S to the 82 board.  I'm at a loss, so if you
> > > > have any ideas???Unless the ./install process takes
> care of this,
> > > > too? (It's still running,
> > > > so I don't know :) )
> > > >
> > > > I might be missing something in the documentation that AXIS
> > > provides.
> > > > There's a gap between setting up the tools and building
> your first
> > > > application.  Seems to me a step is missing as to how to
> > > re-flash the
> > > > 82.
> > > >
> > > > The board boots and has a 2.4.20 kernel on it, but I want
> > > to start out
> > > > clean.
> > > >
> > > > Mark Richards
> > > >
> > > >
> > > >
> > > > -----Original Message-----
> > > > From: owner-dev-etrax@xxxxxxx.com [mailto:owner-dev-
> > etrax@xxxxxxx.com] On
> > > > BehalfOf Nathan.Smith@xxxxxxx.gov
> > > > Sent: Friday, July 02, 2004 10:14
> > > > To: Mark Richards
> > > > Cc: dev-etrax@xxxxxxx.com
> > > > Subject: Re: Compile errors building Etrax 82 tools
> > > >
> > > >
> > > >
> > > > I have some tips, take them at your own risk, I have limited
> > > > experience and these are just based on my observations.
> First tip,
> > > > create an
> > > >
> > > > axis.sh file the same as init_env and add it to /etc/profile.d/
> > and> >
> > > > change profile.d to run the axis.sh script. That way you can be
> > sure> >
> > > > each new bash you start has those variable set, whether
> it be root
> > > > or a
> > > >
> > > > normal user.
> > > >
> > > >
> > > >
> > > > My second tip is: upgrade. When your kernel is older than
> > > the one your
> > > >
> > > > trying to cross-compile, to me that seems a little odd. So your
> > gcc,> >
> > > > rpm, and other things are probably all old.
> > > >
> > > >
> > > >
> > > > Third: try not to be root when you do this stuff. Unless
> > > you have too
> > > >
> > > > (when install rpm). And then, you might want to chown user:user
> > -R
> > > > dir/ .
> > > >
> > > >
> > > >
> > > > Details about my own experience getting the SDK going:
> You seem to
> > > > have a better grip on things than I do, but I did have a little
> > > > bit of
> > > >
> > > > trouble when I was using the devboard_82_R1-92 package.
> I did the
> > > > kernel patch like you did, etc. The patch seemed to
> upload to the
> > > > box
> > just> > fine
> > > > as well. I had issues when I was doing make install and
> make files
> > > > after doing the demo "Hello World" program. Sometimes it seemed
> > > to randomly
> > > >
> > > > crap out after I don't remember having made any changes. After
> > that> >
> > > > happened and I re-followed the SDK install, I began to make tar
> > > > backups of my axis directory.
> > > >
> > > >
> > > >
> > > > ----- Original Message -----
> > > >
> > > > From: "Mark Richards" <mark.richards@xxxxxxx.com>
> > > >
> > > > Date: Thursday, July 1, 2004 8:15 pm
> > > >
> > > > Subject: Compile errors building Etrax 82 tools
> > > >
> > > >
> > > >
> > > > > I am evaluating an AXIS 82 board as a platform for our
> > > application.
> > > >
> > > > > Actually, a new board will be developed using the ETRAX.
> > > >
> > > > >
> > > >
> > > > > I have the CRIS tools installed and see that init_env
> > > takes care of
> > > >
> > > > > settingup the path for it, etc.
> > > >
> > > > >
> > > >
> > > > > I also untar'd the 2.4.26 kernel. I have a fresh copy from
> > > >
> > > > > kernel.org that
> > > >
> > > > > is on CD and that I use whenever building.
> > > >
> > > > >
> > > >
> > > > > The RPM put CRIS wherever it is supposed to go with no
> > errors. I
> > > >
> > > > > put the
> > > >
> > > > > devboard_82-R1_92.tar.gz in my /home/dev/ directory and
> > > unzipped it
> > > >
> > > > > there.
> > > >
> > > > > I did . ./init_env without a problem and checked the
> SET list to
> > > > make
> > > > > certain
> > > >
> > > > >
> > > >
> > > > > I ran ./install and pointed to the os/linux-2.4.26.
> > > >
> > > > >
> > > >
> > > > > The patches seemed to go off fine...
> > > >
> > > > >
> > > >
> > > > > I then told it to go ahead and build. Here's where things went
> > > >
> > > > > bad... Some
> > > >
> > > > > of the errors seem fundamentally wrong...
> > > >
> > > > >
> > > >
> > > > > Do you want to build the software now (default y)? y
> > > >
> > > > > *** Building software
> > > >
> > > > > make tools
> > > >
> > > > > make[1]: Entering directory `/home/dev/axis/devboard_82'
> > > >
> > > > > make -C tools/build install
> > > >
> > > > > make[2]: Entering directory
> > > `/home/dev/axis/devboard_82/tools/build'
> > > >
> > > > > make -C ccdv install
> > > >
> > > > > BINDIR="/home/dev/axis/devboard_82/tools/build/bin"make[3]:
> > > >
> > > > > Entering directory
> `/home/dev/axis/devboard_82/tools/build/ccdv'
> > > >
> > > > > gcc -Wall -Wshadow
> > > -I/home/dev/axis/devboard_82/target/host/include
> > > >
> > > > > -O0 -g
> > > >
> > > > > -fno-omit-frame-pointer -
> > > >
> > > > > L/home/dev/axis/devboard_82/target/host/lib ccdv.c
> > > >
> > > > > -o ccdv
> > > >
> > > > > install -p -d /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > install -p -m 0755 ccdv @ccdv
> > > >
> > > > > /home/dev/axis/devboard_82/tools/build/binmake[3]: Leaving
> > > >
> > > > > directory `/home/dev/axis/devboard_82/tools/build/ccdv'
> > > >
> > > > > make -C scripts install
> > > >
> > > > > BINDIR="/home/dev/axis/devboard_82/tools/build/bin"make[3]:
> > > >
> > > > > Entering directory
> > > `/home/dev/axis/devboard_82/tools/build/scripts'
> > > >
> > > > >
> > > >
> > > > > install -p -d /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > install -p -m 0755 arpping axls.pl axrequires boot_argus
> > > boot_elinux
> > > >
> > > > > boot_linux buildsrc compiler-version convertcomments.pl
> > > cris-sym-tab
> > > >
> > > > > cvs_diff cvs2cl.pl diff_prodspec find-needed-shlibs.pl
> > fix_cvsroot> >
> > > > > gcc_crisgenindex init_env_elinux.pl install_elinux
> ksymoops-cris
> > > >
> > > > > meta_name2nbrmke2fs_elinux mkfdscript mknod_elinux mkprod
> > mkptable> >
> > > > > mkswinfo multiflash
> > > >
> > > > > optlibs padflashimage prodspec.pm prodspec2configure remotecmd
> > > >
> > > > > strrpl.pl/home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > ln -sfn gcc_cris
> > > >
> > > > >
> /home/dev/axis/devboard_82/tools/build/bin/arm_linux_gccmake[3]:
> > > >
> > > > > Leaving directory
> > `/home/dev/axis/devboard_82/tools/build/scripts'> >
> > > > > make -C axis_internal_scripts install
> > > >
> > > > > BINDIR="/home/dev/axis/devboard_82/tools/build/bin"
> > > >
> > > > > make[3]: Entering directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/axis_internal_scripts'
> > > >
> > > > > install_elinux -p -d
> /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > install_elinux -p -m 0755 axis2sf cvsget.cgi jasm
> > juliette_regs.pl> >
> > > > > sf2axisTGasm.pl /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > make[3]: Leaving directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/axis_internal_scripts'
> > > >
> > > > > make -C genromfs install
> > > >
> > > > > BINDIR="/home/dev/axis/devboard_82/tools/build/bin"
> > > >
> > > > > make[3]: Entering directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/genromfs'
> > > >
> > > > > gcc -Wall -Wshadow
> > > -I/home/dev/axis/devboard_82/target/host/include
> > > >
> > > > > -O0 -g
> > > >
> > > > > -fno-omit-frame-pointer -c -o genromfs.o genromfs.c
> > > >
> > > > > genromfs.c: In function `processdir':
> > > >
> > > > > genromfs.c:690: warning: declaration of `dirfd' shadows global
> > > >
> > > > > declarationgenromfs.c:692: warning: declaration of `link'
> > shadows> >
> > > > > global declaration
> > > >
> > > > > genromfs.c: In function `main':
> > > >
> > > > > genromfs.c:839: warning: implicit declaration of
> function `time'
> > > >
> > > > > genromfs.c:839: warning: long unsigned int format,
> > > unsigned int arg
> > > >
> > > > > (arg 3)
> > > >
> > > > > gcc -L/home/dev/axis/devboard_82/target/host/lib genromfs.o -o
> > > >
> > > > > genromfs_elinux install_elinux -p -d
> > > >
> > > > > /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > install_elinux -p -m 0755 genromfs_elinux
> > > >
> > > > > /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > make[3]: Leaving directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/genromfs'
> > > >
> > > > > make -C imgsum install
> > > >
> > > > > BINDIR="/home/dev/axis/devboard_82/tools/build/bin"make[3]:
> > > >
> > > > > Entering directory
> > `/home/dev/axis/devboard_82/tools/build/imgsum'> >
> > > > > gcc -Wall -Wshadow
> > > -I/home/dev/axis/devboard_82/target/host/include
> > > >
> > > > > -O0 -g
> > > >
> > > > > -fno-omit-frame-pointer
> > > -L/home/dev/axis/devboard_82/target/host/lib
> > > >
> > > > > imgsum.c -o imgsum
> > > >
> > > > > install_elinux -p -d
> /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > install_elinux -p -m 0755 imgsum
> > > >
> > > > > /home/dev/axis/devboard_82/tools/build/binmake[3]: Leaving
> > > >
> > > > > directory `/home/dev/axis/devboard_82/tools/build/imgsum'
> > > >
> > > > > make -C mkcramfs install
> > > >
> > > > > BINDIR="/home/dev/axis/devboard_82/tools/build/bin"
> > > >
> > > > > make[3]: Entering directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/mkcramfs'
> > > >
> > > > > gcc -Wall -Wshadow
> > > -I/home/dev/axis/devboard_82/target/host/include
> > > >
> > > > > -O0 -g
> > > >
> > > > > -fno-omit-frame-pointer -I. -
> > > >
> > > > > L/home/dev/axis/devboard_82/target/host/libmkcramfs.c -lz -o
> > > >
> > > > > mkcramfs gcc -Wall -Wshadow
> > > >
> > > > > -I/home/dev/axis/devboard_82/target/host/include -O0 -g
> > > >
> > > > > -fno-omit-frame-pointer -I. -
> > > >
> > > > > L/home/dev/axis/devboard_82/target/host/libcramfsck.c -lz -o
> > > >
> > > > > cramfsck In file included from /usr/include/linux/fs.h:12,
> > > >
> > > > >
> > > >
> > > > > from cramfsck.c:56:
> > > >
> > > > > /usr/include/linux/wait.h:4: warning: `WNOHANG' redefined
> > > >
> > > > > /usr/include/bits/waitflags.h:26: warning: this is
> the location
> > > > of the
> > > >
> > > > > previous definition
> > > >
> > > > > /usr/include/linux/wait.h:5: warning: `WUNTRACED' redefined
> > > >
> > > > > /usr/include/bits/waitflags.h:27: warning: this is
> the location
> > > > of the
> > > >
> > > > > previous definition
> > > >
> > > > > cramfsck.c: In function `usage':
> > > >
> > > > > cramfsck.c:110: warning: declaration of `stream'
> shadows global
> > > >
> > > > > declarationcramfsck.c: At top level:
> > > >
> > > > > cramfsck.c:376: warning: declaration of `fd' shadows global
> > > >
> > > > > declarationcramfsck.c: In function `do_uncompress':
> > > >
> > > > > cramfsck.c:377: warning: declaration of `fd' shadows global
> > > >
> > > > > declarationcramfsck.c: In function `do_file':
> > > >
> > > > > cramfsck.c:510: warning: declaration of `fd' shadows global
> > > >
> > > > > declarationinstall_elinux -p -d
> > > >
> > > > > /home/dev/axis/devboard_82/tools/build/bininstall_elinux
> > > -p -m 0755
> > > >
> > > > > mkcramfs cramfsck
> > > >
> > > > > /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > make[3]: Leaving directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/mkcramfs'
> > > >
> > > > > make -C mkfs.jffs install
> > > >
> > > > > BINDIR="/home/dev/axis/devboard_82/tools/build/bin"
> > > >
> > > > > make[3]: Entering directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/mkfs.jffs'
> > > >
> > > > > gcc -Wall -Wshadow
> > > -I/home/dev/axis/devboard_82/target/host/include
> > > >
> > > > > -O0 -g
> > > >
> > > > > -fno-omit-frame-pointer
> > > -L/home/dev/axis/devboard_82/target/host/lib
> > > >
> > > > > mkfs.jffs.c -o mkfs.jffs
> > > >
> > > > > mkfs.jffs.c: In function `write_file':
> > > >
> > > > > mkfs.jffs.c:230: warning: unused variable `size'
> > > >
> > > > > install_elinux -p -d
> /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > install_elinux -p -m 0755 mkfs.jffs
> > > >
> > > > > /home/dev/axis/devboard_82/tools/build/bin
> > > >
> > > > > make[3]: Leaving directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/mkfs.jffs'
> > > >
> > > > > make -C mkfs.jffs2 install
> > > >
> > > > > BINDIR="/home/dev/axis/devboard_82/tools/build/bin"
> > > >
> > > > > make[3]: Entering directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/mkfs.jffs2'
> > > >
> > > > > cc -I. -O2 -Wall -c -o crc32.o crc32.c
> > > >
> > > > > gcc: No input files
> > > >
> > > > > make[3]: *** [crc32.o] Error 1
> > > >
> > > > > make[3]: Leaving directory
> > > >
> > > > > `/home/dev/axis/devboard_82/tools/build/mkfs.jffs2'
> > > >
> > > > > make[2]: *** [mkfs.jffs2] Error 2
> > > >
> > > > > make[2]: Leaving directory
> > > `/home/dev/axis/devboard_82/tools/build'
> > > >
> > > > > make[1]: *** [tools] Error 2
> > > >
> > > > > make[1]: Leaving directory `/home/dev/axis/devboard_82'
> > > >
> > > > > make: *** [everything] Error 2
> > > >
> > > > >
> > > >
> > > > >
> > > >
> > > > > What seems strange is that the stock GCC is invoked as the
> > > >
> > > > > compiler.  Maybe
> > > >
> > > > > there's something wrong with the environment.  Shouldn't the
> > CRIS-
> > > >
> > > > > GCC be
> > > >
> > > > > invoked?
> > > >
> > > > >
> > > >
> > > > > I checked everything I could think of. The only issue I found
> > was> >
> > > > > that in
> > > >
> > > > > the Makefile, the statement:
> > > >
> > > > >
> > > >
> > > > > PATH := $(PATH):/usr/local/cris/r56
> > > >
> > > > >
> > > >
> > > > > is set. However the r56 directory does not exist under
> > > cris. The ls
> > > >
> > > > > of cris
> > > >
> > > > > is:
> > > >
> > > > >
> > > >
> > > > > The path is:
> > > >
> > > > >
> > > >
> > > >
> > > PATH=/home/dev/axis/devboard_82/tools/build/bin:/home/dev/axis
> > > /devboard_82/t
> > > >
> > > > > ools
> > > >
> > > > >
> > > >
> > > >
> > > /build/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
> > > :/usr/bin:/usr
> > > >
> > > > > /X11
> > > >
> > > > > R6/bin:/root/bin:/usr/local/cris:/usr/local/cris
> > > >
> > > > >
> > > >
> > > > > which puts the /usr/local/cris at the end of the parsed
> > > path.  Even
> > > >
> > > > > thisdoesn't point to bin, which is another level down.  Also
> > > >
> > > > > there's no link
> > > >
> > > > > file to gcc in the cris directory (or bin) to replace the cris
> > > >
> > > > > compiler with
> > > >
> > > > > gcc.
> > > >
> > > > >
> > > >
> > > > > I'm building on a Linux 7.2 box with a 2.4.7-10 kernel.
> > > >
> > > > >
> > > >
> > > > > Maybe the RPM install of CRIS didn't work (although
> it indicated
> > > >
> > > > > success) or
> > > >
> > > > > perhaps I should do a binary build?  I'm beginning to suspect
> > this> >
> > > > > is at
> > > >
> > > > > least part of the problem.
> > > >
> > > > >
> > > >
> > > > > Anyone have any suggestions?
> > > >
> > > > >
> > > >
> > > > >
> > > >
> > > > >
> > > >
> > > >
> > > >
> > > >
> > >
> >
> >
> >
>