Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/gpl.txt
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/gpl.txt	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/gpl.txt	(revision 38313)
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/gpl.txt
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/splash.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/splash.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/andami-theme.xml
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/andami-theme.xml	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/andami-theme.xml	(revision 38313)
@@ -0,0 +1,16 @@
+<AndamiProperties>
+	<ApplicationImages>
+		<SplashImages>
+			<Splash
+				path="splash.png"
+				timer="10000"
+				version="2.0" x="270" y="240"
+				fontsize="18" color="80,170,240"
+				version="2.0.0"/>
+		</SplashImages>
+		<BackgroundImage path="icon.png"/>
+		<WallpaperType value="CENTERED"/>
+		<Icon path="icon.png"/>
+	</ApplicationImages>
+	<ApplicationName value="Andami 2.0.0"/>
+</AndamiProperties>
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/andami-theme.xml
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/README.txt
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/README.txt	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/README.txt	(revision 38313)
@@ -0,0 +1,3 @@
+Use those files as a template for your own andami theme. 
+
+If none provided by any plugin, this theme will be used as the default one.
\ No newline at end of file
Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/theme/icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/plugin-persistence.xsd
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/plugin-persistence.xsd
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/plugin-config.xsd
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/plugin-config.xsd
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/sample-plugins-persistence.xml
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/sample-plugins-persistence.xml	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/sample-plugins-persistence.xml	(revision 38313)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugins-status>
+	<plugin name="gvsig" lastUpdate="237628686">
+		<xml-entity name="config">
+			<property name="dataDirectory" value="c:\"/>
+			<xml-entity>
+				<property name="dataDirectory" value="c:\"/>
+				<property name="dataDirectory" value="c:\"/>
+				<property name="dataDirectory" value="c:\"/>
+			</xml-entity>
+		</xml-entity>
+		<bookmarks>
+			<bookmark text="Recientes/raster">
+				<xml-entity>
+					<property name="projection" value="EPSG:3403"/>
+					<property name="boundinBox" value="12,12,115,115"/>
+				</xml-entity>
+			</bookmark>
+		</bookmarks>
+		<windows>
+			<window id="0" rectangle="0,0,150,150"/>
+			<window id="2" rectangle="50,50,150,150"/>
+			<window id="8" rectangle="100,100,150,150"/>
+			<window id="12" rectangle="150,150,150,150"/>
+		</windows>
+	</plugin>
+	<tool-bars>
+		<tool-bar name="gvsig.herramientas" x-position="0" y-position="1"/>
+		<tool-bar name="gvsig.herramientas" x-position="0" y-position="0"/>
+	</tool-bars>
+</plugins-status>

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/sample-plugins-persistence.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/sample-config.xml
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/sample-config.xml	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/sample-config.xml	(revision 38313)
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<icon src="images/logoGVA.gif" text="gvSIG"/>
+	<resourceBundle name="text"/>
+	<import plugin-name="com.iver.cit.gvsig" />
+	<labelSet class="com.iver.cit.gvsig.gui.View">
+		<label id="1" size="100"/>
+		<label id="2" size="230"/>
+	</labelSet>
+	<libraries>
+		<library file="com.iver.cit.gvsig.jar"/>
+		<library file="wmsclient.jar"/>	
+	</libraries>
+	<extensions>
+		<extension>
+			<class name="com.iver.cit.gvsig.ProjectExtension"/>
+			<menu text="Archivo/nuevo_proyecto" 
+				key="n" mnemonic="n" 
+				tooltip="nuevo_tooltip"
+				action-command="NUEVO" icon="images/new.png"/>
+			<menu text="Archivo/abrir_proyecto" 
+				key="a" mnemonic="a" 
+				tooltip="abrir_tooltip"
+				action-command="ABRIR" icon="images/open.png"/>
+			<menu text="Archivo/guardar_proyecto" 
+				key="g" mnemonic="g" 
+				tooltip="guardar_tooltip"
+				action-command="GUARDAR" icon="images/save.png"/>
+
+			<toolBar>
+				<tool icon="images/new.png" tooltip="nuevo_tooltip"
+					action-command="NUEVO"/>
+				<tool icon="images/open.png" tooltip="abrir_tooltip"
+					action-command="ABRIR"/>
+				<tool icon="images/save.png" tooltip="guardar_tooltip"
+					action-command="GUARDAR"/>
+
+				<!-- these will be added to the containing toolbar -->
+				<combo-scale
+					name="JPEG Quality"
+					elements="15;30;60;70;80;90;100"
+					value="80"
+					action-command="JPEG_QUALITY" />
+
+				<combo-button
+					name="Copy/paste tools">
+				  <combo-button-element icon="images/scissor.png" action-command="CUT" />
+				  <combo-button-element icon="images/paste.png" action-command="PASTE" />
+				  <combo-button-element icon="images/copy.png" action-command="COPY" />
+				</combo-button>
+			</toolBar>
+
+		</extension>
+
+		<extension>
+			<class name="com.iver.cit.gvsig.ZoomPrev"/>
+			<menu text="Vista/Zoom_Previo" icon="images/ZoomPrevio.png"/>
+			<tool-bar name="Herramientas">
+				<action-tool icon="images/ZoomPrevio.png" action-command="ZOOM_PREV" tooltip="Zoom_Previo" position="11"/>
+			</tool-bar>
+			
+			<!-- these will be added to the status-bar (because they are not contained in any toolbar) -->					
+			<combo-scale 
+		  		name="Scale"
+		  		label="Scale:"
+		  		elements="1000;2000;5000;10000;25000;50000;100000;200000;500000;1000000;2000000;5000000"
+	  			value="10000"
+	  			action-command="CHANGE_SCALE" />
+
+			<combo-button
+				name="Tool Mode">
+			  <combo-button-element icon="images/once.png" action-command="USE_ONCE" />
+			  <combo-button-element icon="images/sticky-tool.png" action-command="UNTIL_CHANGED" />
+			</combo-button>
+		</extension>
+		<extension processing-position="2">
+			<class name="com.iver.cit.gvsig.ViewControls"/>
+			<menus>
+				<menu text="Vista/Zoom_Completo" action-command="FULL" icon="images/MapContents.png" tooltip="Zoom completo a la vísta"/>
+				<menu text="Vista/Zoom_Select" action-command="ZOOM_SELECT" icon="image/Select.png"/>
+				<menu text="Vista/Encuadre" action-command="ENCUADRE" icon="images/encuadre.png"/>
+				<menu text="Vista/Seleccion_por_tema" action-command="SELECTIONBYSHAPE"/>
+				<menu text="Vista/configurar_localizador" action-command="CONFIG_LOCATOR"/>		
+				<menu text="Vista/propiedades" action-command="PROPERTIES"/>
+			</menus>
+			<tool-bar name="Herramientas" y-position="1">
+				<action-tool icon="images/MapContents.png" action-command="FULL" tooltip="Zoom_Completo" position="1"/>
+				<action-tool icon="images/encuadre.png" action-command="ENCUADRE" tooltip="gestion_encuadre" last="true" position="2"/>			
+				<selectable-tool group="grupo1" default="true" icon="images/ZoomIn.png" action-command="ZOOM_IN" tooltip="Zoom_Más" position="3"/>
+				<selectable-tool group="grupo1" icon="images/ZoomOut.png" action-command="ZOOM_OUT" position="4"/>
+				<selectable-tool group="grupo1" icon="images/Pan.png" action-command="PAN"  tooltip="Encuadre" position="5"/>
+				<selectable-tool group="grupo1" icon="images/Identify.png" action-command="INFO"  tooltip="informacion" position="6" />
+				<selectable-tool group="grupo2" icon="images/Distancia.png" action-command="MEDICION"  tooltip="medir_distancias" position="7"/>
+				<selectable-tool group="grupo2" icon="images/Poligono16.png" action-command="AREA"  tooltip="medir_area" position="8"/>
+				<selectable-tool group="grupo2" default="true" icon="images/Select.png" action-command="SELPOINT"  tooltip="seleccionar_por_punto" position="9"/>
+				<selectable-tool group="grupo2" icon="images/SelEspacial2b.png" action-command="SELRECT"  tooltip="seleccionar_por_rectangulo" position="10"/>
+			</tool-bar>
+		</extension>
+		<extension>
+			<class name="com.iver.cit.gvsig.ThemeControls"/>
+			<menu text="Tema/propiedades"/>
+		</extension>
+	</extensions>
+
+	<file-extensions>
+		<file-extension description="DGNfiles" ends-with="dgn" dialog="openLayer">
+			<class name="com.iver.cit.gvsig.DGNFileExtension"/>
+		</file-extension>
+		<file-extension description="Rasterfiles" ends-with="ecw,tif,tiff,jpg,png" dialog="openLayer">
+			<class name="com.iver.cit.gvsig.RasterFileExtension"/>
+		</file-extension>
+	</file-extensions>
+</plugin-config>

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/sample-config.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/andami-config.xsd
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/andami-config.xsd
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/andami-config.xml
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/andami-config.xml	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/andami-config.xml	(revision 38313)
@@ -0,0 +1,9 @@
+<andami-config locale-language="es" locale-country="ES" locale-variant="es" pluginsDirectory="c:\tirar">
+	<andami update="yes"/>
+	<plugin name="com.iver.cit.gvsig" update="yes"/>
+	<plugin name="com.iver.core" update="no"/>
+	<andami-options>
+	  <option name="CustomOption1" value="customValue1"/>
+	  <icon-theme name="DefaultTheme" resource="iconThemes/default" basedir="iconThemes" />
+	</andami-options>
+</andami-config>
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/schemas/andami-config.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src-test/org/gvsig/andami/AllTests.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src-test/org/gvsig/andami/AllTests.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src-test/org/gvsig/andami/AllTests.java	(revision 38313)
@@ -0,0 +1,16 @@
+package org.gvsig.andami;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for com.iver.andami");
+		//$JUnit-BEGIN$
+
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src-test/org/gvsig/andami/AllTests.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/castor.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/castor.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/castor.properties	(revision 38313)
@@ -0,0 +1 @@
+org.exolab.castor.indent=true
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/castor.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/compile-classpath.xml
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/compile-classpath.xml	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/compile-classpath.xml	(revision 38313)
@@ -0,0 +1,19 @@
+<project name="_fwAndami.compile-classpath" basedir=".">
+	<!-- defines the classpath to be used for batch-compilation -->
+	<property name="andami" location="../_fwAndami"/>
+	<property name="andamiLibs" location="${andami}/lib"/>
+	<path id="_fwAndami.compile-classpath">
+	    <pathelement location="${andamiLibs}/beans.jar"/>
+   	    <pathelement location="${andamiLibs}/castor-0.9.5.3-xml.jar"/>
+  	    <pathelement location="${andamiLibs}/gvsig-i18n.jar"/>
+	    <pathelement location="${andamiLibs}/iver-utiles.jar"/>
+	    <pathelement location="${andamiLibs}/javaws.jar"/>
+	    <pathelement location="${andamiLibs}/JWizardComponent.jar"/>
+	    <pathelement location="${andamiLibs}/log4j-1.2.8.jar"/>
+	    <pathelement location="${andamiLibs}/tempFileManager.jar"/>
+	    <pathelement location="${andamiLibs}/xercesImpl.jar"/>
+	    <pathelement location="${andamiLibs}/xml-apis.jar"/>
+	    <pathelement location="${andamiLibs}/kxml2.jar"/>
+	    <pathelement location="${andamiLibs}/jcalendar.jar"/>
+	</path>
+</project>
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/compile-classpath.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/iso_639.tab
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/iso_639.tab	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/iso_639.tab	(revision 38313)
@@ -0,0 +1,506 @@
+
+## iso-639.tab
+##
+## Copyright (C) 2005 Alastair McKinstry   <mckinstry@computer.org> 
+## Released under the GNU License; see file COPYING for details
+##
+## PLEASE NOTE: THIS FILE IS DEPRECATED AND SCHEDULED TO BE REMOVED.
+## IT IS FOR BACKWARD-COMPATIBILITY ONLY: PLEASE USE THE ISO-639.XML
+## FILE INSTEAD.
+##
+## This file gives a list of all languages in the ISO-639
+## standard, and is used to provide translations (via gettext)
+##
+## Status: ISO 639-2:1998 + additions and changes until 2003-03-05
+## Source: http://lcweb.loc.gov/standards/iso639-2/englangn.html
+##
+## Columns:
+##   iso-639-2 terminology code
+##   iso-639-2 bibliography code
+##   iso-639-1 code (XX if none exists)
+##   Name (English)
+##
+##
+aar	aar	aa	Afar
+abk	abk	ab	Abkhazian
+ace	ace	XX	Achinese
+ach	ach	XX	Acoli
+ada	ada	XX	Adangme
+ady	ady	XX	Adyghe; Adygei
+afa	afa	XX	Afro-Asiatic (Other)
+afh	afh	XX	Afrihili
+afr	afr	af	Afrikaans
+ain	ain	XX	Ainu
+aka	aka	ak	Akan
+akk	akk	XX	Akkadian
+ale	ale	XX	Aleut
+alg	alg	XX	Algonquian languages
+alt	alt	XX	Southern Altai
+amh	amh	am	Amharic
+ang	ang	XX	English, Old (ca. 450-1100)
+anp	anp	XX	Angika
+apa	apa	XX	Apache languages
+ara	ara	ar	Arabic
+arc	arc	XX	Aramaic
+arg	arg	an	Aragonese
+arn	arn	XX	Araucanian
+arp	arp	XX	Arapaho
+art	art	XX	Artificial (Other)
+arw	arw	XX	Arawak
+asm	asm	as	Assamese
+ast	ast	XX	Asturian; Bable
+ath	ath	XX	Athapascan languages
+aus	aus	XX	Australian languages
+ava	ava	av	Avaric
+ave	ave	ae	Avestan
+awa	awa	XX	Awadhi
+aym	aym	ay	Aymara
+aze	aze	az	Azerbaijani
+bad	bad	XX	Banda
+bai	bai	XX	Bamileke languages
+bak	bak	ba	Bashkir
+bal	bal	XX	Baluchi
+bam	bam	bm	Bambara
+ban	ban	XX	Balinese
+bas	bas	XX	Basa
+bat	bat	XX	Baltic (Other)
+bej	bej	XX	Beja
+bel	bel	be	Belarusian
+bem	bem	XX	Bemba
+ben	ben	bn	Bengali
+ber	ber	XX	Berber (Other)
+bho	bho	XX	Bhojpuri
+bih	bih	bh	Bihari
+bik	bik	XX	Bikol
+bin	bin	XX	Bini
+bis	bis	bi	Bislama
+bla	bla	XX	Siksika
+bnt	bnt	XX	Bantu (Other)
+bod	tib	bo	Tibetan
+bos	bos	bs	Bosnian
+bra	bra	XX	Braj
+bre	bre	br	Breton
+btk	btk	XX	Batak (Indonesia)
+bua	bua	XX	Buriat
+bug	bug	XX	Buginese
+bul	bul	bg	Bulgarian
+byn	byn	XX	Blin; Bilin
+cad	cad	XX	Caddo
+cai	cai	XX	Central American Indian (Other)
+car	car	XX	Carib
+cat	cat	ca	Catalan; Valencian
+cau	cau	XX	Caucasian (Other)
+ceb	ceb	XX	Cebuano
+cel	cel	XX	Celtic (Other)
+ces	cze	cs	Czech
+cha	cha	ch	Chamorro
+chb	chb	XX	Chibcha
+che	che	ce	Chechen
+chg	chg	XX	Chagatai
+chk	chk	XX	Chuukese
+chm	chm	XX	Mari
+chn	chn	XX	Chinook jargon
+cho	cho	XX	Choctaw
+chp	chp	XX	Chipewyan
+chr	chr	XX	Cherokee
+chu	chu	cu	Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
+chv	chv	cv	Chuvash
+chy	chy	XX	Cheyenne
+cmc	cmc	XX	Chamic languages
+cop	cop	XX	Coptic
+cor	cor	kw	Cornish
+cos	cos	co	Corsican
+cpe	cpe	XX	Creoles and pidgins, English based (Other)
+cpf	cpf	XX	Creoles and pidgins, French-based (Other)
+cpp	cpp	XX	Creoles and pidgins, Portuguese-based (Other)
+cre	cre	cr	Cree
+crh	crh	XX	Crimean Tatar; Crimean Turkish
+crp	crp	XX	Creoles and pidgins (Other)
+csb	csb	XX	Kashubian
+cus	cus	XX	Cushitic (Other)
+cym	wel	cy	Welsh
+dak	dak	XX	Dakota
+dan	dan	da	Danish
+dar	dar	XX	Dargwa
+day	day	XX	Dayak
+del	del	XX	Delaware
+den	den	XX	Slave (Athapascan)
+deu	ger	de	German
+dgr	dgr	XX	Dogrib
+din	din	XX	Dinka
+div	div	dv	Divehi; Dhivehi; Maldivian
+doi	doi	XX	Dogri
+dra	dra	XX	Dravidian (Other)
+dsb	dsb	XX	Lower Sorbian
+dua	dua	XX	Duala
+dum	dum	XX	Dutch, Middle (ca. 1050-1350)
+dyu	dyu	XX	Dyula
+dzo	dzo	dz	Dzongkha
+efi	efi	XX	Efik
+egy	egy	XX	Egyptian (Ancient)
+eka	eka	XX	Ekajuk
+ell	gre	el	Greek, Modern (1453-)
+elx	elx	XX	Elamite
+eng	eng	en	English
+enm	enm	XX	English, Middle (1100-1500)
+epo	epo	eo	Esperanto
+est	est	et	Estonian
+eus	baq	eu	Basque
+ewe	ewe	ee	Ewe
+ewo	ewo	XX	Ewondo
+fan	fan	XX	Fang
+fao	fao	fo	Faroese
+fas	per	fa	Persian
+fat	fat	XX	Fanti
+fij	fij	fj	Fijian
+fil	fil	XX	Filipino; Pilipino
+fin	fin	fi	Finnish
+fiu	fiu	XX	Finno-Ugrian (Other)
+fon	fon	XX	Fon
+fra	fre	fr	French
+frm	frm	XX	French, Middle (ca. 1400-1600)
+fro	fro	XX	French, Old (842-ca. 1400)
+frr	frr	XX	Northern Frisian
+frs	frs	XX	Eastern Frisian
+fry	fry	fy	Western Frisian
+ful	ful	ff	Fulah
+fur	fur	XX	Friulian
+gaa	gaa	XX	Ga
+gay	gay	XX	Gayo
+gba	gba	XX	Gbaya
+gem	gem	XX	Germanic (Other)
+gez	gez	XX	Geez
+gil	gil	XX	Gilbertese
+gla	gla	gd	Gaelic; Scottish Gaelic
+gle	gle	ga	Irish
+glg	glg	gl	Galician
+glv	glv	gv	Manx
+gmh	gmh	XX	German, Middle High (ca. 1050-1500)
+goh	goh	XX	German, Old High (ca. 750-1050)
+gon	gon	XX	Gondi
+gor	gor	XX	Gorontalo
+got	got	XX	Gothic
+grb	grb	XX	Grebo
+grc	grc	XX	Greek, Ancient (to 1453)
+grn	grn	gn	Guarani
+gsw	gsw	XX	Alemanic; Swiss German
+guj	guj	gu	Gujarati
+gwi	gwi	XX	GwichÂ´in
+hai	hai	XX	Haida
+hat	hat	ht	Haitian; Haitian Creole
+hau	hau	ha	Hausa
+haw	haw	XX	Hawaiian
+heb	heb	he	Hebrew
+her	her	hz	Herero
+hil	hil	XX	Hiligaynon
+him	him	XX	Himachali
+hin	hin	hi	Hindi
+hit	hit	XX	Hittite
+hmn	hmn	XX	Hmong
+hmo	hmo	ho	Hiri Motu
+hrv	scr	hr	Croatian
+hsb	hsb	XX	Upper Sorbian
+hun	hun	hu	Hungarian
+hup	hup	XX	Hupa
+hye	arm	hy	Armenian
+iba	iba	XX	Iban
+ibo	ibo	ig	Igbo
+ido	ido	io	Ido
+iii	iii	ii	Sichuan Yi
+ijo	ijo	XX	Ijo
+iku	iku	iu	Inuktitut
+ile	ile	ie	Interlingue
+ilo	ilo	XX	Iloko
+ina	ina	ia	Interlingua (International Auxiliary Language Association)
+inc	inc	XX	Indic (Other)
+ind	ind	id	Indonesian
+ine	ine	XX	Indo-European (Other)
+inh	inh	XX	Ingush
+ipk	ipk	ik	Inupiaq
+ira	ira	XX	Iranian (Other)
+iro	iro	XX	Iroquoian languages
+isl	ice	is	Icelandic
+ita	ita	it	Italian
+jav	jav	jv	Javanese
+jbo	jbo	XX	Lojban
+jpn	jpn	ja	Japanese
+jpr	jpr	XX	Judeo-Persian
+jrb	jrb	XX	Judeo-Arabic
+kaa	kaa	XX	Kara-Kalpak
+kab	kab	XX	Kabyle
+kac	kac	XX	Kachin
+kal	kal	kl	Kalaallisut; Greenlandic
+kam	kam	XX	Kamba
+kan	kan	kn	Kannada
+kar	kar	XX	Karen
+kas	kas	ks	Kashmiri
+kat	geo	ka	Georgian
+kau	kau	kr	Kanuri
+kaw	kaw	XX	Kawi
+kaz	kaz	kk	Kazakh
+kbd	kbd	XX	Kabardian
+kha	kha	XX	Khasi
+khi	khi	XX	Khoisan (Other)
+khm	khm	km	Khmer
+kho	kho	XX	Khotanese
+kik	kik	ki	Kikuyu; Gikuyu
+kin	kin	rw	Kinyarwanda
+kir	kir	ky	Kirghiz
+kmb	kmb	XX	Kimbundu
+kok	kok	XX	Konkani
+kom	kom	kv	Komi
+kon	kon	kg	Kongo
+kor	kor	ko	Korean
+kos	kos	XX	Kosraean
+kpe	kpe	XX	Kpelle
+krc	krc	XX	Karachay-Balkar
+krl	krl	XX	Karelian
+kro	kro	XX	Kru
+kru	kru	XX	Kurukh
+kua	kua	kj	Kuanyama; Kwanyama
+kum	kum	XX	Kumyk
+kur	kur	ku	Kurdish
+kut	kut	XX	Kutenai
+lad	lad	XX	Ladino
+lah	lah	XX	Lahnda
+lam	lam	XX	Lamba
+lao	lao	lo	Lao
+lat	lat	la	Latin
+lav	lav	lv	Latvian
+lez	lez	XX	Lezghian
+lim	lim	li	Limburgan; Limburger; Limburgish
+lin	lin	ln	Lingala
+lit	lit	lt	Lithuanian
+lol	lol	XX	Mongo
+loz	loz	XX	Lozi
+ltz	ltz	lb	Luxembourgish; Letzeburgesch
+lua	lua	XX	Luba-Lulua
+lub	lub	lu	Luba-Katanga
+lug	lug	lg	Ganda
+lui	lui	XX	Luiseno
+lun	lun	XX	Lunda
+luo	luo	XX	Luo (Kenya and Tanzania)
+lus	lus	XX	Lushai
+mad	mad	XX	Madurese
+mag	mag	XX	Magahi
+mah	mah	mh	Marshallese
+mai	mai	XX	Maithili
+mak	mak	XX	Makasar
+mal	mal	ml	Malayalam
+man	man	XX	Mandingo
+map	map	XX	Austronesian (Other)
+mar	mar	mr	Marathi
+mas	mas	XX	Masai
+mdf	mdf	XX	Moksha
+mdr	mdr	XX	Mandar
+men	men	XX	Mende
+mga	mga	XX	Irish, Middle (900-1200)
+mic	mic	XX	Mi'kmaq; Micmac
+min	min	XX	Minangkabau
+mis	mis	XX	Miscellaneous languages
+mkd	mac	mk	Macedonian
+mkh	mkh	XX	Mon-Khmer (Other)
+mlg	mlg	mg	Malagasy
+mlt	mlt	mt	Maltese
+mnc	mnc	XX	Manchu
+mni	mni	XX	Manipuri
+mno	mno	XX	Manobo languages
+moh	moh	XX	Mohawk
+mol	mol	mo	Moldavian
+mon	mon	mn	Mongolian
+mos	mos	XX	Mossi
+mri	mao	mi	Maori
+msa	may	ms	Malay
+mul	mul	XX	Multiple languages
+mun	mun	XX	Munda languages
+mus	mus	XX	Creek
+mwl	mwl	XX	Mirandese
+mwr	mwr	XX	Marwari
+mya	bur	my	Burmese
+myn	myn	XX	Mayan languages
+myv	myv	XX	Erzya
+nah	nah	XX	Nahuatl
+nai	nai	XX	North American Indian
+nap	nap	XX	Neapolitan
+nau	nau	na	Nauru
+nav	nav	nv	Navajo; Navaho
+nbl	nbl	nr	Ndebele, South; South Ndebele
+nde	nde	nd	Ndebele, North; North Ndebele
+ndo	ndo	ng	Ndonga
+nds	nds	XX	Low German; Low Saxon; German, Low; Saxon, Low
+nep	nep	ne	Nepali
+new	new	XX	Newari; Nepal Bhasa
+nia	nia	XX	Nias
+nic	nic	XX	Niger-Kordofanian (Other)
+niu	niu	XX	Niuean
+nld	dut	nl	Dutch; Flemish
+nno	nno	nn	Norwegian Nynorsk; Nynorsk, Norwegian
+nob	nob	nb	Norwegian BokmÃ¥l; BokmÃ¥l, Norwegian
+nog	nog	XX	Nogai
+non	non	XX	Norse, Old
+nor	nor	no	Norwegian
+nqo	nqo	XX	N'ko
+nso	nso	XX	Northern Sotho, Pedi; Sepedi
+nub	nub	XX	Nubian languages
+nwc	nwc	XX	Classical Newari; Old Newari; Classical Nepal Bhasa
+nya	nya	ny	Chichewa; Chewa; Nyanja
+nym	nym	XX	Nyamwezi
+nyn	nyn	XX	Nyankole
+nyo	nyo	XX	Nyoro
+nzi	nzi	XX	Nzima
+oci	oci	oc	Occitan (post 1500); ProvenÃ§al
+oji	oji	oj	Ojibwa
+ori	ori	or	Oriya
+orm	orm	om	Oromo
+osa	osa	XX	Osage
+oss	oss	os	Ossetian; Ossetic
+ota	ota	XX	Turkish, Ottoman (1500-1928)
+oto	oto	XX	Otomian languages
+paa	paa	XX	Papuan (Other)
+pag	pag	XX	Pangasinan
+pal	pal	XX	Pahlavi
+pam	pam	XX	Pampanga
+pan	pan	pa	Panjabi; Punjabi
+pap	pap	XX	Papiamento
+pau	pau	XX	Palauan
+peo	peo	XX	Persian, Old (ca. 600-400 B.C.)
+phi	phi	XX	Philippine (Other)
+phn	phn	XX	Phoenician
+pli	pli	pi	Pali
+pol	pol	pl	Polish
+pon	pon	XX	Pohnpeian
+por	por	pt	Portuguese
+pra	pra	XX	Prakrit languages
+pro	pro	XX	ProvenÃ§al, Old (to 1500)
+pus	pus	ps	Pushto
+qaa-qtz	qaa-qtz	XX	Reserved for local use
+que	que	qu	Quechua
+raj	raj	XX	Rajasthani
+rap	rap	XX	Rapanui
+rar	rar	XX	Rarotongan
+roa	roa	XX	Romance (Other)
+roh	roh	rm	Raeto-Romance
+rom	rom	XX	Romany
+ron	rum	ro	Romanian
+run	run	rn	Rundi
+rup	rup	XX	Aromanian; Arumanian; Macedo-Romanian
+rus	rus	ru	Russian
+sad	sad	XX	Sandawe
+sag	sag	sg	Sango
+sah	sah	XX	Yakut
+sai	sai	XX	South American Indian (Other)
+sal	sal	XX	Salishan languages
+sam	sam	XX	Samaritan Aramaic
+san	san	sa	Sanskrit
+sas	sas	XX	Sasak
+sat	sat	XX	Santali
+scn	scn	XX	Sicilian
+sco	sco	XX	Scots
+sel	sel	XX	Selkup
+sem	sem	XX	Semitic (Other)
+sga	sga	XX	Irish, Old (to 900)
+sgn	sgn	XX	Sign Languages
+shn	shn	XX	Shan
+sid	sid	XX	Sidamo
+sin	sin	si	Sinhala; Sinhalese
+sio	sio	XX	Siouan languages
+sit	sit	XX	Sino-Tibetan (Other)
+sla	sla	XX	Slavic (Other)
+slk	slo	sk	Slovak
+slv	slv	sl	Slovenian
+sma	sma	XX	Southern Sami
+sme	sme	se	Northern Sami
+smi	smi	XX	Sami languages (Other)
+smj	smj	XX	Lule Sami
+smn	smn	XX	Inari Sami
+smo	smo	sm	Samoan
+sms	sms	XX	Skolt Sami
+sna	sna	sn	Shona
+snd	snd	sd	Sindhi
+snk	snk	XX	Soninke
+sog	sog	XX	Sogdian
+som	som	so	Somali
+son	son	XX	Songhai
+sot	sot	st	Sotho, Southern
+spa	spa	es	Spanish; Castilian
+sqi	alb	sq	Albanian
+srd	srd	sc	Sardinian
+srn	srn	XX	Sranan Tongo
+srp	scc	sr	Serbian
+srr	srr	XX	Serer
+ssa	ssa	XX	Nilo-Saharan (Other)
+ssw	ssw	ss	Swati
+suk	suk	XX	Sukuma
+sun	sun	su	Sundanese
+sus	sus	XX	Susu
+sux	sux	XX	Sumerian
+swa	swa	sw	Swahili
+swe	swe	sv	Swedish
+syr	syr	XX	Syriac
+tah	tah	ty	Tahitian
+tai	tai	XX	Tai (Other)
+tam	tam	ta	Tamil
+tat	tat	tt	Tatar
+tel	tel	te	Telugu
+tem	tem	XX	Timne
+ter	ter	XX	Tereno
+tet	tet	XX	Tetum
+tgk	tgk	tg	Tajik
+tgl	tgl	tl	Tagalog
+tha	tha	th	Thai
+tig	tig	XX	Tigre
+tir	tir	ti	Tigrinya
+tiv	tiv	XX	Tiv
+tkl	tkl	XX	Tokelau
+tlh	tlh	XX	Klingon; tlhIngan-Hol
+tli	tli	XX	Tlingit
+tmh	tmh	XX	Tamashek
+tog	tog	XX	Tonga (Nyasa)
+ton	ton	to	Tonga (Tonga Islands)
+tpi	tpi	XX	Tok Pisin
+tsi	tsi	XX	Tsimshian
+tsn	tsn	tn	Tswana
+tso	tso	ts	Tsonga
+tuk	tuk	tk	Turkmen
+tum	tum	XX	Tumbuka
+tup	tup	XX	Tupi languages
+tur	tur	tr	Turkish
+tut	tut	XX	Altaic (Other)
+tvl	tvl	XX	Tuvalu
+twi	twi	tw	Twi
+tyv	tyv	XX	Tuvinian
+udm	udm	XX	Udmurt
+uga	uga	XX	Ugaritic
+uig	uig	ug	Uighur; Uyghur
+ukr	ukr	uk	Ukrainian
+umb	umb	XX	Umbundu
+und	und	XX	Undetermined
+urd	urd	ur	Urdu
+uzb	uzb	uz	Uzbek
+vai	vai	XX	Vai
+ven	ven	ve	Venda
+vie	vie	vi	Vietnamese
+vol	vol	vo	VolapÃ¼k
+vot	vot	XX	Votic
+wak	wak	XX	Wakashan languages
+wal	wal	XX	Walamo
+war	war	XX	Waray
+was	was	XX	Washo
+wen	wen	XX	Sorbian languages
+wln	wln	wa	Walloon
+wol	wol	wo	Wolof
+xal	xal	XX	Kalmyk; Oirat
+xho	xho	xh	Xhosa
+yao	yao	XX	Yao
+yap	yap	XX	Yapese
+yid	yid	yi	Yiddish
+yor	yor	yo	Yoruba
+ypk	ypk	XX	Yupik languages
+zap	zap	XX	Zapotec
+zen	zen	XX	Zenaga
+zha	zha	za	Zhuang; Chuang
+zho	chi	zh	Chinese
+znd	znd	XX	Zande
+zul	zul	zu	Zulu
+zun	zun	XX	Zuni
+zxx	zxx	XX	No linguistic content

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/iso_639.tab
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeDir.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeDir.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeDir.java	(revision 38313)
@@ -0,0 +1,113 @@
+package org.gvsig.andami.iconthemes;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * This class extends AbstractIconTheme and implements the abstract methods of this
+ * class. This methods are <code>loadIcon</code> and <code>load</code>. This methods
+ * allows load one icon or all icons in the resource.
+ */
+public class IconThemeDir extends AbstractIconTheme{
+
+	private static Logger logger = LoggerFactory.getLogger(IconThemeDir.class);
+
+	/**
+	 * Constructor.Constructs an Icon Theme with a default one.
+	 * @param def. The default icon theme
+	 */
+	public IconThemeDir(IIconTheme def) {
+		setDefault(def);
+	}
+
+	/**
+	 * Allows load a icon when this is inside in a directoyr. IconName is the name or
+	 * key of the icon and "resource" is the URL or the icon
+	 */
+	@Override
+	protected ImageIcon loadIcon(String iconName,Object resource) {
+		if (resource instanceof URL) {
+			// ok, we got an imagePath, let's see if it's valid
+			ImageIcon icon =  new ImageIcon((URL)resource);
+			if (icon.getImage()!=null) {
+				// the icon was successfully created from the imagePath
+				return icon;
+			}
+			else {
+				logger.error("Registered icon ''{1}'' does not map to a valid image ''{2}''. ",iconName,resource);
+				return null;
+			}
+
+		} else if (resource instanceof ImageIcon) {
+			return (ImageIcon)resource;
+
+		}
+		return null;
+	}
+
+	/**
+	 * Allows to load all icons in the directory.
+	 */
+	@Override
+	public void load() {
+		if (getResource() instanceof File) {
+			File basedir = (File) getResource();
+			if (basedir.isDirectory()) {
+				File[] imageList = basedir.listFiles(new ImageFileFilter());
+				String name;
+				for (int i=imageList.length-1; i>=0; i--) {
+					name = computeKey(imageList[i].getName());
+					try {
+						register(name, imageList[i].toURL());
+					} catch (MalformedURLException e) {}
+				}
+			}
+
+		}
+
+	}
+
+	/**
+	 * This class allows filter the images in the directory. Allows to load the images
+	 * with a apropiate extension.
+	 */
+	class ImageFileFilter implements FilenameFilter {
+		public boolean accept(File dir, String fileName) {
+			String extension = "";
+			int pointPos = fileName.lastIndexOf(".");
+			if (pointPos>0 && pointPos < (fileName.length()-1) )
+				extension = fileName.substring(pointPos+1).toLowerCase();
+			if ( extension.equals("jpg") || extension.equals("jpeg")
+					|| extension.equals("png")
+					|| extension.equals("gif")
+
+					)
+				return true;
+			else
+				return false;
+		}
+	}
+
+	/**
+	 * Returns the key of the image without extension
+	 * @param fileName
+	 * @return string
+	 */
+	private String computeKey(String fileName) {
+		int pointPos = fileName.lastIndexOf(".");
+		if (pointPos!=-1)
+			return fileName.substring(0, pointPos);
+		else
+			return fileName;
+	}
+
+}
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeDir.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeZip.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeZip.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeZip.java	(revision 38313)
@@ -0,0 +1,110 @@
+package org.gvsig.andami.iconthemes;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import javax.swing.ImageIcon;
+
+/**
+ * This class extends AbstractIconTheme and implements the abstract methods of this
+ * class. This methods are <code>loadIcon</code> and <code>load</code>. This methods
+ * allows load one icon or all icons in the resource.
+ */
+public class IconThemeZip extends AbstractIconTheme{
+
+	/**
+	 * Constructor.Constructs an Icon Theme with a default one.
+	 * @param def. The default icon theme
+	 */
+	public IconThemeZip(IIconTheme def) {
+		setDefault(def);
+	}
+
+	/**
+	 * Allows load a icon when this is inside in a Zip file. IconName is the name or
+	 * key of the icon and "resource"
+	 */
+	@Override
+	protected ImageIcon loadIcon(String iconName, Object resource) {
+		if (resource instanceof ZipEntry && getResource() instanceof ZipFile) {
+			ZipEntry entry = (ZipEntry) resource;
+			ZipFile file = (ZipFile) getResource();
+			try {
+				InputStream is = file.getInputStream(entry);
+				int size=(int)entry.getSize();
+				if (size==-1) return null;
+				byte[] b=new byte[size];
+				int offset=0;
+				int chunk=0;
+				while ((size - offset) > 0) {
+					chunk=is.read(b, offset, size - offset);
+					if (chunk==-1) {
+						break;
+					}
+					offset+=chunk;
+				}
+				return new ImageIcon(b);
+			} catch (IOException e) {
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Allows load all icons in the zip file.
+	 */
+	@Override
+	public void load() {
+		if (getResource() instanceof ZipFile) {
+			ZipFile zipFile = (ZipFile) getResource();
+			ImageFileFilter filter = new ImageFileFilter();
+			Enumeration entries = zipFile.entries();
+			while (entries.hasMoreElements()) {
+				ZipEntry entry = (ZipEntry) entries.nextElement();
+				if (!entry.isDirectory() ) {
+					if (filter.accept(new File(zipFile.getName()), entry.getName())) {
+						register(computeKey(entry.getName()), entry);
+					}
+				}
+			}
+
+		}
+	}
+
+	/**
+	 * This class allows filter the images in the zip file. Allows to load the images
+	 * with a apropiate extension.
+	 */
+	class ImageFileFilter implements FilenameFilter {
+		public boolean accept(File dir, String fileName) {
+			String extension = "";
+			int pointPos = fileName.lastIndexOf(".");
+			if (pointPos>0 && pointPos < (fileName.length()-1) )
+				extension = fileName.substring(pointPos+1).toLowerCase();
+			if ( extension.equals("jpg") || extension.equals("jpeg")
+					|| extension.equals("png")
+					|| extension.equals("gif"))
+				return true;
+			else
+				return false;
+		}
+	}
+
+	/**
+	 * Returns the key of the image without extension
+	 * @param fileName
+	 * @return string
+	 */
+	private String computeKey(String fileName) {
+		int pointPos = fileName.lastIndexOf(".");
+		if (pointPos!=-1)
+			return fileName.substring(0, pointPos);
+		else
+			return fileName;
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeZip.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/AbstractIconTheme.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/AbstractIconTheme.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/AbstractIconTheme.java	(revision 38313)
@@ -0,0 +1,332 @@
+/*
+ * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibï¿½ï¿½ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+package org.gvsig.andami.iconthemes;
+
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * <p>This class represents an icon theme, which is basically a mapping of
+ * symbolic icon names, and real icons (or icon paths). This is useful to
+ * change an application's icons in an easy way. An icon theme
+ * is usually read from disk on start up, but can also be created or
+ * modified on a later time.</p>
+ *
+ * <p>Developers are encouraged to always use the
+ * <code>get(iconName, fallbackImage)</code> methods to get icons,
+ * as they ensure that the icons are not overwritten in the theme, but it
+ * also ensures than an image is got in case the icon was still not
+ * registered. Note that in this case, the iconName gets registered
+ * (it is associated with the provided fallbackImage).
+ * </p>
+ *
+ * <p>Developers are encouraged to NOT override icons which are
+ * present in the theme, as this defeats the purpose of IconThemes.</p>
+ *
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ */
+public abstract class AbstractIconTheme implements IIconTheme {
+	private static Logger logger = LoggerFactory.getLogger(AbstractIconTheme.class);
+
+	HashMap<String, Object> iconList = new HashMap<String, Object>();
+	private String name=null;
+	private String description=null;
+	private String version="1.0";
+	private Object resource=null;
+	IIconTheme defaultTheme = null;
+
+
+	/**
+	 * Abstract method that allows load an a icon. This method will be reimplemented by
+	 * inherit classes.
+	 * @param iconName
+	 * @param resource
+	 * @return
+	 */
+	protected abstract ImageIcon loadIcon(String iconName,Object resource) ;
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#load()
+	 */
+	public abstract void load() ;
+
+//	/**
+//	 * Returns the logger
+//	 * @return
+//	 */
+//    protected Logger log() {
+//      return LoggerFactory.getLogger(this.getClass());
+//    }
+
+    /* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#setDefault(com.iver.andami.iconthemes.AbstractIconTheme)
+	 */
+    public void setDefault(IIconTheme def){
+    	if( def == this ) {
+    		defaultTheme = null;
+    	} else {
+    		defaultTheme = def;
+    	}
+    }
+
+    /* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#getDefault()
+	 */
+    public IIconTheme getDefault(){
+    	return defaultTheme;
+    }
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#exists(java.lang.String)
+	 */
+	public boolean exists(String iconName) {
+		if (iconList.containsKey(iconName)) {
+			return true;
+		}
+		if (defaultTheme !=null && defaultTheme.exists(iconName)){
+			return true;
+		}
+		return false;
+	}
+
+	public Iterator<String> iterator() {
+		Set<String> names = new HashSet<String>();
+		
+		if( defaultTheme !=null ) {
+			Iterator<String> it = defaultTheme.iterator();
+			while( it.hasNext() ) {
+				names.add(it.next());
+			}
+		}
+		Iterator<String> it = iconList.keySet().iterator();
+		while( it.hasNext() ) {
+			names.add(it.next());
+		}
+		List<String> names2 = new ArrayList<String>(names);
+		Collections.sort(names2);
+		return names2.iterator();
+	}
+	
+	
+	
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#get(java.lang.String)
+	 */
+	public ImageIcon get(String iconName) {
+		return get(iconName,null);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#get(java.lang.String, java.lang.ClassLoader)
+	 */
+	public ImageIcon get(String iconName, ClassLoader loader) {
+
+		if( loader != null && iconName.contains(".") ) {
+			logger.debug("Loading icon from resource:''{1}''.", iconName);
+			return toImageIcon(loader.getResource(iconName),iconName);
+		}
+
+		Object object = iconList.get(iconName);
+		if (object!=null) {
+			return toImageIcon(object,iconName);
+		}
+		if( defaultTheme!=null && defaultTheme.exists(iconName)) {
+			return  defaultTheme.get(iconName, null);
+		}
+		return getNoIcon();
+	}
+
+	public ImageIcon getNoIcon() {
+		Object object = iconList.get("no-icon");
+		if (object!=null){
+			return toImageIcon(object,"no-icon");
+		}
+		if (defaultTheme==null ){
+			return null;
+		}
+		return defaultTheme.getNoIcon();
+	}
+
+
+	protected ImageIcon toImageIcon(Object object,String iconName){
+		if (object == null){
+			return null;
+		}
+		if( object instanceof URL ) {
+			return new ImageIcon((URL)object);
+		}
+		ImageIcon icon = loadIcon(iconName,object);
+		return icon;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#registerDefault(java.lang.String, javax.swing.ImageIcon)
+	 */
+	public void registerDefault(String iconName, ImageIcon image) {
+		if (defaultTheme!=null)	defaultTheme.register(iconName, image);
+		else register(iconName, image);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#registerDefault(java.lang.String, java.lang.Object)
+	 */
+	public void registerDefault(String iconName, Object resource) {
+		if (defaultTheme!=null) {
+			defaultTheme.register(iconName, resource);
+		} else {
+			register(iconName, resource);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#register(java.lang.String, javax.swing.ImageIcon)
+	 */
+	public void register(String iconName, ImageIcon image) {
+		iconList.put(iconName, image);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#register(java.lang.String, java.lang.Object)
+	 */
+	public void register(String iconName, Object resource) {
+		iconList.put(iconName, resource);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#getName()
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#setName(java.lang.String)
+	 */
+	public void setName(String themeName) {
+		name = themeName;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#getDescription()
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#setDescription(java.lang.String)
+	 */
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#getVersion()
+	 */
+	public String getVersion() {
+		return version;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#setVersion(java.lang.String)
+	 */
+	public void setVersion(String version) {
+		this.version = version;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#getResource()
+	 */
+	public Object getResource() {
+		return resource;
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#setResource(java.lang.Object)
+	 */
+	public void setResource(Object resource) {
+		this.resource = resource;
+	}
+
+	/**
+	 * Returns the name of the icon theme
+	 */
+	public String toString() {
+		return getName();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.iconthemes.IIconTheme#getURL(java.lang.String)
+	 *
+	 */
+	public URL getURL(String iconName) {
+		Object object = defaultTheme.get(iconName);
+		if (object !=null && object instanceof URL)
+			return (URL) object;
+		return null;
+	}
+
+	public String getResourceID(String iconName) {
+		Object icon = null;
+		icon = iconList.get(iconName);
+		if( icon != null ) {
+			return icon.toString();
+		}
+		icon = ((AbstractIconTheme)defaultTheme).iconList.get(iconName);
+		if( icon != null ) {
+			return icon.toString();
+		}
+		return "";
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/AbstractIconTheme.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IIconTheme.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IIconTheme.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IIconTheme.java	(revision 38313)
@@ -0,0 +1,215 @@
+package org.gvsig.andami.iconthemes;
+
+import java.net.URL;
+import java.util.Iterator;
+
+import javax.swing.ImageIcon;
+
+public interface IIconTheme {
+
+	/**
+	 * Load all icons from the IconTheme
+	 */
+	public void load();
+
+	public void setDefault(IIconTheme def);
+
+	public IIconTheme getDefault();
+
+	/**
+	 * Returns <code>true</code> if the icon theme contains a mapping for the
+	 * specified iconName.
+	 *
+	 * @param iconName The key to check if it has been registered in this
+	 * IconTheme
+	 *
+	 * @return <code>true</code> if this IconTheme contains
+	 * <code>iconName</code>, <code>false</code> otherwise.
+	 */
+	public boolean exists(String iconName);
+
+	/**
+	 * Gets the ImageIcon associated with the provided key, if the key
+	 * is present in the theme, or returns <code>null</code> otherwise.
+	 *
+	 * @param iconName
+	 * 			The key whose associated icon is to be retrieved
+	 *
+	 * @return
+	 * 			The icon associated with the provided key, or
+	 * <code>null</code> otherwise.
+	 */
+	public ImageIcon get(String iconName);
+
+	/**
+	 * Gets the ImageIcon associated with the provided key, if the key
+	 * is present in the theme, or returns <code>null</code> otherwise.
+	 *
+	 * @param iconName
+	 * 			The key whose associated icon is to be retrieved
+	 *
+	 * @param loader
+	 * 			Class loader for localice icons when iconName is a
+	 * 			resource name.
+	 *
+	 * @return
+	 * 			The icon associated with the provided key, or
+	 * <code>no-icon</code> otherwise.
+	 */
+	public ImageIcon get(String iconName, ClassLoader loader);
+
+	/**
+	 * <p>Register in this theme the provided iconName and the associated
+	 * image. Developers
+	 * must not override icons already registered, as this defeats the
+	 * purpose of the IconTheme. Therefore, use the <code>exists</code>
+	 * method before using <code>register</code>, to ensure the icon
+	 * is not previously registered.</p>
+	 *
+	 * @param iconName The name of the icon to register. It is the name
+	 * that will be used later to retrieve the icon.
+	 *
+	 * @param image The image that is going to be associated with the
+	 * provided icon name.
+	 */
+	public void registerDefault(String iconName, ImageIcon image);
+
+	/**
+	 * <p>Register in this theme the provided iconName and the associated
+	 * resource. Developers must not override icons already registered,
+	 * as this defeats the purpose of the IconTheme. Therefore, use the
+	 * <code>exists</code> method before using <code>register</code>, to
+	 * ensure the icon is not previously registered.</p>
+	 *
+	 * @param iconName The name of the icon to register. It is the name
+	 * 	that will be used later to retrieve the icon.
+	 * @param resource The resource that is going to be asssocioated with the providad
+	 * 	icon name
+	 */
+	public void registerDefault(String iconName, Object resource);
+
+	/**
+	 * <p>Register in this theme the provided iconName and the associated
+	 * image. Developers
+	 * must not override icons already registered, as this defeats the
+	 * purpose of the IconTheme. Therefore, use the <code>exists</code>
+	 * method before using <code>register</code>, to ensure the icon
+	 * is not previously registered.</p>
+	 *
+	 * @param iconName The name of the icon to register. It is the name
+	 * that will be used later to retrieve the icon.
+	 *
+	 * @param image The image that is going to be associated with the
+	 * provided icon name.
+	 */
+	public void register(String iconName, ImageIcon image);
+
+	/**
+	 * <p>Register in this theme the provided iconName and the associated
+	 * resource. Developers must not override icons already registered,
+	 * as this defeats the purpose of the IconTheme. Therefore, use the
+	 * <code>exists</code> method before using <code>register</code>, to
+	 * ensure the icon is not previously registered.</p>
+	 *
+	 * @param iconName The name of the icon to register. It is the name
+	 * 	that will be used later to retrieve the icon.
+	 * @param resource The resource that is going to be asssocioated with the providad
+	 * 	icon name
+	 */
+	public void register(String iconName, Object resource);
+
+	/**
+	 * Gets the theme name.
+	 * @return theme name
+	 */
+	public String getName();
+
+	/**
+	 * Sets the theme name.
+	 *
+	 * @param themeName
+	 */
+	public void setName(String themeName);
+
+	/**
+	 * Gets the theme description.
+	 *
+	 * @return The description of this theme.
+	 */
+	public String getDescription();
+
+	/**
+	 * Sets the theme description. It should be a short description
+	 * (around 20-30 words), including the highlights of the theme,
+	 * the author and maybe its email address or a link the the theme's
+	 * homepage.
+	 *
+	 * @param description
+	 */
+	public void setDescription(String description);
+
+	/**
+	 * Returns the theme version. It defaults to "1.0".
+	 *
+	 * @return The version of this theme.
+	 */
+	public String getVersion();
+
+	/**
+	 * Set the theme version.
+	 *
+	 * @param version
+	 */
+	public void setVersion(String version);
+
+	/**
+	 * Gets the Object which contains physically contains this theme on disk.
+	 * It may be a ZipFile or JarFile, or a directory.
+	 *
+	 * @return
+	 */
+	public Object getResource();
+
+	/**
+	 * Sets the file which contains physically contains this theme on disk.
+	 * It may be a ZipFile or JarFile, or a directory.
+	 *
+	 * @return
+	 */
+	public void setResource(Object resource);
+
+	/**
+	 * Return the URL which is currently associated with the
+	 * provided icon name, if this icon was registered as an
+	 * URL, or <code>null</code> if it is not present in the theme
+	 * or it was registered as an IconImage.
+	 *
+	 * @param iconName
+	 * @return The URL which is currently associated with the
+	 * provided icon name, if this icon was registered as an
+	 * URL, or <code>null</code> if it is not present in the theme
+	 * or it was registered as an IconImage.
+	 *
+	 * @deprecated
+	 */
+	public URL getURL(String iconName);
+	
+	/**
+	 * Return an id of the resource associated to the named icon
+	 * or null if  the icon has not id.
+	 * 
+	 * @param iconName
+	 * @return the id associated to the icon or null.
+	 */
+	public String getResourceID(String iconName);
+
+	public ImageIcon getNoIcon();
+	
+	/**
+	 * Return an iterator over the names of the icons in the theme.
+	 * 
+	 * @return iterator of names of icons
+	 */
+	public Iterator<String> iterator();
+
+}
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IIconTheme.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeMemory.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeMemory.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeMemory.java	(revision 38313)
@@ -0,0 +1,41 @@
+package org.gvsig.andami.iconthemes;
+
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+
+/**
+ * This class is used by the default theme and donï¿½t load icons because they are already
+ * in memory.
+ */
+public class IconThemeMemory extends AbstractIconTheme{
+
+
+
+
+	/**
+	 * Constructor
+	 * @param def. The default icon theme
+	 */
+	public IconThemeMemory(IIconTheme def) {
+		setDefault(def);
+	}
+
+	/**
+	 * Return null, donï¿½t load the icon
+	 */
+	@Override
+	protected ImageIcon loadIcon(String iconName,Object resource) {
+		return null;
+	}
+
+	/**
+	 * Donï¿½t load any icon. They are already in memory
+	 */
+	@Override
+	public void load() {
+
+
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeMemory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeManager.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeManager.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeManager.java	(revision 38313)
@@ -0,0 +1,476 @@
+package org.gvsig.andami.iconthemes;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+
+/**
+ * This class controls the icon theme. Contains two themes, the first is a default
+ * theme and the second is the current theme. When it creates the class the default and
+ * the current theme are the same. Allows change the current theme, register a new theme,
+ * delete one,... and all the methods that the <code>Collection</code> interface contains.
+ * The themes are stored in an ArrayList.
+ *
+ * @author eustaquio
+ */
+public class IconThemeManager implements Collection{
+
+	private IIconTheme def;
+	private IIconTheme current;
+	private File themesDir = null;
+	ArrayList<IIconTheme> themes=new ArrayList<IIconTheme>();
+	private final String themeDefinitionFile = "theme.xml";
+	private static IconThemeManager iconThemeManager = null;
+
+	public static IconThemeManager getIconThemeManager(){
+		if (iconThemeManager == null){
+			iconThemeManager = new IconThemeManager();
+		}
+		return iconThemeManager;
+	}
+
+
+
+
+	/**
+	 * Default constructor. Creates a iconThemeMemory by default and assigns it
+	 * like default and current. The default theme is add to the themes ArrayList.
+	 */
+	public IconThemeManager(){
+		IconThemeMemory aux = new IconThemeMemory(null);
+		def = aux;
+		def.setName("Default");
+		current = aux;
+		themes.add(def);
+
+	}
+
+	/**
+	 * Gets the default theme
+	 * @return the default theme.
+	 */
+	public IIconTheme getDefault(){
+		return def;
+	}
+
+	/**
+	 * Sets the iconTheme like current theme
+	 * @param iconTheme
+	 */
+	public void setCurrent(IIconTheme iconTheme){
+		if(themes.contains(iconTheme)){
+			current = iconTheme;
+			//saveConfig(current);
+		}else{
+			register(iconTheme);
+			current = iconTheme;
+			//saveConfig(current);
+		}
+	}
+
+	/**
+	 * Gets the current theme
+	 * @return current the current theme
+	 */
+	public IIconTheme getCurrent(){
+		return current;
+	}
+
+	/**
+	 * Stores a icon theme that receives like a parametre
+	 * @param iconTheme
+	 */
+	public void register(IIconTheme iconTheme){
+		themes.add(iconTheme);
+		iconTheme.setDefault(def);
+	}
+
+	/**
+	 * Returns the theme that has been registered with the name that receives like
+	 * parameter
+	 * @param themeName
+	 * @return the theme that contains like name in its properties the parameter
+	 */
+	public IIconTheme getTheme(String themeName){
+		for(int i = 0; i<themes.size();i++){
+			if(themes.get(i).getName().equals(themeName)) return themes.get(i);
+		}
+		return null;
+	}
+
+	/**
+	 * Set the directory to read the icon themes.
+	 *
+	 * @param themesDir The directory in which the icon themes
+	 * are stored
+	 *
+	 * @throws FileNotFoundException If the provided directory does not
+	 * exist or is not a directory
+	 */
+	public void setThemesDir(File themesDir) throws FileNotFoundException {
+		if (!themesDir.exists() || !themesDir.isDirectory())
+			throw new FileNotFoundException();
+		this.themesDir = themesDir;
+	}
+
+	/**
+	 * Gets the themes directory
+	 * @return
+	 */
+	public File getThemesDir() {
+		return themesDir;
+	}
+
+	/**
+	 *
+	 * Save the provided theme as default in the configuration file.
+	 * This will not change the default theme for this session, it will
+	 * just write the new selection in the configuration file (for
+	 * the next session).
+	 *
+	 * @param info The theme to be set as default for next session.
+	 */
+	private void saveConfig(IIconTheme info) {
+		if (getThemesDir()==null || info==null || info.getResource()==null)
+			return;
+		org.gvsig.andami.config.generate.AndamiOptions options = Launcher.getAndamiConfig().getAndamiOptions();
+		if (options==null) {
+			options = new org.gvsig.andami.config.generate.AndamiOptions();
+			Launcher.getAndamiConfig().setAndamiOptions(options);
+		}
+		org.gvsig.andami.config.generate.IconTheme themeConfig = options.getIconTheme();
+		if (themeConfig==null) {
+			themeConfig = new org.gvsig.andami.config.generate.IconTheme();
+			options.setIconTheme(themeConfig);
+		}
+		themeConfig.setBasedir(getThemesDir().getPath());
+		themeConfig.setName(info.getName());
+		themeConfig.setDescription(info.getDescription());
+		themeConfig.setVersion(info.getVersion());
+		if (info.getResource()!=null) {
+			if (info.getResource() instanceof File) {
+				File resource = (File) info.getResource();
+				themeConfig.setResource(resource.getName());
+			}
+			else if (info.getResource() instanceof ZipFile) {
+				ZipFile resource = (ZipFile) info.getResource();
+				themeConfig.setResource(resource.getName());
+			}
+		}
+	}
+
+	/**
+	 * Gets the Icon theme stored in the configuration
+	 * @return IIconTheme
+	 */
+	public IIconTheme getIconThemeFromConfig() {
+		if (Launcher.getAndamiConfig().getAndamiOptions()==null
+				|| Launcher.getAndamiConfig().getAndamiOptions().getIconTheme()==null
+				|| Launcher.getAndamiConfig().getAndamiOptions().getIconTheme().getResource()==null)
+			return null;
+
+		org.gvsig.andami.config.generate.IconTheme selectedTheme = Launcher.getAndamiConfig().getAndamiOptions().getIconTheme();
+
+		try {
+			setThemesDir(new File(selectedTheme.getBasedir()));
+			File themeFile = new File(selectedTheme.getBasedir()+File.separator+selectedTheme.getResource());
+			if (themeFile.exists()) {
+				IIconTheme info;
+				try {
+					// try to load a ZIPPED theme
+					ZipFile zipfile = new ZipFile(selectedTheme.getResource());
+					info = readInfoFromZip(zipfile);
+					return info;
+				} catch (ZipException e) {
+					// ZIPPED theme failed, try to load from directory
+					if (themeFile.isFile() && themeFile.canRead()) {
+						info = readInfoFromDir(new File(selectedTheme.getResource()));
+						return info;
+					}
+				} catch (IOException e) {}
+			}
+		} catch (FileNotFoundException e1) {}
+		return null;
+	}
+
+	/**
+	 * Gets the base name of a entry
+	 * @param fullname
+	 * @return
+	 */
+	private String basename(String fullname) {
+		String[] parts = fullname.split(File.separator+"|/");
+		return parts[parts.length-1];
+	}
+
+	/**
+	 * Returns an icon theme from a file that receives like a parameter
+	 * @param zipFile
+	 * @return
+	 * @throws ZipException
+	 * @throws IOException
+	 */
+	private IconThemeZip readInfoFromZip(File zipFile) throws ZipException, IOException {
+		return readInfoFromZip(new ZipFile(zipFile));
+	}
+
+	/**
+	 * Returns an icon theme from a zip file that receives like a parameter
+	 * @param zipFile
+	 * @return IconThemeZip
+	 * @throws IOException
+	 */
+	private IconThemeZip readInfoFromZip(ZipFile zipFile) throws IOException {
+		IconThemeZip themeInfo;
+		Enumeration entries = zipFile.entries();
+		ZipEntry xmlEntry=null, dirEntry=null;
+		// search for theme.xml and the directory names
+		while (entries.hasMoreElements() && (xmlEntry==null||dirEntry==null)) {
+			ZipEntry entry = (ZipEntry) entries.nextElement();
+			if (entry.isDirectory()) {
+				dirEntry = entry;
+			}
+			if (basename(entry.getName()).equals(themeDefinitionFile)) {
+				xmlEntry = entry;
+			}
+		}
+
+		try {
+			// try with the XML file
+			if (xmlEntry!=null) {
+				themeInfo = readXML(zipFile.getInputStream(xmlEntry));
+				if (themeInfo.getDescription()==null)
+					themeInfo.setDescription(zipFile.getName());
+				if (themeInfo.getName()==null)
+					themeInfo.setName(themeInfo.getDescription());
+				themeInfo.setResource(zipFile);
+				return themeInfo;
+			}
+		} catch (XmlPullParserException e) {
+			PluginServices.getLogger().error("Error loading theme "+zipFile.getName()+". ", e);
+		}
+
+		themeInfo = new IconThemeZip(def);
+		themeInfo.setResource(zipFile);
+		// now try with the directory
+		if (dirEntry!=null) {
+			themeInfo.setName(dirEntry.getName());
+			themeInfo.setDescription(dirEntry.getName());
+			return themeInfo;
+		}
+		else { // otherwise just use the zipName
+			themeInfo.setName(zipFile.getName());
+			themeInfo.setDescription(zipFile.getName());
+			return themeInfo;
+		}
+	}
+
+	/**
+	 * Read the properties of IconThemeZip from a XML
+	 * @param xmlStream
+	 * @return IconThemeZip
+	 * @throws XmlPullParserException
+	 * @throws IOException
+	 */
+	private IconThemeZip readXML(InputStream xmlStream) throws XmlPullParserException, IOException {
+		KXmlParser parser = new KXmlParser();
+		// we use null encoding, in this way kxml2 tries to detect the encoding
+		parser.setInput(xmlStream, null);
+		IconThemeZip themeInfo=new IconThemeZip(def);
+		for (parser.next(); parser.getEventType()!=KXmlParser.END_DOCUMENT; parser.next()) {
+			// este bucle externo recorre las etiquetas de primer y segundo nivel
+			if (parser.getEventType()==KXmlParser.START_TAG) {
+				if (parser.getName().equals("name")) {
+					themeInfo.setName(parser.nextText());
+				}
+				else if (parser.getName().equals("description")) {
+					themeInfo.setDescription(parser.nextText());
+				}
+				else if (parser.getName().equals("version")) {
+					themeInfo.setVersion(parser.nextText());
+				}
+			}
+		}
+		return themeInfo;
+	}
+
+	/**
+	 * Returns a IconThemeDir from a directory
+	 * @param dir
+	 * @return
+	 */
+	private IconThemeDir readInfoFromDir(File dir){
+		File themeDefinition = new File(dir + File.separator + themeDefinitionFile);
+		IconThemeDir themeInfo;
+		try {
+			// try reading the XML file
+			if (themeDefinition.exists() && themeDefinition.isFile()) {
+				themeInfo = readXMLDir(new FileInputStream(themeDefinition));
+				if (themeInfo.getDescription()==null)
+					themeInfo.setDescription(dir.getName());
+				if (themeInfo.getName()==null)
+					themeInfo.setName(themeInfo.getDescription());
+				themeInfo.setResource(dir);
+				return themeInfo;
+			}
+		} catch (IOException e) {}
+		catch (XmlPullParserException e) {
+			e.printStackTrace();
+		}
+		// the XML parsing failed, just show the dir name
+		themeInfo = new IconThemeDir(def);
+		themeInfo.setName(dir.getName());
+		themeInfo.setDescription(dir.getName());
+		themeInfo.setResource(dir);
+		return themeInfo;
+	}
+
+	/**
+	 * Read the properties of IconThemeDir from a XML
+	 * @param xmlStream
+	 * @return
+	 * @throws XmlPullParserException
+	 * @throws IOException
+	 */
+	private IconThemeDir readXMLDir(InputStream xmlStream) throws XmlPullParserException, IOException {
+		KXmlParser parser = new KXmlParser();
+		// we use null encoding, in this way kxml2 tries to detect the encoding
+		parser.setInput(xmlStream, null);
+		IconThemeDir themeInfo=new IconThemeDir(def);
+		for (parser.next(); parser.getEventType()!=KXmlParser.END_DOCUMENT; parser.next()) {
+			// este bucle externo recorre las etiquetas de primer y segundo nivel
+			if (parser.getEventType()==KXmlParser.START_TAG) {
+				if (parser.getName().equals("name")) {
+					themeInfo.setName(parser.nextText());
+				}
+				else if (parser.getName().equals("description")) {
+					themeInfo.setDescription(parser.nextText());
+				}
+				else if (parser.getName().equals("version")) {
+					themeInfo.setVersion(parser.nextText());
+				}
+			}
+		}
+		return themeInfo;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#size()
+	 */
+	public int size() {
+		return themes.size();
+	}
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#isEmpty()
+	 */
+	public boolean isEmpty() {
+		if (themes.size()==0)return true;
+		else return false;
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#contains(java.lang.Object)
+	 */
+	public boolean contains(Object o) {
+		return themes.contains(o);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.lang.Iterable#iterator()
+	 */
+	public Iterator iterator() {
+		return themes.iterator();
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#toArray()
+	 */
+	public Object[] toArray() {
+		return themes.toArray();
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#toArray(Object[] a)
+	 */
+	public Object[] toArray(Object[] a) {
+		return themes.toArray(a);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#remove(java.lang.Object)
+	 */
+	public boolean add(Object o) {
+		return themes.add((IIconTheme) o);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#remove(java.lang.Object)
+	 */
+	public boolean remove(Object o) {
+		return themes.remove(o);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#containsAll(Collection)
+	 */
+	public boolean containsAll(Collection c) {
+		return themes.containsAll(c);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#addAll(Collection)
+	 */
+	public boolean addAll(Collection c) {
+		return themes.addAll(c);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#removeAll(Collection)
+	 */
+	public boolean removeAll(Collection c) {
+		return themes.removeAll(c);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#retainAll(Collection)
+	 */
+	public boolean retainAll(Collection c) {
+		return themes.retainAll(c);
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see java.util.Collection#clear()
+	 */
+	public void clear() {
+		themes.clear();
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/iconthemes/IconThemeManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/AbstractPreferencePage.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/AbstractPreferencePage.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/AbstractPreferencePage.java	(revision 38313)
@@ -0,0 +1,139 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.preferences;
+
+import java.util.Map;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+/**
+ * The abstract class that any preference page should extend.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public abstract class AbstractPreferencePage extends GridBagLayoutPanel implements IPreference, ExtensionBuilder{
+	/**
+	 * The number of components already added to the layout manager.
+	 */
+	protected int y;
+
+	private String title;
+
+	protected String parentID = null; // Por defecto, nodo raiz
+
+
+	public final void setParentID(String parentID) {
+		this.parentID = parentID;
+	}
+
+	public String getParentID() {
+		return parentID;
+	}
+
+	public final void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String toString()
+	{
+		return getTitle();
+	}
+
+	public Object create() {
+		return this;
+	}
+
+	public Object create(Object[] args) {
+		return this;
+	}
+
+	public Object create(Map args) {
+		return this;
+	}
+
+	/**
+	 * Devuelve true si el Panel debe estar en un BorderLayout centrado o false si
+	 * tiene un tamaño fijo.
+	 * @return
+	 */
+	public boolean isResizeable() {
+		return false;
+	}
+
+
+	public final void saveValues() throws StoreException {
+		// Store the values.
+		storeValues();
+
+		// Tell the page that its changes are already applied
+		setChangesApplied();
+	}
+
+	/**
+	 * <p>
+	 * Gathers the configurations and stores them in the system.<br>
+	 * </p>
+	 * <p>
+	 * <b>storeValues()</b> and  <b>setChangesApplied()</b> are methods from <b>AbstractPreferencePage</b>
+	 * not from <b>IPreference</b>. They both perform in combination what saveValue() should do
+	 * by itself, but they exist for performance issues. In fact, you <b>should not</b>
+	 * invoke them outside your PreferencePage class, you only need to code them.
+	 * </p>
+	 * @throws StoreException
+	 */
+	public abstract void storeValues() throws StoreException;
+
+	/**
+	 * <p>
+	 * After this method is invoked, the Preference page <b>must</b> return <b>true</b> as the
+	 * result of invoking isValueChanged() method. It tells that the values have been
+	 * saved in the system.<br>
+	 * </p>
+	 * <p>
+	 * <b>storeValues()</b> and  <b>setChangesApplied()</b> are methods from  <b>AbstractPreferencePage</b>
+	 * not from  <b>IPreference</b>. They both perform in combination what storeValue() should
+	 * by itself, but they exist for performance issues. In fact, you <b>should not</b>
+	 * invoke them outside your PreferencePage class, you only need to code them.
+	 * </p>
+	 */
+	public abstract void setChangesApplied();
+}
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/AbstractPreferencePage.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/IPreferenceExtension.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/IPreferenceExtension.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/IPreferenceExtension.java	(revision 38313)
@@ -0,0 +1,5 @@
+package org.gvsig.andami.preferences;
+
+public interface IPreferenceExtension {
+	public IPreference[] getPreferencesPages();
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/IPreferenceExtension.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/GenericDlgPreferences.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/GenericDlgPreferences.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/GenericDlgPreferences.java	(revision 38313)
@@ -0,0 +1,648 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.preferences;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JSplitPane;
+import javax.swing.JTree;
+import javax.swing.UIManager;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+
+
+/**
+ * @author fjp
+ *
+ * The reason behind this class is to have the opportunity of use a DlgPreferences
+ * in a local way. Then, you don't need to be a SingletonView.
+ */
+public class GenericDlgPreferences extends JPanel implements IWindow {
+
+    private static final long serialVersionUID = -6561660591523322611L;
+
+    private WindowInfo viewInfo = null;
+	private IPreference activePreference;
+
+    private Map<String, IPreference> preferences =
+        new Hashtable<String, IPreference>();
+	DefaultTreeModel treeModel = null;
+
+	private JTree jTreePlugins = null;
+
+	private JPanel jPanelButtons = null;
+
+	private JButton jButtonOK = null;
+
+	private JButton jButtonCancel = null;
+	private DefaultMutableTreeNode root = new DefaultMutableTreeNode();
+
+	private JPanel jPanelCenter = null;
+
+	private JLabel jLabelBigTitle = null;
+
+	private JScrollPane jScrollPane = null;
+
+	private JSplitPane jSplitPaneCenter = null;
+
+	private JPanel jPanelContainer = null;
+	private JButton jButtonRestore;
+	private ActionListener action;
+	private boolean dirtyTree = false;
+	private ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
+
+
+	private class MyTreeCellRenderer extends DefaultTreeCellRenderer
+	{
+
+        private static final long serialVersionUID = 1833782141342096776L;
+
+        public MyTreeCellRenderer() {
+			}
+
+			public Component getTreeCellRendererComponent(
+													JTree tree,
+													Object value,
+													boolean sel,
+													boolean expanded,
+													boolean leaf,
+													int row,
+													boolean hasFocus) {
+
+					super.getTreeCellRendererComponent(
+													tree, value, sel,
+													expanded, leaf, row,
+													hasFocus);
+					if (value instanceof DefaultMutableTreeNode)
+					{
+						DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+						if (node.getUserObject() instanceof IPreference)
+						{
+							IPreference pref = (IPreference) node.getUserObject();
+							this.setText(pref.getTitle());
+						}
+					}
+					return this;
+			}
+
+	}
+
+
+	public GenericDlgPreferences() {
+		super();
+		this.action = new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				PluginServices.getMDIManager().setWaitCursor();
+				String actionCommand = e.getActionCommand();
+				if ("RESTORE".equals(actionCommand)) {
+					// Restore default values in current page
+					if (activePreference!=null) {
+						activePreference.initializeDefaults();
+//	bug 240
+//						try {
+//							activePreference.saveValues();
+//						} catch (StoreException sEx) {
+//							/*
+//							 * If you reach this code you coded your page
+//							 * with wrong factory default values.
+//							 * Check them out.
+//							 */
+//							PluginServices.getMDIManager().restoreCursor();
+//
+//							// Show error message
+//							JOptionPane.showMessageDialog((Component) PluginServices.
+//									getMainFrame(),sEx.getMessage());
+//
+//						}
+					}
+				} else {
+                    Iterator<String> it = preferences.keySet().iterator();
+
+					if ("CANCEL".equals(actionCommand)) {
+						// Restore previous values in all pages
+						while (it.hasNext()) {
+                            IPreference pref = preferences.get(it.next());
+							if (pref.isValueChanged()) {
+								pref.initializeValues(); //
+							}
+						}
+						closeView();
+					} else if ("OK".equals(actionCommand)) {
+						// Apply values in all pages
+						boolean shouldClose = true;
+						while (it.hasNext()) {
+                                IPreference preference =
+                                    preferences.get(it.next());
+							try{
+								if (preference.isValueChanged()) {
+									preference.saveValues();
+									preference.initializeValues();
+								}
+							}catch (StoreException ex) {
+								// Reach this code should mean that the page has wrong values
+								shouldClose = false;
+								PluginServices.getMDIManager().restoreCursor();
+
+								// Show error message
+								JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),ex.getMessage());
+
+								// Focus on error page
+								setActivePage(preference);
+							}
+						}
+						if (shouldClose) {
+							closeView();
+						}
+					}
+				}
+				PluginServices.getMDIManager().restoreCursor();
+			}
+		};
+		initialize();
+	}
+
+	private void initialize() {
+		setLayout(new BorderLayout());
+		setSize(new java.awt.Dimension(750,479));
+		super.add(getJPanelButtons(), BorderLayout.SOUTH);
+		setPreferredSize(new java.awt.Dimension(390,369));
+		super.add(getJSplitPaneCenter(), java.awt.BorderLayout.CENTER);
+		getJSplitPaneCenter().setLeftComponent(getJScrollPane());
+		getJSplitPaneCenter().setRightComponent(getJPanelNorth());
+		treeModel = new DefaultTreeModel(root);
+	}
+
+	public void refreshExtensionPoints() {
+		ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
+
+
+        @SuppressWarnings("unchecked")
+        Iterator<ExtensionPoint.Extension> iterator = ep.iterator();
+		while (iterator.hasNext()) {
+			try {
+                IPreference obj = (IPreference) (iterator.next()).create();
+				this.addPreferencePage(obj);
+			} catch (InstantiationException e) {
+				e.printStackTrace();
+			} catch (IllegalAccessException e) {
+				e.printStackTrace();
+			} catch (ClassCastException e) {
+				e.printStackTrace();
+			}
+		}
+		ArrayList<IPreference> prefList = new ArrayList<IPreference>(preferences.values());
+		addPreferencePages(prefList);
+	}
+
+	//	TODO este método es un parche provisional mientras se hace un refactoring de
+	//las PreferencePages para disponer de un método que inicialize las variables
+	//a partir de las preferencias.
+    public void storeValues() {
+        Iterator<IPreference> iter = preferences.values().iterator();
+
+        while (iter.hasNext()) {
+            IPreference preference = iter.next();
+
+            try {
+                preference.saveValues();
+            } catch (StoreException e) {
+                /*
+                 * If you reach this code you coded your page
+                 * with wrong factory default values.
+                 * Check them out.
+                 */
+                PluginServices.getMDIManager().restoreCursor();
+                // Show error message
+                JOptionPane.showMessageDialog(
+                    (Component) PluginServices.getMainFrame(), e.getMessage());
+            }
+        }
+    }
+
+	/**
+	 * It is very common to be confused with this method. But
+	 * the one you are looking for is addPreferencePage(IPreference)
+	 */
+	public Component add(Component c) {
+		//throw new Error("Do not use com.iver.cit.gvsig.gui.preferences.DlgPreferences.add(Component) use com.iver.cit.gvsig.gui.preferences.DlgPreferences.addPreferencePage(IPreference) instead");
+		throw new Error("Do not use org.gvsig.app.gui.preferences.DlgPreferences.add(Component) register an extension point instead");
+	}
+
+	public Component add(Component c, int i) {
+		return add(c);
+	}
+
+	public void add(Component c, Object o) {
+		add(c);
+	}
+
+	public void add(Component c, Object o, int i) {
+		add(c);
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (viewInfo == null) {
+			viewInfo = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE | WindowInfo.PALETTE);
+			viewInfo.setTitle(PluginServices.getText(this,
+					"Preferences"));
+			viewInfo.setWidth(this.getWidth()+8);
+			viewInfo.setHeight(this.getHeight());
+		}
+		return viewInfo;
+	}
+
+	/**
+	 * This method initializes jTreePlugins
+	 *
+	 * @return javax.swing.JTree
+	 */
+	private JTree getJTreePlugins() {
+		if (jTreePlugins == null) {
+			jTreePlugins = new JTree();
+			jTreePlugins.setRootVisible(false);
+			MyTreeCellRenderer treeCellRenderer = new MyTreeCellRenderer();
+			treeCellRenderer.setOpenIcon(null);
+			treeCellRenderer.setClosedIcon(null);
+			treeCellRenderer.setLeafIcon(null);
+
+			jTreePlugins.setCellRenderer(treeCellRenderer);
+			jTreePlugins.setShowsRootHandles(true);
+			jTreePlugins
+					.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
+						public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
+							 DefaultMutableTreeNode node = (DefaultMutableTreeNode)
+													 jTreePlugins.getLastSelectedPathComponent();
+
+							 	if (node == null) {
+									return;
+								}
+							 	setActivePage((IPreference) node.getUserObject());
+						}
+					});
+			jTreePlugins.putClientProperty("JTree.linestyle", "Angled");
+			jTreePlugins.getSelectionModel().
+				setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+		}
+
+		return jTreePlugins;
+	}
+
+	/**
+	 * It takes an IPreference page and adds it to the application's preferences
+	 * dialog. The preference page is added in alphabetical order within the
+	 * branch where the page is hanging on, and defined by its title.
+	 * @param page
+	 */
+	public void addPreferencePage(IPreference page)
+	{
+		if (preferences.containsKey(page.getID())) {
+			return;
+		}
+		preferences.put(page.getID(), page);
+		page.initializeValues(); // init values from the last settings
+		if (dirtyTree) {
+			// rebuild page tree
+			dirtyTree = false;
+
+			DefaultTreeModel model = new DefaultTreeModel(root);
+			treeModel = model;
+			jTreePlugins.setModel(model);
+		}
+
+		doInsertNode(treeModel, page);
+		getJTreePlugins().setModel(treeModel);
+		getJTreePlugins().repaint();
+	}
+	private void addPreferencePages(ArrayList<IPreference> prefs){
+		while (prefs.size()>0){
+			IPreference pref=prefs.get(0);
+//				System.err.println("IPreference a persistir=  "+pref.getID());
+			if (pref.getParentID()!=null && preferences.get(pref.getParentID())==null){
+				prefs.remove(pref);
+				addPreferencePages(prefs);
+//				System.err.println("IPreference =  "+pref.getID());
+				addPreference(pref);
+			}else{
+//				System.err.println("IPreference =  "+pref.getID());
+				addPreference(pref);
+				prefs.remove(pref);
+			}
+		}
+	}
+	private void addPreference(IPreference pref) {
+		DefaultTreeModel model = new DefaultTreeModel(root);
+		doInsertNode(model, pref);
+	}
+
+	private DefaultMutableTreeNode findNode(String searchID)
+	{
+        @SuppressWarnings("unchecked")
+        Enumeration<DefaultMutableTreeNode> e = root.breadthFirstEnumeration();
+		while (e.hasMoreElements())
+		{
+            DefaultMutableTreeNode nodeAux = e.nextElement();
+			if (nodeAux != null)
+			{
+				IPreference pref = (IPreference) nodeAux.getUserObject();
+				if (pref == null) {
+					continue; // Root node
+				}
+				if (pref.getID().equals(searchID))
+				{
+					return nodeAux;
+				}
+			}
+		}
+		return null;
+
+	}
+
+	private void doInsertNode(DefaultTreeModel treeModel, IPreference page)
+	{
+
+		dirtyTree = ((page.getParentID() != null) && (findNode(page.getParentID())==null));
+		if (findNode(page.getID()) != null) {
+			return;
+		}
+		if (page.getParentID() != null)
+		{
+			if (preferences.containsKey(page.getParentID()))
+			{
+				IPreference parent = (IPreference) preferences.get(page.getParentID());
+				DefaultMutableTreeNode nodeParent = findNode(parent.getID());
+				if (nodeParent == null) // the parent is empty
+				{
+					// Recursively add it
+					doInsertNode(treeModel, parent);
+				}
+				else
+				{
+					DefaultMutableTreeNode nodeValue = new DefaultMutableTreeNode(page);
+					int children = nodeParent.getChildCount();
+					int pos=0;
+					for (int i = 0; i < children; i++) {
+						DefaultMutableTreeNode node = (DefaultMutableTreeNode) treeModel.getChild(nodeParent, i);
+						if (node.getUserObject() instanceof IPreference) {
+							String pageTitle = ((IPreference) node.getUserObject()).getTitle();
+							if (pageTitle.compareTo(page.getTitle()) < 0) {
+								++pos;
+							}
+						}
+					}
+					treeModel.insertNodeInto(nodeValue, nodeParent, pos);
+				}
+			}
+		}
+		else // First level node ("General", "Edition")
+		{
+			DefaultMutableTreeNode nodeValue = new DefaultMutableTreeNode(page);
+			int children = root.getChildCount();
+			int pos=0;
+			for (int i = 0; i < children; i++) {
+				DefaultMutableTreeNode node = (DefaultMutableTreeNode) treeModel.getChild(root, i);
+				if (node.getUserObject() instanceof IPreference) {
+					String pageTitle = ((IPreference) node.getUserObject()).getTitle();
+					if (pageTitle.compareTo(page.getTitle()) < 0) {
+						++pos;
+					}
+				}
+			}
+			treeModel.insertNodeInto(nodeValue, root, pos);
+		}
+	}
+
+	/**
+	 * This method initializes jPanelButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelButtons() {
+		if (jPanelButtons == null) {
+			jPanelButtons = new JPanel(new BorderLayout());
+			JPanel jPanelAux = new JPanel();
+			JLabel l = new JLabel();
+			l.setPreferredSize(new Dimension(40, 20));
+			jPanelButtons.add(new JSeparator(JSeparator.HORIZONTAL), BorderLayout.NORTH);
+			jPanelAux.add(getJButtonRestore(), BorderLayout.WEST);
+			jPanelAux.add(l, BorderLayout.CENTER);
+			jPanelAux.add(getJButtonOK(), BorderLayout.EAST);
+			jPanelAux.add(getJButtonCancel(), BorderLayout.EAST);
+
+			jPanelButtons.add(jPanelAux);
+		}
+		return jPanelButtons;
+	}
+
+	/**
+	 * This method initializes jPanelButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+
+
+	/**
+	 * This method initializes jButtonOK
+	 *
+	 * @return JButton
+	 */
+	private JButton getJButtonOK() {
+		if (jButtonOK == null) {
+			jButtonOK = new JButton();
+			jButtonOK.setText(PluginServices.getText(this, "aceptar"));
+			jButtonOK.setActionCommand("OK");
+			jButtonOK.addActionListener(action);
+		}
+		return jButtonOK;
+	}
+
+	/**
+	 * This method initializes jButtonOK
+	 *
+	 * @return JButton
+	 */
+	private JButton getJButtonRestore() {
+		if (jButtonRestore == null) {
+			jButtonRestore = new JButton();
+			jButtonRestore.setText(PluginServices.getText(this, "restore_defaults"));
+			jButtonRestore.setActionCommand("RESTORE");
+			jButtonRestore.addActionListener(action);
+		}
+		return jButtonRestore;
+	}
+
+	private void closeView() {
+		PluginServices.getMDIManager().closeWindow(this);
+	}
+
+	/**
+	 * This method initializes jButtonCancel
+	 *
+	 * @return JButton
+	 */
+	private JButton getJButtonCancel() {
+		if (jButtonCancel == null) {
+			jButtonCancel = new JButton();
+			jButtonCancel.setText(PluginServices.getText(this, "cancelar"));
+			jButtonCancel.setActionCommand("CANCEL");
+			jButtonCancel.addActionListener(action);
+		}
+		return jButtonCancel;
+	}
+
+	/**
+	 * This method initializes jPanelNorth
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelNorth() {
+		if (jPanelCenter == null) {
+			jLabelBigTitle = new JLabel();
+			jLabelBigTitle.setText("General");
+		    Font font = jLabelBigTitle.getFont();
+		    font = font.deriveFont(Font.BOLD, font.getSize() + 1.0f);
+		    jLabelBigTitle.setFont(font);
+			jLabelBigTitle.setHorizontalTextPosition(javax.swing.SwingConstants.TRAILING);
+			jLabelBigTitle.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+			jPanelCenter = new JPanel();
+			JPanel jPanelPageTitle = new JPanel(new BorderLayout());
+			JPanel jPanelAux = new JPanel(new BorderLayout());
+			jPanelAux.add(jLabelBigTitle, java.awt.BorderLayout.NORTH);
+			jPanelPageTitle.add(jPanelAux, java.awt.BorderLayout.WEST);
+			jPanelPageTitle.add(new JSeparator(JSeparator.HORIZONTAL), BorderLayout.SOUTH);
+			jPanelCenter.setLayout(new BorderLayout());
+			jPanelCenter.add(jPanelPageTitle, BorderLayout.NORTH);
+			jPanelCenter.add(getJPanelContainer(), java.awt.BorderLayout.CENTER);
+
+		}
+		return jPanelCenter;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setPreferredSize(new java.awt.Dimension(140,322));
+			jScrollPane.setViewportView(getJTreePlugins());
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jSplitPaneCenter
+	 *
+	 * @return javax.swing.JSplitPane
+	 */
+	private JSplitPane getJSplitPaneCenter() {
+		if (jSplitPaneCenter == null) {
+			jSplitPaneCenter = new JSplitPane();
+			jSplitPaneCenter.setResizeWeight(0.2);
+			jSplitPaneCenter.setDividerLocation(200);
+		}
+		return jSplitPaneCenter;
+	}
+
+	/**
+	 * This method initializes jPanelContainer
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanelContainer() {
+		if (jPanelContainer == null) {
+			jPanelContainer = new JPanel();
+		}
+		return jPanelContainer;
+	}
+
+	/**
+	 *
+	 */
+	public void setActivePage(IPreference page) {
+		activePreference = page;
+		jLabelBigTitle.setText(activePreference.getTitle());
+		JPanel prefPanel = activePreference.getPanel();
+		jLabelBigTitle.setIcon(activePreference.getIcon());
+		jPanelContainer.removeAll();
+		if ((prefPanel instanceof AbstractPreferencePage) &&
+				((AbstractPreferencePage) prefPanel).isResizeable()) {
+			jPanelContainer.setLayout(new BorderLayout());
+			jPanelContainer.add(prefPanel, BorderLayout.CENTER);
+		} else {
+			jPanelContainer.setLayout(new FlowLayout());
+			jPanelContainer.add(prefPanel);
+		}
+		prefPanel.setVisible(true);
+		repaint();
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+}
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/GenericDlgPreferences.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/IPreference.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/IPreference.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/IPreference.java	(revision 38313)
@@ -0,0 +1,127 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.preferences;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+/**
+ * Interface that any entry in the application's preferences dialog must implement.
+ * In addition to this interface, an abstract class is supplied to ease the addition
+ * of new pages
+ * @see org.gvsig.andami.preferences.AbstractPreferencePage
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public interface IPreference extends ExtensionBuilder {
+
+	/**
+	 * Returns an identifier for this preferences page that is used to reference
+	 * it inside the Map.
+	 * @return String, you'd typically use any kind of <code>this.getClass().getName();</code>
+	 */
+	String getID();
+
+	/**
+	 * Returns an string containing the title of the preferences page. This string
+	 * will be shown whether in the tree entry or in the page header.
+	 * @return String, the title of the page
+	 */
+	String getTitle();
+
+	/**
+	 * The page must be contained in a JPanel and whatever to be shown will be returned
+	 * by this function.<br>
+	 * <p>
+	 * The content is added, removed and repainted automatically upon the events received from
+	 * the mouse. So, you only have to care about the content and the functionality to make it
+	 * <br>
+	 * </p>
+	 * having sense.
+	 * @return JPanel holding the contents to be shown in the page.
+	 */
+	JPanel getPanel();
+
+	/**
+	 * Returns the ID of the parent of this layer. If this method returns null, which means
+	 * that this preferences page has no parent, this is new entry in the preferences
+	 * tree, otherwise this preferences page will be hanging on the page with the ID
+	 * returned by this.
+	 * @return
+	 */
+	String getParentID();
+
+	/**
+	 * Initializes the components of this preferences page to the last settings.
+	 */
+	void initializeValues();
+
+	/**
+	 * Saves the new settings
+	 * @return <b>true</b> if the values were correctly stored, <b>false</b> otherwise.
+	 * @throws StoreException
+	 */
+	void saveValues() throws StoreException;
+
+	/**
+	 * Restores the default values of this preferences page's settings. Values are not
+	 * saved until saveValues() is executed
+	 */
+	void initializeDefaults();
+
+	/**
+	 * Returns the image that will be shown in the header of this preferences page
+	 * @return
+	 */
+	ImageIcon getIcon();
+
+	/**
+	 * Tells if this preference page has changed any value
+	 * (used for storing values when necessary)
+	 * @return <b>True</b> if any value has changed, <b>false</b> otherwise.
+	 */
+	boolean isValueChanged();
+
+}
+
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/IPreference.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/DlgPreferences.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/DlgPreferences.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/DlgPreferences.java	(revision 38313)
@@ -0,0 +1,64 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.preferences;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+
+public class DlgPreferences extends GenericDlgPreferences implements IWindow {
+	private static DlgPreferences singletonInstance = null;
+
+	public static DlgPreferences getInstance() {
+		/*
+		 * if (singletonInstance == null) singletonInstance = new
+		 * DlgPreferences(); return singletonInstance;
+		 */
+		return new DlgPreferences();
+	}
+
+	DlgPreferences() {
+		super();
+	}
+
+	public Object getViewModel() {
+		return this.getClass();
+	}
+
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/DlgPreferences.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/StoreException.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/StoreException.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/StoreException.java	(revision 38313)
@@ -0,0 +1,24 @@
+package org.gvsig.andami.preferences;
+
+public class StoreException extends Exception {
+
+	public StoreException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+
+	public StoreException(String arg0, Throwable arg1) {
+		super(arg0, arg1);
+		// TODO Auto-generated constructor stub
+	}
+
+	public StoreException(String arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+
+	public StoreException(Throwable arg0) {
+		super(arg0);
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/preferences/StoreException.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/impl/DefaultPluginsManager.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/impl/DefaultPluginsManager.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/impl/DefaultPluginsManager.java	(revision 38313)
@@ -0,0 +1,97 @@
+package org.gvsig.andami.impl;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.config.generate.AndamiConfig;
+import org.gvsig.andami.config.generate.Plugin;
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.PluginClassLoader;
+
+public class DefaultPluginsManager implements PluginsManager{
+
+	private File pluginsFolder = null;
+	
+	public ExclusiveUIExtension getExclusiveUIExtension() {
+		return PluginServices.getExclusiveUIExtension();
+	}
+
+	public IExtension getExtension(Class<? extends IExtension> extension) {
+		return PluginServices.getExtension(extension);
+	}
+
+	@SuppressWarnings("unchecked")
+	public Iterator<IExtension> getExtensions() {
+		return PluginServices.getExtensions();
+	}
+
+	/**
+	 * Return the associated pluginServices to the extension class passed as parameter.
+	 *  
+	 */
+	public PluginServices getPlugin(Class<? extends IExtension> extension) {
+	    String pluginName = ((PluginClassLoader)extension.getClassLoader()).getPluginName();
+		return  this.getPlugin(pluginName);
+	}
+
+	public PluginServices getPlugin(String pluginName) {
+		return Launcher.getPluginServices(pluginName);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<PluginServices> getPlugins() {
+		List<PluginServices> pluginServices = new ArrayList<PluginServices>();
+		
+		AndamiConfig config = Launcher.getAndamiConfig();
+		Enumeration<Plugin> plugins = config.enumeratePlugin();
+		while( plugins.hasMoreElements()) {
+			Plugin plugin =   plugins.nextElement();
+			pluginServices.add(PluginServices.getPluginServices(plugin.getName()));
+		}
+		return pluginServices;
+	}
+
+	public void setExclusiveUIExtension(ExclusiveUIExtension extension) {
+		PluginServices.setExclusiveUIExtension(extension);
+	}
+
+	public String getText(Object obj, String msg) {
+	    return PluginServices.getText(obj, msg);
+	}
+	
+    public File getPluginsDirectory() {
+        return getPluginsFolder();
+    }
+
+    public File getApplicationFolder() {
+        // TODO: check if there is a better way to handle this
+        return new File(System.getProperty("user.dir"));
+    }
+
+    public File getPluginsFolder() {
+    	if( this.pluginsFolder!=null ) {
+    		return this.pluginsFolder;
+    	}
+    	String folder = "gvSIG/extensiones";
+    	if( !(Launcher.getAndamiConfig() == null || Launcher.getAndamiConfig().getPluginsDirectory()==null) ) {
+    		folder = Launcher.getAndamiConfig().getPluginsDirectory();
+    	}
+        this.pluginsFolder = new File(getApplicationFolder(), folder);
+        return this.pluginsFolder;
+    }
+
+    public File getInstallFolder() {
+        return new File(getApplicationFolder(), "install");
+    }
+
+    public File getApplicationHomeFolder() {
+        return new File(Launcher.getAppHomeDir());
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/impl/DefaultPluginsManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/GlobalKeyEventDispatcher.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/GlobalKeyEventDispatcher.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/GlobalKeyEventDispatcher.java	(revision 38313)
@@ -0,0 +1,104 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami;
+
+import java.awt.KeyEventDispatcher;
+import java.awt.event.KeyEvent;
+import java.util.Hashtable;
+
+import javax.swing.KeyStroke;
+
+public class GlobalKeyEventDispatcher implements KeyEventDispatcher {
+	private static GlobalKeyEventDispatcher globalKeyDispatcher = null;
+	private static Hashtable registeredKeys = new Hashtable();
+	static GlobalKeyEventDispatcher getInstance()
+	{
+		if (globalKeyDispatcher == null)
+			globalKeyDispatcher = new GlobalKeyEventDispatcher();
+		return globalKeyDispatcher;
+	}
+
+	public void registerKeyStroke(KeyStroke key, KeyEventDispatcher disp)
+		throws RuntimeException
+	{
+		if (registeredKeys.containsKey(key))
+		{
+			KeyEventDispatcher a = (KeyEventDispatcher) registeredKeys.get(key);
+			throw new RuntimeException("Error: La tecla " + key +
+					" ya está asignada al action" + a);
+		}
+		registeredKeys.put(key, disp);
+	}
+
+    public void removeKeyStrokeBinding(KeyStroke key) {
+    	registeredKeys.remove(key);
+    }
+
+    public void removeAll() {
+    	registeredKeys.clear();
+    }
+
+    public KeyEventDispatcher getListenerAssignedTo(KeyStroke key)
+    {
+    	return (KeyEventDispatcher) registeredKeys.get(key);
+    }
+
+
+	private GlobalKeyEventDispatcher()
+	{
+
+	}
+	public boolean dispatchKeyEvent(KeyEvent e) {
+		KeyStroke key = KeyStroke.getKeyStroke(e.getKeyCode(), e.getModifiers());
+		KeyEventDispatcher a = getListenerAssignedTo(key);
+
+		if (a!=null)
+		{
+			//System.err.println("DEBUG: KeyEvent " + e +
+			//		".Antes de ejecutar action=" + a);
+			return a.dispatchKeyEvent(e);
+		}
+		return false;
+	}
+
+}
+
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/GlobalKeyEventDispatcher.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/PluginDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/PluginDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/PluginDescriptor.java	(revision 38313)
@@ -0,0 +1,212 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.BooleanValidator;
+import org.exolab.castor.xml.validators.NameValidator;
+
+/**
+ * Class PluginDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PluginDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginDescriptor() {
+        super();
+        xmlName = "plugin";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _update
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_update", "update", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                if(!target.hasUpdate())
+                    return null;
+                return (target.getUpdate() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    // ignore null values for non optional primitives
+                    if (value == null) return;
+                    
+                    target.setUpdate( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _update
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.config.generate.PluginDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.Plugin.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/PluginDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java	(revision 38313)
@@ -0,0 +1,422 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class AndamiConfigDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class AndamiConfigDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiConfigDescriptor() {
+        super();
+        xmlName = "andami-config";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _localeLanguage
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_localeLanguage", "locale-language", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getLocaleLanguage();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setLocaleLanguage( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _localeLanguage
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _localeCountry
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_localeCountry", "locale-country", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getLocaleCountry();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setLocaleCountry( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _localeCountry
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _localeVariant
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_localeVariant", "locale-variant", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getLocaleVariant();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setLocaleVariant( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _localeVariant
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _lookAndFeel
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_lookAndFeel", "lookAndFeel", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getLookAndFeel();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setLookAndFeel( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _lookAndFeel
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _pluginsDirectory
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_pluginsDirectory", "pluginsDirectory", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getPluginsDirectory();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setPluginsDirectory( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _pluginsDirectory
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _andami
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.Andami.class, "_andami", "andami", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getAndami();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setAndami( (org.gvsig.andami.config.generate.Andami) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.Andami();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _andami
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _pluginList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.Plugin.class, "_pluginList", "plugin", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getPlugin();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.addPlugin( (org.gvsig.andami.config.generate.Plugin) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.Plugin();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _pluginList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _andamiOptions
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.AndamiOptions.class, "_andamiOptions", "andami-options", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiConfig target = (AndamiConfig) object;
+                return target.getAndamiOptions();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiConfig target = (AndamiConfig) object;
+                    target.setAndamiOptions( (org.gvsig.andami.config.generate.AndamiOptions) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.AndamiOptions();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _andamiOptions
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.config.generate.AndamiConfigDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.AndamiConfig.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Plugin.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Plugin.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Plugin.java	(revision 38313)
@@ -0,0 +1,174 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Plugin.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Plugin implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _update
+     */
+    private boolean _update;
+
+    /**
+     * keeps track of state for field: _update
+     */
+    private boolean _has_update;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Plugin() {
+        super();
+    } //-- com.iver.andami.config.generate.Plugin()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteUpdate
+     */
+    public void deleteUpdate()
+    {
+        this._has_update= false;
+    } //-- void deleteUpdate() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'update'.
+     * 
+     * @return the value of field 'update'.
+     */
+    public boolean getUpdate()
+    {
+        return this._update;
+    } //-- boolean getUpdate() 
+
+    /**
+     * Method hasUpdate
+     */
+    public boolean hasUpdate()
+    {
+        return this._has_update;
+    } //-- boolean hasUpdate() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'update'.
+     * 
+     * @param update the value of field 'update'.
+     */
+    public void setUpdate(boolean update)
+    {
+        this._update = update;
+        this._has_update = true;
+    } //-- void setUpdate(boolean) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.Plugin) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.Plugin.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Plugin.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiConfig.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiConfig.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiConfig.java	(revision 38313)
@@ -0,0 +1,403 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class AndamiConfig.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class AndamiConfig implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _localeLanguage
+     */
+    private java.lang.String _localeLanguage;
+
+    /**
+     * Field _localeCountry
+     */
+    private java.lang.String _localeCountry;
+
+    /**
+     * Field _localeVariant
+     */
+    private java.lang.String _localeVariant;
+
+    /**
+     * Field _lookAndFeel
+     */
+    private java.lang.String _lookAndFeel;
+
+    /**
+     * Field _pluginsDirectory
+     */
+    private java.lang.String _pluginsDirectory;
+
+    /**
+     * Field _andami
+     */
+    private org.gvsig.andami.config.generate.Andami _andami;
+
+    /**
+     * Field _pluginList
+     */
+    private java.util.Vector _pluginList;
+
+    /**
+     * Field _andamiOptions
+     */
+    private org.gvsig.andami.config.generate.AndamiOptions _andamiOptions;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiConfig() {
+        super();
+        _pluginList = new Vector();
+    } //-- com.iver.andami.config.generate.AndamiConfig()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addPlugin
+     * 
+     * @param vPlugin
+     */
+    public void addPlugin(org.gvsig.andami.config.generate.Plugin vPlugin)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _pluginList.addElement(vPlugin);
+    } //-- void addPlugin(com.iver.andami.config.generate.Plugin) 
+
+    /**
+     * Method addPlugin
+     * 
+     * @param index
+     * @param vPlugin
+     */
+    public void addPlugin(int index, org.gvsig.andami.config.generate.Plugin vPlugin)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _pluginList.insertElementAt(vPlugin, index);
+    } //-- void addPlugin(int, com.iver.andami.config.generate.Plugin) 
+
+    /**
+     * Method enumeratePlugin
+     */
+    public java.util.Enumeration enumeratePlugin()
+    {
+        return _pluginList.elements();
+    } //-- java.util.Enumeration enumeratePlugin() 
+
+    /**
+     * Returns the value of field 'andami'.
+     * 
+     * @return the value of field 'andami'.
+     */
+    public org.gvsig.andami.config.generate.Andami getAndami()
+    {
+        return this._andami;
+    } //-- com.iver.andami.config.generate.Andami getAndami() 
+
+    /**
+     * Returns the value of field 'andamiOptions'.
+     * 
+     * @return the value of field 'andamiOptions'.
+     */
+    public org.gvsig.andami.config.generate.AndamiOptions getAndamiOptions()
+    {
+        return this._andamiOptions;
+    } //-- com.iver.andami.config.generate.AndamiOptions getAndamiOptions() 
+
+    /**
+     * Returns the value of field 'localeCountry'.
+     * 
+     * @return the value of field 'localeCountry'.
+     */
+    public java.lang.String getLocaleCountry()
+    {
+        return this._localeCountry;
+    } //-- java.lang.String getLocaleCountry() 
+
+    /**
+     * Returns the value of field 'localeLanguage'.
+     * 
+     * @return the value of field 'localeLanguage'.
+     */
+    public java.lang.String getLocaleLanguage()
+    {
+        return this._localeLanguage;
+    } //-- java.lang.String getLocaleLanguage() 
+
+    /**
+     * Returns the value of field 'localeVariant'.
+     * 
+     * @return the value of field 'localeVariant'.
+     */
+    public java.lang.String getLocaleVariant()
+    {
+        return this._localeVariant;
+    } //-- java.lang.String getLocaleVariant() 
+
+    /**
+     * Returns the value of field 'lookAndFeel'.
+     * 
+     * @return the value of field 'lookAndFeel'.
+     */
+    public java.lang.String getLookAndFeel()
+    {
+        return this._lookAndFeel;
+    } //-- java.lang.String getLookAndFeel() 
+
+    /**
+     * Method getPlugin
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.config.generate.Plugin getPlugin(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _pluginList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.config.generate.Plugin) _pluginList.elementAt(index);
+    } //-- com.iver.andami.config.generate.Plugin getPlugin(int) 
+
+    /**
+     * Method getPlugin
+     */
+    public org.gvsig.andami.config.generate.Plugin[] getPlugin()
+    {
+        int size = _pluginList.size();
+        org.gvsig.andami.config.generate.Plugin[] mArray = new org.gvsig.andami.config.generate.Plugin[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.config.generate.Plugin) _pluginList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.config.generate.Plugin[] getPlugin() 
+
+    /**
+     * Method getPluginCount
+     */
+    public int getPluginCount()
+    {
+        return _pluginList.size();
+    } //-- int getPluginCount() 
+
+    /**
+     * Returns the value of field 'pluginsDirectory'.
+     * 
+     * @return the value of field 'pluginsDirectory'.
+     */
+    public java.lang.String getPluginsDirectory()
+    {
+        return this._pluginsDirectory;
+    } //-- java.lang.String getPluginsDirectory() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllPlugin
+     */
+    public void removeAllPlugin()
+    {
+        _pluginList.removeAllElements();
+    } //-- void removeAllPlugin() 
+
+    /**
+     * Method removePlugin
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.config.generate.Plugin removePlugin(int index)
+    {
+        java.lang.Object obj = _pluginList.elementAt(index);
+        _pluginList.removeElementAt(index);
+        return (org.gvsig.andami.config.generate.Plugin) obj;
+    } //-- com.iver.andami.config.generate.Plugin removePlugin(int) 
+
+    /**
+     * Sets the value of field 'andami'.
+     * 
+     * @param andami the value of field 'andami'.
+     */
+    public void setAndami(org.gvsig.andami.config.generate.Andami andami)
+    {
+        this._andami = andami;
+    } //-- void setAndami(com.iver.andami.config.generate.Andami) 
+
+    /**
+     * Sets the value of field 'andamiOptions'.
+     * 
+     * @param andamiOptions the value of field 'andamiOptions'.
+     */
+    public void setAndamiOptions(org.gvsig.andami.config.generate.AndamiOptions andamiOptions)
+    {
+        this._andamiOptions = andamiOptions;
+    } //-- void setAndamiOptions(com.iver.andami.config.generate.AndamiOptions) 
+
+    /**
+     * Sets the value of field 'localeCountry'.
+     * 
+     * @param localeCountry the value of field 'localeCountry'.
+     */
+    public void setLocaleCountry(java.lang.String localeCountry)
+    {
+        this._localeCountry = localeCountry;
+    } //-- void setLocaleCountry(java.lang.String) 
+
+    /**
+     * Sets the value of field 'localeLanguage'.
+     * 
+     * @param localeLanguage the value of field 'localeLanguage'.
+     */
+    public void setLocaleLanguage(java.lang.String localeLanguage)
+    {
+        this._localeLanguage = localeLanguage;
+    } //-- void setLocaleLanguage(java.lang.String) 
+
+    /**
+     * Sets the value of field 'localeVariant'.
+     * 
+     * @param localeVariant the value of field 'localeVariant'.
+     */
+    public void setLocaleVariant(java.lang.String localeVariant)
+    {
+        this._localeVariant = localeVariant;
+    } //-- void setLocaleVariant(java.lang.String) 
+
+    /**
+     * Sets the value of field 'lookAndFeel'.
+     * 
+     * @param lookAndFeel the value of field 'lookAndFeel'.
+     */
+    public void setLookAndFeel(java.lang.String lookAndFeel)
+    {
+        this._lookAndFeel = lookAndFeel;
+    } //-- void setLookAndFeel(java.lang.String) 
+
+    /**
+     * Method setPlugin
+     * 
+     * @param index
+     * @param vPlugin
+     */
+    public void setPlugin(int index, org.gvsig.andami.config.generate.Plugin vPlugin)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _pluginList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _pluginList.setElementAt(vPlugin, index);
+    } //-- void setPlugin(int, com.iver.andami.config.generate.Plugin) 
+
+    /**
+     * Method setPlugin
+     * 
+     * @param pluginArray
+     */
+    public void setPlugin(org.gvsig.andami.config.generate.Plugin[] pluginArray)
+    {
+        //-- copy array
+        _pluginList.removeAllElements();
+        for (int i = 0; i < pluginArray.length; i++) {
+            _pluginList.addElement(pluginArray[i]);
+        }
+    } //-- void setPlugin(com.iver.andami.config.generate.Plugin) 
+
+    /**
+     * Sets the value of field 'pluginsDirectory'.
+     * 
+     * @param pluginsDirectory the value of field 'pluginsDirectory'
+     */
+    public void setPluginsDirectory(java.lang.String pluginsDirectory)
+    {
+        this._pluginsDirectory = pluginsDirectory;
+    } //-- void setPluginsDirectory(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.AndamiConfig) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.AndamiConfig.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiConfig.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java	(revision 38313)
@@ -0,0 +1,203 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class AndamiOptionsDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class AndamiOptionsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiOptionsDescriptor() {
+        super();
+        xmlName = "andami-options";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _optionList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.Option.class, "_optionList", "option", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiOptions target = (AndamiOptions) object;
+                return target.getOption();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiOptions target = (AndamiOptions) object;
+                    target.addOption( (org.gvsig.andami.config.generate.Option) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.Option();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _optionList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _iconTheme
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.config.generate.IconTheme.class, "_iconTheme", "icon-theme", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                AndamiOptions target = (AndamiOptions) object;
+                return target.getIconTheme();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    AndamiOptions target = (AndamiOptions) object;
+                    target.setIconTheme( (org.gvsig.andami.config.generate.IconTheme) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.config.generate.IconTheme();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _iconTheme
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.config.generate.AndamiOptionsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.AndamiOptions.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiOptions.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiOptions.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiOptions.java	(revision 38313)
@@ -0,0 +1,253 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class AndamiOptions.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class AndamiOptions implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _optionList
+     */
+    private java.util.Vector _optionList;
+
+    /**
+     * Field _iconTheme
+     */
+    private org.gvsig.andami.config.generate.IconTheme _iconTheme;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiOptions() {
+        super();
+        _optionList = new Vector();
+    } //-- com.iver.andami.config.generate.AndamiOptions()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addOption
+     * 
+     * @param vOption
+     */
+    public void addOption(org.gvsig.andami.config.generate.Option vOption)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _optionList.addElement(vOption);
+    } //-- void addOption(com.iver.andami.config.generate.Option) 
+
+    /**
+     * Method addOption
+     * 
+     * @param index
+     * @param vOption
+     */
+    public void addOption(int index, org.gvsig.andami.config.generate.Option vOption)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _optionList.insertElementAt(vOption, index);
+    } //-- void addOption(int, com.iver.andami.config.generate.Option) 
+
+    /**
+     * Method enumerateOption
+     */
+    public java.util.Enumeration enumerateOption()
+    {
+        return _optionList.elements();
+    } //-- java.util.Enumeration enumerateOption() 
+
+    /**
+     * Returns the value of field 'iconTheme'.
+     * 
+     * @return the value of field 'iconTheme'.
+     */
+    public org.gvsig.andami.config.generate.IconTheme getIconTheme()
+    {
+        return this._iconTheme;
+    } //-- com.iver.andami.config.generate.IconTheme getIconTheme() 
+
+    /**
+     * Method getOption
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.config.generate.Option getOption(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _optionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.config.generate.Option) _optionList.elementAt(index);
+    } //-- com.iver.andami.config.generate.Option getOption(int) 
+
+    /**
+     * Method getOption
+     */
+    public org.gvsig.andami.config.generate.Option[] getOption()
+    {
+        int size = _optionList.size();
+        org.gvsig.andami.config.generate.Option[] mArray = new org.gvsig.andami.config.generate.Option[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.config.generate.Option) _optionList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.config.generate.Option[] getOption() 
+
+    /**
+     * Method getOptionCount
+     */
+    public int getOptionCount()
+    {
+        return _optionList.size();
+    } //-- int getOptionCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllOption
+     */
+    public void removeAllOption()
+    {
+        _optionList.removeAllElements();
+    } //-- void removeAllOption() 
+
+    /**
+     * Method removeOption
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.config.generate.Option removeOption(int index)
+    {
+        java.lang.Object obj = _optionList.elementAt(index);
+        _optionList.removeElementAt(index);
+        return (org.gvsig.andami.config.generate.Option) obj;
+    } //-- com.iver.andami.config.generate.Option removeOption(int) 
+
+    /**
+     * Sets the value of field 'iconTheme'.
+     * 
+     * @param iconTheme the value of field 'iconTheme'.
+     */
+    public void setIconTheme(org.gvsig.andami.config.generate.IconTheme iconTheme)
+    {
+        this._iconTheme = iconTheme;
+    } //-- void setIconTheme(com.iver.andami.config.generate.IconTheme) 
+
+    /**
+     * Method setOption
+     * 
+     * @param index
+     * @param vOption
+     */
+    public void setOption(int index, org.gvsig.andami.config.generate.Option vOption)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _optionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _optionList.setElementAt(vOption, index);
+    } //-- void setOption(int, com.iver.andami.config.generate.Option) 
+
+    /**
+     * Method setOption
+     * 
+     * @param optionArray
+     */
+    public void setOption(org.gvsig.andami.config.generate.Option[] optionArray)
+    {
+        //-- copy array
+        _optionList.removeAllElements();
+        for (int i = 0; i < optionArray.length; i++) {
+            _optionList.addElement(optionArray[i]);
+        }
+    } //-- void setOption(com.iver.andami.config.generate.Option) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.AndamiOptions) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.AndamiOptions.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiOptions.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/OptionDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/OptionDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/OptionDescriptor.java	(revision 38313)
@@ -0,0 +1,210 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class OptionDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class OptionDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public OptionDescriptor() {
+        super();
+        xmlName = "option";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Option target = (Option) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Option target = (Option) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _value
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_value", "value", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Option target = (Option) object;
+                return target.getValue();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Option target = (Option) object;
+                    target.setValue( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _value
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.config.generate.OptionDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.Option.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/OptionDescriptor.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiDescriptor.java	(revision 38313)
@@ -0,0 +1,175 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.BooleanValidator;
+
+/**
+ * Class AndamiDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class AndamiDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public AndamiDescriptor() {
+        super();
+        xmlName = "andami";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _update
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_update", "update", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Andami target = (Andami) object;
+                if(!target.hasUpdate())
+                    return null;
+                return (target.getUpdate() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Andami target = (Andami) object;
+                    // ignore null values for non optional primitives
+                    if (value == null) return;
+                    
+                    target.setUpdate( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _update
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.config.generate.AndamiDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.Andami.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/AndamiDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Option.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Option.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Option.java	(revision 38313)
@@ -0,0 +1,152 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Option.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Option implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _value
+     */
+    private java.lang.String _value;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Option() {
+        super();
+    } //-- com.iver.andami.config.generate.Option()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'value'.
+     * 
+     * @return the value of field 'value'.
+     */
+    public java.lang.String getValue()
+    {
+        return this._value;
+    } //-- java.lang.String getValue() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'value'.
+     * 
+     * @param value the value of field 'value'.
+     */
+    public void setValue(java.lang.String value)
+    {
+        this._value = value;
+    } //-- void setValue(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.Option) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.Option.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Option.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Andami.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Andami.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Andami.java	(revision 38313)
@@ -0,0 +1,149 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Andami.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Andami implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _update
+     */
+    private boolean _update;
+
+    /**
+     * keeps track of state for field: _update
+     */
+    private boolean _has_update;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Andami() {
+        super();
+    } //-- com.iver.andami.config.generate.Andami()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteUpdate
+     */
+    public void deleteUpdate()
+    {
+        this._has_update= false;
+    } //-- void deleteUpdate() 
+
+    /**
+     * Returns the value of field 'update'.
+     * 
+     * @return the value of field 'update'.
+     */
+    public boolean getUpdate()
+    {
+        return this._update;
+    } //-- boolean getUpdate() 
+
+    /**
+     * Method hasUpdate
+     */
+    public boolean hasUpdate()
+    {
+        return this._has_update;
+    } //-- boolean hasUpdate() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'update'.
+     * 
+     * @param update the value of field 'update'.
+     */
+    public void setUpdate(boolean update)
+    {
+        this._update = update;
+        this._has_update = true;
+    } //-- void setUpdate(boolean) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.Andami) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.Andami.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/Andami.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/IconThemeDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/IconThemeDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/IconThemeDescriptor.java	(revision 38313)
@@ -0,0 +1,318 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class IconThemeDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class IconThemeDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public IconThemeDescriptor() {
+        super();
+        xmlName = "icon-theme";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _description
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_description", "description", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getDescription();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setDescription( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _description
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _version
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_version", "version", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getVersion();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setVersion( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _version
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _resource
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_resource", "resource", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getResource();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setResource( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _resource
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _basedir
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_basedir", "basedir", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                IconTheme target = (IconTheme) object;
+                return target.getBasedir();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    IconTheme target = (IconTheme) object;
+                    target.setBasedir( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _basedir
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.config.generate.IconThemeDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.config.generate.IconTheme.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/IconThemeDescriptor.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/IconTheme.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/IconTheme.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/IconTheme.java	(revision 38313)
@@ -0,0 +1,227 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class IconTheme.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class IconTheme implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _description
+     */
+    private java.lang.String _description;
+
+    /**
+     * Field _version
+     */
+    private java.lang.String _version;
+
+    /**
+     * Field _resource
+     */
+    private java.lang.String _resource;
+
+    /**
+     * Field _basedir
+     */
+    private java.lang.String _basedir;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public IconTheme() {
+        super();
+    } //-- com.iver.andami.config.generate.IconTheme()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'basedir'.
+     * 
+     * @return the value of field 'basedir'.
+     */
+    public java.lang.String getBasedir()
+    {
+        return this._basedir;
+    } //-- java.lang.String getBasedir() 
+
+    /**
+     * Returns the value of field 'description'.
+     * 
+     * @return the value of field 'description'.
+     */
+    public java.lang.String getDescription()
+    {
+        return this._description;
+    } //-- java.lang.String getDescription() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'resource'.
+     * 
+     * @return the value of field 'resource'.
+     */
+    public java.lang.String getResource()
+    {
+        return this._resource;
+    } //-- java.lang.String getResource() 
+
+    /**
+     * Returns the value of field 'version'.
+     * 
+     * @return the value of field 'version'.
+     */
+    public java.lang.String getVersion()
+    {
+        return this._version;
+    } //-- java.lang.String getVersion() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'basedir'.
+     * 
+     * @param basedir the value of field 'basedir'.
+     */
+    public void setBasedir(java.lang.String basedir)
+    {
+        this._basedir = basedir;
+    } //-- void setBasedir(java.lang.String) 
+
+    /**
+     * Sets the value of field 'description'.
+     * 
+     * @param description the value of field 'description'.
+     */
+    public void setDescription(java.lang.String description)
+    {
+        this._description = description;
+    } //-- void setDescription(java.lang.String) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'resource'.
+     * 
+     * @param resource the value of field 'resource'.
+     */
+    public void setResource(java.lang.String resource)
+    {
+        this._resource = resource;
+    } //-- void setResource(java.lang.String) 
+
+    /**
+     * Sets the value of field 'version'.
+     * 
+     * @param version the value of field 'version'.
+     */
+    public void setVersion(java.lang.String version)
+    {
+        this._version = version;
+    } //-- void setVersion(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.config.generate.IconTheme) Unmarshaller.unmarshal(org.gvsig.andami.config.generate.IconTheme.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/config/generate/IconTheme.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ConfigurationException.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ConfigurationException.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ConfigurationException.java	(revision 38313)
@@ -0,0 +1,90 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami;
+
+/**
+ * Indica que se ha producido un error accediendo a los ficheros de configuración
+ * de la plicación, de Andami o de los plugins
+ */
+public class ConfigurationException extends Exception {
+    /**
+     *
+     */
+    public ConfigurationException() {
+        super();
+
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param message
+     */
+    public ConfigurationException(String message) {
+        super(message);
+
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param message
+     * @param cause
+     */
+    public ConfigurationException(String message, Throwable cause) {
+        super(message, cause);
+
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param cause
+     */
+    public ConfigurationException(Throwable cause) {
+        super(cause);
+
+        // TODO Auto-generated constructor stub
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ConfigurationException.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/ProgressListener.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/ProgressListener.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/ProgressListener.java	(revision 38313)
@@ -0,0 +1,70 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.messages;
+
+import java.util.EventListener;
+
+
+/**
+ * Interfaz implementada por las extensiones que quieran informar del estado de
+ * su ejecución. Por ejemplo un extension que tarda mucho en ejecutarse puede
+ * implementar esta interfaz y añadirse como ProgressListener de la
+ * aplicacion. De esta manera la aplicación le pedirá su estado a intervalos
+ * regulares de tiempo y mostrará esta información en la barra de estado
+ *
+ * @author Fernando González Cortés
+ */
+public interface ProgressListener extends EventListener {
+    /**
+     * Método invocado a intervalos regulares por la aplicación y en el que se
+     * debe devolver el estado de una supuesta ejecución
+     *
+     * @return Cadena que se envía a la aplicación
+     */
+    public String getProgress();
+
+    /**
+     * Devuelve un porcentaje que indica el progreso de la tarea
+     *
+     * @return número del 0 al 100
+     */
+    public int getProgressValue();
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/ProgressListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/NotificationListener.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/NotificationListener.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/NotificationListener.java	(revision 38313)
@@ -0,0 +1,72 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.messages;
+
+/**
+ * Interfaz que deberán de implementar todas las clases que quieran recibir
+ * información sobre los mensajes de información, de warning y de error que
+ * recibe la aplicación
+ */
+public interface NotificationListener {
+    /**
+     * Método invocado cuando la aplicación recibe mensajes de error
+     *
+     * @param app contexto de la aplicación
+     * @param text Texto del mensaje
+     */
+    public void errorEvent(MessageEvent e);
+
+    /**
+     * Método invocado cuando la aplicación recibe mensajes de warning
+     *
+     * @param app contexto de la aplicación
+     * @param text Texto del mensaje
+     */
+    public void warningEvent(MessageEvent e);
+
+    /**
+     * Método invocado cuando la aplicación recibe mensajes de información
+     *
+     * @param app contexto de la aplicación
+     * @param text Texto del mensaje
+     */
+    public void infoEvent(MessageEvent e);
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/NotificationListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/NotificationManager.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/NotificationManager.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/NotificationManager.java	(revision 38313)
@@ -0,0 +1,316 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.messages;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Vector;
+
+import javax.swing.JOptionPane;
+import javax.swing.Timer;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.tools.exception.IBaseException;
+
+
+
+/**
+ * Clase que recibe los mensajes de error, warning e información y dispara los
+ * eventos en los listeners que escuchan dichos eventos
+ *
+ * @version $Revision$
+ */
+public class NotificationManager {
+	private static int SIZE_MESSAGE=4;
+    /** DOCUMENT ME! */
+    private static Logger logger = LoggerFactory.getLogger(NotificationManager.class.getName());
+
+    /** Timer de espera de nuevos mensajes */
+    private static Timer timer;
+
+    /** Indica si se han añadido mensajes desde la última vez que se comprobó */
+    private static boolean addedMessage = false;
+
+    /** DOCUMENT ME! */
+    private static ArrayList info = new ArrayList();
+    private static ArrayList infoExceptions = new ArrayList();
+
+    /** DOCUMENT ME! */
+    private static ArrayList warnings = new ArrayList();
+    private static ArrayList warningsExceptions = new ArrayList();
+
+    /** DOCUMENT ME! */
+    private static ArrayList errors = new ArrayList();
+    private static ArrayList errorsExceptions = new ArrayList();
+
+    /** DOCUMENT ME! */
+    private static Vector listeners = new Vector();
+    private static boolean isFirst = true;
+
+    /**
+     * Añade un objeto que escucha los mensajes de error, warning e información
+     *
+     * @param nl objeto que recibirá los eventos
+     */
+    public static synchronized void addNotificationListener(NotificationListener nl) {
+        logger.info("Se añade un listener al manager de notificaciones");
+        listeners.add(nl);
+    }
+
+    /**
+     * @see com.iver.mdiApp.Notification#addError(java.lang.String)
+     */
+    public static synchronized void addError(final String err, Throwable e) {
+    	logger.error(err, e);
+        dispatchError(err, e);
+    }
+    
+    public static synchronized void dispatchError(final String err, Throwable e) {
+        errors.add(err);
+        errorsExceptions.add(e);
+
+        if (isFirst) {
+            AddError((String[]) errors.toArray(new String[0]),
+                (Throwable[]) errorsExceptions.toArray(new Throwable[0]));
+            errors.clear();
+            errorsExceptions.clear();
+            isFirst = false;
+        }
+
+        dispatchMessages();
+    }
+
+    /**
+     * @see com.iver.mdiApp.Notification#addWarning(java.lang.String)
+     */
+    public static synchronized void addWarning(final String warn,
+        final Throwable e) {
+        logger.warn(warn, e);
+        dispatchWarning(warn, e);
+    }
+
+    public static synchronized void dispatchWarning(final String warn,
+        final Throwable e) {
+        warnings.add(warn);
+        warningsExceptions.add(e);
+
+        if (isFirst) {
+            AddWarning((String[]) warnings.toArray(new String[0]),
+                (Throwable[]) warningsExceptions.toArray(new Throwable[0]));
+            warnings.clear();
+            warningsExceptions.clear();
+            isFirst = false;
+        }
+
+        dispatchMessages();
+    }
+    
+    /*
+     * @see com.iver.mdiApp.Notification#addWarning(java.lang.String)
+     */
+    public static synchronized void addWarning(final String warn) {
+		addWarning(warn,null);
+    }
+
+    /*
+     * @see com.iver.mdiApp.Consola#addInfo(java.lang.String)
+     */
+    public static synchronized void addInfo(final String inf, final Throwable e) {
+		logger.info(inf, e);
+        info.add(inf);
+        infoExceptions.add(e);
+
+        if (isFirst) {
+            AddInfo((String[]) info.toArray(new String[0]),
+                (Throwable[]) infoExceptions.toArray(new Throwable[0]));
+            info.clear();
+            infoExceptions.clear();
+            isFirst = false;
+        }
+
+        dispatchMessages();
+    }
+    /*
+     * @see com.iver.mdiApp.Consola#addInfo(java.lang.String)
+     */
+    public static synchronized void addInfo(final String inf) {
+		addInfo(inf,null);
+    }
+    /**
+     * Método que es ejecutado en el thread de la interfaz y que se encarga de
+     * avisar del mensaje de error a todos los listeners registrados
+     *
+     * @param error Mensaje de error
+     * @param e s que van a recibir las notificaciones
+     */
+    private static void AddError(String[] error, Throwable[] e) {
+        for (int i = 0; i < listeners.size(); i++) {
+            ((NotificationListener) listeners.get(i)).errorEvent(new MessageEvent(
+                    error, e));
+        }
+    }
+
+    /**
+     * Método que es ejecutado en el thread de la interfaz y que se encarga de
+     * avisar del mensaje de error a todos los listeners registrados
+     *
+     * @param warn Mensaje de warning
+     * @param e objetos que van a recibir las notificaciones
+     */
+    private static void AddWarning(String[] warn, Throwable[] e) {
+        for (int i = 0; i < listeners.size(); i++) {
+            ((NotificationListener) listeners.get(i)).warningEvent(new MessageEvent(
+                    warn, e));
+        }
+    }
+
+    /**
+     * Método que es ejecutado en el thread de la interfaz y que se encarga de
+     * avisar del mensaje de información a todos los listeners registrados
+     *
+     * @param info Mensaje de información
+     * @param e objetos que van a recibir las notificaciones
+     */
+    private static void AddInfo(String[] info, Throwable[] e) {
+        for (int i = 0; i < listeners.size(); i++) {
+            ((NotificationListener) listeners.get(i)).infoEvent(new MessageEvent(
+                    info, e));
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    private static void dispatchMessages() {
+        addedMessage = true;
+
+        if (timer == null) {
+
+            timer = new Timer(1000, new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+
+			        if (errors.size() > 0) {
+			            AddError((String[]) errors.toArray(new String[0]),
+			                (Throwable[]) errorsExceptions.toArray(new Throwable[0]));
+			            errors.clear();
+			            errorsExceptions.clear();
+			        }
+
+			        if (warnings.size() > 0) {
+			            AddWarning((String[]) warnings.toArray(new String[0]),
+			                (Throwable[]) warningsExceptions.toArray(new Throwable[0]));
+			            warnings.clear();
+			            warningsExceptions.clear();
+			        }
+
+			        if (info.size() > 0) {
+			            AddInfo((String[]) info.toArray(new String[0]),
+			                (Throwable[]) infoExceptions.toArray(new Throwable[0]));
+			            info.clear();
+			            infoExceptions.clear();
+			        }
+
+			        if (!addedMessage) {
+			            if (timer != null) {
+			                timer.stop();
+			            }
+
+			            timer = null;
+			        }
+
+			        addedMessage = false;
+			        isFirst = true;
+				}
+			});
+            timer.start();
+        }
+    }
+
+	public static void addError(Throwable e1) {
+	    if( e1 instanceof IBaseException ) {
+            IBaseException ex = (IBaseException) e1;
+	        String msg;
+	        try {
+	            msg = ex.getLocalizedMessageStack();
+	        } catch(Exception ex1) {
+	            try {
+	                msg = ex.getMessageStack();
+	            } catch(Exception ex2) {
+	                msg = ex.getMessage();
+	            }
+	        }
+            addError(msg, e1);
+	    } else {
+	        addError(e1.toString(), e1);
+	    }
+
+	}
+
+	public static void showMessageError(String message,Exception e) {
+		message=splitMessage(message);
+		JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),message,PluginServices.getText(NotificationManager.class,"error"),JOptionPane.ERROR_MESSAGE);
+		NotificationManager.addWarning(message,e);
+	}
+	public static void showMessageWarning(String message,Exception e) {
+		message=splitMessage(message);
+		JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),message,PluginServices.getText(NotificationManager.class,"warning"),JOptionPane.WARNING_MESSAGE);
+		NotificationManager.addWarning(message,e);
+	}
+	public static void showMessageInfo(String message,Exception e) {
+		message=splitMessage(message);
+		JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),message,PluginServices.getText(NotificationManager.class,"info"),JOptionPane.INFORMATION_MESSAGE);
+		NotificationManager.addInfo(message,e);
+	}
+	private static String splitMessage(String message) {
+		String[] messages=message.split("\n");
+		String resultMessage="";
+		for (int i=0;i<messages.length && i<=SIZE_MESSAGE;i++){
+			resultMessage+=(messages[i]);
+			resultMessage+=("\n");
+		}
+		return resultMessage;
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/NotificationManager.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/MessageEvent.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/MessageEvent.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/MessageEvent.java	(revision 38313)
@@ -0,0 +1,80 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.messages;
+
+public class MessageEvent {
+	private String[] messages;
+	private Throwable[] exceptions;
+
+	public MessageEvent(String[] msgs, Throwable[] excps){
+		messages = msgs;
+		exceptions = excps;
+	}
+
+	/**
+	 * @return
+	 */
+	public Throwable[] getExceptions() {
+		return exceptions;
+	}
+
+	/**
+	 * @return
+	 */
+	public String[] getMessages() {
+		return messages;
+	}
+
+	/**
+	 * @param throwables
+	 */
+	public void setExceptions(Throwable[] throwables) {
+		exceptions = throwables;
+	}
+
+	/**
+	 * @param strings
+	 */
+	public void setMessages(String[] strings) {
+		messages = strings;
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/MessageEvent.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/Messages.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/Messages.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/Messages.java	(revision 38313)
@@ -0,0 +1,94 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.messages;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+
+/**
+ * Clase que accede a los recursos para la i18n
+ */
+public class Messages {
+    /** DOCUMENT ME! */
+    private static final String BUNDLE_NAME = "org.gvsig.andami.text";
+
+    /** DOCUMENT ME! */
+    private static ResourceBundle RESOURCE_BUNDLE = null;
+
+    /**
+     * Inicializa la clase con el locale adecuado
+     *
+     * @param loc Locale de la aplicación
+     */
+    public static void init(Locale loc) {
+    	return;
+    }
+
+    /**
+     * @param strLocale. Ejemplo: va para valenciano
+     * Se trata de permitir coexistir el valenciano con el catalán.
+     * El método buscará un fichero properties llamado "text_va.properties"
+     * para usarlo con RESOURCE_BUNDLE de donde sacar los mensajes
+     * traducidos.
+     */
+    public static void init(String strLocale) {
+    	return;
+    }
+    
+    
+    /**
+     * Obtiene el valor del recurso con clave 'key'
+     *
+     * @param key clave del recurso que se quiere obtener
+     *
+     * @return recurso que se quiere obtener o !key! en caso de no encontrarlo.
+     *         En dicho caso no se notifica al framework ya que  estos son los
+     *         mensajes propios de la aplicación y deben de estar todos
+     */
+    public static String getString(String key) {
+        return org.gvsig.i18n.Messages.getText(key, "org.gvsig.andami.messages.Messages");
+    }
+    
+    public static String get(String key) {
+        return org.gvsig.i18n.Messages.getText(key, "org.gvsig.andami.messages.Messages");
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/messages/Messages.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/AndamiEventQueue.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/AndamiEventQueue.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/AndamiEventQueue.java	(revision 38313)
@@ -0,0 +1,67 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui;
+
+import java.awt.AWTEvent;
+import java.awt.EventQueue;
+
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.messages.NotificationManager;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando González Cortés
+ */
+public class AndamiEventQueue extends EventQueue {
+	protected void dispatchEvent(AWTEvent event){
+		try{
+			super.dispatchEvent(event);
+		} catch(RuntimeException e){
+			NotificationManager.addError(e);//Messages.getString("PluginServices.Bug en el código"), e);
+		} catch (Error e){
+			NotificationManager.addError(
+			    Messages.getString("Error de la applicacion.  \nEs conveniente que salga de la aplicación\n\n"+e.getLocalizedMessage()), e);
+		}
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/AndamiEventQueue.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java	(revision 38313)
@@ -0,0 +1,84 @@
+package org.gvsig.andami.ui.wizard;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+
+import jwizardcomponent.CancelAction;
+import jwizardcomponent.DefaultJWizardComponents;
+import jwizardcomponent.FinishAction;
+import jwizardcomponent.common.SimpleButtonPanel;
+
+public class WizardPanelWithLogo extends JPanel {
+	  DefaultJWizardComponents wizardComponents;
+
+	  JPanel buttonPanel;
+	  JLabel statusLabel = new JLabel();
+
+	  ImageIcon logo;
+
+	  public WizardPanelWithLogo(ImageIcon logo) {
+	    this.logo = logo;
+	    wizardComponents = new DefaultJWizardComponents();
+	    init();
+	  }
+
+	  private void init() {
+	    
+
+	    JPanel logoPanel = new JPanel();
+
+	    String fileString;
+	    if (logo.toString().indexOf("file:") < 0 &&
+	        logo.toString().indexOf("http:") < 0) {
+	      fileString = "file:///" +System.getProperty("user.dir") +"/"
+	                        +logo.toString();
+	      fileString = fileString.replaceAll("\\\\", "/");
+	    } else {
+	      fileString = logo.toString();
+	    }
+	    logoPanel.add(new JLabel(logo));
+	    logoPanel.setBackground(Color.WHITE);
+	    this.setLayout(new BorderLayout());
+	    this.add(logoPanel, BorderLayout.WEST);
+	    this.add(wizardComponents.getWizardPanelsContainer(),
+	    							BorderLayout.CENTER);
+
+	    JPanel auxPanel = new JPanel(new BorderLayout());
+	    auxPanel.add(new JSeparator(), BorderLayout.NORTH);
+
+	    buttonPanel = new SimpleButtonPanel(wizardComponents);
+	    auxPanel.add(buttonPanel);
+	    this.add(auxPanel, BorderLayout.SOUTH);
+	    
+
+	    wizardComponents.setFinishAction(new FinishAction(wizardComponents) {
+	      public void performAction() {
+	        // dispose();
+	      }
+	    });
+	    wizardComponents.setCancelAction(new CancelAction(wizardComponents) {
+	      public void performAction() {
+	        // dispose();
+	      }
+	    });
+	  }
+
+	  public DefaultJWizardComponents getWizardComponents(){
+	    return wizardComponents;
+	  }
+
+	  public void setWizardComponents(DefaultJWizardComponents aWizardComponents){
+	    wizardComponents = aWizardComponents;
+	  }
+
+	  public void show() {
+	    wizardComponents.updateComponents();
+	    super.setVisible(true);
+	  }
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java	(revision 38313)
@@ -0,0 +1,649 @@
+package org.gvsig.andami.ui.wizard;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.status.IUnsavedData;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.gui.beans.swing.JButton;
+
+
+/**
+ * Ask for elements to save before application exit
+ *
+ *
+ */
+public class UnsavedDataPanel extends JPanel implements IWindow, ActionListener {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -4745219917358767905L;
+
+
+	private static ImageIcon blanckIcon = null;
+	private JPanel pResources = null;
+	private JPanel pButtons = null;
+	private JScrollPane pScrollList = null;
+	private myList list = null;
+	private JLabel lblDescription = null;
+	private JButton botSave = null;
+	private JButton botDiscard = null;
+	private JButton botDontExit = null;
+	private JPanel pActionButtons = null;
+	private JPanel pSelectionButtons = null;
+	private JButton botSelectAll = null;
+	private JButton botDeselectAll = null;
+
+	private ArrayList listeners = new ArrayList();
+	private JLabel lblResourceDescription = null;
+	private IUnsavedData[] unsavedDataList;
+	private String windowTitle = PluginServices.getText(this, "save_resources");
+
+
+
+	/**
+	 * This is the default constructor
+	 */
+	public UnsavedDataPanel(IUnsavedData[] unsavedDatalist) {
+		super();
+		initialize();
+		this.setUnsavedDataArray(unsavedDatalist);
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		BorderLayout borderLayout = new BorderLayout();
+		borderLayout.setHgap(5);
+		borderLayout.setVgap(5);
+		lblDescription = new JLabel();
+		lblDescription.setText(PluginServices.getText(this, "select_resources_to_save_before_exit"));
+		lblDescription.setPreferredSize(new Dimension(497, 40));
+		lblDescription.setName("lblDescription");
+		this.setLayout(borderLayout);
+		this.setSize(396, 272);
+		this.add(getPResources(), java.awt.BorderLayout.CENTER);
+		this.add(getPButtons(), java.awt.BorderLayout.SOUTH);
+		this.add(lblDescription, BorderLayout.NORTH);
+	}
+
+	/**
+	 * This method initializes pResources
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPResources() {
+		if (pResources == null) {
+			pResources = new JPanel();
+			pResources.setLayout(new BorderLayout());
+			pResources.add(getPScrollList(), BorderLayout.CENTER);
+			pResources.add(getLblResourceDescription(), BorderLayout.SOUTH);
+		}
+		return pResources;
+	}
+
+
+	/**
+	 * This method initializes lblResourceDescription
+	 *
+	 * @return javax.swing.JLabel
+	 */
+	private JLabel getLblResourceDescription() {
+		if (lblResourceDescription == null) {
+			lblResourceDescription = new JLabel();
+			lblResourceDescription.setText("");
+			lblResourceDescription.setPreferredSize(new Dimension(38, 50));
+			lblResourceDescription.setName("lblResourceDescription");
+		}
+		return lblResourceDescription;
+	}
+
+
+	/**
+	 * This method initializes pButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPButtons() {
+		if (pButtons == null) {
+			BorderLayout borderLayout2 = new BorderLayout();
+			borderLayout2.setHgap(5);
+			borderLayout2.setVgap(5);
+			pButtons = new JPanel();
+			pButtons.setLayout(borderLayout2);
+			pButtons.add(getPSelectionButtons(), BorderLayout.NORTH);
+			pButtons.add(getPActionButtons(), BorderLayout.SOUTH);
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes pScrollList
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getPScrollList() {
+		if (pScrollList == null) {
+			pScrollList = new JScrollPane();
+			pScrollList.setPreferredSize(new java.awt.Dimension(350,350));
+			pScrollList.setViewportView(getList());
+		}
+		return pScrollList;
+	}
+
+	/**
+	 * This method initializes list
+	 *
+	 * @return javax.swing.JList
+	 */
+	private myList getList() {
+		if (list == null) {
+			list = new myList();
+			list.setBackground(Color.white);
+		}
+		return list;
+	}
+
+	/**
+	 * This method initializes botSave
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotSave() {
+		if (botSave == null) {
+			botSave = new JButton();
+			botSave.setName("botSave");
+			botSave.setToolTipText(PluginServices.getText(this, "save_selected_resources_and_exit"));
+			botSave.setText(PluginServices.getText(this, "ok"));
+			botSave.setActionCommand("Accept");
+			botSave.addActionListener(this);
+		}
+		return botSave;
+	}
+
+	/**
+	 * This method initializes botDiscard
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotDiscard() {
+		if (botDiscard == null) {
+			botDiscard = new JButton();
+			botDiscard.setName("botDiscard");
+			botDiscard.setToolTipText(PluginServices.getText(this, "discard_changes_and_exit"));
+			botDiscard.setText(PluginServices.getText(this, "discard_changes"));
+			botDiscard.setActionCommand("Discard");
+			botDiscard.addActionListener(this);
+		}
+		return botDiscard;
+	}
+
+	/**
+	 * This method initializes botDontExit
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotDontExit() {
+		if (botDontExit == null) {
+			botDontExit = new JButton();
+			botDontExit.setName("botDontExit");
+			botDontExit.setToolTipText(PluginServices.getText(this, "cancel_the_application_termination"));
+			botDontExit.setText(PluginServices.getText(this, "cancelar"));
+			botDontExit.setActionCommand("Cancel");
+			botDontExit.addActionListener(this);
+		}
+		return botDontExit;
+	}
+
+	/**
+	 * This method initializes pActionButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPActionButtons() {
+		if (pActionButtons == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setAlignment(FlowLayout.RIGHT);
+			pActionButtons = new JPanel();
+			pActionButtons.setLayout(flowLayout);
+			pActionButtons.setName("pActionButtons");
+			pActionButtons.add(getBotSave(), null);
+			pActionButtons.add(getBotDiscard(), null);
+			pActionButtons.add(getBotDontExit(), null);
+		}
+		return pActionButtons;
+	}
+
+	/**
+	 * This method initializes pSelectionButtons
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPSelectionButtons() {
+		if (pSelectionButtons == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(FlowLayout.LEFT);
+			pSelectionButtons = new JPanel();
+			pSelectionButtons.setLayout(flowLayout1);
+			pSelectionButtons.setName("pSelectionButtons");
+			pSelectionButtons.add(getBotSelectAll(), null);
+			pSelectionButtons.add(getBotDeselectAll(), null);
+		}
+		return pSelectionButtons;
+	}
+
+	/**
+	 * This method initializes botSelectAll
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotSelectAll() {
+		if (botSelectAll == null) {
+			botSelectAll = new JButton();
+			botSelectAll.setText(PluginServices.getText(this, "select_all"));
+			botSelectAll.setName("botSelectAll");
+			botSelectAll.setToolTipText(PluginServices.getText(this, "select_all_resources"));
+			botSelectAll.setActionCommand("SelectAll");
+			botSelectAll.addActionListener(this);
+		}
+		return botSelectAll;
+	}
+
+	/**
+	 * This method initializes botDeselectAll
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBotDeselectAll() {
+		if (botDeselectAll == null) {
+			botDeselectAll = new JButton();
+			botDeselectAll.setName("botDeselectAll");
+			botDeselectAll.setToolTipText(PluginServices.getText(this, "deselect_all_resources"));
+			botDeselectAll.setText(PluginServices.getText(this, "deselect_all"));
+			botDeselectAll.setActionCommand("DeselectAll");
+			botDeselectAll.addActionListener(this);
+		}
+		return botDeselectAll;
+	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo wi = new WindowInfo(WindowInfo.MODALDIALOG
+				| WindowInfo.RESIZABLE
+				| WindowInfo.MAXIMIZABLE);
+		wi.setTitle(windowTitle);
+		wi.setHeight(270);
+		wi.setWidth(450);
+		return wi;
+	}
+
+	public void setWindowTitle(String windowTitle) {
+		this.windowTitle = windowTitle;
+	}
+
+	public void setCancelText(String text, String tooltipText) {
+		getBotDontExit().setToolTipText(tooltipText);
+		getBotDontExit().setText(text);
+	}
+
+	public void setDiscardText(String text, String tooltipText) {
+		getBotDiscard().setToolTipText(tooltipText);
+		getBotDiscard().setText(text);
+	}
+
+	public void setAcceptText(String text, String tooltipText) {
+		getBotSave().setToolTipText(tooltipText);
+		getBotSave().setText(text);
+	}
+
+	public void setHeaderText(String text) {
+		lblDescription.setText(text);
+	}
+
+	/**
+	 * Register a listener to call
+	 *
+	 * @param a UnsavedDataPanelListener instance
+	 */
+	public void addActionListener(UnsavedDataPanelListener listener){
+		this.listeners.add(listener);
+	}
+
+	public void removeActionListener(UnsavedDataPanelListener listener){
+		this.listeners.remove(listener);
+	}
+
+	public class UnsavedDataPanelListener {
+		public void cancel(UnsavedDataPanel panel){
+
+		}
+
+		public void accept(UnsavedDataPanel panel){
+
+		}
+
+		public void discard(UnsavedDataPanel panel) {
+
+		}
+	}
+
+	private class myList extends JPanel{
+
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = 3179254463477354501L;
+
+		private GridBagConstraints constraints;
+		private GridBagConstraints constraintsLast;
+
+		public myList(){
+			super();
+			initialize();
+		}
+
+		private void initialize(){
+			this.setLayout(new GridBagLayout());
+			this.constraints = new GridBagConstraints();
+			this.constraints.fill = GridBagConstraints.HORIZONTAL;
+			this.constraints.gridwidth = GridBagConstraints.REMAINDER;
+			this.constraints.weightx =0;
+			this.constraints.gridx =0;
+			this.constraints.gridy=0;
+			this.constraints.anchor = GridBagConstraints.WEST;
+			this.constraints.insets =new Insets(3,3,0,0);
+
+			this.constraintsLast = new GridBagConstraints();
+			this.constraintsLast.fill = GridBagConstraints.BOTH;
+			this.constraintsLast.gridheight = GridBagConstraints.REMAINDER;
+			this.constraintsLast.gridwidth = GridBagConstraints.REMAINDER;
+			this.constraintsLast.gridx =0;
+			this.constraintsLast.weightx =1;
+			this.constraintsLast.weighty =1;
+			this.constraintsLast.anchor = GridBagConstraints.FIRST_LINE_START;
+
+
+		}
+
+		public void addItems(IUnsavedData[] itemList){
+			int i;
+			this.removeAll();
+			if (itemList.length == 0){
+				return;
+			}
+
+			for (i=0;i< itemList.length;i++){
+				this.constraints.gridy = i;
+				this.add(newItem(itemList[i]), this.constraints);
+			}
+			this.constraintsLast.gridy=itemList.length;
+			this.add(new JLabel(),this.constraintsLast);
+
+		}
+		public int getItemsCount(){
+			return this.getComponentCount() -1;
+		}
+
+		public myUnsavedItem getItem(int i){
+			if (i>= this.getComponentCount()){
+				return null;
+			}
+			return (myUnsavedItem)this.getComponent(i);
+		}
+
+		private myUnsavedItem newItem(IUnsavedData itemData){
+			myUnsavedItem item;
+			item = new myUnsavedItem(itemData);
+			item.addMouseListener(new MouseListener(){
+				public void mouseClicked(MouseEvent e) {
+					myUnsavedItem item = (myUnsavedItem)e.getComponent();
+					getLblResourceDescription().setText(item.getDescription());
+				}
+				public void mouseEntered(MouseEvent e) {
+				}
+
+				public void mouseExited(MouseEvent e) {
+				}
+
+				public void mousePressed(MouseEvent e) {
+				}
+
+				public void mouseReleased(MouseEvent e) {
+				}
+
+			});
+			return item;
+		}
+
+	}
+
+	private class myUnsavedItem extends JPanel{
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = -6280057775368437349L;
+		private JCheckBox chkChecked;
+		private JLabel lblText;
+		private IUnsavedData dataItem;
+
+		public myUnsavedItem(IUnsavedData dataItem ){
+			super();
+			this.initialize();
+			this.setData(dataItem);
+		}
+
+		private void initialize(){
+			this.setOpaque(false);
+			BorderLayout layout = new BorderLayout();
+			layout.setHgap(5);
+			this.setLayout(layout);
+			this.add(this.getChkChecked(),BorderLayout.WEST);
+			this.add(this.getLblText(),BorderLayout.CENTER);
+		}
+
+		private JLabel getLblText() {
+			if (lblText == null){
+				lblText = new JLabel();
+				lblText.setName("lblText");
+			}
+			return lblText;
+		}
+
+		private JCheckBox getChkChecked() {
+			if (chkChecked == null){
+				chkChecked = new JCheckBox();
+				chkChecked.setName("chkChecked");
+				chkChecked.setSelected(true);
+				chkChecked.setOpaque(false);
+			}
+			return chkChecked;
+		}
+
+		public boolean isSelected(){
+			return getChkChecked().isSelected();
+		}
+
+		public void setSelected(boolean selected){
+			getChkChecked().setSelected(selected);
+		}
+
+		public void setData(IUnsavedData dataItem){
+			this.dataItem = dataItem;
+			JLabel lbl = getLblText();
+			if (dataItem.getIcon() != null){
+				lbl.setIcon((ImageIcon) PluginServices.getIconTheme().get(dataItem.getIcon()));
+			} else{
+				lbl.setIcon(getBlanckIcon());
+			}
+			lbl.setText(dataItem.getResourceName());
+			getChkChecked().setSelected(true);
+		}
+
+		public IUnsavedData getData(){
+			return this.dataItem;
+		}
+
+		public String getDescription(){
+			return this.dataItem.getDescription();
+		}
+
+		private ImageIcon getBlanckIcon(){
+			if (blanckIcon== null){
+				BufferedImage buff =new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
+				blanckIcon = new ImageIcon(buff);
+			}
+			return blanckIcon;
+		}
+
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (e.getActionCommand() == "Cancel"){
+			fireDontExitEvent();
+			return;
+		}
+		if (e.getActionCommand() == "Accept"){
+			fireAcceptEvent();
+			return;
+		}
+		if (e.getActionCommand() == "Discard") {
+			fireDiscardEvent();
+			return;
+		}
+		if (e.getActionCommand() == "SelectAll"){
+			selectAll();
+			return;
+		}
+		if (e.getActionCommand() == "DeselectAll"){
+			deselectAll();
+			return;
+		}
+	}
+
+	public void close(){
+		PluginServices.getMDIManager().closeWindow(this);
+
+	}
+
+	private void fireAcceptEvent() {
+		Iterator iter = this.listeners.iterator();
+		while (iter.hasNext()){
+			((UnsavedDataPanelListener)iter.next()).accept(this);
+		}
+	}
+
+	private void fireDiscardEvent() {
+		Iterator iter = this.listeners.iterator();
+		while (iter.hasNext()){
+			((UnsavedDataPanelListener)iter.next()).discard(this);
+		}
+	}
+
+	private void fireDontExitEvent() {
+		Iterator iter = this.listeners.iterator();
+		while (iter.hasNext()){
+			((UnsavedDataPanelListener)iter.next()).cancel(this);
+		}
+	}
+
+	private void setSelectedsAll( boolean selected){
+		int i;
+		myList theList = getList();
+		myUnsavedItem item;
+		for (i=0;i < theList.getItemsCount();i++){
+			item = (myUnsavedItem)theList.getItem(i);
+			item.setSelected(selected);
+		}
+		theList.doLayout();
+	}
+
+	public void deselectAll() {
+		this.setSelectedsAll(false);
+	}
+
+	public void selectAll() {
+		this.setSelectedsAll(true);
+	}
+
+
+	/**
+	 * Set the resorces to ask for
+	 *
+	 * @param IUnsavedData[] resources pending to save
+	 */
+	public void setUnsavedDataArray(IUnsavedData[] unsavedDatalist){
+		this.unsavedDataList = unsavedDatalist;
+		myList theList = getList();
+
+		theList.addItems(unsavedDatalist);
+		theList.validate();
+
+	}
+
+
+	private IUnsavedData[] getUnsavedData(boolean selected){
+		int i;
+		myList theList = getList();
+		ArrayList aList = new ArrayList();
+		myUnsavedItem item;
+		IUnsavedData[] result;
+
+		for (i=0;i < theList.getItemsCount();i++){
+			item = (myUnsavedItem)theList.getItem(i);
+			if (item.isSelected() == selected){
+				aList.add(item.getData());
+			}
+		}
+		result = new IUnsavedData[aList.size()];
+		System.arraycopy(aList.toArray(), 0, result, 0, aList.size());
+		return result;
+	}
+
+
+	/**
+	 * Returns the IUnsavedData selecteds for the user to save
+	 *
+	 * @return IUnsaveData[] to save
+	 */
+	public IUnsavedData[] getSelectedsUnsavedData(){
+		return this.getUnsavedData(true);
+
+	}
+
+	/**
+	 * Returns the IUnsavedData not selecteds for the user
+	 *
+	 * @return IUnsavedData[] to ignore
+	 */
+	public IUnsavedData[] getUnselectedsUnsavedData(){
+		return this.getUnsavedData(false);
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/WizardAndami.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/WizardAndami.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/WizardAndami.java	(revision 38313)
@@ -0,0 +1,83 @@
+package org.gvsig.andami.ui.wizard;
+
+import java.awt.BorderLayout;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+import jwizardcomponent.CancelAction;
+import jwizardcomponent.DefaultJWizardComponents;
+import jwizardcomponent.FinishAction;
+
+
+public class WizardAndami extends JPanel implements IWindow {
+	WindowInfo viewInfo = null;
+	WizardPanelWithLogo wizardPanel;
+
+	// No deberían necesitarse un FinishAction y un CancelAction, pero bueno,
+	// lo mantengo por ahora.
+	private class CloseAction extends FinishAction
+	{
+		IWindow v;
+		public CloseAction(IWindow view)
+		{
+			super(wizardPanel.getWizardComponents());
+			v = view;
+		}
+		public void performAction() {
+			PluginServices.getMDIManager().closeWindow(v);
+		}
+
+	}
+	private class CloseAction2 extends CancelAction
+	{
+
+		IWindow v;
+		public CloseAction2(IWindow view)
+		{
+			super(wizardPanel.getWizardComponents());
+			v = view;
+		}
+		public void performAction() {
+			PluginServices.getMDIManager().closeWindow(v);
+		}
+
+	}
+
+
+	public WizardAndami(ImageIcon logo)
+	{
+		wizardPanel = new WizardPanelWithLogo(logo);
+		CloseAction closeAction = new CloseAction(this);
+		CloseAction2 closeAction2 = new CloseAction2(this);
+		wizardPanel.getWizardComponents().setFinishAction(closeAction);
+		wizardPanel.getWizardComponents().setCancelAction(closeAction2);
+
+		this.setLayout(new BorderLayout());
+		this.add(wizardPanel, BorderLayout.CENTER);
+	}
+
+	public DefaultJWizardComponents getWizardComponents()
+	{
+		return wizardPanel.getWizardComponents();
+	}
+
+
+	public WindowInfo getWindowInfo() {
+		if (viewInfo == null)
+		{
+			viewInfo = new WindowInfo(WindowInfo.MODALDIALOG|WindowInfo.RESIZABLE);
+		}
+		return viewInfo;
+	}
+
+	public Object getWindowProfile() {
+		// TODO Auto-generated method stub
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/wizard/WizardAndami.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/theme/Theme.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/theme/Theme.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/theme/Theme.java	(revision 38313)
@@ -0,0 +1,360 @@
+package org.gvsig.andami.ui.theme;
+
+import java.awt.Color;
+import java.awt.Point;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParser;
+
+
+
+/**
+ * Personalization of the program according to the file xml with the necessary information.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class Theme {
+    public static final String CENTERED = "CENTERED";
+    public static final String EXPAND = "EXPAND";
+    public static final String MOSAIC = "MOSAIC";
+
+	private static String encoding = "UTF-8";
+	private static final String ANDAMI_PROPERTIES = "AndamiProperties";
+    private static final String APPLICATION_IMAGES = "ApplicationImages";
+    private static final String SPLASH_IMAGES = "SplashImages";
+    private static final String SPLASH = "Splash";
+    private static final String PATH = "path";
+    private static final String TIMER = "timer";
+    private static final String ICON = "Icon";
+    private static final String APPLICATION_NAME = "ApplicationName";
+    private static final String VALUE = "value";
+	private static final String BACKGROUND_IMAGE = "BackgroundImage";
+	private static final String WALLPAPER_TYPE = "WallpaperType";
+
+	private static final String VERSION="version";
+	private static final String FONTPOSITIONX="x";
+	private static final String FONTPOSITIONY="y";
+
+	private static final String FONTSIZE="fontsize";
+	private static final String FONTCOLOR="color";
+
+	private ArrayList<String> images = new ArrayList<String>();
+    private String icon;
+    private ArrayList<String> timers = new ArrayList<String>();
+    private ArrayList<String> versions = new ArrayList<String>();
+    private ArrayList<String> fontColors = new ArrayList<String>();
+    private ArrayList<String> fontSizes = new ArrayList<String>();
+    private ArrayList<String> fontpositionsX=new ArrayList<String>();
+    private ArrayList<String> fontpositionsY=new ArrayList<String>();
+
+    private String name = null;
+	private String backgroundimage;
+	private String wallpaperType=CENTERED;
+
+	/** Spurce file of the theme **/
+	private File source = null;
+	
+    public static void main(String[] args) {
+        Theme theme = new Theme();
+        theme.readTheme(new File(
+                "c:/workspace/_fwAndami/theme/andami-theme.xml"));
+    }
+
+    public File getSource() {
+    	return source;
+    }
+    
+    /**
+     * Read the file xml with the personalization.
+     *
+     * @param file xml
+     */
+    public void readTheme(File file) {
+        try {
+            FileReader fr;
+
+            try {
+                fr = new FileReader(file);
+
+                BufferedReader br = new BufferedReader(fr);
+                char[] buffer = new char[100];
+                br.read(buffer);
+
+                StringBuffer st = new StringBuffer(new String(buffer));
+                String searchText = "encoding=\"";
+                int index = st.indexOf(searchText);
+
+                if (index > -1) {
+                    st.delete(0, index + searchText.length());
+                    encoding = st.substring(0, st.indexOf("\""));
+                }
+            } catch (FileNotFoundException ex) {
+                ex.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+            fr = new FileReader(file);
+
+            KXmlParser parser = new KXmlParser();
+            parser.setInput(new FileInputStream(file), encoding);
+
+            int tag = parser.nextTag();
+
+            if (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
+                parser.require(XmlPullParser.START_TAG, null, ANDAMI_PROPERTIES);
+
+                while (tag != XmlPullParser.END_DOCUMENT) {
+                    //parser.next();
+                    switch (tag) {
+                    case XmlPullParser.START_TAG:
+
+                        if (parser.getName().compareTo(ANDAMI_PROPERTIES) == 0) {
+                            parser.nextTag();
+                            if (parser.getName().compareTo(APPLICATION_IMAGES) == 0) {
+                                int splashtag = parser.nextTag();
+                            if (parser.getName().compareTo(SPLASH_IMAGES) == 0) {
+									splashtag = parser.nextTag();
+									boolean endSplash = false;
+
+									// parser.require(KXmlParser.START_TAG,
+									// null, SPLASH);
+									while ((splashtag != XmlPullParser.END_DOCUMENT)
+											&& !endSplash) {
+										if (splashtag == XmlPullParser.END_TAG) {
+											splashtag = parser.nextTag();
+
+											continue;
+										}
+
+										if (parser.getName().compareTo(SPLASH) == 0) {
+											images.add(fixPath(file, parser.getAttributeValue("",	PATH)));
+											timers.add(parser
+													.getAttributeValue("",
+															TIMER));
+											versions.add(parser
+													.getAttributeValue("",
+															VERSION));
+											fontpositionsX.add(parser
+													.getAttributeValue("",
+															FONTPOSITIONX));
+											fontpositionsY.add(parser
+													.getAttributeValue("",
+															FONTPOSITIONY));
+											fontSizes.add(parser
+													.getAttributeValue("",
+															FONTSIZE));
+											fontColors.add(parser
+													.getAttributeValue("",
+															FONTCOLOR));
+
+											splashtag = parser.nextTag();
+										} else {
+											endSplash = true;
+										}
+									}
+								}
+								int tagOptions = XmlPullParser.START_TAG;
+								while ((tagOptions != XmlPullParser.END_TAG)) {
+									if (parser.getName().compareTo(
+											BACKGROUND_IMAGE) == 0) {
+										backgroundimage = fixPath(file, parser.getAttributeValue("", PATH));
+										tag = parser.next();
+									} else if (parser.getName().compareTo(ICON) == 0) {
+										icon = fixPath(file, parser.getAttributeValue("",PATH));
+										tag = parser.next();
+									} else if (parser.getName().compareTo(
+											WALLPAPER_TYPE) == 0) {
+										wallpaperType = parser.getAttributeValue(
+												"", VALUE);
+										tag = parser.next();
+									}
+									tagOptions = parser.nextTag();
+
+								}
+							}
+                        }
+                        if (parser.getName().compareTo(APPLICATION_NAME) == 0) {
+							name = parser.getAttributeValue("",
+									VALUE);
+							tag = parser.next();
+						}
+                        break;
+
+                    case XmlPullParser.END_TAG:
+                        break;
+
+                    case XmlPullParser.TEXT:
+
+                        // System.out.println("[TEXT]["+kxmlParser.getText()+"]");
+                        break;
+                    }
+
+                    tag = parser.next();
+                }
+            }
+
+            parser.require(XmlPullParser.END_DOCUMENT, null, null);
+            this.source = file;
+            // }
+        } catch (Exception e) {
+        	 NotificationManager.addError("Error reading theme: "+file.getAbsolutePath(), e);
+        }
+    }
+
+    private String fixPath(File theme, String path) {
+    	path = path.replace("$GVSIG_INSTALL",Launcher.getApplicationDirectory());
+    	path = path.replace("$GVSIG_HOME", Launcher.getAppHomeDir());
+    	path = path.replace("$GVSIG_PLUGINS", Launcher.getAndamiConfig().getPluginsDirectory());
+        File parent = theme.getParentFile().getAbsoluteFile();
+        File fpath = new File(path);
+        if( ! fpath.isAbsolute() ) {
+            fpath = new File(parent,path);
+        }
+    	return fpath.getAbsolutePath();
+    }
+    
+    /**
+	 * Returns image to the splashwindow.
+	 *
+	 * @return ImageIcon[]
+	 */
+    public ImageIcon[] getSplashImages() {
+        ImageIcon[] imgs = new ImageIcon[images.size()];
+
+        for (int i = 0; i < images.size(); i++) {
+            imgs[i] = new ImageIcon(images.get(i));
+        }
+
+        return imgs;
+    }
+
+    public String getTypeDesktop() {
+    	return wallpaperType;
+    }
+    /**
+     * Return the icon.
+     *
+     * @return ImageIcon
+     */
+    public ImageIcon getIcon() {
+        if (icon == null) {
+            return null;
+        }
+
+        try {
+            return new ImageIcon(icon);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+    /**
+     * Return the backgroundimage.
+     *
+     * @return ImageIcon
+     */
+    public ImageIcon getBackgroundImage() {
+        if (backgroundimage == null) {
+            return null;
+        }
+
+        try {
+            return new ImageIcon(backgroundimage);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+    /**
+     * Return the time of the splash images.
+     *
+     * @return long[]
+     */
+    public long[] getTimers() {
+        long[] tms = new long[timers.size()];
+
+        for (int i = 0; i < tms.length; i++) {
+            tms[i] = Long.parseLong(timers.get(i));
+        }
+
+        return tms;
+    }
+
+    /**
+     * Return the name of program.
+     *
+     * @return String
+     */
+    public String getName() {
+        return name;
+    }
+    /**
+     * Return the text to overwrite the images.
+     *
+     * @return String[]
+     */
+	public String[] getVersions() {
+		return versions.toArray(new String[0]);
+	}
+	/**
+     * Return the position of text to overwrite the images.
+     *
+     * @return Point[]
+     */
+	public Point[] getPositions() {
+		Point[] points=new Point[fontpositionsX.size()];
+		for (int i=0;i<points.length;i++) {
+			try {
+				points[i]=new Point(Integer.valueOf(fontpositionsX.get(i)),Integer.valueOf(fontpositionsY.get(i)));
+			}catch (NumberFormatException e) {
+				NotificationManager.addInfo(PluginServices.getText(this,"incorrect_position"),e);
+			}
+		}
+		return points;
+	}
+	/**
+     * Return the font size text to overwrite the images.
+     *
+     * @return int[]
+     */
+	public int[] getFontSizes() {
+		int[] sizes=new int[fontSizes.size()];
+		for (int i=0;i<sizes.length;i++) {
+			try {
+				sizes[i]=Integer.valueOf(fontSizes.get(i));
+			}catch (NumberFormatException e) {
+				NotificationManager.addInfo(PluginServices.getText(this,"incorrect_size"),e);
+			}
+		}
+		return sizes;
+	}
+	/**
+     * Return the font color of text to overwrite the images.
+     *
+     * @return Color[]
+     */
+	public Color[] getFontColors() {
+		Color[] colors=new Color[fontColors.size()];
+		for (int i=0;i<colors.length;i++) {
+			try {
+			String s=fontColors.get(i);
+			String[] rgb=s.split(",");
+			colors[i]=new Color(Integer.valueOf(rgb[0]),Integer.valueOf(rgb[1]),Integer.valueOf(rgb[2]));
+			}catch (Exception e) {
+				NotificationManager.addInfo(PluginServices.getText(this,"incorrect_color"),e);
+			}
+		}
+		return colors;
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/theme/Theme.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/MDIManagerLoadException.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/MDIManagerLoadException.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/MDIManagerLoadException.java	(revision 38313)
@@ -0,0 +1,77 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui;
+
+/**
+ * 
+ */
+public class MDIManagerLoadException extends Exception{
+
+	/**
+	 * 
+	 */
+	public MDIManagerLoadException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param message
+	 */
+	public MDIManagerLoadException(String message) {
+		super(message);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param message
+	 * @param cause
+	 */
+	public MDIManagerLoadException(String message, Throwable cause) {
+		super(message, cause);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param cause
+	 */
+	public MDIManagerLoadException(Throwable cause) {
+		super(cause);
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/MDIManagerLoadException.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/ToolsWindowManager.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/ToolsWindowManager.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/ToolsWindowManager.java	(revision 38313)
@@ -0,0 +1,139 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.andami.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class ToolsWindowManager implements WindowManager {
+
+    public void showWindow(JComponent contents, String title, MODE mode) {
+        int align;
+        switch(mode) {
+        case DIALOG:
+            align = GridBagConstraints.CENTER;
+            break;
+        case TOOL:
+            align = GridBagConstraints.FIRST_LINE_END;
+            break;
+        case WINDOW:
+        default:
+            align = GridBagConstraints.FIRST_LINE_START;
+            break;
+        }
+        showWindow(contents, title, mode, align);
+    }
+
+    public void showWindow(JComponent contents, String title, MODE mode, int align ) {
+        MDIManager manager = PluginServices.getMDIManager();
+        IWindow window = new Window(contents, title, mode);
+        manager.addWindow(window,align);
+    }
+
+    public class Window extends JPanel implements IWindow, ComponentListener {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = -6688594664366192449L;
+        protected WindowInfo windowInfo;
+        protected Object profile;
+        protected JComponent contents;
+        
+        public Window(JComponent contents, String title, MODE mode) {
+            int code = WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE | WindowInfo.ICONIFIABLE; 
+            switch(mode) {
+            case DIALOG:
+                code |= WindowInfo.MODALDIALOG;
+                profile = WindowInfo.DIALOG_PROFILE;
+                break;
+            case TOOL:
+                code |= WindowInfo.MODELESSDIALOG | WindowInfo.PALETTE;
+                profile = WindowInfo.TOOL_PROFILE;
+                break;
+            case WINDOW:
+            default:
+                profile = WindowInfo.EDITOR_PROFILE;
+                break;
+            }
+            
+            this.contents = contents;
+            
+            this.windowInfo = new WindowInfo(code);
+            this.windowInfo.setTitle(title);
+            
+            Dimension size = this.contents.getPreferredSize(); 
+            this.windowInfo.setHeight(size.height);
+            this.windowInfo.setWidth(size.width);
+            
+            this.setLayout(new BorderLayout());
+            this.add(this.contents,BorderLayout.CENTER);
+            
+            this.contents.addComponentListener(this);
+        }
+        
+        public WindowInfo getWindowInfo() {
+            return this.windowInfo;
+        }
+
+        public Object getWindowProfile() {
+            return this.profile;
+        }
+
+        public void componentHidden(ComponentEvent arg0) {
+            // Close window when hide contents panel.
+            MDIManager manager = PluginServices.getMDIManager();
+            manager.closeWindow(this);
+        }
+
+        public void componentMoved(ComponentEvent arg0) {
+            // Do nothing
+        }
+
+        public void componentResized(ComponentEvent arg0) {
+            // Do nothing
+        }
+
+        public void componentShown(ComponentEvent arg0) {
+            // Do nothing
+        }
+        
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/ToolsWindowManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java	(revision 38313)
@@ -0,0 +1,95 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.JPopupMenu;
+
+public class JPopUpMenu extends JPopupMenu implements EnableTextSupport{
+	private String enableText;
+	private String toolTip = super.getToolTipText();
+	
+	
+	/**
+	 * @return Returns the enableText.
+	 */
+	public String getEnableText() {
+		return enableText;
+	}
+	/**
+	 * @param enableText The enableText to set.
+	 */
+	public void setEnableText(String enableText) {
+		this.enableText = enableText;
+	}
+	
+	
+	/**
+	 * @see java.awt.Component#setVisible(boolean)
+	 */
+	public void setEnabled(boolean aFlag) {
+		super.setEnabled(aFlag);
+		if (aFlag){
+			setToolTipText(toolTip);
+		}else{
+			setToolTipText(enableText);
+		}
+	}
+	/**
+	 * @see javax.swing.JComponent#setToolTipText(java.lang.String)
+	 */
+	public void setToolTip(String text) {
+		toolTip = text;
+	}
+	/**
+	 * 
+	 */
+	public JPopUpMenu() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param label
+	 */
+	public JPopUpMenu(String label) {
+		super(label);
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java	(revision 38313)
@@ -0,0 +1,562 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.LayoutManager;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.SwingConstants;
+import javax.swing.border.BevelBorder;
+
+import org.apache.log4j.Logger;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.plugins.config.generate.Label;
+import org.gvsig.gui.beans.controls.IControl;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.task.JTasksStatus;
+
+/**
+ * <p>
+ * This class contains the status bar. It contains the graphical component, and
+ * the methods to manage it.
+ * </p>
+ * 
+ * <p>
+ * The status bar is divided in several areas. At the very left, there is an
+ * icon and the main status text. There are three icons to show: Info, Warning
+ * and Error icons. They can be set together with the main status text using the
+ * methods <code>setInfoText()</code>, <code>setWarningText()</code> and
+ * <code>setErrorText()</code> (and also with <code>setInfoTextTemporal()</code>
+ * , etc). Then, there is a right area which contains labels and other controls.
+ * Labels are set in the config.xml files and are visible or not depending on
+ * the currently selected Andami window. Controls are associated to extensions,
+ * and are enabled/disabled and visible/hidden depending on the associated
+ * extension.
+ * </p>
+ * 
+ */
+public class NewStatusBar extends JPanel {
+
+    private static final long serialVersionUID = 5575549032728844632L;
+    private static Logger LOG = Logger.getLogger(NewStatusBar.class);
+    private static final int INFO = 0;
+    private static final int WARNING = 1;
+    private static final int ERROR = 2;
+    private JLabel lblIcon = null;
+    private JLabel lblTexto = null;
+    private boolean contenidoTemporal;
+    private String textoAnterior;
+    private int estadoAnterior;
+    private ImageIcon infoIcon;
+    private ImageIcon warningIcon;
+    private ImageIcon errorIcon;
+    private int estado;
+    private JProgressBar progressBar = null;
+    private Map<String, JLabel> idLabel = new HashMap<String, JLabel>();
+    private int[] widthlabels = null;
+    private Map<String, Component> controls = new HashMap<String, Component>();
+    private JPanel controlContainer;
+    private JTasksStatus tasksStatus = null;
+
+    /**
+     * This is the default constructor
+     */
+    public NewStatusBar() {
+        super();
+        initialize();
+        infoIcon = PluginServices.getIconTheme().get("info-icon");
+        warningIcon = PluginServices.getIconTheme().get("warning-icon");
+        errorIcon = PluginServices.getIconTheme().get("error-icon");
+    }
+
+    /**
+     * This method initializes the status bar. It creates the required
+     * containers and sets the layout.
+     */
+    private void initialize() {
+        LayoutManager mainLayout = new BorderLayout();
+        this.setLayout(mainLayout);
+
+        JPanel panelRight = new JPanel(new FlowLayout(FlowLayout.RIGHT, 1, 0));
+
+        controlContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT, 1, 0));
+        panelRight.add(controlContainer);
+        panelRight.add(getTasksStatus());
+
+        lblIcon = new JLabel();
+        lblTexto = new JLabel();
+        lblTexto.setAlignmentX(JLabel.LEFT_ALIGNMENT);
+        lblTexto.setHorizontalAlignment(SwingConstants.LEFT);
+        lblTexto.setHorizontalTextPosition(SwingConstants.LEFT);
+        lblTexto.setVerticalAlignment(SwingConstants.CENTER);
+        lblTexto.setVerticalTextPosition(SwingConstants.CENTER);
+        lblIcon.setText("");
+        lblTexto.setText(Messages.getString("StatusBar.Aplicacion_iniciada"));
+
+        JPanel panelLeft = new JPanel();
+        panelLeft.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 0));
+        panelLeft.add(lblTexto);
+        panelLeft.add(lblIcon);
+        panelLeft.add(getProgressBar());
+
+        this.add(panelLeft, BorderLayout.CENTER);
+        this.add(panelRight, BorderLayout.EAST);
+    }
+
+    /**
+     * Gets the status bar main text.
+     * 
+     * @return The status bar main text.
+     * @see #setInfoText(String)
+     * @see #setWarningText(String)
+     * @see #setErrorText(String)
+     * @see #setInfoTextTemporal(String)
+     * @see #setWarningTextTemporal(String)
+     * @see #setErrorTextTemporal(String)
+     */
+    public String getStatusText() {
+        return lblTexto.getText();
+    }
+
+    /**
+     * Restores the previous contents in the status bar main text,
+     * after the {@link #setInfoTextTemporal(String)},
+     * {@link #setWarningTextTemporal(String)} or
+     * {@link #setErrorTextTemporal(String)} have been called.
+     * 
+     * @see #setInfoTextTemporal(String)
+     * @see #setWarningTextTemporal(String)
+     * @see #setErrorTextTemporal(String)
+     */
+    public void restaurarTexto() {
+        contenidoTemporal = false;
+
+        if (estadoAnterior == -1) {
+            return;
+        }
+
+        switch (estadoAnterior) {
+        case INFO:
+            setInfoText(textoAnterior);
+
+            break;
+
+        case WARNING:
+            setWarningText(textoAnterior);
+
+            break;
+
+        case ERROR:
+            setErrorText(textoAnterior);
+
+            break;
+        }
+
+        estadoAnterior = -1;
+        textoAnterior = null;
+    }
+
+    /**
+     * Sets a temporary information message in the status bar, and changes the
+     * icon to an Info icon. The previous text and icon can be restored using
+     * the {@link #restaurarTexto()} method.
+     * 
+     * @param texto
+     *            The text to set
+     * @see #restaurarTexto()
+     */
+    public void setInfoTextTemporal(String texto) {
+        if (!contenidoTemporal) {
+            textoAnterior = getStatusText();
+            estadoAnterior = this.estado;
+            contenidoTemporal = true;
+        }
+
+        this.estado = INFO;
+        lblIcon.setIcon(infoIcon);
+        lblTexto.setText(texto);
+    }
+
+    /**
+     * Sets a temporary warning message in the status bar, and changes the
+     * icon to a Warning icon. The previous text and icon can be restored using
+     * the {@link #restaurarTexto()} method.
+     * 
+     * @param texto
+     *            The text to set
+     * @see #restaurarTexto()
+     */
+    public void setWarningTextTemporal(String texto) {
+        if (!contenidoTemporal) {
+            estadoAnterior = this.estado;
+            textoAnterior = getStatusText();
+            contenidoTemporal = true;
+        }
+        this.estado = WARNING;
+        lblIcon.setIcon(warningIcon);
+        lblTexto.setText(texto);
+    }
+
+    /**
+     * Sets a temporary error message in the status bar, and changes the
+     * icon to an Error icon. The previous text and icon can be restored using
+     * the {@link #restaurarTexto()} method.
+     * 
+     * @param texto
+     *            The text to set
+     * @see #restaurarTexto()
+     */
+    public void setErrorTextTemporal(String texto) {
+        if (!contenidoTemporal) {
+            estadoAnterior = this.estado;
+            textoAnterior = getStatusText();
+            contenidoTemporal = true;
+        }
+
+        this.estado = ERROR;
+        lblIcon.setIcon(errorIcon);
+        lblTexto.setText(texto);
+    }
+
+    /**
+     * Sets a permanent info message in the status bar, and changes the
+     * permanent icon to an Info icon. If there is a temporary message showing
+     * at the moment, the message set now is not shown until
+     * the {@link #restaurarTexto()} method is called.
+     * 
+     * @param texto
+     *            The permanent info message to set
+     * @see #restaurarTexto()
+     */
+    public void setInfoText(String texto) {
+        if (contenidoTemporal) {
+            textoAnterior = texto;
+            estadoAnterior = INFO;
+        } else {
+            lblTexto.setText(texto);
+            lblIcon.setIcon(infoIcon);
+            estado = INFO;
+        }
+    }
+
+    /**
+     * Sets a permanent warning message in the status bar, and changes the
+     * permanent icon to a Warning icon. If there is a temporary message showing
+     * at the moment, the message set now is not shown until
+     * the {@link #restaurarTexto()} method is called.
+     * 
+     * @param texto
+     *            The permanent warning message to set
+     * @see #restaurarTexto()
+     */
+    public void setWarningText(String texto) {
+        if (contenidoTemporal) {
+            textoAnterior = texto;
+            estadoAnterior = WARNING;
+        } else {
+            lblTexto.setText(texto);
+            lblIcon.setIcon(warningIcon);
+            estado = WARNING;
+        }
+    }
+
+    /**
+     * Sets a permanent error message in the status bar, and changes the
+     * permanent icon to an Error icon. If there is a temporary message showing
+     * at the moment, the message set now is not shown until
+     * the {@link #restaurarTexto()} method is called.
+     * 
+     * @param texto
+     *            The permanent info message to set
+     * @see #restaurarTexto()
+     */
+    public void setErrorText(String texto) {
+        if (contenidoTemporal) {
+            textoAnterior = texto;
+            estadoAnterior = ERROR;
+        } else {
+            lblTexto.setText(texto);
+            lblIcon.setIcon(errorIcon);
+            estado = ERROR;
+        }
+    }
+
+    /**
+     * If <code>p</code> is a value between 0 and 99, it shows a progress bar
+     * in the left area of the status bar, and sets the specified progress.
+     * If <code>p</code> is bigger than 99, it hides the progress bar.
+     * 
+     * @param p
+     *            The progress to set in the progress bar. If it is bigger
+     *            than 99, the task will be considered to be finished, and the
+     *            progress bar will be hidden.
+     * 
+     * @deprecated use instead TaskStatus and TaskStatusManager
+     */
+    public void setProgress(int p) {
+        if (p < 100) {
+            getProgressBar().setValue(p);
+            getProgressBar().setVisible(true);
+        } else {
+            getProgressBar().setVisible(false);
+        }
+
+        getProgressBar().repaint();
+    }
+
+    /**
+     * Sets a label-set to be shown in the status bar. This method it is not
+     * intended to be used directly, because the set will be overwritten when
+     * the selected
+     * window changes. Use {@link MainFrame#setStatusBarLabels(Class, Label[])}
+     * to permanently associate a label set with a window.
+     * 
+     * @param labels
+     *            The labels to set.
+     * @see MainFrame#setStatusBarLabels(Class, Label[])
+     */
+    public void setLabelSet(Label[] labels) {
+        removeAllLabels();
+        idLabel.clear();
+
+        for (int i = 0; i < labels.length; i++) {
+            // Set an initial text so the getPreferredSize works as expected
+            JLabel lbl = new JLabel();
+            // lbl.setPreferredSize(new Dimension(labels[i].getSize(), lbl
+            // .getPreferredSize().height + 2));
+            // Remove the initial text
+            // lbl.setText(" ");
+            lbl.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
+            lbl.setName(labels[i].getId());
+            controlContainer.add(lbl);
+
+            /*
+             * if (i != labels.length - 1){
+             * this.add(new JSeparator(JSeparator.VERTICAL));
+             * }
+             */
+            idLabel.put(labels[i].getId(), lbl);
+        }
+
+        JLabel[] configlabels =
+            (JLabel[]) idLabel.values().toArray(new JLabel[0]);
+        widthlabels = new int[configlabels.length];
+
+        for (int i = 0; i < labels.length; i++) {
+            widthlabels[i] = configlabels[i].getWidth();
+        }
+
+        this.validate();
+    }
+
+    /**
+     * Hides the empty labels and adjust the space in the bar.
+     */
+    public void ajustar() {
+        if (widthlabels == null) {
+            return;
+        }
+
+        JLabel[] labels = (JLabel[]) idLabel.values().toArray(new JLabel[0]);
+
+        /*
+         * double total = 1;
+         * for (int i = 0; i < widthlabels.length; i++) {
+         * if (labels[i].getText().compareTo("") != 0) {
+         * total += widthlabels[i];
+         * }
+         * }
+         * double p = (ws - lblTexto.getWidth() - 20) / total;
+         */
+        for (int i = 0; i < labels.length; i++) {
+            JLabel label = (JLabel) labels[i];
+
+            if (label.getText().compareTo("") != 0) {
+                label.setVisible(true);
+            } else {
+                label.setVisible(false);
+            }
+        }
+        validate();
+    }
+
+    /**
+     * Removes all the labels from the status bar. It does not remove the
+     * controls.
+     */
+    private void removeAllLabels() {
+        Component[] controlArray = controlContainer.getComponents();
+
+        for (int i = 0; i < controlArray.length; i++) {
+            if ((controlArray[i] != lblIcon) && (controlArray[i] != lblTexto)
+                && !(controlArray[i] instanceof IControl)
+                && (controlArray[i] instanceof JLabel)) {
+                controlContainer.remove(controlArray[i]);
+            }
+        }
+    }
+
+    /**
+     * Sets the text of the provided label.
+     * 
+     * @param id
+     *            The ID of the label to modify. It is defined in the
+     *            config.xml file
+     * @param msg
+     *            The message to show in the label
+     */
+    public void setMessage(String id, String msg) {
+        JLabel lbl = (JLabel) idLabel.get(id);
+
+        if (lbl != null) {
+            lbl.setText(msg);
+        } else {
+            // try with controls
+            try {
+                IControl control = (IControl) controls.get(id);
+                if (control != null)
+                    control.setValue(msg);
+            } catch (ClassCastException ex) {
+                LOG.debug("no label called " + id);
+            }
+        }
+
+        ajustar();
+    }
+
+    /**
+     * Sets the control identified by 'id' with the provided value.
+     * 
+     * @param id
+     *            The ID of the control to modify
+     * @param value
+     *            The value to set in the control
+     */
+    public void setControlValue(String id, String value) {
+        IControl control = (IControl) controls.get(id);
+        if (control != null) {
+            control.setValue(value);
+        } else {
+            LOG.debug("NewStatusBar -- no control called " + id);
+        }
+    }
+
+    /**
+     * This method initializes the progressBar and gets it.
+     * 
+     * @return javax.swing.JProgressBar
+     */
+    private JProgressBar getProgressBar() {
+        if (progressBar == null) {
+            progressBar = new JProgressBar();
+            // progressBar.setPreferredSize(new java.awt.Dimension(100, 14));
+            progressBar.setVisible(false);
+            progressBar.setMinimum(0);
+            progressBar.setMaximum(100);
+            progressBar.setValue(50);
+        }
+
+        return progressBar;
+    }
+
+    private JTasksStatus getTasksStatus() {
+        if (tasksStatus == null) {
+            tasksStatus =
+                ToolsSwingLocator.getTaskStatusSwingManager()
+                    .createJTasksStatus();
+            tasksStatus.setVisible(true);
+        }
+        return tasksStatus;
+    }
+
+    /**
+     * Sets the width of the main message label.
+     * 
+     * @param d
+     *            The width ob the main label
+     * @deprecated
+     */
+    public void setFixedLabelWidth(double d) {
+        lblTexto.setPreferredSize(new Dimension((int) d, lblTexto.getHeight()));
+    }
+
+    /**
+     * Adds a control to the status bar
+     * 
+     * @param id
+     *            The ID of the control, useful to later retrive it or set its
+     *            value
+     * @param control
+     *            The control to add
+     */
+    public void addControl(String id, Component control) {
+        if (!controls.containsKey(control.getName())) {
+            controls.put(control.getName(), control);
+            controlContainer.add(control);
+        } else {
+            LOG
+                .debug("NewStatusBar.addControl -- control 'id' already exists"
+                    + id);
+        }
+    }
+
+    /**
+     * Remove a control from the status bar
+     * 
+     * @param id
+     *            The ID of the control to get
+     */
+    public Component removeControl(String id) {
+        try {
+            Component component = (Component) controls.get(id);
+            controlContainer.remove(component);
+            controls.remove(id);
+            return component;
+        } catch (ClassCastException ex) {
+            LOG.debug("NewStatusBar.removeControl -- control " + id
+                + "doesn't exist");
+        }
+        return null;
+    }
+
+    /**
+     * Gets a control from the status bar
+     * 
+     * @param id
+     *            The ID of the control to get
+     */
+    public Component getControl(String id) {
+        return (Component) controls.get(id);
+    }
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java	(revision 38313)
@@ -0,0 +1,79 @@
+/*
+ * Created on 07-feb-2005
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 
+USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+
+public class NoSuchMenuException extends RuntimeException {
+
+	/**
+	 * 
+	 */
+	public NoSuchMenuException() {
+		super();
+
+	}
+	/**
+	 * @param message
+	 */
+	public NoSuchMenuException(String message) {
+		super(message);
+
+	}
+	/**
+	 * @param message
+	 * @param cause
+	 */
+	public NoSuchMenuException(String message, Throwable cause) {
+		super(message, cause);
+
+	}
+	/**
+	 * @param cause
+	 */
+	public NoSuchMenuException(Throwable cause) {
+		super(cause);
+
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/KeyMapping.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/KeyMapping.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/KeyMapping.java	(revision 38313)
@@ -0,0 +1,121 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.event.KeyEvent;
+import java.util.HashMap;
+
+import org.gvsig.andami.messages.Messages;
+
+
+
+/**
+ * Clase que sirve para obtener los codigos de las teclas de la manera que las
+ * requieren los JMenu a partir de un caracter que representa dicha tecla
+ *
+ * @author Fernando González Cortés
+ */
+public class KeyMapping {
+    /** Asocia caracteres con KeyEvents */
+    private static HashMap key = new HashMap();
+
+    static {
+        key.put(new Character('a'), new Integer(KeyEvent.VK_A));
+        key.put(new Character('b'), new Integer(KeyEvent.VK_B));
+        key.put(new Character('c'), new Integer(KeyEvent.VK_C));
+        key.put(new Character('d'), new Integer(KeyEvent.VK_D));
+        key.put(new Character('e'), new Integer(KeyEvent.VK_E));
+        key.put(new Character('f'), new Integer(KeyEvent.VK_F));
+        key.put(new Character('g'), new Integer(KeyEvent.VK_G));
+        key.put(new Character('h'), new Integer(KeyEvent.VK_H));
+        key.put(new Character('i'), new Integer(KeyEvent.VK_I));
+        key.put(new Character('j'), new Integer(KeyEvent.VK_J));
+        key.put(new Character('k'), new Integer(KeyEvent.VK_K));
+        key.put(new Character('l'), new Integer(KeyEvent.VK_L));
+        key.put(new Character('m'), new Integer(KeyEvent.VK_M));
+        key.put(new Character('n'), new Integer(KeyEvent.VK_N));
+        key.put(new Character('o'), new Integer(KeyEvent.VK_O));
+        key.put(new Character('p'), new Integer(KeyEvent.VK_P));
+        key.put(new Character('q'), new Integer(KeyEvent.VK_Q));
+        key.put(new Character('r'), new Integer(KeyEvent.VK_R));
+        key.put(new Character('s'), new Integer(KeyEvent.VK_S));
+        key.put(new Character('t'), new Integer(KeyEvent.VK_T));
+        key.put(new Character('u'), new Integer(KeyEvent.VK_U));
+        key.put(new Character('v'), new Integer(KeyEvent.VK_V));
+        key.put(new Character('w'), new Integer(KeyEvent.VK_W));
+        key.put(new Character('x'), new Integer(KeyEvent.VK_X));
+        key.put(new Character('y'), new Integer(KeyEvent.VK_Y));
+        key.put(new Character('z'), new Integer(KeyEvent.VK_Z));
+        key.put(new Character('0'), new Integer(KeyEvent.VK_0));
+        key.put(new Character('1'), new Integer(KeyEvent.VK_1));
+        key.put(new Character('2'), new Integer(KeyEvent.VK_2));
+        key.put(new Character('3'), new Integer(KeyEvent.VK_3));
+        key.put(new Character('4'), new Integer(KeyEvent.VK_4));
+        key.put(new Character('5'), new Integer(KeyEvent.VK_5));
+        key.put(new Character('6'), new Integer(KeyEvent.VK_6));
+        key.put(new Character('7'), new Integer(KeyEvent.VK_7));
+        key.put(new Character('8'), new Integer(KeyEvent.VK_8));
+        key.put(new Character('9'), new Integer(KeyEvent.VK_9));
+        key.put(new Character('+'), new Integer(KeyEvent.VK_PLUS));
+        key.put(new Character('-'), new Integer(KeyEvent.VK_MINUS));       
+    }
+
+    /**
+     * Obtiene dado un caracter el entero correspondiente al codigo que tiene
+     * la tecla que produce dicho caracter
+     *
+     * @param a caracter
+     *
+     * @return Codigo de la tecla asociada
+     *
+     * @throws RuntimeException Si el caracter no tiene una tecla asociada
+     */
+    public static int getKey(char a) {
+        Integer ret = (Integer) key.get(new Character(a));
+
+        if (ret == null) {
+            throw new RuntimeException(Messages.getString(
+                    "KeyMapping.Caracter_no_valido") + a); //$NON-NLS-1$
+        }
+
+        return ret.intValue();
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/KeyMapping.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/MDIFrame.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/MDIFrame.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/MDIFrame.java	(revision 38313)
@@ -0,0 +1,1674 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibï¿½ï¿½ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Insets;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.ContainerEvent;
+import java.awt.event.ContainerListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.swing.AbstractButton;
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JSeparator;
+import javax.swing.KeyStroke;
+import javax.swing.MenuElement;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import javax.swing.WindowConstants;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.LibraryExtension;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.ExtensionDecorator;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.plugins.config.generate.ActionTool;
+import org.gvsig.andami.plugins.config.generate.Label;
+import org.gvsig.andami.plugins.config.generate.Menu;
+import org.gvsig.andami.plugins.config.generate.PopupMenu;
+import org.gvsig.andami.plugins.config.generate.SelectableTool;
+import org.gvsig.andami.plugins.config.generate.SkinExtensionType;
+import org.gvsig.andami.plugins.config.generate.ToolBar;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.MDIManagerFactory;
+import org.gvsig.gui.beans.controls.IControl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Main application window.
+ * 
+ * @version $Revision$
+ */
+public class MDIFrame extends JFrame implements ComponentListener,
+    ContainerListener, ActionListener, MainFrame {
+
+    private static final long serialVersionUID = -2472484309160847654L;
+
+    private static Logger logger = LoggerFactory.getLogger(MDIFrame.class);
+    private MDIManager mdiManager = MDIManagerFactory.createManager();
+
+    /** Elementos de la aplicaciï¿½n */
+    private JMenuBar menuBar = new JMenuBar();
+
+    /** Panel which contains the toolbars */
+    private JPanel toolBars = new JPanel();
+
+    /** Status bar */
+    private NewStatusBar bEstado = null;
+
+    /** Asocia los nombres con las barras de herramientas */
+    private HashMap toolBarMap = new HashMap();
+
+    /** Almacena los grupos de selectableTools */
+    private HashMap buttonGroupMap = new HashMap();
+    /**
+     * Stores the initially selected tools.
+     * It contains pairs (String groupName, JToolBarToggleButton button)
+     */
+    private HashMap initialSelectedTools = new HashMap();
+
+    /**
+     * Stores the actionCommand of the selected tool, for each group.
+     * It contains pairs (String groupName, JToolBarToggleButton button)
+     */
+    private Map selectedTool = null;
+    // this should be the same value defined at plugin-config.xsd
+    private String defaultGroup = "unico";
+
+    /** Asocia los nombres con los popupMenus */
+    private HashMap popupMap = new HashMap();
+
+    /** Asocia controles con la clase de la extension asociada */
+    private HashMap controlClass = new HashMap();
+
+    /**
+     * Asocia la informaciï¿½n sobre las etiquetas que van en la status bar con
+     * cada extension
+     */
+    private HashMap classLabels = new HashMap();
+
+    // private HashMap classControls = new HashMap();
+
+    /** ProgressListeners (ver interfaz com.iver.mdiApp.ui.ProgressListener) */
+    private ArrayList progressListeners = new ArrayList();
+
+    /** Timer para invocar los enventos de la interfaz anterior */
+    private Timer progressTimer = null;
+
+    /** Tabla hash que asocia las clases con las extensiones */
+    private Map classesExtensions = new HashMap<Class<? extends IExtension>, ExtensionDecorator>();
+
+    /** ï¿½ltima clase que activï¿½ etiquetas */
+    private Class lastLabelClass;
+
+    /** Instancia que pone los tooltip en la barra de estado */
+    private TooltipListener tooltipListener = new TooltipListener();
+    private HashMap infoCodedMenus = new HashMap();
+
+    private String titlePrefix;
+
+    private static final String noIcon = "no-icon";
+
+    /**
+     * Makes some initialization tasks.
+     * 
+     * @throws RuntimeException
+     *             DOCUMENT ME!
+     */
+    public void init() {
+        JPopupMenu.setDefaultLightWeightPopupEnabled(false);
+        if (!SwingUtilities.isEventDispatchThread()) {
+            throw new RuntimeException("Not Event Dispatch Thread");
+        }
+
+        // Se aï¿½aden los listeners del JFrame
+        this.addWindowListener(new WindowAdapter() {
+
+            @Override
+            public void windowClosing(WindowEvent e) {
+                Launcher.closeApplication();
+            }
+        });
+        this.addComponentListener(this);
+        this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+
+        // Se configura la barra de menu
+        setJMenuBar(menuBar);
+
+        // Se configura el layout del JFrame principal
+        this.getContentPane().setLayout(new BorderLayout());
+
+        /*
+         * Se configura y se aï¿½ade el JPanel de las barras de
+         * herramientas
+         */
+        FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
+        layout.setHgap(0);
+        layout.setVgap(0);
+        toolBars.setLayout(layout);
+        getContentPane().add(toolBars, BorderLayout.PAGE_START);
+
+        // Se aï¿½ade la barra de estado a la aplicaciï¿½n
+        bEstado = new NewStatusBar();
+        bEstado
+            .setInfoText(Messages.getString("StatusBar.Aplicacion_iniciada"));
+        getContentPane().add(bEstado, BorderLayout.SOUTH);
+
+        this.toolBars.addContainerListener(this);
+
+        // TODO LWS Aqui deberï¿½a cargar los valores salvados de la ï¿½ltima
+        // ejecuciï¿½n.
+        setSize(700, 580);
+        setLocation(10, 10);
+        setExtendedState(MAXIMIZED_BOTH);
+
+        mdiManager.init(this);
+
+        pack();
+
+    }
+
+    /*
+     * (non-javadoc)
+     * 
+     * @see java.awt.Frame.setTitle(String title)
+     */
+    @Override
+    public void setTitle(String title) {
+        super.setTitle(titlePrefix + ":" + title);
+    }
+
+    /**
+     * Aï¿½ade un modo de operaciï¿½n a la caja de herramientas
+     * 
+     * @param ext
+     *            Texto del boton, si es null no aparece texto
+     * @param ext
+     *            Icono del boton, si es null no aparece icono
+     * @param ext
+     *            Extensiï¿½n asociada al control
+     * @param selectableTool
+     *            Enable text del control
+     * 
+     * @throws ClassNotFoundException
+     * @throws RuntimeException
+     *             DOCUMENT ME!
+     */
+    public void addTool(PluginClassLoader loader, SkinExtensionType ext,
+        ToolBar toolBar, SelectableTool selectableTool)
+        throws ClassNotFoundException {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            throw new RuntimeException("No Event Dispatch Thread");
+        }
+
+        // Para traducir
+        PluginServices ps =
+            PluginServices.getPluginServices(loader.getPluginName());
+
+        JToolBarToggleButton btn;
+        ImageIcon image =
+            PluginServices.getIconTheme().get(selectableTool.getIcon());
+
+        if (image != null) {
+            btn = new JToolBarToggleButton(selectableTool.getText(), image);
+        } else {
+            logger.error(PluginServices.getText(this, "Unable_to_find_icon")
+                + ": " + selectableTool.getIcon());
+            btn =
+                new JToolBarToggleButton(selectableTool.getText(),
+                    PluginServices.getIconTheme().get(noIcon));
+        }
+
+        org.gvsig.andami.ui.mdiFrame.ToggleButtonModel buttonModel =
+            new org.gvsig.andami.ui.mdiFrame.ToggleButtonModel();
+        btn.setModel(buttonModel);
+        btn.setMargin(new Insets(0, 0, 0, 0));
+        btn.addMouseListener(tooltipListener);
+        btn.addActionListener(this);
+        btn.setFocusable(false);
+        btn.setActionCommand(selectableTool.getActionCommand());
+        btn.setToolTipText(selectableTool.getTooltip());
+        btn.setEnabled(false);
+        btn.setVisible(false);
+        String name = toolBar.getName();
+
+        MDIManagerFactory.createManager().registerAction(ext.getClassName(), selectableTool);
+        
+        SelectableToolBar jtb = (SelectableToolBar) toolBarMap.get(name);
+
+        if (jtb == null) {
+            jtb = new SelectableToolBar(name);
+            jtb.setRollover(true);
+            jtb.setAndamiVisibility(toolBar.getIsVisible());
+            toolBarMap.put(name, jtb);
+            toolBars.add(jtb);
+        }
+
+        ButtonGroup group;
+        if (buttonGroupMap.containsKey(selectableTool.getGroup())) {
+            group = (ButtonGroup) buttonGroupMap.get(selectableTool.getGroup());
+        } else {
+            group = new ButtonGroup();
+            buttonGroupMap.put(selectableTool.getGroup(), group);
+
+        }
+        jtb.addButton(group, btn);
+        buttonModel.setGroupName(selectableTool.getGroup());
+
+        if (selectableTool.getIsDefault()) {
+            btn.setSelected(true);
+            initialSelectedTools.put(selectableTool.getGroup(),
+                btn.getActionCommand());
+        }
+
+        controlClass.put(btn, loader.loadClass(ext.getClassName()));
+
+        if (selectableTool.getName() != null) {
+            btn.setName(selectableTool.getName());
+        }
+
+        if (selectableTool.getTooltip() != null) {
+            btn.setToolTip(ps.getText(selectableTool.getTooltip()));
+        }
+
+        if (selectableTool.getEnableText() != null) {
+            btn.setEnableText(ps.getText(selectableTool.getEnableText()));
+        }
+
+        if (selectableTool.getLast() == true) {
+            jtb.addSeparator();
+        }
+    }
+
+    /**
+     * Aï¿½ade un botï¿½n a la barra de herramientas
+     * 
+     * @param ext
+     *            Texto del boton, si es null no aparece texto
+     * @param ext
+     *            Extensiï¿½n asociada al control
+     * @param toolBar
+     *            Icono del boton, si es null no aparece texto
+     * @param actionTool
+     *            Tooltip de la barra de herramientas
+     * 
+     * @throws ClassNotFoundException
+     * @throws RuntimeException
+     *             DOCUMENT ME!
+     */
+    public void addTool(PluginClassLoader loader, SkinExtensionType ext,
+        ToolBar toolBar, ActionTool actionTool) throws ClassNotFoundException {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            throw new RuntimeException("No Event Dispatch Thread");
+        }
+
+        // Para traducir los textos que vengan
+        PluginServices ps =
+            PluginServices.getPluginServices(loader.getPluginName());
+
+        JToolBarButton btn;
+        ImageIcon image =
+            PluginServices.getIconTheme().get(actionTool.getIcon(),
+                ps.getClassLoader());
+
+        if (image != null) {
+            btn = new JToolBarButton(actionTool.getText(), image);
+        } else {
+            logger.error(PluginServices.getText(this, "Unable_to_find_icon")
+                + ": " + actionTool.getIcon());
+            btn =
+                new JToolBarButton(actionTool.getText(), PluginServices
+                    .getIconTheme().get(noIcon));
+        }
+
+        btn.setMargin(new Insets(0, 0, 0, 0));
+        btn.addMouseListener(tooltipListener);
+        btn.addActionListener(this);
+        btn.setFocusable(false);
+        btn.setActionCommand(actionTool.getActionCommand());
+        btn.setEnabled(false);
+        btn.setVisible(false);
+
+        MDIManagerFactory.createManager().registerAction(ext.getClassName(), actionTool);
+        
+        String name = toolBar.getName();
+
+        SelectableToolBar jtb = (SelectableToolBar) toolBarMap.get(name);
+
+        if (jtb == null) {
+            jtb = new SelectableToolBar(name);
+            jtb.setRollover(true);
+            jtb.setAndamiVisibility(toolBar.getIsVisible());
+            toolBarMap.put(name, jtb);
+            toolBars.add(jtb);
+        }
+
+        jtb.add(btn);
+
+        controlClass.put(btn, loader.loadClass(ext.getClassName()));
+
+        if (actionTool.getName() != null) {
+            btn.setName(actionTool.getName());
+        }
+
+        if (actionTool.getTooltip() != null) {
+            btn.setToolTip(ps.getText(actionTool.getTooltip()));
+        }
+
+        if (actionTool.getEnableText() != null) {
+            btn.setEnableText(ps.getText(actionTool.getEnableText()));
+        }
+
+        if (actionTool.getLast() == true) {
+            jtb.addSeparator();
+        }
+    }
+
+    /**
+     * Creates the needed menu structure to add the menu to the bar.
+     * Returns the father which must hold the menu which was
+     * provided as parameter.
+     * 
+     * Crea la estructura de menï¿½s necesaria para aï¿½adir el menu a la barra.
+     * Devuelve el padre del cual debe colgar el menu que se pasa como
+     * parï¿½metro.
+     * 
+     * @param menu
+     *            The Menu whose support is going to be added
+     * @param loader
+     *            The plugin's class loader
+     * 
+     * @return The proper father for the menu which was provided as parameter
+     */
+    private JMenu createMenuAncestors(Menu menu, PluginClassLoader loader) {
+        MenuElement menuPadre = null;
+
+        PluginServices ps =
+            PluginServices.getPluginServices(loader.getPluginName());
+
+        String[] menues = menu.getText().split("/");
+        ArrayList menuList = new ArrayList();
+        menuList.add(menues[0]);
+        menuPadre = getMenu(menuList, menuBar);
+
+        JMenu padre = null;
+
+        if (menuPadre == null) {
+            padre = new JMenu(ps.getText(menues[0]));
+            padre.setName(menues[0]);
+            menuBar.add(padre);
+        } else
+            if (menuPadre instanceof JMenu) {
+                padre = (JMenu) menuPadre;
+            } else {
+                logger.error(ps
+                    .getText("error_creating_menu_Ancestor_does_not_exist"));
+                return null;
+            }
+
+        // Se crea el resto de menus
+        ArrayList temp = new ArrayList();
+
+        for (int i = 1; i < (menues.length - 1); i++) {
+            temp.add(menues[i]);
+        }
+
+        menuPadre = createMenus(temp, padre);
+
+        return (JMenu) menuPadre;
+    }
+
+    /**
+     * Aï¿½ade la informaciï¿½n del menu al framework. Debido a que los menï¿½es
+     * se
+     * pueden introducir en un orden determinado por el usuario, pero los
+     * plugins se instalan en un orden arbitrario, primero se almacena la
+     * informaciï¿½n de todos los menus para luego ordenarlos y posteriormente
+     * aï¿½adirlos al interfaz
+     * 
+     * @param loader
+     *            Posicion del menu. Se ordena por este campo
+     * @param ext
+     *            Array con los nombres de los padres del menu
+     * @param menu
+     *            Texto del menu
+     * 
+     * @throws ClassNotFoundException
+     * @throws RuntimeException
+     *             DOCUMENT ME!
+     */
+    public void addMenu(PluginClassLoader loader, SkinExtensionType ext,
+        Menu menu) throws ClassNotFoundException {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            throw new RuntimeException("No Event Dispatch Thread");
+        }
+
+        JMenu menuPadre = createMenuAncestors(menu, loader);
+
+        // Se registra y aï¿½ade el menu
+        /*
+         * String[] aux = menu.getText().split("/");
+         * 
+         * if (aux.length == 2)
+         * if (aux[1].equals("----"))
+         * {
+         * menuPadre.addSeparator();
+         * return;
+         * }
+         */
+        if (menu.getIs_separator()) {
+            menuPadre.addSeparator();
+            return;
+        }
+
+        JMenuItem nuevoMenu = createJMenuItem(loader, menu);
+        nuevoMenu.addMouseListener(tooltipListener);
+        nuevoMenu.addActionListener(this);
+        menuPadre.add(nuevoMenu);
+        controlClass.put(nuevoMenu, loader.loadClass(ext.getClassName()));
+
+        MDIManagerFactory.createManager().registerAction(ext.getClassName(), menu);
+
+        
+    }
+
+    /**
+     * Dado un array de nombres de menu, encuentra el menï¿½
+     * 
+     * @param nombres
+     *            DOCUMENT ME!
+     * @param padre
+     *            DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    private javax.swing.JMenuItem getMenu(ArrayList nombres, MenuElement parent) {
+        if (parent instanceof javax.swing.JMenu) {
+            javax.swing.JMenu parentItem = (javax.swing.JMenu) parent;
+
+            for (int i = 0; i < parentItem.getMenuComponentCount(); i++) {
+                if ((parentItem.getMenuComponent(i).getName() != null // not a
+                                                                      // JToolBar.Separator
+                    )
+                    && (parentItem.getMenuComponent(i).getName()
+                        .compareTo((String) nombres.get(0)) == 0)) {
+                    nombres.remove(0);
+                    if (nombres.isEmpty()) {
+                        if (parentItem.getMenuComponent(i) instanceof javax.swing.JMenuItem) {
+                            return (javax.swing.JMenuItem) parentItem
+                                .getMenuComponent(i);
+                        } else {
+                            logger.error(PluginServices.getText(this,
+                                "Menu_type_not_supported_")
+                                + " "
+                                + parentItem.getMenuComponent(i).getClass()
+                                    .getName());
+                            return null;
+                        }
+                    } else {
+                        return getMenu(nombres,
+                            (MenuElement) parentItem.getMenuComponent(i));
+                    }
+                }
+            }
+        } else
+            if (parent instanceof JMenuBar) {
+                javax.swing.JMenuBar parentItem = (javax.swing.JMenuBar) parent;
+
+                for (int i = 0; i < parentItem.getMenuCount(); i++) {
+                    if ((parentItem.getMenu(i).getName() != null // not a
+                                                                 // JToolBar.Separator
+                        )
+                        && (parentItem.getMenu(i).getName()
+                            .compareTo((String) nombres.get(0)) == 0)) {
+                        nombres.remove(0);
+                        if (nombres.isEmpty()) {
+                            if (parentItem.getMenu(i) instanceof javax.swing.JMenuItem) {
+                                return parentItem.getMenu(i);
+                            } else {
+                                logger.error(PluginServices.getText(this,
+                                    "Menu_type_not_supported_")
+                                    + " "
+                                    + parentItem.getMenu(i).getClass()
+                                        .getName());
+                                return null;
+                            }
+                        } else {
+                            return getMenu(nombres, parentItem.getMenu(i));
+                        }
+                    }
+                }
+            } else {
+                logger.error(PluginServices.getText(this,
+                    "Menu_type_not_supported_")
+                    + " "
+                    + parent.getClass().getName() + " " + parent.toString());
+            }
+        return null;
+    }
+
+    /**
+     * Crea la estructura de menus recursivamente. Por ejemplo, si se le pasa
+     * en el parï¿½metro nombres el array {"Search", "References", "Workspace"}
+     * crearï¿½ un menï¿½ Search, un submenï¿½ del anterior que se llamarï¿½
+     * References y debajo de ï¿½ste ï¿½ltimo otro menu llamado Workspace
+     * 
+     * @param nombres
+     *            Array con los nombres de los menï¿½s que se quieren crear
+     * @param padre
+     *            Menu padre de los menï¿½s creados. Es ï¿½til porque es un
+     *            algoritmo recursivo
+     * 
+     * @return Devuelve el menï¿½ creado. Al final de toda la recursividad,
+     *         devolverï¿½ el menï¿½ de mï¿½s abajo en la jerarquï¿½a
+     * 
+     * @throws RuntimeException
+     *             DOCUMENT ME!
+     */
+    private JMenu createMenus(ArrayList nombres, JMenu padre) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            throw new RuntimeException("No Event Dispatch Thread");
+        }
+
+        // si no quedan nombres de menu por crear se vuelve: caso base
+        if (nombres.size() == 0) {
+            return padre;
+        }
+
+        // Se busca el menu por si ya existiera para no crearlo otra vez
+        JMenu buscado = null;
+
+        for (int i = 0; i < padre.getMenuComponentCount(); i++) {
+            try {
+                JMenu hijo = (JMenu) padre.getMenuComponent(i);
+
+                if (hijo.getName().compareTo((String) nombres.get(0)) == 0) {
+                    buscado = hijo;
+                }
+            } catch (ClassCastException e) {
+                /*
+                 * Se ha encontrado un elemento hoja del arbol de menï¿½es
+                 */
+            }
+        }
+
+        if (buscado != null) {
+            // Si lo hemos encontrado creamos el resto
+            nombres.remove(0);
+
+            return createMenus(nombres, buscado);
+        } else {
+            // Si no lo hemos encontrado se crea el menu, se aï¿½ade al padre
+            // y se crea el resto
+            String nombre = (String) nombres.get(0);
+            JMenu menuPadre = new JMenu(PluginServices.getText(this, nombre));
+            menuPadre.setName(nombre);
+            padre.add(menuPadre);
+
+            nombres.remove(0);
+
+            return createMenus(nombres, menuPadre);
+        }
+    }
+
+    /**
+     * Mï¿½todo invocado en respuesta a ciertos eventos de la interfaz que
+     * pueden
+     * ocultar botones de las barras de herramientas y que redimensiona ï¿½sta
+     * de manera conveniente para que no se oculte ninguno
+     */
+    private void ajustarToolBar() {
+        int margen = 8;
+        int numFilas = 1;
+        double acum = margen;
+
+        int toolHeight = 0;
+
+        for (int i = 0; i < toolBars.getComponentCount(); i++) {
+            Component c = toolBars.getComponent(i);
+
+            if (!c.isVisible()) {
+                continue;
+            }
+
+            double width = c.getPreferredSize().getWidth();
+            acum = acum + width;
+
+            if (acum > this.getWidth()) {
+                numFilas++;
+                acum = width + margen;
+            }
+
+            if (c.getPreferredSize().getHeight() > toolHeight) {
+                toolHeight = c.getPreferredSize().height;
+            }
+        }
+
+        toolBars.setPreferredSize(new Dimension(this.getWidth(),
+            (numFilas * toolHeight)));
+
+        toolBars.updateUI();
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param classesExtensions
+     */
+    public void setClassesExtensions(Map<Class<? extends IExtension>, ExtensionDecorator> classesExtensions) {
+    	Map<Class<? extends IExtension>, ExtensionDecorator> extensions = new HashMap<Class<? extends IExtension>, ExtensionDecorator>();
+    	for ( Entry<Class<? extends IExtension>, ExtensionDecorator>  entry: classesExtensions.entrySet()) {
+			if( ! (entry.getValue().getExtension() instanceof LibraryExtension) ) {
+				extensions.put(entry.getKey(), entry.getValue());
+			}
+		}
+        this.classesExtensions = extensions;
+    }
+
+    /**
+     * Metodo de callback invocado cuando se selecciona un menu o un boton
+     * de
+     * la barra de herramientas. Se busca la extensiï¿½n asociada y se ejecuta
+     * 
+     * @param e
+     *            Evento producido
+     */
+    public void actionPerformed(ActionEvent e) {
+        Object control = e.getSource();
+        org.gvsig.andami.plugins.IExtension ext =
+            (org.gvsig.andami.plugins.IExtension) classesExtensions
+                .get(controlClass.get(control));
+        String actionCommand = e.getActionCommand();
+        try {
+            logger.info("{}.execute('{}')", ext.getClass().getSimpleName(), actionCommand);
+            ext.execute(actionCommand);
+
+            try {
+                JToolBarToggleButton toggle = (JToolBarToggleButton) control;
+                ToggleButtonModel model = (ToggleButtonModel) toggle.getModel();
+                selectedTool.put(model.getGroupName(), actionCommand);
+            } catch (ClassCastException ex) {
+            } catch (NullPointerException ex) {
+            }
+
+        } catch (RuntimeException t) {
+            if (ext == null) {
+                logger.error(Messages
+                    .getString("No_extension_associated_with_this_event_")
+                    + e.getActionCommand());
+            }
+            NotificationManager.addError(Messages
+                .getString("MDIFrame.Error_no_capturado_por_el_usuario"), t);
+        }
+
+        enableControls();
+        showMemory();
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param name
+     *            DOCUMENT ME!
+     * @param loader
+     *            DOCUMENT ME!
+     * 
+     * @return DOCUMENT ME!
+     */
+    private String getName(String name, PluginClassLoader loader) {
+        if (name.indexOf('.') == -1) {
+            return loader.getPluginName() + "." + name;
+        } else {
+            return name;
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param loader
+     *            DOCUMENT ME!
+     * @param menu
+     *            DOCUMENT ME!
+     * 
+     * @throws RuntimeException
+     *             DOCUMENT ME!
+     */
+    public void addPopupMenu(PluginClassLoader loader, PopupMenu menu) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            throw new RuntimeException("No Event Dispatch Thread");
+        }
+
+        String name = getName(menu.getName(), loader);
+
+        // Se crea el control popupmenu
+        JPopUpMenu popupMenu = (JPopUpMenu) popupMap.get(name);
+
+        if (popupMenu == null) {
+            popupMenu = new JPopUpMenu(menu.getName());
+            popupMap.put(name, popupMenu);
+        }
+
+        // Se aï¿½aden las entradas
+        Menu[] menues = menu.getMenu();
+
+        for (int i = 0; i < menues.length; i++) {
+            // Se registra y aï¿½ade el menu
+            JMenuItem nuevoMenu = createJMenuItem(loader, menues[i]);
+
+            popupMenu.add(nuevoMenu);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param loader
+     * @param menu
+     * 
+     * @return
+     * 
+     * @throws RuntimeException
+     *             DOCUMENT ME!
+     */
+    private JMenuItem createJMenuItem(PluginClassLoader loader, Menu menu) {
+        JMenuItem nuevoMenu = null;
+
+        PluginServices ps =
+            PluginServices.getPluginServices(loader.getPluginName());
+        String text = menu.getText();
+        text = text.substring(text.lastIndexOf('/') + 1);
+        String translatedText = ps.getText(text);
+
+        if (menu.getIcon() != null) {
+            ImageIcon image =
+                PluginServices.getIconTheme().get(menu.getIcon(),
+                    ps.getClassLoader());
+            if (image != null) {
+                nuevoMenu = new JMenuItem(translatedText, image);
+            } else {
+                nuevoMenu =
+                    new JMenuItem(translatedText, PluginServices.getIconTheme()
+                        .get(noIcon));
+                logger.error(PluginServices
+                    .getText(this, "Unable_to_find_icon")
+                    + ": "
+                    + menu.getIcon());
+            }
+        } else {
+            nuevoMenu = new JMenuItem(translatedText);
+        }
+        nuevoMenu.setName(text);
+        if (menu.getMnemonic() != null) {
+            if (menu.getMnemonic().length() != 1) {
+                throw new RuntimeException(
+                    "Mnemonic must be 1 character length");
+            }
+
+            nuevoMenu.setMnemonic(KeyMapping.getKey(menu.getMnemonic()
+                .charAt(0)));
+        }
+
+        if (menu.getKey() != null) {
+            String osName = System.getProperty("os.name");
+            boolean MAC_OS_X = osName.toLowerCase().startsWith("mac os x");
+            if (MAC_OS_X) {
+                // en OS X, en vez de hardwiring la ShortcutKey, usamos el
+                // default sugerido por el OS
+                nuevoMenu.setAccelerator(KeyStroke.getKeyStroke(KeyMapping
+                    .getKey(menu.getKey().charAt(0)), Toolkit
+                    .getDefaultToolkit().getMenuShortcutKeyMask()));
+            } else {
+                nuevoMenu.setAccelerator(KeyStroke.getKeyStroke(
+                    KeyMapping.getKey(menu.getKey().charAt(0)),
+                    ActionEvent.ALT_MASK));
+            }
+        }
+
+        nuevoMenu.setActionCommand(menu.getActionCommand());
+
+        if (menu.getTooltip() != null) {
+            nuevoMenu.setToolTip(ps.getText(menu.getTooltip()));
+        }
+
+        if (menu.getEnableText() != null) {
+            nuevoMenu.setEnableText(ps.getText(menu.getEnableText()));
+        }
+
+        nuevoMenu.setEnabled(true);
+        nuevoMenu.setVisible(true);
+
+        return nuevoMenu;
+    }
+
+    /**
+     * Muestra u oculta el menu de nombre 'name'
+     * 
+     * @param name
+     *            Nombre del menu que se quiere mostrar
+     * @param x
+     *            Evento de raton
+     * @param y
+     *            DOCUMENT ME!
+     * @param c
+     *            DOCUMENT ME!
+     */
+    private void showPopupMenu(String name, int x, int y, Component c) {
+        JPopupMenu menu = (JPopupMenu) popupMap.get(name);
+
+        if (menu != null) {
+            menu.show(c, x, y);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param name
+     *            DOCUMENT ME!
+     * @param listener
+     *            DOCUMENT ME!
+     */
+    public void removePopupMenuListener(String name, ActionListener listener) {
+        JPopupMenu menu = (JPopupMenu) popupMap.get(name);
+
+        if (menu != null) {
+            Component[] jmenuitems = menu.getComponents();
+
+            for (int i = 0; i < jmenuitems.length; i++) {
+                if (jmenuitems[i] instanceof JMenuItem) {
+                    ((JMenuItem) jmenuitems[i]).removeActionListener(listener);
+                }
+            }
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param popupName
+     * @param c
+     *            DOCUMENT ME!
+     * @param listener
+     * @param loader
+     */
+    public void addPopupMenuListener(String popupName, Component c,
+        ActionListener listener, PluginClassLoader loader) {
+        final String name = getName(popupName, loader);
+
+        JPopupMenu menu = (JPopupMenu) popupMap.get(name);
+
+        if (menu != null) {
+            Component[] jmenuitems = menu.getComponents();
+
+            for (int i = 0; i < jmenuitems.length; i++) {
+                if (jmenuitems[i] instanceof JMenuItem) {
+                    ((JMenuItem) jmenuitems[i]).addActionListener(listener);
+                }
+            }
+        }
+
+        c.addMouseListener(new MouseAdapter() {
+
+            @Override
+            public void mousePressed(MouseEvent e) {
+                if (e.isPopupTrigger()) {
+                    showPopupMenu(name, e.getX(), e.getY(), e.getComponent());
+                }
+            }
+
+            @Override
+            public void mouseReleased(MouseEvent e) {
+                if (e.isPopupTrigger()) {
+                    showPopupMenu(name, e.getX(), e.getY(), e.getComponent());
+                }
+            }
+        });
+    }
+
+    /**
+     * Loop on the controls to enable/disable and show/hide them, according to
+     * its associated extension
+     * 
+     * @throws RuntimeException
+     *             DOCUMENT ME!
+     */
+    public void enableControls() {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            throw new RuntimeException("No Event Dispatch Thread");
+        }
+
+        Iterator e = classesExtensions.values().iterator();
+        HashMap estadoExtensiones = new HashMap();
+        HashMap visibilidadExtensiones = new HashMap();
+
+        while (e.hasNext()) {
+            ExtensionDecorator ext = (ExtensionDecorator) e.next();
+
+            try {
+                if (estadoExtensiones.get(ext) == null) {
+                    boolean b;
+                    if (ext.getVisibility() == ExtensionDecorator.ALWAYS_VISIBLE) {
+                        b = true;
+                    } else
+                        if (ext.getVisibility() == ExtensionDecorator.ALWAYS_INVISIBLE) {
+                            b = false;
+                        } else {
+                            if (PluginServices.getExclusiveUIExtension() == null) {
+                                b = ext.isVisible();
+                            } else {
+                                b =
+                                    PluginServices.getExclusiveUIExtension()
+                                        .isVisible(ext.getExtension());
+                            }
+                        }
+                    Boolean visible = new Boolean(b);
+                    Boolean enabled = new Boolean(false);
+
+                    if (visible.booleanValue()) {
+                        if (PluginServices.getExclusiveUIExtension() == null) {
+                            enabled = new Boolean(ext.isEnabled());
+                        } else {
+                            enabled =
+                                new Boolean(PluginServices
+                                    .getExclusiveUIExtension().isEnabled(
+                                        ext.getExtension()));
+                        }
+
+                    }
+
+                    estadoExtensiones.put(ext, enabled);
+                    visibilidadExtensiones.put(ext, visible);
+                }
+            } catch (Throwable e1) {
+                NotificationManager.addError(Messages
+                    .getString("MDIFrame.Error_no_capturado_por_el_usuario"),
+                    e1);
+                estadoExtensiones.put(ext, Boolean.FALSE);
+            }
+        }
+
+        // Enable or disable controls, according to its associated extensions
+        e = controlClass.keySet().iterator();
+
+        while (e.hasNext()) {
+            JComponent control = (JComponent) e.next();
+
+            try {
+                org.gvsig.andami.plugins.IExtension ext =
+                    (org.gvsig.andami.plugins.IExtension) classesExtensions
+                        .get(controlClass.get(control));
+                boolean enabled =
+                    ((Boolean) estadoExtensiones.get(ext)).booleanValue();
+                boolean visible =
+                    ((Boolean) visibilidadExtensiones.get(ext)).booleanValue();
+                control.setEnabled(enabled);
+                control.setVisible(visible);
+            } catch (Exception ex) {
+                control.setEnabled(false);
+                control.setVisible(false);
+            }
+        }
+
+        // Loop in the menus to hide the menus that don't have visible children
+        for (int i = 0; i < menuBar.getMenuCount(); i++) {
+            MenuElement menu = menuBar.getMenu(i);
+            hideMenus(menu);
+            if (menu instanceof JMenu) {
+                // hide (ugly) redundant separators and assign keyboard
+                // mnemonics
+                Component[] comps = ((JMenu) menu).getMenuComponents();
+                // mnemonics have to be unique for each top-level menu
+                char mnemonics[] = new char[comps.length];
+                if (comps.length > 0) {
+                    // Set keyboard mnemonic for this top-level entry
+                    String text = ((JMenu) menu).getText();
+                    char mnemonic = getMnemonic(text, mnemonics);
+                    if (' ' != mnemonic) {
+                        ((JMenu) menu).setMnemonic(mnemonic);
+                        mnemonics[0] = mnemonic;
+                    }
+                }
+                // now go through all entries in this menu, hid
+                // separators if necessary and assing remaining mnemonics
+                hideSeparatorsAndMakeMnemonics(menu, mnemonics);
+            }
+        }
+
+        // hide the toolbars that don't contain any visible tool
+        Iterator it = toolBarMap.values().iterator();
+
+        while (it.hasNext()) {
+            SelectableToolBar t = (SelectableToolBar) it.next();
+            boolean todosOcultos = true;
+
+            for (int i = 0; i < t.getComponentCount(); i++) {
+                if (!(t.getComponent(i) instanceof JSeparator) // separators
+                                                               // don't matter
+                    && t.getComponent(i).isVisible()) {
+                    todosOcultos = false;
+                }
+            }
+
+            if (todosOcultos) {
+                t.setVisible(false);
+            } else {
+                t.setVisible(t.getAndamiVisibility());
+            }
+        }
+
+        if (mdiManager != null) {
+            JPanel f = (JPanel) mdiManager.getActiveWindow();
+
+            if (f != null) {
+                if (lastLabelClass != f.getClass()) {
+                    lastLabelClass = f.getClass();
+
+                    Label[] lbls = (Label[]) classLabels.get(lastLabelClass);
+
+                    if (lbls != null) {
+                        bEstado.setLabelSet(lbls);
+                    }
+                }
+            }
+        }
+
+        ajustarToolBar();
+
+        showMemory();
+    }
+
+    /**
+     * Establece la visibilidad de un menu y todos sus descendientes en la
+     * jerarquia teniendo en cuenta la visibilidad de todos los submenus.
+     * 
+     * @param menu
+     *            Menu que se quiere visualizar
+     * 
+     * @return Devuelve true si el menu es visible y false en caso contrario
+     */
+    private boolean hideMenus(MenuElement menu) {
+        MenuElement[] submenus = menu.getSubElements();
+
+        // Si no tiene hijos se devuelve su visibilidad
+        if (submenus.length == 0) {
+            return menu.getComponent().isVisible();
+        }
+
+        /*
+         * Si tiene hijos se devuelve true si algï¿½no de ellos es visible,
+         * pero se itera por todos ellos
+         */
+        boolean visible = false;
+
+        for (int i = 0; i < submenus.length; i++) {
+            if (hideMenus(submenus[i])) {
+                if (!(menu instanceof JPopupMenu)) {
+                    menu.getComponent().setVisible(true);
+                }
+
+                visible = true;
+            }
+        }
+
+        if (visible) {
+            return true;
+        }
+
+        menu.getComponent().setVisible(false);
+
+        return false;
+    }
+
+    /**
+     * 
+     * Recurse through all menu elements and make sure there are no
+     * redundant separators.
+     * This method will make sure that a separator only becomes visible
+     * if at least one visible non-separator menu entry preceeded it.
+     * 
+     **/
+    private void hideSeparatorsAndMakeMnemonics(MenuElement menu,
+        char[] mnemonics) {
+        // flag that indicates whether a separator is to be displayed or not
+        boolean allowSeparator;
+
+        allowSeparator = false; // separator not allowed as very first menu item
+        Component[] comps = ((JMenu) menu).getMenuComponents();
+        if (comps.length < 1) {
+            // zero-length menu: skip
+            return;
+        }
+
+        for (int i = 0; i < comps.length; i++) {
+            if (comps[i] instanceof JSeparator) {
+                // got a separator: display only if allowed at this position
+                if (allowSeparator == true) {
+                    // look at all successive menu entries to make sure that at
+                    // least one
+                    // is visible and not a separator (otherwise, this separator
+                    // would
+                    // be the last visible item in this menu) -- we don't want
+                    // that
+                    comps[i].setVisible(false);
+                    for (int j = i; j < comps.length; j++) {
+                        if (!(comps[j] instanceof JSeparator)) {
+                            if (comps[j].isVisible()) {
+                                comps[i].setVisible(true); // display separator!
+                                break;
+                            }
+                        }
+                    }
+                } else {
+                    comps[i].setVisible(false);
+                }
+                allowSeparator = false; // separator is not allowed right after
+                                        // another separator
+            } else {
+                if (comps[i] instanceof JMenu) { // got a submenu: recurse
+                                                 // through it
+                    // get number of submenu components
+                    Component[] scomps = ((JMenu) comps[i]).getMenuComponents();
+                    // make a new, fresh array to hold unique mnemonics for this
+                    // submenu
+                    char[] smnemonics = new char[scomps.length];
+                    hideSeparatorsAndMakeMnemonics(((MenuElement) comps[i]),
+                        smnemonics);
+                    if (comps[i].isVisible()) {
+                        allowSeparator = true; // separators are OK after
+                                               // visible submenus
+                        // Set keyboard mnemonic for this submenu
+                        String text = ((JMenu) comps[i]).getText();
+                        char mnemonic = getMnemonic(text, mnemonics);
+                        if (' ' != mnemonic) {
+                            ((JMenu) comps[i]).setMnemonic(mnemonic);
+                            mnemonics[i] = mnemonic;
+                        }
+                    }
+                } else {
+                    if (comps[i].isVisible()) {
+                        if (comps[i] instanceof JMenuItem) {
+                            // Set keyboard mnemonic for this menu item
+                            String text = ((JMenuItem) comps[i]).getText();
+                            char mnemonic = getMnemonic(text, mnemonics);
+                            if (' ' != mnemonic) {
+                                ((JMenuItem) comps[i]).setMnemonic(mnemonic);
+                                mnemonics[i] = mnemonic;
+                            }
+                        }
+                        allowSeparator = true; // separators are OK after
+                                               // regular, visible entries
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Helper functios for assigning a unique mnemomic char from
+     * a pool of unassigned onces, stored in the array "mnemomnics"
+     */
+    private char getMnemonic(String text, char[] mnemonics) {
+        Vector words = new Vector();
+        StringTokenizer t = new StringTokenizer(text);
+        int maxsize = 0;
+
+        while (t.hasMoreTokens()) {
+            String word = t.nextToken();
+            if (word.length() > maxsize) {
+                maxsize = word.length();
+            }
+            words.addElement(word);
+        }
+        words.trimToSize();
+
+        for (int i = 0; i < maxsize; ++i) {
+            char mnemonic = getMnemonic(words, mnemonics, i);
+            if (' ' != mnemonic) {
+                return mnemonic;
+            }
+        }
+
+        return ' ';
+    }
+
+    private char getMnemonic(Vector words, char[] mnemonics, int index) {
+        int numwords = words.size();
+
+        for (int i = 0; i < numwords; ++i) {
+            String word = (String) words.elementAt(i);
+            if (index >= word.length()) {
+                continue;
+            }
+
+            char c = word.charAt(index);
+            if (!isMnemonicExists(c, mnemonics)) {
+                /* pick only valid chars */
+                if ((c != ':') && (c != '.') && (c != ',') && (c != ';')
+                    && (c != '-') && (c != '+') && (c != '/') && (c != '\\')
+                    && (c != '\'') && (c != '\"') && (c != ' ') && (c != '=')
+                    && (c != '(') && (c != ')') && (c != '[') && (c != ']')
+                    && (c != '{') && (c != '}') && (c != '$') && (c != '*')
+                    && (c != '&') && (c != '%') && (c != '!') && (c != '?')
+                    && (c != '#') && (c != '~') && (c != '_')) {
+                    return c;
+                }
+            }
+        }
+        return ' ';
+    }
+
+    private boolean isMnemonicExists(char c, char[] mnemonics) {
+        int num = mnemonics.length;
+        for (int i = 0; i < num; ++i) {
+            if (mnemonics[i] == c) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Muestra la memoria consumida por el programa
+     */
+    private void showMemory() {
+        Runtime r = Runtime.getRuntime();
+        long mem = r.totalMemory() - r.freeMemory();
+        logger.debug(PluginServices.getText(this, "memory_usage") + " " + mem
+            / 1024 + " KB");
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @return
+     */
+    public MDIManager getMDIManager() {
+        return mdiManager;
+    }
+
+    /**
+     * Establece el mensaje en la barra de estado asociado a una etiqueta
+     * 
+     * @return DOCUMENT ME!
+     */
+    public NewStatusBar getStatusBar() {
+        return bEstado;
+    }
+
+    /**
+     * You can use this function to select the appropiate
+     * tool inside the toolbars
+     */
+    public void setSelectedTool(String actionCommand) {
+        setSelectedTool(defaultGroup, actionCommand);
+    }
+
+    /**
+     * You can use this function to select the appropiate
+     * tool inside the toolbars
+     */
+    public void setSelectedTool(String groupName, String actionCommand) {
+        ButtonGroup group = (ButtonGroup) buttonGroupMap.get(groupName);
+        if (group == null) {
+            return;
+        }
+
+        Enumeration enumeration = group.getElements();
+        while (enumeration.hasMoreElements()) {
+            AbstractButton button = (AbstractButton) enumeration.nextElement();
+            if (button.getActionCommand().equals(actionCommand)) {
+                button.setSelected(true);
+            }
+        }
+
+        selectedTool.put(groupName, actionCommand);
+    }
+
+    /**
+     * You can use this function to select the appropiate
+     * tool inside the toolbars
+     */
+    public void setSelectedTools(Map selectedTools) {
+        selectedTool = selectedTools;
+        if (selectedTools == null) {
+            return;
+        }
+        Iterator groupNames = selectedTools.keySet().iterator();
+        while (groupNames.hasNext()) {
+            try {
+                String groupName = (String) groupNames.next();
+                ButtonGroup group = (ButtonGroup) buttonGroupMap.get(groupName);
+                Enumeration enumeration = group.getElements();
+                String actionCommand = (String) selectedTools.get(groupName);
+                if (actionCommand == null) {
+                    continue;
+                }
+                while (enumeration.hasMoreElements()) {
+                    AbstractButton button =
+                        (AbstractButton) enumeration.nextElement();
+                    if (button.getActionCommand().equals(actionCommand)) {
+                        button.setSelected(true);
+                    }
+                }
+            } catch (ClassCastException ex) {
+                logger
+                    .error("selectedTool should only contain pairs (String groupName, JToolBarToggleButton button)");
+            }
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @param clase
+     * @param label
+     */
+    public void setStatusBarLabels(Class clase, Label[] label) {
+        classLabels.put(clase, label);
+    }
+
+    public void removeStatusBarLabels(Class clase) {
+        classLabels.remove(clase);
+    }
+
+    public void addStatusBarControl(Class extensionClass, IControl control) {
+        control.addActionListener(this);
+        bEstado.addControl(control.getName(), (Component) control);
+        controlClass.put(control, extensionClass);
+    }
+
+    public void removeStatusBarControl(String name) {
+        Component c = bEstado.removeControl(name);
+        if (c != null) {
+            controlClass.remove(c);
+        }
+    }
+
+    /**
+     * @see org.gvsig.andami.ui.mdiFrame.MainFrame#removeMenu(org.gvsig.andami.plugins.config.generate.Menu)
+     */
+    public void removeMenu(Menu menu) {
+        JMenuItem delete = (JMenuItem) infoCodedMenus.get(menu);
+
+        if (delete == null) {
+            throw new NoSuchElementException(menu.getText());
+        }
+
+        delete.getParent().remove(delete);
+        infoCodedMenus.remove(menu);
+    }
+
+    /**
+     * @see org.gvsig.andami.ui.mdiFrame.MainFrame#addMenu(org.gvsig.andami.plugins.config.generate.Menu,
+     *      java.awt.event.ActionListener, PluginClassLoader)
+     */
+    public void addMenu(Menu menu, ActionListener listener,
+        PluginClassLoader loader) {
+        JMenu menuPadre = createMenuAncestors(menu, loader);
+
+        // Se registra y aï¿½ade el menu
+        JMenuItem nuevoMenu = createJMenuItem(loader, menu);
+        nuevoMenu.addMouseListener(tooltipListener);
+        nuevoMenu.addActionListener(listener);
+        menuPadre.add(nuevoMenu);
+
+        infoCodedMenus.put(menu, nuevoMenu);
+    }
+
+    /**
+     * @see org.gvsig.andami.ui.mdiFrame.MainFrame#changeMenuName(java.lang.String[],
+     *      String, org.gvsig.andami.plugins.PluginClassLoader)
+     */
+    public void changeMenuName(String[] menu, String newName,
+        PluginClassLoader loader) {
+
+        ArrayList menuList = new ArrayList();
+        for (int i = 0; i < menu.length; i++) {
+            menuList.add(menu[i]);
+        }
+
+        javax.swing.JMenuItem newMenu = getMenu(menuList, menuBar);
+        if (newMenu == null) {
+            throw new NoSuchMenuException(menu[0]);
+        } else {
+            newMenu.setText(PluginServices.getText(this, newName));
+        }
+    }
+
+    /**
+     * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.ComponentEvent)
+     */
+    public void componentHidden(ComponentEvent arg0) {
+    }
+
+    /**
+     * @see java.awt.event.ComponentListener#componentMoved(java.awt.event.ComponentEvent)
+     */
+    public void componentMoved(ComponentEvent arg0) {
+    }
+
+    /**
+     * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
+     */
+    public void componentResized(ComponentEvent arg0) {
+        ajustarToolBar();
+    }
+
+    /**
+     * @see java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent)
+     */
+    public void componentShown(ComponentEvent arg0) {
+    }
+
+    /**
+     * @see java.awt.event.ContainerListener#componentAdded(java.awt.event.ContainerEvent)
+     */
+    public void componentAdded(ContainerEvent arg0) {
+        ajustarToolBar();
+    }
+
+    /**
+     * @see java.awt.event.ContainerListener#componentRemoved(java.awt.event.ContainerEvent)
+     */
+    public void componentRemoved(ContainerEvent arg0) {
+        ajustarToolBar();
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @author $author$
+     * @version $Revision$
+     */
+    public class TooltipListener extends MouseAdapter {
+
+        /**
+         * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
+         */
+        @Override
+        public void mouseEntered(MouseEvent e) {
+            JComponent control = (JComponent) e.getSource();
+            EnableTextSupport ets = (EnableTextSupport) e.getSource();
+
+            String texto = null;
+            texto = control.getToolTipText();
+
+            if (texto != null) {
+                bEstado.setInfoTextTemporal(texto);
+            }
+        }
+
+        /**
+         * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
+         */
+        @Override
+        public void mouseExited(MouseEvent arg0) {
+            bEstado.restaurarTexto();
+        }
+
+        /**
+         * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+         */
+        @Override
+        public void mousePressed(MouseEvent e) {
+            bEstado.restaurarTexto();
+        }
+    }
+
+    public String getTitlePrefix() {
+        return titlePrefix;
+    }
+
+    public void setTitlePrefix(String titlePrefix) {
+        this.titlePrefix = titlePrefix;
+    }
+
+    public Map getSelectedTools() {
+        return selectedTool;
+    }
+
+    public HashMap getInitialSelectedTools() {
+        return initialSelectedTools;
+    }
+
+    /**
+     * Get a previously added JComponent by name. For example
+     * you can use it if you need to obtain a JToolBar to
+     * add some customized component.
+     * 
+     * @param name
+     * @return the JComponent or null if none has been found
+     */
+    public JComponent getComponentByName(String name) {
+        Iterator e = controlClass.keySet().iterator();
+
+        while (e.hasNext()) {
+            JComponent control = (JComponent) e.next();
+            String nameCtrl = control.getName();
+            if (nameCtrl != null) {
+                if (nameCtrl.compareTo(name) == 0) {
+                    return control;
+                }
+            }
+        }
+        Iterator it = toolBarMap.values().iterator();
+        while (it.hasNext()) {
+            SelectableToolBar t = (SelectableToolBar) it.next();
+            String nameCtrl = t.getName();
+            if (nameCtrl != null) {
+                if (nameCtrl.compareTo(name) == 0) {
+                    return t;
+                }
+            }
+
+        }
+
+        return null;
+    }
+
+    public SelectableToolBar[] getToolbars() {
+        return (SelectableToolBar[]) toolBarMap.values().toArray(
+            new SelectableToolBar[0]);
+    }
+
+    public boolean getToolbarVisibility(String name) {
+        JComponent component =
+            PluginServices.getMainFrame().getComponentByName(name);
+        if ((component != null) && (component instanceof SelectableToolBar)) {
+            SelectableToolBar toolBar = (SelectableToolBar) component;
+            return toolBar.getAndamiVisibility();
+        }
+        return false;
+    }
+
+    public boolean setToolbarVisibility(String name, boolean visibility) {
+        JComponent component =
+            PluginServices.getMainFrame().getComponentByName(name);
+        if ((component != null) && (component instanceof SelectableToolBar)) {
+            SelectableToolBar toolBar = (SelectableToolBar) component;
+            boolean oldVisibility = toolBar.getAndamiVisibility();
+            toolBar.setAndamiVisibility(visibility);
+            enableControls();
+            return oldVisibility;
+        }
+        return false;
+    }
+
+    public javax.swing.JMenuItem getMenuEntry(String[] menuPath) {
+        ArrayList menu = new ArrayList();
+        for (int i = 0; i < menuPath.length; i++) {
+            menu.add(menuPath[i]);
+        }
+        return getMenu(menu, menuBar);
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/MDIFrame.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java	(revision 38313)
@@ -0,0 +1,123 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JToggleButton;
+import javax.swing.JToolBar;
+
+
+/**
+ * Caja de herramientas seleccionables
+ */
+public class SelectableToolBar extends JToolBar {
+	private static final long serialVersionUID = 1L;
+	/**
+     * Andami visibility: determines whether this toolbar should
+     * be shown by Andami. If it's false, the toolbar will be
+     * hidden even if its associated extension is visible.
+     */
+    private boolean _visible;
+
+    /**
+     * Creates a new SelectableToolBar object.
+     *
+     * @param titulo Título de la barra
+     */
+    public SelectableToolBar(String titulo) {
+        super(titulo);
+    }
+
+    /**
+     * Añade un boton a la caja
+     *
+     * @param btn botón a añadir.
+     */
+    public void addButton(ButtonGroup group, JToggleButton btn) {
+    	group.add(btn);
+        add(btn);
+    }
+
+    /**
+     * Selects a toggleButton in this toolBar by ActionCommand
+     * @param actionCommand
+     */
+    public void setSelectedTool(String actionCommand){
+        for (int i = 0; i < getComponentCount(); i++) {
+            if (getComponent(i) instanceof JToggleButton)
+            {
+                JToggleButton toggleButton = (JToggleButton) getComponent(i);
+                String aux = toggleButton.getActionCommand();
+                if (aux != null)
+                  if (aux.equals(actionCommand)){
+                        toggleButton.setSelected(true);
+                      }
+            }
+        }
+
+    }
+    
+    /**
+     * Sets whether or not this toolbar should
+     * be shown by Andami. If it's false, the toolbar will be
+     * hidden even if its associated extension is visible.
+     * 
+     * @param visible
+     */
+    public void setAndamiVisibility(boolean visible) {
+    	_visible = visible;
+    }
+    
+    /**
+     * Gets whether this toolbar should
+     * be shown by Andami. If it's false, the toolbar will be
+     * hidden even if its associated extension is visible.
+     * 
+     * @return <code>true</code> if the toolbar should be shown
+     * when it has some visible button, <code>false</code> if
+     * the toolbar should be hidden even it it contains some
+     * buttons that should be visible according to its associated
+     * extension.
+     */
+    public boolean getAndamiVisibility() {
+    	return _visible;
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java	(revision 38313)
@@ -0,0 +1,75 @@
+/*
+ * Created on 05-dic-2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+/**
+ * @author root
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public interface EnableTextSupport {
+	/**
+	 * @return Returns the enableText.
+	 */
+	public abstract String getEnableText();
+
+	/**
+	 * @param enableText The enableText to set.
+	 */
+	public abstract void setEnableText(String enableText);
+
+	/**
+	 * @see java.awt.Component#setVisible(boolean)
+	 */
+	public abstract void setEnabled(boolean aFlag);
+
+	/**
+	 * @see javax.swing.JComponent#setToolTipText(java.lang.String)
+	 */
+	public abstract void setToolTip(String text);
+}
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java	(revision 38313)
@@ -0,0 +1,118 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+
+public class JToolBarButton extends javax.swing.JButton implements EnableTextSupport{
+	/**
+	 * 
+	 */
+	public JToolBarButton() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param text
+	 */
+	public JToolBarButton(String text) {
+		super(text);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param text
+	 * @param icon
+	 */
+	public JToolBarButton(String text, Icon icon) {
+		super(text, icon);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param a
+	 */
+	public JToolBarButton(Action a) {
+		super(a);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param icon
+	 */
+	public JToolBarButton(Icon icon) {
+		super(icon);
+		// TODO Auto-generated constructor stub
+	}
+	private String enableText;
+	private String toolTip;
+	
+	
+	/**
+	 * @return Returns the enableText.
+	 */
+	public String getEnableText() {
+		return enableText;
+	}
+	/**
+	 * @param enableText The enableText to set.
+	 */
+	public void setEnableText(String enableText) {
+		this.enableText = enableText;
+	}
+	
+	
+	/**
+	 * @see java.awt.Component#setVisible(boolean)
+	 */
+	public void setEnabled(boolean aFlag) {
+		super.setEnabled(aFlag);
+		if (aFlag){
+			setToolTipText(toolTip);
+		}else{
+			setToolTipText(enableText);
+		}
+	}
+	/**
+	 * @see javax.swing.JComponent#setToolTipText(java.lang.String)
+	 */
+	public void setToolTip(String text) {
+		toolTip = text;
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java	(revision 38313)
@@ -0,0 +1,143 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+
+public class JToolBarToggleButton extends javax.swing.JToggleButton implements EnableTextSupport{
+	/**
+	 * 
+	 */
+	public JToolBarToggleButton() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param text
+	 */
+	public JToolBarToggleButton(String text) {
+		super(text);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param text
+	 * @param selected
+	 */
+	public JToolBarToggleButton(String text, boolean selected) {
+		super(text, selected);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param text
+	 * @param icon
+	 */
+	public JToolBarToggleButton(String text, Icon icon) {
+		super(text, icon);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param text
+	 * @param icon
+	 * @param selected
+	 */
+	public JToolBarToggleButton(String text, Icon icon, boolean selected) {
+		super(text, icon, selected);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param a
+	 */
+	public JToolBarToggleButton(Action a) {
+		super(a);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param icon
+	 */
+	public JToolBarToggleButton(Icon icon) {
+		super(icon);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param icon
+	 * @param selected
+	 */
+	public JToolBarToggleButton(Icon icon, boolean selected) {
+		super(icon, selected);
+		// TODO Auto-generated constructor stub
+	}
+	private String enableText;
+	private String toolTip;
+	
+	
+	/**
+	 * @return Returns the enableText.
+	 */
+	public String getEnableText() {
+		return enableText;
+	}
+	/**
+	 * @param enableText The enableText to set.
+	 */
+	public void setEnableText(String enableText) {
+		this.enableText = enableText;
+	}
+	
+	
+	/**
+	 * @see java.awt.Component#setVisible(boolean)
+	 */
+	public void setEnabled(boolean aFlag) {
+		super.setEnabled(aFlag);
+		if (aFlag){
+			setToolTipText(toolTip);
+		}else{
+			setToolTipText(enableText);
+		}
+	}
+	/**
+	 * @see javax.swing.JComponent#setToolTipText(java.lang.String)
+	 */
+	public void setToolTip(String text) {
+		toolTip = text;
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/GlassPane.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/GlassPane.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/GlassPane.java	(revision 38313)
@@ -0,0 +1,70 @@
+/*
+ * Created on 22-oct-2004
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+import java.awt.Cursor;
+
+import javax.swing.JPanel;
+import javax.swing.event.MouseInputAdapter;
+
+public class GlassPane extends JPanel {
+
+	public GlassPane(){
+		this.setOpaque(false);
+		this.addMouseListener(new MouseInputAdapter(){});
+		this.addMouseMotionListener(new MouseInputAdapter(){});
+		this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+	}
+
+	/**
+	 * @see java.awt.Component#setCursor(java.awt.Cursor)
+	 */
+	public void setCursor(Cursor cursor) {
+		super.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+	}
+
+}
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/GlassPane.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JMenuItem.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JMenuItem.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JMenuItem.java	(revision 38313)
@@ -0,0 +1,126 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+
+public class JMenuItem extends javax.swing.JMenuItem implements EnableTextSupport{
+	/**
+	 * 
+	 */
+	public JMenuItem() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param text
+	 */
+	public JMenuItem(String text) {
+		super(text);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param text
+	 * @param mnemonic
+	 */
+	public JMenuItem(String text, int mnemonic) {
+		super(text, mnemonic);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param text
+	 * @param icon
+	 */
+	public JMenuItem(String text, Icon icon) {
+		super(text, icon);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param a
+	 */
+	public JMenuItem(Action a) {
+		super(a);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param icon
+	 */
+	public JMenuItem(Icon icon) {
+		super(icon);
+		// TODO Auto-generated constructor stub
+	}
+	private String enableText;
+	private String toolTip = super.getToolTipText();
+	
+	
+	/**
+	 * @return Returns the enableText.
+	 */
+	public String getEnableText() {
+		return enableText;
+	}
+	/**
+	 * @param enableText The enableText to set.
+	 */
+	public void setEnableText(String enableText) {
+		this.enableText = enableText;
+	}
+	
+	
+	/**
+	 * @see java.awt.Component#setVisible(boolean)
+	 */
+	public void setEnabled(boolean aFlag) {
+		super.setEnabled(aFlag);
+		if (aFlag){
+			setToolTipText(toolTip);
+		}else{
+			setToolTipText(enableText);
+		}
+	}
+	/**
+	 * @see javax.swing.JComponent#setToolTipText(java.lang.String)
+	 */
+	public void setToolTip(String text) {
+		toolTip = text;
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/JMenuItem.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java	(revision 38313)
@@ -0,0 +1,65 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+package org.gvsig.andami.ui.mdiFrame;
+
+import javax.swing.ButtonGroup;
+
+/**
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ */
+public class ToggleButtonModel extends javax.swing.JToggleButton.ToggleButtonModel {
+	
+	private String _groupName = null;
+
+	public ButtonGroup getGroup() {
+		return group;
+	}
+	
+	public String getGroupName() {
+		return _groupName;
+	}
+	
+	public void setGroupName(String groupName) {
+		_groupName = groupName; 
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/MainFrame.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/MainFrame.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/MainFrame.java	(revision 38313)
@@ -0,0 +1,225 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiFrame;
+
+import java.awt.event.ActionListener;
+
+import javax.swing.JComponent;
+
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.plugins.config.generate.Label;
+import org.gvsig.andami.plugins.config.generate.Menu;
+import org.gvsig.gui.beans.controls.IControl;
+
+
+
+/**
+ * This interface represents the main application's window. It allow to access
+ * the menus, the tool bars and the status bar. 
+ */
+public interface MainFrame {
+	/**
+	 * Adds the provided menu to the menu bar.
+	 *
+	 * @param menu A Menu object containing the menu definition
+	 * @param listener Object which receives the menu events
+	 * @param loader ClassLoader of the plug-in that installs this menu
+	 */
+	public void addMenu(Menu menu, ActionListener listener,
+		PluginClassLoader loader);
+
+	/**
+	 * Changes the menu name, and thus also its location, as the name determines
+	 * the location of the menu. 
+	 *
+	 * @param menu An array of Strings which represents the full menu path,
+	 * for example, {"Vista", "export", "imagen"} is a reference to the menu
+	 * "Vista/export/imagen" (that is, the menu Image within the submenu
+	 * View-Export). Menu names are translation keys, "Vista", "export", etc will
+	 * be translated to the suitable language when they are displayed.
+	 * @param newName New menu's name, in the syntax "Vista/export/symbols". Each
+	 * part of the name is a translation key.
+	 * @param loader ClassLoader of the plug-in that added the menu
+	 *
+	 * @throws NoSuchMenuException If there is no menu matching the provided
+	 * menu path
+	 */
+	public void changeMenuName(String[] menu, String newName,
+		PluginClassLoader loader) throws NoSuchMenuException;
+
+	/**
+	 * Deletes the provided menu, if found.
+	 *
+	 * @param menu The menu to delete from the menu bar
+	 */
+	public void removeMenu(Menu menu);
+
+	/**
+	 * It checks whether each extension is enabled and visible, in order to
+	 * enable/disable and show/hide their associated controls.
+	 */
+	public void enableControls();
+
+	/**
+	 * Gets the status bar, the bar located in the bottom part of the main window.
+	 * It can be used to show messages, show progress bars, or change the status.
+	 *
+	 * @return The main application's status bar.
+	 */
+	public NewStatusBar getStatusBar();
+
+	/**
+	 * Sets the main window title.
+	 *
+	 * @param titulo The title to be set in the main window
+	 */
+	public void setTitle(String titulo);
+
+    /**
+     * Gets a previously added JComponent by name (including
+     * tool bars, buttons from tool bars, status bar controls
+     * and menus. For example
+     * you can use it if you need to obtain an status bar
+     * control or a JToolBar to
+     * add some customized component
+     * @param name
+     * @return the JComponent or null if none has been found
+     */
+    public JComponent getComponentByName(String name);
+
+    /**
+     * Sets the tool associated to the provided actionComand
+     * as the selected tool for the currently selected Andami window.
+     */
+    public void setSelectedTool(String actionCommand);
+    
+    /**
+     * Gets an array containing all the toolbars.
+     * 
+     * @return An array containing all the toolbars.
+     */
+    public SelectableToolBar[] getToolbars();
+    
+    /**
+     * Gets wheter or not this toolbar should be shown by Andami.
+     * Note that this does not reflect the actual visibility
+     * of the toolbar, because it also depends on other conditions
+     * (the toolbar should contain at lest a currently visible button).
+     * 
+     * @param name The toolbar's name
+     * @return
+     */
+    public boolean getToolbarVisibility(String name);
+    
+    /**
+     * Sets wheter or not this toolbar should be shown by Andami.
+     * This is useful if to hide some toolbars when they are not
+     * going to be used.
+     * If it's false, the toolbar will be
+     * hidden even if its associated extensions are visible.
+     * Note that setting visibility to true does not automatically
+     * show the toolbar, because it also depends on other conditions
+     * (the toolbar should contain at lest a currently visible button).
+     * However, it allows the toolbar to be visible when necessary
+     * conditions are fulfilled.
+     * 
+     * @param name The toolbar's name.
+     * @param visibility
+     * @return
+     */
+    public boolean setToolbarVisibility(String name, boolean visibility);
+
+    /**
+     * Gets the menu entry corresponding the provided menu path.
+     * 
+     * @param menuPath The menu path to the menu entry that we want to
+     * retrieve. For example, if we want to retrieve the menu entry
+     * corresponding to the XML menu "Layer/Export/Export_to_PDF" we
+     * will provide an array containing ["Layer", "Export", "Export_to_PDF"].
+     * 
+     * @return The menu entry corresponding the provided menu path. Note that
+     * the menu entry may be an instance of <code>javax.swing.JMenuItem</code>,
+     * <code>javax.swing.JMenu</code> or
+     * <code>com.iver.andami.ui.mdiFrame.JMenuItem</code>.
+     */
+    public javax.swing.JMenuItem getMenuEntry(String[] menuPath);
+    
+	/**
+	 * Adds a control to the status bar and associate it with the
+	 * provided extension. The control will be enabled and visible
+	 * when the extension is enabled and visible.
+	 * 
+	 * @param extensionClass Extension which will determine whether the
+	 * control is enabled and visible.
+	 * @param control The control to add.
+	 */
+	public void addStatusBarControl(Class extensionClass, IControl control);
+	
+	/**
+	 * Removes the providedcontrol from the status bar.
+	 * 
+	 * @param name The name of the control to remove
+	 */
+	public void removeStatusBarControl(String name);
+	
+	/**
+	 * Sets the provided label-set as the labels associated with the provided
+	 * class. The labels will be visible in the status bar if the
+	 * currently selected Andami window is an instance of the provided
+	 * class.
+	 * 
+	 * @param clase The class which will be associated to the label-set. The
+	 * labels will be visible if the currently selected Andami window is an
+	 * instance of this class.
+	 * 
+	 * @param label An array of Labels. Each label has an ID which will be
+	 * used to write text on them.
+	 */
+	public void setStatusBarLabels(Class clase, Label[] label);
+
+	/**
+	 * Removes the labels associated with the provided class.
+	 * 
+	 * @param clase The class whose associated labels are to be removed.
+	 */
+	public void removeStatusBarLabels(Class clase);
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiFrame/MainFrame.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIUtilities.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIUtilities.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIUtilities.java	(revision 38313)
@@ -0,0 +1,54 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * 
+ */
+public class MDIUtilities {
+public static void checkWindowInfo(WindowInfo vi){
+    if ((vi.isModal()) && (!vi.isVisible())) {
+        throw new RuntimeException("A modal dialog cannot be visible=false");
+    }
+
+
+}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIUtilities.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindowListener.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindowListener.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindowListener.java	(revision 38313)
@@ -0,0 +1,58 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+
+/**
+ * Interface which should be implemented by those windows which want to
+ * be listeners of events produced on themselves.
+ */
+public interface IWindowListener {
+	/**
+     * This method it is invoked when the window is activated.
+     */
+    public void windowActivated();
+
+    /**
+     * This method it is invoked when the window is closed
+     */
+    public void windowClosed();
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindowListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/SingletonWindow.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/SingletonWindow.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/SingletonWindow.java	(revision 38313)
@@ -0,0 +1,75 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * <p>Interface which should be implemented by those windows
+ * which have an identity in the application. Each
+ * SingletonWindow has an associated model, which identifies
+ * the window, and thus it is not possible to create two
+ * SingletonWindow with the same model.</p>
+ * 
+ * <p>For example,
+ * if a window contains a text file, maybe it is not suitable to open
+ * two windows to edit the same file. To accomplish this, the edit
+ * window should implement this interface, and the model associated
+ * with the window will be the path to the text file. Then, if the user
+ * tries to open an already open file, the existing window containing
+ * the file will be shown to the user, instead of opening a new one.</p>
+ *
+ * <p>When opening a new SingletonWindow, the framework works in the
+ * following way: all the already open SingletonWindow are searched to try
+ * to find a window which has the same model as the new one. If such window
+ * is found, it is sent to the foreground and no new window is opened;
+ * otherwise, the new window is shown.
+ * </p>  
+ *
+ * @author Fernando González Cortés
+ */
+public interface SingletonWindow extends IWindow {
+    /**
+     * Gets the window model, the identity, the object which will be used
+     * to identify te window.
+     *
+     * @return Object
+     */
+    public Object getWindowModel();
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/SingletonWindow.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindowTransform.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindowTransform.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindowTransform.java	(revision 38313)
@@ -0,0 +1,26 @@
+
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * Interface to transform a standard view to a view palette.
+ *
+ * @author Vicente Caballero Navarro
+*/
+public interface IWindowTransform {
+    /**
+     * Transform to view palette.
+     */
+    public void toPalette();
+
+    /**
+     * Restore to standard view
+     */
+    public void restore();
+
+    /**
+     * Returns if the view is palette type or standard
+     *
+     * @return boolean
+     */
+    public boolean isPalette();
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindowTransform.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java	(revision 38313)
@@ -0,0 +1,115 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+import org.apache.log4j.Logger;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.plugins.config.generate.SkinExtension;
+
+
+
+/**
+ * Se encarga de la creación de la clase Skin.
+ *
+ * @author Fernando González Cortés
+ */
+public class MDIManagerFactory {
+    private static SkinExtension skinExtension = null;
+    private static PluginClassLoader loader = null;
+    private static MDIManager mdiManager = null;
+    private static Logger logger = Logger.getLogger(MDIManagerFactory.class.getName());
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param extension DOCUMENT ME!
+     * @param loader DOCUMENT ME!
+     */
+    public static void setSkinExtension(SkinExtension extension,
+        PluginClassLoader loader) {
+        MDIManagerFactory.loader = loader;
+        MDIManagerFactory.skinExtension = extension;
+    }
+
+    /**
+     * Obtiene una referencia al Skin cargado. El skin cargado es un singleton, se
+     * devuelve la misma instancia a todas las invocaciones de éste método
+     *
+     * @return referencia al skin cargado
+     */
+    public static MDIManager createManager() {
+    	if (mdiManager != null) return mdiManager;
+    	
+        if (skinExtension == null) {
+        	throw new NoSkinExtensionException(Messages.getString("MDIManagerFactory.No_skin_extension_in_the_plugins"));
+        } else {
+            try {
+                mdiManager = (MDIManager) loader.loadClass(skinExtension.getClassName())
+                                          .newInstance();
+                return mdiManager;
+            } catch (InstantiationException e) {
+                logger.error(Messages.getString("Launcher.Error_instanciando_la_extension"), e);
+
+                //                return new NewSkin();
+            } catch (IllegalAccessException e) {
+                logger.error(Messages.getString("Launcher.Error_instanciando_la_extension"), e);
+
+                //                return new NewSkin();
+            } catch (ClassNotFoundException e) {
+                logger.error(Messages.getString("Launcher.No_se_encontro_la_clase_de_la_extension"), e);
+
+                //                return new NewSkin();
+            }
+        }
+        
+        return null;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return Returns the skinExtension.
+     */
+    public static SkinExtension getSkinExtension() {
+        return skinExtension;
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java	(revision 38313)
@@ -0,0 +1,77 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * 
+ */
+public class NoSkinExtensionException extends RuntimeException {
+
+	/**
+	 * 
+	 */
+	public NoSkinExtensionException() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param message
+	 */
+	public NoSkinExtensionException(String message) {
+		super(message);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param message
+	 * @param cause
+	 */
+	public NoSkinExtensionException(String message, Throwable cause) {
+		super(message, cause);
+		// TODO Auto-generated constructor stub
+	}
+	/**
+	 * @param cause
+	 */
+	public NoSkinExtensionException(Throwable cause) {
+		super(cause);
+		// TODO Auto-generated constructor stub
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindow.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindow.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindow.java	(revision 38313)
@@ -0,0 +1,75 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * The IWindow interface should be implemented by any panel which is
+ * intended to be an Andami window. The JPanel implementing IWindow
+ * will be the contents of the window, and the frame containing it
+ * will be created by Andami.
+ *
+ * @see MDIManager
+ * @see WindowInfo
+ * @see SingletonWindow
+ * @see IWindowListener
+ * 
+ * @author Fernando González Cortés
+ */
+public interface IWindow {
+    /**
+     * <p>Gets the initial window properties. It must be called just once
+     * from the framework. To get the current WindowInfo from this
+     * window, use
+     * <code>PluginServices.getMDIManager.getWindowInfo(window);</code></p>
+     *
+     * @return A WindowInfo object, containing the properties that
+     * this window should have when created
+     */
+    public WindowInfo getWindowInfo();
+    
+    
+    /**
+     * <p>Gets the profile for this window
+     *
+     * @return An object with the profile.
+     */
+    public Object getWindowProfile();
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/IWindow.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java	(revision 38313)
@@ -0,0 +1,53 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+/**
+ * Excepción lanzada cuando un Dialogo modal intenta
+ * mostrar una vista singleton que ya ha sido mostrada. Esto
+ * obligaría a traerla al frente y debido a que el que
+ * intenta la acción es un diálogo modal, se aborta mediante
+ * esta excepción.
+ *
+ * @author Fernando González Cortés
+ */
+public class SingletonDialogAlreadyShownException extends RuntimeException {
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/WindowInfo.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/WindowInfo.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/WindowInfo.java	(revision 38313)
@@ -0,0 +1,1259 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.exolab.castor.xml.XMLException;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+import org.gvsig.utils.XMLEntity;
+
+
+
+/**
+ * This class represents the state of the associated window.
+ * The <code>set</code> methods (<code>setX</code>, <code>setY</code>,
+ * <code>setHeight</code>, etc) are immediately reflected on the
+ * window.
+ *
+ * The <code>update</code> methods doesn't update the window, because
+ * they are used to update the WindowInfo object when the associated
+ * window was modified by user interaction.
+ *
+ * @author Fernando González Cortés
+ */
+public class WindowInfo implements Persistent{
+	
+	public static final String PERSISTENCE_DEFINITION_NAME = "WindowInfo";
+
+	/** Specifies that the window is resizable  */
+    public static final int RESIZABLE = 1;
+
+    /** Specifies that the window is maximizable */
+    public static final int MAXIMIZABLE = 2;
+
+    /** Specifies that the window is iconifiable */
+    public static final int ICONIFIABLE = 4;
+
+    /** Specifies that the window is modal */
+    public static final int MODALDIALOG = 8;
+    /** Specifies that the window is modeless (it's on the top but doesn't block any other window) */
+    public static final int MODELESSDIALOG = 16;
+    /** Specifies that the window may be docked inside another window */
+    public static final int PALETTE = 32;
+    /** Specifies that the window may be closed */
+    public static final int NOTCLOSABLE = 64;
+
+
+    /** Specifies that this window has an editor profile */
+    public static final Integer EDITOR_PROFILE = new Integer(1);
+    /** Specifies that this window has an editor profile */
+    public static final Integer TOOL_PROFILE = new Integer(2);
+    /** Specifies that this window has an editor profile */
+    public static final Integer PROJECT_PROFILE = new Integer(3);
+    /** Specifies that this window has an editor profile */
+    public static final Integer PROPERTIES_PROFILE = new Integer(4);
+    /** Specifies that this window has an editor profile */
+    public static final Integer DIALOG_PROFILE = new Integer(5);
+
+    private PropertyChangeSupport support = new PropertyChangeSupport(this);
+
+    /** DOCUMENT ME! */
+    private boolean resizable = false;
+
+    /** DOCUMENT ME! */
+    private boolean maximizable = false;
+
+    /** DOCUMENT ME! */
+    private boolean iconifiable = false;
+
+    /** DOCUMENT ME! */
+    private boolean modal = false;
+    private boolean modeless = false;
+    private boolean notclosable = false;
+    
+    /**
+     * Do we want to persist the geometry of this window in the project file?
+     */
+    private boolean persistWindow = true;
+
+    /**
+     * Se usa para poner una ventana de tipo paleta, por
+     * encima de las demás. Equivale a poner usar
+     * JDesktopPane.PALETTE_LAYER
+     */
+    private boolean palette = false;
+
+    private String additionalInfo = null;
+
+    /** These properties store the dimension and position of the frame */
+    private int width = -1;
+    private int height = -1;
+    private int x = -1;
+    private int y = -1;
+    /**
+     * These properties store the position and dimension of the frame when it is not maximized
+     * (so that it can be restored to its original size). They are equal to the not-normal properties
+     * when the frame is not maximized, and different when the frame is maximized.
+     */
+    private int normalX = 0;
+    private int normalY = 0;
+    private int normalHeight = -1;
+    private int normalWidth = -1;
+
+    /** The minimum allowed size for this window. */
+    private Dimension minSize = null;
+
+    /* Whether the window is maximized */
+    private boolean isMaximized = false;
+    private boolean visible = true;
+    /* Whether the window is closed */
+    private boolean isClosed = false;
+
+
+    /** DOCUMENT ME! */
+    private String title;
+
+    private int id;
+
+    /**
+     * ActionCommand del tool seleccionado. Lo usamos
+     * para activar el tool que estaba seleccionado en
+     * la vista, cuando volvemos a ella.
+     */
+    @SuppressWarnings("rawtypes")
+	private Map selectedTools = null;
+    // this should be the same value defined at plugin-config.xsd
+    private String defaultGroup = "unico";
+
+    /**
+     * Adds a PropertyChangeListener to the listener list. The listener will be
+     * notified about changes in this object.
+     *
+     * @param listener
+     */
+    public void addPropertyChangeListener(PropertyChangeListener listener) {
+        support.addPropertyChangeListener(listener);
+    }
+
+    /**
+     * Remove a PropertyChangeListener from the listener list. The listener will
+     * not be notified anymore about changes in this object.
+     *
+     * @param listener
+     */
+    public void removePropertyChangeListener(PropertyChangeListener listener) {
+        support.removePropertyChangeListener(listener);
+    }
+
+    /**
+     * Creates a new WindowInfo object with the provided properties.
+     * Valid properties include:
+     * <ul>
+     * <li>WindowInfo.MODALDIALOG</li>
+     * <li>WindowInfo.MODELESSDIALOG</li>
+     * <li>WindowInfo.PALETTE</li>
+     * <li>WindowInfo.ICONIFIABLE</li>
+     * <li>WindowInfo.RESIZABLE</li>
+     * <li>WindowInfo.MAXIMIZABLE</li>
+     *
+     * <p>Properties can be set together by using the binary OR operator
+     * "<b>|</b>". For example:</p>
+     *
+     * <p><code>WindowInfo wi = new WindowInfo(WindowInfo.MODELESSDIALOG
+     *   |WindowInfo.ICONIFIABLE|WindowInfo.RESIZABLE).</code></p>
+     *
+     * <p>The WindowInfo.MODELESSDIALOG and WindowInfo.MODALDIALOG properties
+     * cannot be set at the same time</p>
+     *
+     * @param code Bit-or of the window properties.
+     *
+     * @throws IllegalStateException If incompatible properties are set together,
+     * for example, if MODALDIALOG and MODELESSDIALGO are set together.
+     */
+    public WindowInfo(int code) {
+        resizable = (code % 2) > 0;
+        code = code / 2;
+        maximizable = (code % 2) > 0;
+        code = code / 2;
+        iconifiable = (code % 2) > 0;
+        code = code / 2;
+        modal = (code % 2) > 0;
+        code = code / 2;
+        modeless = (code % 2) > 0;
+        code = code / 2;
+        palette = (code % 2) > 0;
+        code = code / 2;
+        notclosable = (code % 2) > 0;
+
+        if (modal && modeless) {
+            throw new IllegalStateException("modal && modeless");
+        }
+    }
+
+    /**
+     * Creates a new WindowInfo object with the default properties:
+     * <ul>
+     * <li>not resizable</li>
+     * <li>not maximizable</li>
+     * <li>not iconifiable</li>
+     * <li>not modal</li>
+     * <li>not modeless</li>
+     * <li>not palette</li>
+     * </uil>
+     *
+     */
+    public WindowInfo(){
+
+    }
+
+    /**
+     * Returns the current x coordinate of the window's origin
+     * (left-upper corner of the window).
+     *
+     * @return Returns the value (in pixels) of the x coordinate
+     * of the window's origin.
+     */
+    public int getX() {
+        return x;
+    }
+
+    /**
+     * Sets the x coordinate of the window's origin
+     * (left-upper corner of the window).
+     *
+     * @param x	The value (in pixels) of the x coordinate to set.
+     */
+    public void setX(int x) {
+    	support.firePropertyChange("x", this.x, x);
+    	this.x = x;
+    	if (!isMaximized)
+    		this.normalX = x;
+    }
+
+    /**
+     * Updates the value of the x coordinate for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * setX for that).
+     *
+     * @param x The value (in pixels) of the x coordinate
+     */
+    public void updateX(int x) {
+    	this.x = x;
+    	if (!isMaximized)
+    		this.normalX = x;
+    }
+
+    /**
+     * Gets the value of the y coordinate for the origin
+     * (left-upper corner of the window) of the associated
+     * window.
+     *
+     * @return Returns the y coordinate (in pixels).
+     */
+    public int getY() {
+        return y;
+    }
+
+    /**
+     * Sets the value of the y coordinate for the origin
+     * (left-upper corner of the window) of the associated
+     * window.
+     *
+     * @param y The value (in pixels) of the y coordinate
+     */
+    public void setY(int y) {
+    	support.firePropertyChange("y", this.y, y);
+        this.y = y;
+        if (!isMaximized)
+        	this.normalY = y;
+    }
+
+    /**
+     * Updates the value of the y coordinate for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * setY for that).
+     *
+     * @param y The value (in pixels) of the y coordinate
+     */
+    public void updateY(int y) {
+    	this.y = y;
+    	if (!isMaximized)
+    		this.normalY = y;
+    }
+
+    /**
+     * Determines whether the associated window is iconifiable or not
+     *
+     * @return
+     */
+    public boolean isIconifiable() {
+        return iconifiable;
+    }
+
+    /**
+     * Determines whether the associated window is maximizable or not
+     *
+     * @return
+     */
+    public boolean isMaximizable() {
+        return maximizable;
+    }
+
+    /**
+     * Determines whether the associated window is resizable or not
+     *
+     * @return
+     */
+    public boolean isResizable() {
+        return resizable;
+    }
+
+    /**
+     * Determines whether the associated window is modal or not
+     *
+     * @return
+     */
+    public boolean isModal() {
+        return modal;
+    }
+
+    /**
+     * Gets the window height.
+     *
+     * @return The window height (in pixels).
+     */
+    public int getHeight() {
+        return height;
+    }
+
+    /**
+     * Gets the window width.
+     *
+     * @return The window width (in pixels).
+     */
+    public int getWidth() {
+        return width;
+    }
+
+    /**
+     * Sets the window height.
+     *
+     * @param The window height (in pixels)
+     */
+    public void setHeight(int height) {
+    	if (height!=-1)
+    		support.firePropertyChange("height", this.height, height);
+    	this.height = height;
+        if (!isMaximized)
+        	this.normalHeight = height;
+    }
+
+    /**
+     * Updates the height property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setHeight</code> for that).
+     *
+     * @param height The height value for this WindowInfo object
+     */
+    public void updateHeight(int height) {
+    	this.height = height;
+        if (!isMaximized)
+        	this.normalHeight = height;
+    }
+
+    /**
+     * Sets the width property for the associated Window.
+     *
+     * @param w The new width.
+     */
+    public void setWidth(int w) {
+    	if (w!=-1)
+    		support.firePropertyChange("width", this.width, w);
+        width = w;
+        if (!isMaximized)
+        	this.normalWidth = w;
+    }
+
+    /**
+     * Updates the width property for for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setWidth</code> for that).
+     *
+     * @param height The height value for this WindowInfo object
+     */
+    public void updateWidth(int width) {
+    	this.width = width;
+        if (!isMaximized)
+        	this.normalWidth = width;
+    }
+
+    /**
+     * Gets the title property
+     *
+     * @return
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * Sets the title property.
+     *
+     * @param title The new title.
+     */
+    public void setTitle(String title) {
+    	support.firePropertyChange("title", this.title, title);
+        this.title = title;
+    }
+
+    /**
+     * Updates the title property for for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setTitle</code> for that).
+     *
+     * @param title The title value for this WindowInfo object
+     */
+    public void updateTitle(String title) {
+    	this.title = title;
+    }
+
+    /**
+     * Determines whether the associated window is modeless
+     * (it is on the top but does not block any other window)
+     *
+     * @return
+     */
+    public boolean isModeless() {
+        return modeless;
+    }
+    
+    /**
+     * Determines whether the associated window is closable or not
+     *
+     * @return
+     */
+    public boolean isNotClosable() {
+        return notclosable;
+    }
+    
+    /**
+     * Sets notclosable property 
+     *
+     * @return
+     */
+    public void setNotClosable(boolean b) {
+        notclosable = b;
+    }
+
+     /**
+      * Determines whether the associated window is visible
+      *
+      * @return true if the associated window is visible, false
+      * if it is hidden
+      */
+    public boolean isVisible() {
+        return visible;
+    }
+
+    /**
+     * Determines whether the associated dockable window is
+     * currently in palette status or docked.
+     *
+     * @return true if the window is currently in palette status,
+     * false if it is docked in another window
+     */
+    public boolean isPalette()
+    {
+        return palette;
+    }
+
+    /**
+     * Sets the window's ID.
+     *
+     * @param id An integer to identify the window. Different
+     * windows must have different IDs.
+     */
+    public void setId(int id){
+    	this.id = id;
+    }
+
+    /**
+     * Gets the window ID.
+     *
+     * @return id An integer to identify the window. Different
+     * windows must have different IDs.
+     */
+    public int getId(){
+    	return id;
+    }
+
+    /**
+     * Updates all the properties in this object so that
+     * they match the properties of the provided
+     * <code>wi</code> object. The changes are not reflected on the
+     * window, just the WindowInfo object is updated.
+     *
+     * @param vi A WindowInfo object containing the new
+     * properties of the window.
+     */
+    public void setWindowInfo(WindowInfo vi){
+    	this.resizable = vi.resizable;
+    	this.maximizable = vi.maximizable;
+    	this.isMaximized = vi.isMaximized;
+    	this.iconifiable = vi.iconifiable;
+    	this.additionalInfo = vi.additionalInfo;
+    	this.modal = vi.modal;
+    	this.modeless = vi.modeless;
+    	this.notclosable = vi.notclosable;
+    	if (vi.width!=-1)
+    		this.width = vi.width;
+    	if (vi.height!=-1)
+    		this.height = vi.height;
+    	this.x = vi.x;
+    	this.y = vi.y;
+    	this.visible = vi.visible;
+    	this.title = vi.title;
+    	this.id = vi.id;
+    	if (vi.normalHeight!=-1)
+    		this.normalHeight = vi.normalHeight;
+    	if (vi.normalWidth!=-1)
+    		this.normalWidth = vi.normalWidth;
+    	this.normalX = vi.normalX;
+    	this.normalY = vi.normalY;
+    	this.isClosed = vi.isClosed;
+    	this.persistWindow = vi.persistWindow;
+    }
+
+    /**
+     * Sets whether the window is in palette mode or is in docked mode.
+     * This method <b>does not</b> update the window status, it just
+     * updates the WindowInfo object. Use the IWindowTransform interface
+     * to actually change the window status.
+     *
+     * @param b
+     */
+    public void toPalette(boolean b){
+    	this.palette=b;
+    }
+
+    /**
+     * Gets the list of selected tools for this window.
+     *
+     * @return A HashMap containing pairs (group, actionCommand), which
+     * are the selected tools for this window.
+     */
+    @SuppressWarnings("rawtypes")
+	public Map getSelectedTools() {
+        return selectedTools;
+    }
+
+    /**
+     * Use {@link setSelectedTools(HashMap selectedTool)}
+     *
+     * @param selectedTool
+     * @deprecated
+     */
+    @SuppressWarnings("unchecked")
+	public void setSelectedTool(String selectedTool) {
+        if (selectedTool != null)
+            selectedTools.put(defaultGroup ,selectedTool);
+    }
+
+    /**
+     * Sets the list of selected tools for this window.
+
+     * @param selectedTools  A HashMap containing pairs
+     * (group, actionCommand), which will be set as the selected tools
+     * for this window.
+     */
+    @SuppressWarnings("rawtypes")
+	public void setSelectedTools(Map selectedTools) {
+        if (selectedTools != null)
+            this.selectedTools = selectedTools;
+    }
+
+    /** Finds out whether a view is open (showing) or closed */
+    public boolean isClosed() {
+    	return isClosed;
+    }
+    
+    /** Specifies whether a view is open (showing) or closed */
+    public void setClosed(boolean closed) {
+    	support.firePropertyChange("closed", this.isClosed, closed);
+    	this.isClosed = closed;
+    }
+
+    /**
+     * Updates the closed property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setClosed</code> for that).
+     *
+     * @param closed The new closed property for this WindowInfo object
+     */
+    public void updateClosed(boolean closed) {
+    	this.isClosed = closed;
+    }
+
+    /**
+     * Sets the normalX property for this WindowInfo object. This sets the X
+     * position that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalX The new normalX property for this WindowInfo object
+     */
+    public void setNormalX(int normalX) {
+    	if (!isMaximized()) {
+    		setX(normalX);
+    	}
+    	else {
+    		support.firePropertyChange("normalX", this.normalX, normalX);
+    		this.normalX = normalX;
+    	}
+    }
+
+    /**
+     * Updates the normalX property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setNormalX</code> for that).
+     *
+     * @param normalX The new normalX property for this WindowInfo object
+     */
+    public void updateNormalX(int normalX) {
+    	this.normalX = normalX;
+    	if (!isMaximized())
+    		x = normalX;
+    }
+
+    /**
+     * Sets the normalY property for this WindowInfo object. This sets the Y
+     * position that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalY The new normalY property for this WindowInfo object
+     */
+    public void setNormalY(int normalY) {
+    	if (!isMaximized()) {
+    		setY(normalY);
+    	}
+    	else {
+    		support.firePropertyChange("normalY", this.normalY, normalY);
+    		this.normalY = normalY;
+    	}
+    }
+
+    /**
+     * Updates the normalY property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setNormalY</code> for that).
+     *
+     * @param normalY The new normalY property for this WindowInfo object
+     */
+    public void updateNormalY(int normalY) {
+    	this.normalY = normalY;
+    	if (!isMaximized())
+    		y = normalY;
+    }
+
+    /**
+     * Sets the normalHeight property for this WindowInfo object. This sets the height
+     * position that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalY The new normalHeight property for this WindowInfo object
+     */
+    public void setNormalHeight(int normalHeight) {
+    	if (!isMaximized) {
+    		setHeight(normalHeight);
+    	}
+    	else {
+    		support.firePropertyChange("normalHeight", this.normalHeight, normalHeight);
+    		this.normalHeight = normalHeight;
+    	}
+    }
+
+    /**
+     * Updates the normalHeight property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setNormalHeight</code> for that).
+     *
+     * @param normalHeight The new normalHeight property for this WindowInfo object
+     */
+    public void updateNormalHeight(int normalHeight) {
+    	this.normalHeight = normalHeight;
+    	if (!isMaximized) {
+    		this.height = normalHeight;
+    	}
+    }
+
+    /**
+     * Sets the normalWidth property for this WindowInfo object. This sets the width
+     * position that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalY The new normalWidth property for this WindowInfo object
+     */
+    public void setNormalWidth(int normalWidth) {
+    	if (!isMaximized()) {
+    		setWidth(normalWidth);
+    	}
+    	else {
+    		support.firePropertyChange("normalWidth", this.normalWidth, normalWidth);
+    		this.normalWidth = normalWidth;
+    	}
+    }
+
+    /**
+     * Sets the minimum allowed size for the associated window. If null is provided,
+     * the minimum size is disabled (and thus
+     * the window can be resized to any size).
+     *
+     * @param minSize The minimum allowed size for the associated window.
+     */
+    public void setMinimumSize(Dimension minSize) {
+    	support.firePropertyChange("minimumSize", this.minSize, minSize);
+    	this.minSize = minSize;
+    }
+
+    /**
+     * Updates the minimum allowed size for the associated window. It doesn't
+     * get reflected on the window (use <code>setMinimumSize</code> for that).
+     *
+     * @param minSize The minimum allowed size for the associated window.
+     */
+    public void updateMinimumSize(Dimension minSize) {
+    	this.minSize = minSize;
+    }
+
+    /**
+     * Gets the minimum allowed size for the associated window.
+     *
+     * @return minSize The minimum allowed size for the associated window.
+     */
+    public Dimension getMinimumSize() {
+    	return minSize;
+    }
+
+    /**
+     * Updates the normalWidth property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setNormalWidth</code> for that).
+     *
+     * @param normalWidth The new normalHeight property for this WindowInfo object
+     */
+    public void updateNormalWidth(int normalWidth) {
+    	this.normalWidth = normalWidth;
+    	if (!isMaximized())
+    		this.width = normalWidth;
+    }
+
+    /**
+     * Maximize the associated window
+     *
+     * @param maximized
+     */
+    public void setMaximized(boolean maximized) {
+    	support.firePropertyChange("maximized", this.isMaximized, maximized);
+    	this.isMaximized = maximized;
+    }
+
+    /**
+     * Updates the maximized property for this WindowInfo
+     * object. It doesn't get reflected on the window (use
+     * <code>setMaximized</code> for that).
+     *
+     * @param maximized The new maximized property for this WindowInfo object
+     */
+    public void updateMaximized(boolean maximized) {
+    	this.isMaximized = maximized;
+    }
+
+    public void setMaximizable(boolean maximizable) {
+    	this.maximizable = maximizable;
+    }
+
+    /**
+     * Sets the bounds of the associated window.
+     *
+     * @param x
+     * @param y
+     * @param width
+     * @param height
+     */
+    private void setBounds(int x, int y, int width, int height) {
+    	setX(x);
+    	setY(y);
+    	setWidth(width);
+    	setHeight(height);
+    }
+
+    /**
+     * Updates the bounds for this WindowInfo object. It doesn't get reflected
+     * on the window (use <code>setBounds</code> for that).
+     *
+     * @param x
+     * @param y
+     * @param width
+     * @param height
+     */
+    public void updateBounds(int x, int y, int width, int height) {
+    	this.x = x;
+    	this.y = y;
+    	this.width = width;
+    	this.height = height;
+    	if (!isMaximized()) {
+    		this.normalX = x;
+    		this.normalY = y;
+    		this.normalWidth = width;
+    		this.normalHeight = height;
+    	}
+    }
+
+    /**
+     * Sets the normal bounds of the associated window. This sets the bounds
+     * that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param x
+     * @param y
+     * @param width
+     * @param height
+     */
+    public void setNormalBounds(int x, int y, int width, int height) {
+    	setNormalX(x);
+    	setNormalY(y);
+    	setNormalWidth(width);
+    	setNormalHeight(height);
+    }
+
+    /**
+     * Updates the normal bounds for this WindowInfo object. It doesn't get
+     * reflected on the window (use <code>setNormalBounds</code> for that).
+     *
+     * @param x
+     * @param y
+     * @param width
+     * @param height
+     */
+    public void updateNormalBounds(int x, int y, int width, int height) {
+		this.normalX = x;
+		this.normalY = y;
+		this.normalWidth = width;
+		this.normalHeight = height;
+    	if (!isMaximized()) {
+        	this.x = x;
+        	this.y = y;
+        	this.width = width;
+        	this.height = height;
+    	}
+    }
+
+    /**
+     * Gets the normal bounds of the associated window. This gets the bounds
+     * that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @return The normal bounds of the associated window.
+     */
+    public Rectangle getNormalBounds() {
+    	return new Rectangle(getNormalX(), getNormalY(), getNormalWidth(), getNormalHeight());
+    }
+
+    /**
+     * Sets the normal bounds of the associated window. This sets the bounds
+     * that the window would have when it gets restored from the
+     * maximized state.
+     *
+     * @param normalBounds
+     */
+    public void setNormalBounds(Rectangle normalBounds) {
+    	setNormalBounds(normalBounds.x, normalBounds.y, normalBounds.width, normalBounds.height);
+    }
+
+    /**
+     * Updates the normal bounds for this WindowInfo object. It doesn't get
+     * reflected on the window (use <code>setNormalBounds</code> for that).
+     *
+     * @param normalBounds
+     */
+    public void updateNormalBounds(Rectangle normalBounds) {
+    	updateNormalBounds(normalBounds.x, normalBounds.y, normalBounds.width, normalBounds.height);
+    }
+
+    /**
+     * Sets the bounds of the associated window.
+     *
+     * @param bounds
+     */
+    public void setBounds(Rectangle bounds) {
+    	setBounds(bounds.x, bounds.y, bounds.width, bounds.height);
+    }
+
+    /**
+     * Updates the bounds for this WindowInfo object. It doesn't get reflected
+     * on the window (use <code>setBounds</code> for that).
+     *
+     * @param bounds
+     */
+    public void updateBounds(Rectangle bounds) {
+    	updateBounds(bounds.x, bounds.y, bounds.width, bounds.height);
+    }
+
+    /**
+     * Gets the bounds of the associated window.
+     *
+     * @return The bounds of the associated window.
+     */
+    public Rectangle getBounds() {
+    	return new Rectangle(x, y, width, height);
+    }
+
+    public int getNormalX() {
+    	if (normalX!=0)
+    		return this.normalX;
+    	else
+    		return x;
+    }
+
+    /**
+     * Gets the x coordinate of the window's origin when the window is not
+     * maximized. When the window is maximized, gets the y coordinate that
+     * it will have when it gets restored
+     *
+     * @return the normal y coordinate of the window's origin
+     */
+    public int getNormalY() {
+    	if (normalY!=0)
+    		return this.normalY;
+    	else
+    		return y;
+    }
+
+    /**
+     * Gets the height of the window's origin when the window is not
+     * maximized. When the window is maximized, gets the height that
+     * it will have when it gets restored
+     *
+     * @return the normal height of the window
+     */
+    public int getNormalHeight() {
+    	if (normalHeight!=0)
+    		return this.normalHeight;
+    	else
+    		return height;
+    }
+
+    /**
+     * Gets the width of the window's origin when the window is not
+     * maximized. When the window is maximized, gets the width that
+     * it will have when it gets restored
+     *
+     * @return the normal width of the window
+     */
+    public int getNormalWidth() {
+    	if (normalWidth!=0)
+    		return this.normalWidth;
+    	else
+    		return width;
+    }
+
+    /**
+     * Determines whether the window is maximized or not
+     *
+     * @return true if the window is maximized, false otherwise
+     */
+    public boolean isMaximized() {
+    	return this.isMaximized;
+    }
+
+    /**
+     * Checks if the geometry of this window should be persisted in the
+     * project file. This is set by the persistWindow(boolean) method,
+     * and the default value is true.
+     *
+     * @return True if the geometry of this window should be persisted
+     * in the project files, false otherwise.
+     */
+    public boolean checkPersistence() {
+    	return this.persistWindow;
+    }
+
+    /**
+     * Set whether the geometry of this window should be persisted in the
+     * project files.
+     *
+     * @param persist
+     */
+    public void setPersistence(boolean persist) {
+    	this.persistWindow = persist;
+    }
+
+    /**
+	 * Gets the window properties in an XMLEntity object, suitable
+	 * for persistence.
+	 *
+	 * @return An XMLEntity object containing the window properties,
+	 * or null if the window was set as not persistent
+     * @throws SaveException
+	 * @throws XMLException
+	 */
+	public XMLEntity getXMLEntity() {
+		if (checkPersistence()==false) {
+			return null;
+		}
+		XMLEntity xml = new XMLEntity();
+		xml.setName("ViewInfoProperties");
+		xml.putProperty("X", this.getX(), false);
+		xml.putProperty("Y", this.getY(), false);
+		xml.putProperty("Width", this.getWidth(), false);
+		xml.putProperty("Height", this.getHeight(), false);
+		xml.putProperty("isVisible", this.isVisible(), false);
+		xml.putProperty("isResizable", this.isResizable(), false);
+		xml.putProperty("isMaximizable", this.isMaximizable(), false);
+		xml.putProperty("isModal", this.isModal(), false);
+		xml.putProperty("isModeless", this.isModeless(), false);
+		xml.putProperty("isClosed", this.isClosed(), false);
+		xml.putProperty("AdditionalInfo", this.getAdditionalInfo(), false);
+		xml.putProperty("isNotClosable", this.isNotClosable(), false);
+		if (this.isMaximized()==true) {
+			xml.putProperty("isMaximized", this.isMaximized(), false);
+			xml.putProperty("normalX", this.getNormalX(), false);
+			xml.putProperty("normalY", this.getNormalY(), false);
+			xml.putProperty("normalWidth", this.getNormalWidth(), false);
+			xml.putProperty("normalHeight", this.getNormalHeight(), false);
+		}
+		return xml;
+	}
+
+	/**
+	 * Creates a WindowInfo object from an XMLEntity containing the
+	 * window properties.
+	 *
+	 * @param xml An XMLEntity object containing the window properties
+	 *
+	 * @return A new WindowInfo object, containing the properties
+	 * specified in the XMLEntity parameters
+	 */
+	public static WindowInfo createFromXMLEntity(XMLEntity xml)
+	{
+		WindowInfo result = new WindowInfo();
+		try {
+			result.setX(xml.getIntProperty("X"));
+			result.setY(xml.getIntProperty("Y"));
+			result.setHeight(xml.getIntProperty("Height"));
+			result.setWidth(xml.getIntProperty("Width"));
+			result.setClosed(xml.getBooleanProperty("isClosed"));
+			result.setAdditionalInfo(xml.getStringProperty("AdditionalInfo"));
+			result.setNotClosable(xml.getBooleanProperty("isNotClosable"));
+			if (xml.contains("isMaximized")) {
+				boolean maximized = xml.getBooleanProperty("isMaximized");
+				result.setMaximized(maximized);
+				if (maximized==true) {
+					result.setNormalBounds(xml.getIntProperty("normalX"), xml.getIntProperty("normalY"), xml.getIntProperty("normalWidth"), xml.getIntProperty("normalHeight"));
+				}
+				else {
+					result.setNormalBounds(result.getBounds());
+				}
+			}
+		}
+		catch (org.gvsig.utils.NotExistInXMLEntity ex) {
+			PluginServices.getLogger().warn(PluginServices.getText(null, "Window_properties_not_stored_correctly_Window_state_will_not_be_restored"));
+		}
+
+		return result;
+	}
+
+	/**
+	 * Updates this WindowInfo object according to the properties
+	 * provided by the XMLEntity parameter.
+	 *
+	 * @param xml An XMLEntity object containing the window properties
+	 */
+	public void getPropertiesFromXMLEntity(XMLEntity xml)
+	{
+		this.x = xml.getIntProperty("X");
+		this.y = xml.getIntProperty("Y");
+		this.height = xml.getIntProperty("Height");
+		this.width = xml.getIntProperty("Width");
+		this.isClosed = xml.getBooleanProperty("isClosed");
+		this.additionalInfo = xml.getStringProperty("AdditionalInfo");
+		this.notclosable = xml.getBooleanProperty("isNotClosable");
+		if (xml.contains("isMaximized")) {
+			boolean maximized = xml.getBooleanProperty("isMaximized");
+			this.isMaximized = maximized;
+			if (maximized==true) {
+				this.setNormalBounds(xml.getIntProperty("normalX"), xml.getIntProperty("normalY"), xml.getIntProperty("normalWidth"), xml.getIntProperty("normalHeight"));
+			}
+		}
+	}
+
+	/**
+	 * Obtiene información adicional de la ventana. Esta etiqueta podrá llevar cualquier
+	 * tipo de información que queramos almacenar.
+	 * @return Información adicional
+	 */
+	public String getAdditionalInfo() {
+		return additionalInfo;
+	}
+
+	/**
+	 * Asigna información adicional de la ventana. Esta etiqueta podrá llevar cualquier
+	 * tipo de información que queramos almacenar.
+	 * @return Información adicional
+	 */
+	public void setAdditionalInfo(String additionalInfo) {
+		this.additionalInfo = additionalInfo;
+	}
+
+	public void saveToState(PersistentState state) throws PersistenceException {
+	    state.set("resizable", this.resizable);
+	    state.set("maximizable", this.maximizable);
+	    state.set("iconifiable", this.iconifiable);
+	    state.set("modal", this.modal);
+	    state.set("modeless", this.modeless);
+	    state.set("notclosable", this.notclosable);
+	    state.set("persistWindow", this.persistWindow); //OJO ¿Obsoleto?
+	    state.set("palette", this.palette);
+	    state.set("additionalInfo", this.additionalInfo);
+	    state.set("width", this.width);
+	    state.set("height", this.height);
+	    state.set("x", this.x);
+	    state.set("y", this.y);
+	    state.set("normalX", this.normalX);
+	    state.set("normalY", this.normalY);
+	    state.set("normalHeight", this.normalHeight);
+	    state.set("normalWidth", this.normalWidth);
+	    state.set("minSize", this.minSize);
+	    state.set("isMaximized", this.isMaximized);
+	    state.set("visible", this.visible);
+	    state.set("isClosed", this.isClosed);
+	    state.set("title", this.title);
+	    state.set("id", this.id); //OJO
+	    state.set("selectedTools", this.selectedTools); //OJO
+	    state.set("defaultGroup", this.defaultGroup); //OJO
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void loadFromState(PersistentState state)
+			throws PersistenceException {
+	    this.resizable = state.getBoolean("resizable");
+	    this.maximizable = state.getBoolean("maximizable");
+	    this.iconifiable = state.getBoolean("iconifiable");
+	    this.modal = state.getBoolean("modal");
+	    this.modeless = state.getBoolean("modeless");
+	    this.notclosable = state.getBoolean("notclosable");
+	    this.persistWindow = state.getBoolean("persistWindow"); //OJO ¿Obsoleto?
+	    this.palette = state.getBoolean("palette");
+	    this.additionalInfo = state.getString("additionalInfo");
+	    this.width = state.getInt("width");
+	    this.height = state.getInt("height");
+	    this.x = state.getInt("x");
+	    this.y = state.getInt("y");
+	    this.normalX = state.getInt("normalX");
+	    this.normalY = state.getInt("normalY");
+	    this.normalHeight = state.getInt("normalHeight");
+	    this.normalWidth = state.getInt("normalWidth");
+	    this.minSize = (Dimension)state.get("minSize");
+	    this.isMaximized = state.getBoolean("isMaximized");
+	    this.visible = state.getBoolean("visible");
+	    this.isClosed = state.getBoolean("isClosed");
+	    this.title = state.getString("title");
+	    this.id = state.getInt("id");
+	    this.setSelectedTools(state.getMap("selectedTools"));
+	    this.defaultGroup = state.getString("defaultGroup"); //OJO
+	}
+
+	
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+    		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+    		DynStruct definition = manager.getDefinition(PERSISTENCE_DEFINITION_NAME);
+    		if ( definition == null ){
+    		    definition = manager.addDefinition(
+    		        WindowInfo.class,
+    		        PERSISTENCE_DEFINITION_NAME,
+    		        "WindowInfo persistence definition",
+    		        null, 
+    		        null
+    		    );
+    		    definition.addDynFieldBoolean("resizable").setMandatory(true);
+    		    definition.addDynFieldBoolean("maximizable").setMandatory(true);
+    		    definition.addDynFieldBoolean("iconifiable").setMandatory(true);
+    		    definition.addDynFieldBoolean("modal").setMandatory(true);
+    		    definition.addDynFieldBoolean("modeless").setMandatory(true);
+    		    definition.addDynFieldBoolean("notclosable").setMandatory(true);
+    		    definition.addDynFieldBoolean("persistWindow").setMandatory(true);
+    		    definition.addDynFieldBoolean("palette").setMandatory(true);
+    		    definition.addDynFieldString("additionalInfo").setMandatory(false);
+    		    definition.addDynFieldInt("width").setMandatory(true);
+    		    definition.addDynFieldInt("height").setMandatory(true);
+    		    definition.addDynFieldInt("x").setMandatory(true);
+    		    definition.addDynFieldInt("y").setMandatory(true);
+    		    definition.addDynFieldInt("normalX").setMandatory(true);
+    		    definition.addDynFieldInt("normalY").setMandatory(true);
+    		    definition.addDynFieldInt("normalHeight").setMandatory(true);
+    		    definition.addDynFieldInt("normalWidth").setMandatory(true);
+    		    definition.addDynFieldObject("minSize").setMandatory(false).setClassOfValue(Dimension.class);
+    		    definition.addDynFieldBoolean("isMaximized").setMandatory(true);
+    		    definition.addDynFieldBoolean("visible").setMandatory(true);
+    		    definition.addDynFieldBoolean("isClosed").setMandatory(true);
+    		    definition.addDynFieldString("title").setMandatory(true);
+    		    definition.addDynFieldInt("id").setMandatory(true);
+    		    definition.addDynFieldMap("selectedTools").setMandatory(false);
+    		    definition.addDynFieldString("defaultGroup").setMandatory(true);
+    		}
+    	    return Boolean.TRUE;
+        }
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/WindowInfo.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIManager.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIManager.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIManager.java	(revision 38313)
@@ -0,0 +1,343 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.mdiManager;
+
+import java.beans.PropertyVetoException;
+import java.util.Iterator;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.plugins.config.generate.ActionTool;
+import org.gvsig.andami.plugins.config.generate.Menu;
+import org.gvsig.andami.plugins.config.generate.SelectableTool;
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+
+
+
+/**
+ * <p>
+ * This interface acts as window manager. It is the place to create
+ * new windows, close existing ones or modify their properties
+ * (size, position, etc).
+ * </p>
+ * <p>
+ * Any class extending from JPanel and implementing the {@link IWindow}
+ * interface may become an Andami window. Andami will create a real
+ * window (normally a JInternalFrame) and put the JPanel inside the
+ * real window. In order to differentiate the contents (panels
+ * extending JPanel and implementing IWindow) from the real window
+ * (normally JInternalFrames or JDialogs), we will use
+ * <i>window</i> to refer to the contents and <i>frame</i>
+ * to refer to the real window.
+ * </p>
+ * <p>
+ * This class is implemented by the Andami Skin (currently libCorePlugin),
+ * which will decide the final implementation of frames. A different frame
+ * implementation could be used by switching the Skin.
+ * </p>
+ * 
+ * @see IWindow
+ * @see WindowInfo
+ * @see SingletonWindow
+ * @see com.iver.core.mdiManager.NewSkin
+ *
+ * @author Fernando González Cortés
+ */
+public interface MDIManager {
+	
+	public interface UIActionTool {
+		public String getExtensionName();
+		public String getName();
+		public String getText();
+		public String getCommand();
+		public String getIconName();
+		public String getEnableText();
+		public String getTooptip();
+		public int getPosition();
+	}
+	
+    /**
+     * Initializes the MDIFrame. It must be called before starting
+     * to use it. It receives the application's main frame
+     * (MDIFrame) as parameter.  
+     *
+     * @param f Application's main frame.
+     */
+    public void init(MDIFrame f);
+
+    /**
+     * <p>
+     * Creates a new frame with the provided contents, and shows this
+     * new window. The new frame's properties are set according to
+     * the WindowInfo object from IWindow's <code>getWindowInfo()</code>
+     * method.
+     * The new frame is disposed when closed. 
+     * </p>
+     * <p>
+     * If the provided IWindow also implements SingletonWindow, and
+     * another SingletonWindow already exists and uses the same
+     * model, this later window will be sent to the foreground
+     * and no new window will be created.
+     * </p>
+     *
+     * @param p Panel with the contents of the new window.
+     *
+     * @return Returns the added IWindow, or in case it is a
+     * SingletonWindow and there is another SingletonWindow with
+     * the same model that it is already shown, returns this 
+     * later SingletonWindow.
+     */
+    public IWindow addWindow(IWindow p) throws SingletonDialogAlreadyShownException;
+
+    
+    /*
+     * Constants used by the method showWindow 
+     */
+    public final MODE WINDOW = WindowManager.MODE.WINDOW;
+    public final MODE TOOL = WindowManager.MODE.TOOL;
+    public final MODE DIALOG = WindowManager.MODE.DIALOG;
+    
+    /**
+     * Useful method to simplify the presentation of a window. 
+     * For more precise control over the behavior of the window 
+     * use addWindow
+     * 
+     * This methos 
+     * @param panel to show as a window
+     * @param title title of the window
+     * @param mode type of the window to create
+     */
+    public void showWindow(JPanel panel, String title, MODE mode);
+
+    /**
+     * Return the window associated to the SingletonWindow class and the model
+     * specified. If not exists any singleton window associated to this
+     * null is returned.
+     * 
+     * @param windowClass, the class that implement SingletonWindow
+     * @param model, the model associated to the SingletonWindow
+     * @return the requested window or null.
+     */
+    public SingletonWindow getSingletonWindow(Class windowClass, Object model) ;
+    
+    /**
+     * <p>
+     * Creates a new frame with the provided contents, and shows this
+     * new window. The new frame will be centered, regardless the
+     * position specified in the WindowInfo object from IWindow's
+     * <code>getWindowInfo()</code> method.
+     * The new frame is disposed when closed. 
+     * </p>
+     * <p>
+     * If the provided IWindow also implements SingletonWindow, and
+     * another SingletonWindow already exists and uses the same
+     * model, this later window will be sent to the foreground
+     * and no new window will be created.
+     * </p>
+     *
+     * @param p Panel with the contents of the new window.
+     *
+     * @return Returns the added IWindow, or in case it is a
+     * SingletonWindow and there is another SingletonWindow with
+     * the same model that it is already shown, returns this 
+     * later SingletonWindow.
+     * 
+     * @author Pablo Piqueras Bartolomé
+     */
+    public IWindow addCentredWindow(IWindow p) throws SingletonDialogAlreadyShownException;
+
+    public IWindow addWindow(IWindow p, int align) throws SingletonDialogAlreadyShownException;
+
+    /**
+     * <p>
+     * Returns the currently active window, excluding the modal windows and the
+     * PALETTE windows. If the currently active window is modal or PALETTE type,
+     * the previous non-modal and non-PALETTE active window is returned.
+     * </p>
+     * <p>
+     * Modal windows and PALETTE windows are considered to be auxiliary windows,
+     * that is the reason why they are not returned.
+     * </p> 
+     *
+     * @return A reference to the active window, or null if there is no
+     * active window
+     */
+    public IWindow getActiveWindow();
+
+    /**
+     * <p>
+     * Returns the currently focused window, excluding the modal windows.
+     * If the currently focused window is modal,
+     * the previous non-modal focused window is returned.
+     * </p>
+     *
+     * @return A reference to the focused window, or null if there is no
+     * focused window
+     */
+    public IWindow getFocusWindow();
+    
+    /**
+     * Gets all the open windows. Minimized and maximized windows are
+     * included. The application's main frame is excluded; it can be
+     * accessed using <code>PluginServices.getMainFrame()</code>.
+     *
+     * @return An IWindow array containing all the open windows.
+     */
+    public IWindow[] getAllWindows();
+    
+    /**
+     * Gets all the open windows (as {@link #getAllWindows()}),
+     * but in this method the windows are returned in the same
+     * deepness order that they have in the application.
+     *
+     * @return   An ordered array containing all the panels in the application.
+     * The first element of the array is the topmost (foreground) window in the
+     * application. The last element is the bottom (background) window.
+     */
+    public IWindow[] getOrderedWindows();
+
+    /**
+     * Close the SingletonWindow whose class and model are provided as
+     * parameters.
+     * 
+     * @param viewClass Class of the window which is to be closed
+     * @param model Model of the window which is to be closed
+     *
+     * @return true if there is an open window whose class and model
+     *         match the provided parameteres, false otherwise.
+     */
+    public boolean closeSingletonWindow(Class viewClass, Object model);
+
+    /**
+     * Close the SingletonWindow whose model is provided as parameter.
+     *
+     * @param model Model of the window which is to be closed
+     *
+     * @return true if there is an open window whose model matchs
+     *         the provided one, false otherwise.
+     */
+    public boolean closeSingletonWindow(Object model);
+
+    /**
+     * Close the provided window.
+     *
+     * @param p window to be closed
+     */
+    public void closeWindow(IWindow p);
+
+    /**
+     * Close all the currently open windows
+     */
+    public void closeAllWindows();
+
+    /**
+     * Gets the WindowInfo object associated with the provided window.
+     *
+     * @param v window whose information is to be retrieved
+     *
+     * @return WindowInfo The WindowInfo object containing the information
+     * about the provided window 
+     * 
+     * @see WindowInfo
+     */
+    public WindowInfo getWindowInfo(IWindow v);
+
+    /**
+     * Shows the wait cursor and blocks all the events from main window until
+     * {@link #restoreCursor()} is called.
+     */
+    public void setWaitCursor();
+
+    /**
+     * Sets the normal cursor and unblocks events from main window.
+     * 
+     * @see #setWaitCursor()
+     */
+    public void restoreCursor();
+
+    /**
+     * Maximizes or restores the provided window
+     * 
+     * @param v The window to be maximized or restored 
+     * @param bMaximum If true, the window will be maximized,
+     *  if false, it will be restored
+     * @throws PropertyVetoException
+     */
+    public void setMaximum(IWindow v, boolean bMaximum) throws PropertyVetoException;
+    
+    /**
+     * Updates the window properties (size, location, etc) according to the
+     * provided WindowInfo object.
+     * 
+     * @param v The window whose properties are to be changed
+     * @param vi The WindowInfo object containing the new properties to be set
+     */
+    public void changeWindowInfo(IWindow v, WindowInfo vi);
+    
+    /**
+     * Forces a window to be repainted. Normally, this is not necessary,
+     * as windows are refreshed when necessary.
+     * 
+     * @param win The window to be refreshed.
+     */
+    public void refresh(IWindow win);
+
+    /**
+     * Sets the provided image as background image in the main window. The image
+     * will be centered, set in mosaic or expanded to fill the full window,
+     * depending on the <code>typeDesktop</code> argument.
+     * 
+     * @param image The image to be set as background image
+     * @param typeDesktop Decides whether the image should be centered, set
+     * in mosaic or expanded. Accepted values are: Theme.CENTERED,
+     * Theme.MOSAIC and Theme.EXPAND.
+     */
+	public void setBackgroundImage(ImageIcon image, String typeDesktop);
+
+	public void registerAction(String extensionName, ActionTool action);
+	public void registerAction(String extensionName, SelectableTool action);
+	public void registerAction(String extensionName, Menu action);
+	
+	public Iterator<UIActionTool> getActionTools();
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/mdiManager/MDIManager.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/fonts/FontUtils.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/fonts/FontUtils.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/fonts/FontUtils.java	(revision 38313)
@@ -0,0 +1,199 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.ui.fonts;
+
+import java.awt.Font;
+import java.awt.GraphicsEnvironment;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Locale;
+
+import javax.swing.UIManager;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Several methods to manage the user interface fonts.
+ * 
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public class FontUtils {
+	private static Logger logger = LoggerFactory.getLogger(FontUtils.class);
+
+	/**
+	 * Changes the default UIManager font to the provided font.
+	 * 
+	 * @param fontName
+	 */
+	public static void setFont(String fontName) {
+		String[] fieldList = {
+				"Button.font",
+				"CheckBox.font",
+				"CheckBoxMenuItem.font",
+				"ColorChooser.font",
+				"ComboBox.font",
+				"DesktopIcon.font",
+				"EditorPane.font",
+				"FormattedTextField.font",
+				"Label.font",
+				"List.font",
+				"Menu.font",
+				"MenuBar.font",
+				"MenuItem.font",
+				"OptionPane.font",
+				"Panel.font",
+				"PasswordField.font",
+				"PopupMenu.font",
+				"ProgressBar.font",
+				"RadioButton.font",
+				"RadioButtonMenuItem.font",
+				"ScrollPane.font",
+				"Slider.font",
+				"Spinner.font",
+				"TabbedPane.font",
+				"Table.font",
+				"TableHeader.font",
+				"TextArea.font",
+				"TextField.font",
+				"TextPane.font",
+				"TitledBorder.font",
+				"ToggleButton.font",
+				"ToolBar.font",
+				"ToolTip.font",
+				"Tree.font",
+				"Viewport.font",
+				"InternalFrame.titleFont"
+		} ;
+		
+		Font font;
+		
+		for (int i = fieldList.length-1; i>=0; i--) {
+			font = UIManager.getFont(fieldList[i]);
+			if (font!=null)
+				UIManager.put(fieldList[i], new Font(fontName, Font.PLAIN, font.getSize()));
+		}
+	}
+	
+	/**
+	 * Inits the UIManager fonts, so that it can display current's language
+	 * symbols. The font is only changed when necessary.
+	 */
+	public static void initFonts() {
+		// conservative behaviour: we just change the font, if the default one
+		// can't correctly display the current language
+		Font defaultFont = UIManager.getFont("Label.font");
+		if (defaultFont==null) {
+			return;
+		}
+		if (defaultFont.canDisplayUpTo(Messages.getString("MDIFrame.quiere_salir"))==-1) {
+			logger.debug("Fonts configuration was not necessary");
+			return;			
+		}
+
+		
+		Font[] allfonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
+		HashSet workingFonts = new HashSet();
+		
+		for (int i=allfonts.length-1; i>=0; i--) {			
+			if (allfonts[i].canDisplayUpTo(Messages.getString("MDIFrame.quiere_salir"))==-1) {
+				workingFonts.add(allfonts[i].getName());
+			}
+		}
+		
+		// try to set the preferred font
+		String[] preferredFonts = getPreferedFonts(Locale.getDefault().getLanguage());
+		for (int i=0;i<preferredFonts.length; i++) {
+			if (workingFonts.contains(preferredFonts[i])){
+				setFont(preferredFonts[i]);
+				PluginServices.getLogger().info("FontSet: "+preferredFonts[i]);
+				return;
+			}
+		}
+		
+		// try to set any working font
+		Iterator iterator = workingFonts.iterator();
+		
+		if (iterator.hasNext()) {
+			String fontName = (String) iterator.next();
+			setFont(fontName);
+			PluginServices.getLogger().info("FontSet: "+fontName);	
+		}
+	}
+	
+	/**
+	 * Returns an ordered list of preferred fonts for the provided language.
+	 * As there is several fonts which can be used to display each language,
+	 * this list provides a hint about which is the more suitable font for
+	 * this language.
+	 * 
+	 * This method does not check whether the fonts are available in the
+	 * running system.
+	 * 
+	 * @param lang
+	 * @return
+	 */
+	private static String [] getPreferedFonts(String lang) {
+		//TODO this should be read from a file, for each language
+		if (lang.equals("zh")) {
+			String []preferredChineseFonts = {
+					"AR PL KaitiM GB",
+					"AR PL SungtiL GB",
+					"Kochi Gothic",
+					"SimSun"
+			} ;
+			return preferredChineseFonts;
+		}
+		return new String[0];
+	}
+	
+	private static void listSystemFonts() {
+		Font[] allfonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
+
+		for (int i=allfonts.length-1; i>=0; i--) {
+			System.out.println(allfonts[i].getName()+" --- "+allfonts[i].getFontName());
+		}
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/fonts/FontUtils.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/MultiSplashWindow.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/MultiSplashWindow.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/MultiSplashWindow.java	(revision 38313)
@@ -0,0 +1,263 @@
+
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibï¿½ï¿½ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+package org.gvsig.andami.ui.splash;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.RenderingHints;
+import java.awt.Toolkit;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JProgressBar;
+import javax.swing.JWindow;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.ui.theme.Theme;
+
+
+
+public class MultiSplashWindow extends JWindow implements TimerCallBack,
+    MouseListener {
+    private static final long serialVersionUID = 572592158521767258L;
+    private JProgressBar pb;
+    private JLabel lblStatus;
+    private Timer timer;
+    private int numLogos = 0;
+    private ImageIcon[] img = null;
+    private Dimension splashDimension;
+    private int index = 0;
+    private int current;
+    private int lastIndex = -1;
+    private Theme theme;
+    private long[] timers;
+
+    private String version="";
+    private String[] versions=null;
+    private Point point=new Point(270,240);
+    private Point[] points=null;
+    private int fontsize=18;
+    private int[] fontSizes=null;
+    private Color fontcolor=new Color(80,170,240);
+    private Color[] fontColors=null;
+
+    public MultiSplashWindow(Frame f, Theme theme, int progressBarStepCount) {
+        super(f);
+        this.theme = theme;
+        this.timers = theme.getTimers();
+        lblStatus = new JLabel(Messages.getString("SplashWindow.Iniciando"));
+        lblStatus.setBorder(BorderFactory.createEtchedBorder());
+        lblStatus.setBackground(Color.WHITE);
+
+        pack();
+        pb = new JProgressBar(0, progressBarStepCount);
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(lblStatus, BorderLayout.NORTH);
+        getContentPane().add(pb, BorderLayout.SOUTH);
+
+        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+
+        init();
+        setLocation((screenSize.width / 2) - (splashDimension.width / 2),
+            (screenSize.height / 2) - (splashDimension.height / 2));
+        index = 0;
+        setVisible(true);
+        this.addMouseListener(this);
+    }
+
+    public void init() {
+        img = theme.getSplashImages();
+        numLogos = img.length;
+
+        if (numLogos == 0) {
+            numLogos = 1;
+            img = new ImageIcon[1];
+            img[0] = PluginServices.getIconTheme().get("splash"); 
+            timers = new long[1];
+            timers[0] = 1000L;
+        }
+        versions=theme.getVersions();
+        points=theme.getPositions();
+        fontSizes=theme.getFontSizes();
+        fontColors=theme.getFontColors();
+        int splashWidth = img[0].getIconWidth();
+        int splashHeight = img[0].getIconHeight();
+
+        for (int i = 1; i < numLogos; i++) {
+            splashWidth = Math.max(splashWidth, img[i].getIconWidth());
+            splashHeight = Math.max(splashHeight, img[i].getIconHeight());
+        }
+
+        splashDimension = new Dimension(splashWidth, splashHeight);
+        setSize(splashDimension.width, splashDimension.height + 45);
+
+        start();
+    }
+
+    public void paint(Graphics g) {
+        if (lastIndex == current) {
+            return;
+        }
+
+        super.paint(g);
+
+        if ((img == null) || (img[current] == null)) {
+            return;
+        }
+
+        ImageIcon image = img[current];
+        g.drawImage(image.getImage(),
+            (getWidth() / 2) - (image.getIconWidth() / 2),
+            ((getHeight() / 2) - (image.getIconHeight() / 2)), this);
+
+        // Activate antialias for text
+        if (g instanceof Graphics2D) {
+            ((Graphics2D) g).setRenderingHint(
+                RenderingHints.KEY_TEXT_ANTIALIASING,
+                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+        }
+
+        Font font = new Font("SansSerif", Font.BOLD, fontsize);
+        if (fontSizes.length>0 && fontSizes[current]!=0) {
+            font = new Font("SansSerif", Font.BOLD, fontSizes[current]);
+        }
+    	g.setFont(font);
+
+    	Color color=fontcolor;
+        if (fontColors.length>0 && fontColors[current]!=null) {
+        	color=fontColors[current];
+        }
+        g.setColor(color);
+
+        String ver=version;
+        if (versions.length>0 && versions[current]!=null) {
+        	ver=versions[current];
+        }
+
+        Point p=point;
+        if (points.length>0 && points[current]!=null){
+        	p=points[current];
+        }
+
+        g.drawString(PluginServices.getText(this,ver),(int)p.getX(),(int)p.getY());
+
+        lastIndex = current;
+    }
+
+    public void tick() {
+        current = index;
+        timer.setInterval(timers[current]);
+        repaint();
+        index++;
+
+        if (index >= numLogos) {
+            index = 0;
+        }
+    }
+
+    public void start() {
+        timer = new Timer(this, 1000);
+        timer.start();
+    }
+
+    /**
+     * Cierra la ventana
+     */
+    public void close() {
+        setVisible(false);
+        stop();
+        dispose();
+    }
+
+    public void stop() {
+        timer.stop();
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param args DOCUMENT ME!
+     */
+    public static void main(String[] args) {
+        Frame frame = new Frame();
+        Theme theme = new Theme();
+        MultiSplashWindow ba = new MultiSplashWindow(frame, theme, 5);
+        ba.setVisible(true);
+        ba.setSize(500, 500);
+        ba.init();
+        ba.start();
+    }
+
+    /**
+     * @see com.iver.mdiApp.ui.AppLoadingListener#process(int)
+     */
+    public void process(int p, String str) {
+        lblStatus.setText(str);
+
+        if (pb.getValue() != p) {
+            pb.setValue(p);
+        }
+        doLayout();
+        repaint();
+    }
+
+    public void mouseClicked(MouseEvent e) {
+        this.setVisible(false);
+    }
+
+	public void mouseEntered(MouseEvent e) { }
+	public void mouseExited(MouseEvent e) { }
+	public void mousePressed(MouseEvent e) { }
+	public void mouseReleased(MouseEvent e) { }
+    }
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/MultiSplashWindow.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/TimerCallBack.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/TimerCallBack.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/TimerCallBack.java	(revision 38313)
@@ -0,0 +1,8 @@
+package org.gvsig.andami.ui.splash;
+// This interface defines a callback for the Timer class
+
+public interface TimerCallBack
+{
+     public void tick();
+}
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/TimerCallBack.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/Timer.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/Timer.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/Timer.java	(revision 38313)
@@ -0,0 +1,126 @@
+package org.gvsig.andami.ui.splash;
+/**
+ * This class implements an interval timer. It calls
+ * the tick method in the callback interface after
+ * a fixed number of milliseconds (indicated by the
+ * interval variable). It measures the amount of time spent
+ * in the tick method and adjusts for it.
+ * To start up a timer with this class, create it with
+ * a callback and the number of milliseconds in the interval
+ * and then call the start method:
+ * <PRE>
+ *
+ *    Timer timer = new Timer(this, 2000);
+	// 2 second interval
+ *    timer.start();
+ *
+ * </PRE>
+ *
+ * @author Mark Wutka
+ */
+
+public class Timer extends Object implements Runnable
+{
+
+     protected Thread timerThread;
+
+/** The number of milliseconds in the interval*/
+     protected long interval;
+
+/** The callback interface containing the tick method */
+     protected TimerCallBack callback;
+
+     public Timer()
+     {
+     }
+
+     public Timer(TimerCallBack callback)
+     {
+          this.callback = callback;
+     }
+
+     public Timer(long interval)
+     {
+          this.interval = interval;
+     }
+
+     public Timer(TimerCallBack callback, long interval)
+     {
+          this.callback = callback;
+          this.interval = interval;
+     }
+
+/** returns the number of milliseconds in the interval */
+     public long getInterval()
+     {
+          return interval;
+     }
+
+/** sets the number of milliseconds in the interval
+ * @param newInterval the new number of milliseconds
+ */
+     public void setInterval(long newInterval)
+     {
+          interval = newInterval;
+     }
+
+/** returns the callback interface */
+     public TimerCallBack getCallback()
+     {
+          return callback;
+     }
+
+/** changes the callback interface
+ * @param callback the new callback
+ */
+     public void setCallback(TimerCallBack callback)
+     {
+          this.callback = callback;
+     }
+
+/** starts the timer */
+     public void start()
+     {
+          timerThread = new Thread(this);
+          timerThread.start();
+     }
+
+/** stops the timer */
+     public void stop()
+     {
+    	  timerThread.interrupt();
+    	  timerThread = null;
+     }
+
+     public void run()
+     {
+          while (true)
+          {
+// Check the current time
+               long startTime = System.currentTimeMillis();
+
+// If there is a callback, call it
+               if (callback != null)
+               {
+                    callback.tick();
+               }
+
+// Check the time again
+               long endTime = System.currentTimeMillis();
+
+// The amount of time to sleep is the interval minus the time spent
+// in the tick routine
+               long sleepTime = interval - (endTime - startTime);
+
+// If you've passed the next interval, hurry up and call the next tick
+               if (sleepTime <= 0) continue;
+
+               try {
+            	  Thread.sleep(sleepTime);
+               } catch (Exception insomnia) {
+               } catch (Throwable insomnia) {
+               }
+          }
+     }
+}
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/ui/splash/Timer.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/authentication/LoginUI.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/authentication/LoginUI.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/authentication/LoginUI.java	(revision 38313)
@@ -0,0 +1,133 @@
+package org.gvsig.andami.authentication;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Container;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JButton;
+
+
+/**
+ * Form to let the user log in the system.
+ * @author laura
+ *
+ */
+public class LoginUI extends JDialog
+{
+	private JTextField usernameField;
+	private JPasswordField passwordField;
+	private JTextField serverURLField;
+	private JLabel invalidLoginLabel;
+	private JButton okButton;
+	private JButton exitButton;
+	private GridBagLayoutPanel mainPanel;
+	private JPanel buttonPanel;
+	private boolean isFirstLogin = true;
+
+	//TODO:
+	//Cambiar esto para que coja un icono de una ruta que se lee de un xml
+
+	static private ImageIcon gvsigIcon = PluginServices
+		.getIconTheme().get("login-gvsig");
+
+	IAuthentication authentication;
+
+	public LoginUI(IAuthentication authentication )
+	{
+		Container container = getContentPane();
+		mainPanel = new GridBagLayoutPanel();
+		usernameField = new JTextField(25);
+		passwordField = new JPasswordField(25);
+		serverURLField = new JTextField(25);
+
+		String server_text = (String)authentication.get("server_url");
+		if(server_text != null){
+			serverURLField.setText( server_text );
+		}
+
+		buttonPanel = new JPanel();
+		okButton = new JButton( PluginServices.getText(this, "login_ok") );
+		okButton.addActionListener(new java.awt.event.ActionListener() {
+			public void actionPerformed(java.awt.event.ActionEvent e) {
+				OK();
+			}
+		});
+		exitButton = new JButton( PluginServices.getText(this, "login_exit") );
+		exitButton.addActionListener(new java.awt.event.ActionListener() {
+			public void actionPerformed(java.awt.event.ActionEvent e) {
+				Cancel();
+			}
+		});
+
+		buttonPanel.add( okButton );
+		buttonPanel.add( exitButton );
+
+		JPanel logoPanel = new JPanel();
+		logoPanel.add(new JLabel(gvsigIcon));
+		logoPanel.setBorder(BorderFactory.createEmptyBorder(1,1,1,10));
+		container.add(logoPanel, BorderLayout.WEST);
+		container.add( mainPanel, BorderLayout.CENTER );
+		mainPanel.addComponent(PluginServices.getText(this, "login_name"), usernameField);
+		mainPanel.addComponent(PluginServices.getText(this, "login_password"), passwordField);
+		mainPanel.addComponent(PluginServices.getText(this, "login_name"), serverURLField);
+		invalidLoginLabel = new JLabel(PluginServices.getText(this, "login_invalid_user"));
+		invalidLoginLabel.setForeground(Color.RED);
+		invalidLoginLabel.setVisible( false );
+		mainPanel.addComponent(invalidLoginLabel, buttonPanel);
+		mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+		this.authentication = authentication;
+		this.setBounds(400,400,this.getWidth(),this.getHeight());
+		this.setTitle( "Login" );
+		this.setModal(true);
+		this.setSize( 400, 200);
+		this.setResizable( false );
+		pack();
+		setVisible( true );
+	}
+
+	public void OK()
+	{
+	  	if (((String)serverURLField.getText() == null) || (((String)serverURLField.getText()).length() == 0)){
+	  		return;
+	  	}
+
+		authentication.put("user", (String)usernameField.getText());
+		authentication.put("pwd", new String(passwordField.getPassword()));
+		authentication.put("server", (String)serverURLField.getText());
+
+		if (authentication.isValidUser()){
+			authentication.setLogged(true);
+			dispose();
+		}
+		else{
+			usernameField.setText("");
+			passwordField.setText("");
+			if (isFirstLogin)
+			{
+				invalidLoginLabel.setVisible(true);
+				isFirstLogin = false;
+			}
+			//JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),"Invalid user/password");
+		}
+	}
+
+	public void Cancel()
+	{
+		authentication.put("user", "");
+		authentication.put("pwd", "");
+		authentication.setLogged(false);
+		dispose();
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/authentication/LoginUI.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/authentication/IAuthentication.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/authentication/IAuthentication.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/authentication/IAuthentication.java	(revision 38313)
@@ -0,0 +1,18 @@
+package org.gvsig.andami.authentication;
+
+import java.util.Map;
+
+/**
+ * Interface to implement by clases which perform the authentication
+ * @author laura
+ */
+public interface IAuthentication extends Map{	
+	
+	public boolean Login();
+	public boolean isLogged();
+	public void setLogged(boolean logged);
+	public boolean isValidUser();
+	public boolean validationRequired();	
+	public void setPluginDirectory(String dir);
+	
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/authentication/IAuthentication.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/PluginClassLoader.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/PluginClassLoader.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/PluginClassLoader.java	(revision 38313)
@@ -0,0 +1,496 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.plugins;
+
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.AllPermission;
+import java.security.CodeSource;
+import java.security.PermissionCollection;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.StringTokenizer;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.messages.Messages;
+
+
+
+/**
+ * <p>Class loader which loads the classes requested by the
+ * plugins. It first tries to search in the classpath, then it requests
+ * the class to the parent classloader, then it searches in the owns
+ * plugins' library dir, and if all these methods fail, it tries to load
+ * the class from any of the depended plugins. Finally, if this also
+ * fails, the other classloaders provided in the <code>addLoaders</code> method
+ * are requested to load the class.</p>
+ * 
+ * <p>The class loader can also be used to load resources from the
+ * plugin's directory by using the <code>getResource()</code> method.</p>
+ *
+ * @author Fernando González Cortés
+ */
+public class PluginClassLoader extends URLClassLoader {
+    /** DOCUMENT ME! */
+    private static Logger logger = LoggerFactory.getLogger(PluginClassLoader.class.getName());
+
+    /** DOCUMENT ME! */
+    private Hashtable clasesJar = new Hashtable();
+
+    /** DOCUMENT ME! */
+    private File baseDir;
+    private PluginClassLoader[] pluginLoaders;
+    private static ArrayList otherLoaders=new ArrayList();
+    private boolean isOtherLoader=false;
+ 
+    /**
+     * Creates a new PluginClassLoader object.
+     *
+     * @param jars Array with the search paths where classes will be searched
+     * @param baseDir Base directory for this plugin. This is the directory
+     * which will be used as basedir in the <code>getResources</code> method.
+     * @param cl The parent classloader of this classloader. It will be used to
+     * search classes before trying to search in the plugin's directory
+     * @param pluginLoaders The classloaders of the depended plugins.
+     *
+     * @throws IOException
+     */
+    public PluginClassLoader(URL[] jars, String baseDir, ClassLoader cl,
+        PluginClassLoader[] pluginLoaders) throws IOException {
+        super(jars, cl);
+        this.baseDir = new File(new File(baseDir).getAbsolutePath());
+        this.pluginLoaders = pluginLoaders;
+
+        ZipFile[] jarFiles = new ZipFile[jars.length];
+
+        for (int i = 0; i < jars.length; i++) {
+            try {
+                jarFiles[i] = new ZipFile(jars[i].getPath());
+
+                Enumeration entradas = jarFiles[i].entries();
+
+                while (entradas.hasMoreElements()) {
+                    ZipEntry file = (ZipEntry) entradas.nextElement();
+                    String fileName = file.getName();
+
+                    if (!fileName.toLowerCase().endsWith(".class")) { //$NON-NLS-1$
+
+                        continue;
+                    }
+
+                    fileName = fileName.substring(0, fileName.length() - 6)
+                                       .replace('/', '.');
+
+                    if (clasesJar.get(fileName) != null) {
+						logger.warn(Messages
+								.getString(
+                                "PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin") +
+                                ": " + fileName + " "+ Messages.getString("en") + " " +
+                                jarFiles[i].getName() + " " + Messages.getString("y_en") + " " +
+                                ((ZipFile) clasesJar.get(fileName)).getName());
+                    }
+                    else {
+                    	clasesJar.put(fileName, jarFiles[i]);
+                    }
+                }
+            } catch (ZipException e) {
+                throw new IOException(e.getMessage() + " Jar: " +
+                    jars[i].getPath() + ": " + jarFiles[i]);
+            } catch (IOException e) {
+                throw e;
+            }
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param name DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     *
+     * @throws ClassNotFoundException DOCUMENT ME!
+     */
+    protected Class singleLoadClass(String name) throws ClassNotFoundException {
+        // Buscamos en las clases de las librerías del plugin
+        Class c = findLoadedClass(name);
+
+        if (c != null) {
+            return c;
+        }
+
+        try {
+            ZipFile jar = (ZipFile) clasesJar.get(name);
+
+            //No está en ningún jar
+            if (jar == null) {
+                //Buscamos en el directorio de clases
+                String classFileName = baseDir + "/classes/" +
+                    name.replace('.', '/') + ".class";
+                File f = new File(classFileName);
+                if (f.exists()){
+                    byte[] data = loadClassData(f);
+                    c = defineClass(name, data, 0, data.length);
+                    
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("Class {} found in the classes folder by the "
+                                + "classloader for the plugin {}",
+                                    name, baseDir);
+                    }
+
+                }else{
+                    //Buscamos en los otros plugins
+                    for (int i = 0; i < pluginLoaders.length; i++) {
+                    	try
+                    	{
+                    		if (pluginLoaders[i] != null){
+                    			c = pluginLoaders[i].singleLoadClass(name);
+                    		}else{
+                    			//TODO El pluginLoaders[i] puede ser nulo?
+                    			logger.warn("PluginLoaders[i] es nulo");
+                    		}
+                    	}
+                    	catch (ClassNotFoundException e)
+                    	{
+                    		// Si no la encontramos en el primer plugin, capturamos la exceptción
+                    		// porque es probable que la encontremos en el resto de plugins.
+                    	}
+
+                        if (c != null) {
+                            break;
+                        }
+                    }
+                }
+            } else {
+                String fileName = name.replace('.', '/') + ".class";
+                ZipEntry classFile = jar.getEntry(fileName);
+                byte[] data = loadClassData(classFile,
+                        jar.getInputStream(classFile));
+
+                c = defineClass(name, data, 0, data.length);
+                
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Class {} found in the jar file {} by the "
+                            + "classloader for the plugin {}",
+                                new Object[] { name, jar.getName(), baseDir });
+                }
+            }
+
+            if (c == null) {
+                throw new ClassNotFoundException(name);
+            }
+
+            return c;
+        } catch (IOException e) {
+            throw new ClassNotFoundException(Messages.getString(
+                    "PluginClassLoader.Error_reading_file") + name);
+        }
+    }
+
+    /**
+     * Carga la clase
+     *
+     * @param name Nombre de la clase
+     * @param resolve Si se ha de resolver la clase o no
+     *
+     * @return Clase cargada
+     *
+     * @throws ClassNotFoundException Si no se pudo encontrar la clase
+     */
+    protected Class loadClass(String name, boolean resolve)
+        throws ClassNotFoundException {
+        Class c = null;
+
+        // Intentamos cargar con el system classloader
+        try {
+            if (!isOtherLoader)
+            	c = super.loadClass(name, resolve);
+            logger.debug("Class {} found by the system classloader", name);
+        } catch (ClassNotFoundException e1) {
+        	try {
+        		c = singleLoadClass(name);
+        	} catch (ClassNotFoundException e2) {
+        		try {
+        			isOtherLoader=true;
+        			c = loadOtherClass(name);
+        		}catch (ClassNotFoundException e3) {
+                    // throw new ClassNotFoundException(Messages.getString(
+                    // "PluginClassLoader.Error_reading_file")
+                    // + name, e3);
+                    throw new ClassNotFoundException("Class " + name
+                            + " not found through the plugin " + baseDir, e3);        			 
+        		}finally {
+        			isOtherLoader=false;
+        		}
+        	}
+        }
+        if (c==null)
+        	 throw new ClassNotFoundException(Messages.getString(
+             "PluginClassLoader.Error_reading_file") + name);
+        if (resolve) {
+            resolveClass(c);
+        }
+        return c;
+    }
+    private Class loadOtherClass(String name)
+		throws ClassNotFoundException
+    {
+	ClassLoader[] ocl=(ClassLoader[])otherLoaders.toArray(new ClassLoader[0]);
+    Class c=null;
+	for (int i=0;i<ocl.length;i++) {
+		c=ocl[i].loadClass(name);
+		if (c != null) {
+            logger
+                        .debug(
+                        "Class {} found by the alternative classloaders of the plugin {}",
+                                name, baseDir);
+
+    		return c;
+		}
+    }
+	throw new ClassNotFoundException(name);
+    }
+
+    /**
+     * obtiene el array de bytes de la clase
+     *
+     * @param classFile Entrada dentro del jar contiene los bytecodes de la
+     *        clase (el .class)
+     * @param is InputStream para leer la entrada del jar
+     *
+     * @return Bytes de la clase
+     *
+     * @throws IOException Si no se puede obtener el .class del jar
+     */
+    private byte[] loadClassData(ZipEntry classFile, InputStream is)
+        throws IOException {
+        // Get size of class file
+        int size = (int) classFile.getSize();
+
+        // Reserve space to read
+        byte[] buff = new byte[size];
+
+        // Get stream to read from
+        DataInputStream dis = new DataInputStream(is);
+
+        // Read in data
+        dis.readFully(buff);
+
+        // close stream
+        dis.close();
+
+        // return data
+        return buff;
+    }
+
+    /**
+     * Gets the bytes of a File
+     *
+     * @param file File
+     *
+     * @return bytes of file
+     *
+     * @throws IOException If the operation fails
+     */
+    private byte[] loadClassData(File file) throws IOException {
+        InputStream is = new FileInputStream(file);
+
+        // Get the size of the file
+        long length = file.length();
+
+        // You cannot create an array using a long type.
+        // It needs to be an int type.
+        // Before converting to an int type, check
+        // to ensure that file is not larger than Integer.MAX_VALUE.
+        if (length > Integer.MAX_VALUE) {
+            // File is too large
+        }
+
+        // Create the byte array to hold the data
+        byte[] bytes = new byte[(int) length];
+
+        // Read in the bytes
+        int offset = 0;
+        int numRead = 0;
+
+        while ((offset < bytes.length) &&
+                ((numRead = is.read(bytes, offset, bytes.length - offset)) >= 0)) {
+            offset += numRead;
+        }
+
+        // Ensure all the bytes have been read in
+        if (offset < bytes.length) {
+            throw new IOException("Could not completely read file " +
+                file.getName());
+        }
+
+        // Close the input stream and return bytes
+        is.close();
+
+        return bytes;
+    }
+
+    /**
+     * Gets the requested resource. If the path is relative, its base directory
+     * will be the one provided in the PluginClassLoader's constructor.
+     * If the resource is not found, the parent classloader will be invoked
+     * to try to get it. If it is not found, it will return null.
+     *
+     * @param res An absolute or relative path to the requested resource.
+     *
+     * @return Resource's URL if it was found, nul otherwise.
+     */
+    public URL getResource(String res) {
+        try {
+            ArrayList resource = new ArrayList();
+            StringTokenizer st = new StringTokenizer(res, "\\/");
+
+            while (st.hasMoreTokens()) {
+                String token = st.nextToken();
+                resource.add(token);
+            }
+
+            URL ret = getResource(baseDir, resource);
+
+            if (ret != null) {
+                return ret;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return super.getResource(res);
+    }
+
+    /**
+     * Gets the requested resource. If the path is relative, its base directory
+     * will be the one provided in the PluginClassLoader's constructor.
+     * If the resource is not found, the parent classloader will be invoked
+     * to try to get it. If it is not found, it will return null.
+     *
+     * @param res An absolute or relative path to the requested resource.
+     *
+     * @return Resource's URL if it was found, nul otherwise.
+     */
+    private URL getResource(File base, List res) {
+        File[] files = base.listFiles();
+
+        String parte = (String) res.get(0);
+
+        for (int i = 0; i < files.length; i++) {
+            if (files[i].getName().compareTo(parte) == 0) {
+                if (res.size() == 1) {
+                    try {
+                        return new URL("file:" + files[i].toString());
+                    } catch (MalformedURLException e) {
+                        return null;
+                    }
+                } else {
+                    return getResource(files[i], res.subList(1, res.size()));
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns the name of the plugin (the name of the directory containing
+     * the plugin).
+     *
+     * @return An String containing the plugin's name.
+     */
+    public String getPluginName() {
+        String ret = baseDir.getAbsolutePath().substring(baseDir.getAbsolutePath()
+                                                                .lastIndexOf(File.separatorChar) +
+                1);
+
+        return ret;
+    }
+
+    /*
+     * @see java.security.SecureClassLoader#getPermissions(java.security.CodeSource)
+     */
+    protected PermissionCollection getPermissions(CodeSource codesource) {
+        PermissionCollection perms = super.getPermissions(codesource);
+        perms.add(new AllPermission());
+
+        return perms;
+    }
+
+    /**
+     * Gets the plugin's base dir, the directory which will be used to
+     * search resources.
+     *
+     * @return Returns the baseDir.
+     */
+    public String getBaseDir() {
+        return baseDir.getAbsolutePath();
+    }
+
+    /**
+     * Adds other classloader to use when all the normal methods fail.
+     * 
+     * @param classLoaders An ArrayList of ClassLoaders which will
+     * be used to load classes when all the normal methods fail.
+     */
+	public static void addLoaders(ArrayList classLoaders) {
+		otherLoaders.addAll(classLoaders);
+	}
+
+    @Override
+    public String toString() {
+        return super.toString() + " (" + getPluginName() + ")";
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/PluginClassLoader.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/Extension.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/Extension.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/Extension.java	(revision 38313)
@@ -0,0 +1,131 @@
+package org.gvsig.andami.plugins;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.12  2007-09-17 06:33:34  caballero
+ * unsaveddata
+ *
+ * Revision 1.11  2007/07/19 12:01:06  cesar
+ * Add support for the new Andami termination process (and the unsaved data dialog)
+ *
+ * Revision 1.10  2007/05/31 07:42:17  cesar
+ * Add ExclusiveUIExtension interface and clean the IExtension interface; update Extension, ExtensionDecorator and Launcher to reflect this change; add missing comments, translate existing ones to english
+ *
+ * Revision 1.9  2007/05/31 07:00:47  cesar
+ * Add missing comments, translate existing ones to english
+ *
+ * Revision 1.8  2006/11/27 11:33:05  jmvivo
+ * Soporte para que una clase tenga el control de la visibilidad y estado de las acciones del resto de extensiones.
+ *
+ * Revision 1.7  2006/09/15 10:39:18  caballero
+ * multisplah y postInitialize
+ *
+ * Revision 1.6  2006/07/31 18:22:13  cesar
+ * Rename finalize method to terminate method
+ *
+ * Revision 1.5  2006/05/02 15:53:06  jorpiell
+ * Se ha cambiado la interfaz Extension por dos clases: una interfaz (IExtension) y una clase abstract(Extension). A partir de ahora todas las extensiones deben heredar de Extension
+ *
+ *
+ */
+/**
+ * Extensions are the way in which plugins extend Andami. Extensions
+ * can add controls to user interface (GUI) and execute some code
+ * when controls are activated. Every class implementing
+ * {@link IExtension} is an extension, but directly implementing
+ * that interface is discouraged. The preferred way to create
+ * an extension is extending this absctract class.
+ *
+ * @see IExtension
+ *
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public abstract class Extension implements IExtension {
+
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#terminate()
+	 */
+	public void terminate(){
+
+	}
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#postInitialize()
+	 */
+	public void postInitialize(){
+
+	}
+
+    /*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#getStatus()
+	 */
+    public IExtensionStatus getStatus() {
+    	return null;
+    }
+
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#getStatus(IExtension extension)
+	 */
+	public IExtensionStatus getStatus(IExtension extension) {
+		return extension.getStatus();
+	}
+	
+	public String getText(String msg) {
+	    return PluginsLocator.getManager().getText(this, msg);
+	}
+	
+	public PluginServices  getPlugin() {
+		return PluginsLocator.getManager().getPlugin(this.getClass());
+	}
+
+}
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/Extension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/ExtensionDecorator.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/ExtensionDecorator.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/ExtensionDecorator.java	(revision 38313)
@@ -0,0 +1,121 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package org.gvsig.andami.plugins;
+
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * This class extends the functionality of Extension class to let the programmer
+ * set an extension visible or not on-the-fly.
+ *
+ * @autor Jaume Dominguez Faus - jaume.dominguez@iver.es
+ */
+public class ExtensionDecorator implements HiddableExtension{
+    private static Logger logger = LoggerFactory.getLogger(ExtensionDecorator.class);
+	public static final int INACTIVE = 0;
+	public static final int ALWAYS_VISIBLE = 1;
+	public static final int ALWAYS_INVISIBLE = 2;
+	int  alwaysVisible;
+	IExtension extension;
+
+	public ExtensionDecorator(IExtension e, int visibilityControl){
+		setExtension(e);
+		setVisibility(visibilityControl);
+	}
+
+	public void setExtension(IExtension e) {
+		this.extension = e;
+	}
+
+	public void setVisibility(int state){
+		this.alwaysVisible = state;
+	}
+
+	public int getVisibility(){
+		return alwaysVisible;
+	}
+
+	public IExtension getExtension(){
+		return extension;
+	}
+
+	public void initialize() {
+		extension.initialize();
+	}
+
+	public void terminate(){
+		//TODO
+	}
+
+	public void execute(String actionCommand) {
+        logger.info("{}.execute('{}')", extension.getClass().getSimpleName(), actionCommand);
+		extension.execute(actionCommand);
+	}
+
+	public boolean isEnabled() {
+		return extension.isEnabled();
+	}
+
+	public boolean isVisible() {
+		if (alwaysVisible == INACTIVE)
+			return extension.isVisible();
+		else if (alwaysVisible == ALWAYS_VISIBLE) return true;
+		else return false;
+	}
+
+	public void postInitialize() {
+		// TODO
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.IExtension#getStatus()
+	 */
+	public IExtensionStatus getStatus() {
+		return extension.getStatus();
+	}
+	public IExtensionStatus getStatus(IExtension extension) {
+		return this.extension.getStatus(extension);
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/ExtensionDecorator.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/ExclusiveUIExtension.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/ExclusiveUIExtension.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/ExclusiveUIExtension.java	(revision 38313)
@@ -0,0 +1,81 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+package org.gvsig.andami.plugins;
+
+/**
+ * Extensions implementing this interface are able to take control
+ * over the user interface, by deciding which of the other extensions
+ * will be enabled/disabled or visible/hidden.
+ * 
+ * Besides implementing this interface, the extension needs to
+ * be set as ExclusiveUIExtension during Andami startup process.
+ * This is performed by providing a command line argument to
+ * Andami:
+ * <br>
+ * <code>ExclusiveUIExtension=ExtensionName</code>
+ *
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ */
+public interface ExclusiveUIExtension extends IExtension {
+	
+    /**
+     * This method is used when this extension is installed as
+     * ExclusiveUIExtension. This extension will be asked for
+     * each installed extension to determine which of them
+     * should be enabled.
+     * 
+     * @return true if the provided extension should be enabled,
+     * false if it should be disabled.
+     */
+    public boolean isEnabled(IExtension extension);
+
+    /**
+     * This method is used when this extension is installed as
+     * ExclusiveUIExtension. This extension will be asked for
+     * each installed extension to determine which of them
+     * should be visible.
+     * 
+     * @return true if the provided extension should be visible,
+     * false if it should be hidden.
+     */
+    public boolean isVisible(IExtension extension);
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/ExclusiveUIExtension.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/IUnsavedData.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/IUnsavedData.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/IUnsavedData.java	(revision 38313)
@@ -0,0 +1,121 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package org.gvsig.andami.plugins.status;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.plugins.IExtension;
+
+
+
+/**
+ * <p>This interface represents some unsaved data, associated to one extension.
+ * There are methods to get the associated extension, to get info about these
+ * data, to get the type of the data and a suitable icon for this type,
+ * and a method to save the data.</p>
+ * 
+ * <p>It is used during the Andami termination process, to construct the
+ * dialog of unsaved data, although it can be used at any time.</p>
+ * 
+ * <p>Normally, it should not be directly implemented, use the convenience
+ * UnsavedData class.</p>
+ * 
+ * @see IExtensionStatus
+ * @see UnsavedData
+ * @see IExtension
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ */
+public interface IUnsavedData {
+
+	/**
+	 * Gets the resource name of this unsaved data. Normally, this will be
+	 * a file path, but it may be different for certain type of unsaved data
+	 * (for example, database connections).
+	 * 
+	 * @return The resource name of this unsaved data
+	 */
+	public String getResourceName();
+	
+	/**
+	 * <p>Gets a description of this unsaved data. This would be combined with the
+	 * resource name to show a coherent information to the user.</p>
+	 * 
+	 * <p>Examples of descriptions:
+	 * <ul><li>Modified SHP Layer</li>
+	 * <li>Modified gvSIG project</li>
+	 * </ul>
+	 * 
+	 * @return A description for this unsaved data, probably containing the type
+	 * of data and the kind of modification.
+	 */
+	public String getDescription();
+	
+	/**
+	 * <p>Save the existing changes for this resource (for example, save the layer
+	 * to disk or to the database, etc). The resource should not be closed at this
+	 * point (files, database connections, etc should no be closed), as they may
+	 * be still needed by other extensions. Resources should be closed at
+	 * {@link IExtension#terminate()}.</p>
+	 * 
+	 * @return true if the data was correctly saved, false if it was not saved
+	 * (there are many reasons for this: there was an error, the user cancelled
+	 * the process, etc).
+	 */
+	public boolean saveData();
+
+	/**
+	 * Each IUnsavedData object is associated with one extension, which is
+	 * in charge of this data. This method gets the extension associated with
+	 * this object.
+	 * 
+	 * @return The extension associated with this IUnsavedData object.
+	 */
+	public IExtension getExtension();
+	
+	/**
+	 * Gets an icon suitable to represent this type of data.
+	 * 
+	 * @return An icon representing this type of data, or null if no icon is
+	 * available
+	 */
+	public String getIcon();
+	
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/IUnsavedData.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/IExtensionStatus.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/IExtensionStatus.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/IExtensionStatus.java	(revision 38313)
@@ -0,0 +1,105 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package org.gvsig.andami.plugins.status;
+
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.utils.swing.threads.IMonitorableTask;
+
+
+/**
+ * <p>This interface provides a framework to query the status of
+ * extensions. By default, the interface provides methods to check
+ * if the extension has some unsaved data (and save them), and methods
+ * to check if the extension has some associated background tasks.
+ * However, additional aspects can be included in the status by extending
+ * this interface.</p>
+ * 
+ * <p>Each extension will have an associated IExtensionStatus object, which
+ * can be used at any time to check the status. This is specially useful
+ * during the Andami termination process, to check if there are unfinished
+ * tasks which should be attended before exiting.</p>
+ * 
+ * @see IUnsavedData
+ * @see UnsavedData
+ * @see IExtension
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public interface IExtensionStatus {	
+    /**
+     * This method is used to check if the extension has some unsaved data.
+     * For example, if the project has been modified, or there is a layer in
+     * edition mode.
+     * 
+     * @return true if the extension has some unsaved data, false otherwise.
+     */
+    public boolean hasUnsavedData();
+    
+    /**
+     * <p>Gets an array of the UnsavedData objects, which contain information about
+     * the unsaved data and allows to save it.</p>
+     * 
+     * @return An array of the associated unsaved data, or null in case the extension
+     * has not unsaved data.
+     */
+    public IUnsavedData[] getUnsavedData();
+    
+    /**
+     * This method is used to check if the extension has some associated
+     * background process which is currently running.
+     * 
+     * @return true if the extension has some associated background process,
+     * false otherwise.
+     */
+    public boolean hasRunningProcesses();
+    
+    
+    /**
+     * <p>Gets an array of the traceable background tasks associated with this
+     * extension. These tasks may be tracked, canceled, etc.</p>
+     * 
+     * @return An array of the associated background tasks, or null in case there is
+     * no associated background tasks.
+     */
+    public IMonitorableTask[] getRunningProcesses();
+    
+	//public IStatusGUI getGUI();
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/IExtensionStatus.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/UnsavedData.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/UnsavedData.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/UnsavedData.java	(revision 38313)
@@ -0,0 +1,102 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package org.gvsig.andami.plugins.status;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.plugins.IExtension;
+
+
+/**
+ * Abstract class implementing IUnsavedData. is a convenience
+ * class used to allow easier modifications of IUnsaveData 
+ * interface.
+ * 
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public abstract class UnsavedData implements IUnsavedData {
+
+	/**
+	 * This UnsavedData object is associated to this extension.
+	 */
+	private IExtension ext;
+	
+	/**
+	 * Creates a new UnsavedData object which will be associated to
+	 * the provided extension.
+	 * 
+	 * @param extension
+	 */
+	public UnsavedData(IExtension extension) {
+		ext = extension;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#getDescription()
+	 */
+	public abstract String getDescription() ;
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#getExtension()
+	 */
+	public IExtension getExtension() {
+		return ext;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#getIcon()
+	 */
+	public String getIcon() {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#getResourceName()
+	 */
+	public abstract String getResourceName();
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.status.IUnsavedData#saveData()
+	 */
+	public abstract boolean saveData();
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/status/UnsavedData.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/IExtension.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/IExtension.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/IExtension.java	(revision 38313)
@@ -0,0 +1,149 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.plugins;
+
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+
+/**
+ * <p>
+ * Extensions are the way in which plugins extend Andami. Every class
+ * implementing this interface is an extension (although this class
+ * should not be directly implemented, extending the {@link Extension}
+ * abstract class is the preferred way). During startup,
+ * Andami creates an instance from each extension. Extensions are able
+ * to add controls (tools, toolbars and menus)
+ * to the user interface (GUI); when these controls
+ * are clicked or modified, Andami will call the <code>execute()</code>
+ * method from the associated extension. Extensions will also control
+ * whether their associated controls are enabled or not, and whether
+ * they are visible or hidden.
+ * </p>
+ * <p>
+ * Besides implementing this interface, extensions are required to have
+ * an empty constructor, because it will be invoked to create the
+ * extension's instance.
+ * </p>
+ * <p>
+ * On correctly installed plugins, an instance of every plugin's
+ * extension will be created. Then, the <code>initialize()</code>
+ * method will be executed for each extension.
+ * </p>
+ * <p>
+ * Each time the active window is switched and every time the execute
+ * method is called, Andami checks the <code>isEnabled()</code> and
+ * <code>isVisible()</code> for each extension, to decide whether
+ * they will be enabled and visible.
+ * </p>
+ * <p>
+ * The <code>execute()</code> method will be called from the GUI
+ * thread, so it will block the GUI until it finishes. Therefore,
+ * execution must be fast. If long process must be started from
+ * the <code>execute</code> method, a new thread must be created.
+ * </p>
+ * <p>
+ * Normally, extensions should not directly implement this interface,
+ * but they should extend the <code>Extension</code> abstract class.
+ * </p>
+ *
+ * @see Extension
+ */public interface IExtension {
+	 /**
+	  * Extension's initialization code should be here.
+	  * This method is called for all the extensions during
+	  * Andami's initialization.
+	  */
+	 public void initialize();
+
+	 /**
+	  * Extension's post-initialization code should be here.
+	  * This method is called for all the extensions during
+	  * Andami's initialization, after <code>initialize()</code>
+	  * has been called for ALL the extensions.
+	  */
+    public void postInitialize();
+
+    /**
+     * Extension's termination code should be here.
+     * This method is called for all the extensions during
+     * Andami's termination.
+     */
+    public void terminate();
+
+    /**
+     * This method is executed when the user clicks on any of the
+     * controls associated with this extension (menus, tools, etc).
+     *
+     * @param actionCommand An String specifying the action to
+     * execute. This is useful when there are different
+     * controls associated with the same extension.
+     */
+    public void execute(String actionCommand);
+
+    /**
+     * This method is invoked by Andami to check whether the extension
+     * (and its associated controls) is enabled or disabled.
+     * Disabled controls (menus and buttons) are shown in light grey
+     * colour, and it is not possible to click on them.
+     *
+     * @return true if the extension should be enabled, false otherwise
+     */
+    public boolean isEnabled();
+
+    /**
+     * This method is invoked by Andami to check whether the extension
+     * (and its associated controls) is visible or hidden.
+     *
+     * @return true if the extension should be visible, false otherwise
+     */
+    public boolean isVisible();
+
+    /**
+     * Gets the status of the extension, which may be queried to check
+     * if the extension has some unsaved data or some associated background
+     * tasks.
+     *
+     * @see IExtensionStatus
+     * @return An IExtensionStatus object, containing the status of this
+     * extension.
+     */
+    public IExtensionStatus getStatus();
+    public IExtensionStatus getStatus(IExtension extension);
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/IExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java	(revision 38313)
@@ -0,0 +1,175 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class DependsDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class DependsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public DependsDescriptor() {
+        super();
+        xmlName = "depends";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _pluginName
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_pluginName", "plugin-name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Depends target = (Depends) object;
+                return target.getPluginName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Depends target = (Depends) object;
+                    target.setPluginName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _pluginName
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.DependsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Depends.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Depends.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Depends.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Depends.java	(revision 38313)
@@ -0,0 +1,134 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Depends.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Depends implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _pluginName
+     */
+    private java.lang.String _pluginName;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Depends() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Depends()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'pluginName'.
+     * 
+     * @return the value of field 'pluginName'.
+     */
+    public java.lang.String getPluginName()
+    {
+        return this._pluginName;
+    } //-- java.lang.String getPluginName() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'pluginName'.
+     * 
+     * @param pluginName the value of field 'pluginName'.
+     */
+    public void setPluginName(java.lang.String pluginName)
+    {
+        this._pluginName = pluginName;
+    } //-- void setPluginName(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Depends) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Depends.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Depends.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java	(revision 38313)
@@ -0,0 +1,413 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class PluginConfigDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PluginConfigDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginConfigDescriptor() {
+        super();
+        xmlName = "plugin-config";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _updateUrl
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_updateUrl", "update-url", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getUpdateUrl();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setUpdateUrl( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _updateUrl
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Icon.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setIcon( (org.gvsig.andami.plugins.config.generate.Icon) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Icon();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _dependsList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Depends.class, "_dependsList", "depends", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getDepends();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.addDepends( (org.gvsig.andami.plugins.config.generate.Depends) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Depends();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _dependsList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _resourceBundle
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ResourceBundle.class, "_resourceBundle", "resourceBundle", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getResourceBundle();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setResourceBundle( (org.gvsig.andami.plugins.config.generate.ResourceBundle) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ResourceBundle();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _resourceBundle
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _labelSetList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.LabelSet.class, "_labelSetList", "label-set", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getLabelSet();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.addLabelSet( (org.gvsig.andami.plugins.config.generate.LabelSet) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.LabelSet();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _labelSetList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _libraries
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Libraries.class, "_libraries", "libraries", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getLibraries();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setLibraries( (org.gvsig.andami.plugins.config.generate.Libraries) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Libraries();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _libraries
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _popupMenus
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.PopupMenus.class, "_popupMenus", "popup-menus", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getPopupMenus();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setPopupMenus( (org.gvsig.andami.plugins.config.generate.PopupMenus) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.PopupMenus();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _popupMenus
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _extensions
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Extensions.class, "_extensions", "extensions", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginConfig target = (PluginConfig) object;
+                return target.getExtensions();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginConfig target = (PluginConfig) object;
+                    target.setExtensions( (org.gvsig.andami.plugins.config.generate.Extensions) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Extensions();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _extensions
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.PluginConfigDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.PluginConfig.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PluginConfig.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PluginConfig.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PluginConfig.java	(revision 38313)
@@ -0,0 +1,509 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class PluginConfig.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PluginConfig implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _updateUrl
+     */
+    private java.lang.String _updateUrl;
+
+    /**
+     * Field _icon
+     */
+    private org.gvsig.andami.plugins.config.generate.Icon _icon;
+
+    /**
+     * Field _dependsList
+     */
+    private java.util.Vector _dependsList;
+
+    /**
+     * Field _resourceBundle
+     */
+    private org.gvsig.andami.plugins.config.generate.ResourceBundle _resourceBundle;
+
+    /**
+     * Field _labelSetList
+     */
+    private java.util.Vector _labelSetList;
+
+    /**
+     * Field _libraries
+     */
+    private org.gvsig.andami.plugins.config.generate.Libraries _libraries;
+
+    /**
+     * Field _popupMenus
+     */
+    private org.gvsig.andami.plugins.config.generate.PopupMenus _popupMenus;
+
+    /**
+     * Field _extensions
+     */
+    private org.gvsig.andami.plugins.config.generate.Extensions _extensions;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginConfig() {
+        super();
+        _dependsList = new Vector();
+        _labelSetList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.PluginConfig()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addDepends
+     * 
+     * @param vDepends
+     */
+    public void addDepends(org.gvsig.andami.plugins.config.generate.Depends vDepends)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _dependsList.addElement(vDepends);
+    } //-- void addDepends(com.iver.andami.plugins.config.generate.Depends) 
+
+    /**
+     * Method addDepends
+     * 
+     * @param index
+     * @param vDepends
+     */
+    public void addDepends(int index, org.gvsig.andami.plugins.config.generate.Depends vDepends)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _dependsList.insertElementAt(vDepends, index);
+    } //-- void addDepends(int, com.iver.andami.plugins.config.generate.Depends) 
+
+    /**
+     * Method addLabelSet
+     * 
+     * @param vLabelSet
+     */
+    public void addLabelSet(org.gvsig.andami.plugins.config.generate.LabelSet vLabelSet)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _labelSetList.addElement(vLabelSet);
+    } //-- void addLabelSet(com.iver.andami.plugins.config.generate.LabelSet) 
+
+    /**
+     * Method addLabelSet
+     * 
+     * @param index
+     * @param vLabelSet
+     */
+    public void addLabelSet(int index, org.gvsig.andami.plugins.config.generate.LabelSet vLabelSet)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _labelSetList.insertElementAt(vLabelSet, index);
+    } //-- void addLabelSet(int, com.iver.andami.plugins.config.generate.LabelSet) 
+
+    /**
+     * Method enumerateDepends
+     */
+    public java.util.Enumeration enumerateDepends()
+    {
+        return _dependsList.elements();
+    } //-- java.util.Enumeration enumerateDepends() 
+
+    /**
+     * Method enumerateLabelSet
+     */
+    public java.util.Enumeration enumerateLabelSet()
+    {
+        return _labelSetList.elements();
+    } //-- java.util.Enumeration enumerateLabelSet() 
+
+    /**
+     * Method getDepends
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Depends getDepends(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _dependsList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Depends) _dependsList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Depends getDepends(int) 
+
+    /**
+     * Method getDepends
+     */
+    public org.gvsig.andami.plugins.config.generate.Depends[] getDepends()
+    {
+        int size = _dependsList.size();
+        org.gvsig.andami.plugins.config.generate.Depends[] mArray = new org.gvsig.andami.plugins.config.generate.Depends[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Depends) _dependsList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Depends[] getDepends() 
+
+    /**
+     * Method getDependsCount
+     */
+    public int getDependsCount()
+    {
+        return _dependsList.size();
+    } //-- int getDependsCount() 
+
+    /**
+     * Returns the value of field 'extensions'.
+     * 
+     * @return the value of field 'extensions'.
+     */
+    public org.gvsig.andami.plugins.config.generate.Extensions getExtensions()
+    {
+        return this._extensions;
+    } //-- com.iver.andami.plugins.config.generate.Extensions getExtensions() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public org.gvsig.andami.plugins.config.generate.Icon getIcon()
+    {
+        return this._icon;
+    } //-- com.iver.andami.plugins.config.generate.Icon getIcon() 
+
+    /**
+     * Method getLabelSet
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.LabelSet getLabelSet(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _labelSetList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.LabelSet) _labelSetList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.LabelSet getLabelSet(int) 
+
+    /**
+     * Method getLabelSet
+     */
+    public org.gvsig.andami.plugins.config.generate.LabelSet[] getLabelSet()
+    {
+        int size = _labelSetList.size();
+        org.gvsig.andami.plugins.config.generate.LabelSet[] mArray = new org.gvsig.andami.plugins.config.generate.LabelSet[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.LabelSet) _labelSetList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.LabelSet[] getLabelSet() 
+
+    /**
+     * Method getLabelSetCount
+     */
+    public int getLabelSetCount()
+    {
+        return _labelSetList.size();
+    } //-- int getLabelSetCount() 
+
+    /**
+     * Returns the value of field 'libraries'.
+     * 
+     * @return the value of field 'libraries'.
+     */
+    public org.gvsig.andami.plugins.config.generate.Libraries getLibraries()
+    {
+        return this._libraries;
+    } //-- com.iver.andami.plugins.config.generate.Libraries getLibraries() 
+
+    /**
+     * Returns the value of field 'popupMenus'.
+     * 
+     * @return the value of field 'popupMenus'.
+     */
+    public org.gvsig.andami.plugins.config.generate.PopupMenus getPopupMenus()
+    {
+        return this._popupMenus;
+    } //-- com.iver.andami.plugins.config.generate.PopupMenus getPopupMenus() 
+
+    /**
+     * Returns the value of field 'resourceBundle'.
+     * 
+     * @return the value of field 'resourceBundle'.
+     */
+    public org.gvsig.andami.plugins.config.generate.ResourceBundle getResourceBundle()
+    {
+        return this._resourceBundle;
+    } //-- com.iver.andami.plugins.config.generate.ResourceBundle getResourceBundle() 
+
+    /**
+     * Returns the value of field 'updateUrl'.
+     * 
+     * @return the value of field 'updateUrl'.
+     */
+    public java.lang.String getUpdateUrl()
+    {
+        return this._updateUrl;
+    } //-- java.lang.String getUpdateUrl() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllDepends
+     */
+    public void removeAllDepends()
+    {
+        _dependsList.removeAllElements();
+    } //-- void removeAllDepends() 
+
+    /**
+     * Method removeAllLabelSet
+     */
+    public void removeAllLabelSet()
+    {
+        _labelSetList.removeAllElements();
+    } //-- void removeAllLabelSet() 
+
+    /**
+     * Method removeDepends
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Depends removeDepends(int index)
+    {
+        java.lang.Object obj = _dependsList.elementAt(index);
+        _dependsList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Depends) obj;
+    } //-- com.iver.andami.plugins.config.generate.Depends removeDepends(int) 
+
+    /**
+     * Method removeLabelSet
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.LabelSet removeLabelSet(int index)
+    {
+        java.lang.Object obj = _labelSetList.elementAt(index);
+        _labelSetList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.LabelSet) obj;
+    } //-- com.iver.andami.plugins.config.generate.LabelSet removeLabelSet(int) 
+
+    /**
+     * Method setDepends
+     * 
+     * @param index
+     * @param vDepends
+     */
+    public void setDepends(int index, org.gvsig.andami.plugins.config.generate.Depends vDepends)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _dependsList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _dependsList.setElementAt(vDepends, index);
+    } //-- void setDepends(int, com.iver.andami.plugins.config.generate.Depends) 
+
+    /**
+     * Method setDepends
+     * 
+     * @param dependsArray
+     */
+    public void setDepends(org.gvsig.andami.plugins.config.generate.Depends[] dependsArray)
+    {
+        //-- copy array
+        _dependsList.removeAllElements();
+        for (int i = 0; i < dependsArray.length; i++) {
+            _dependsList.addElement(dependsArray[i]);
+        }
+    } //-- void setDepends(com.iver.andami.plugins.config.generate.Depends) 
+
+    /**
+     * Sets the value of field 'extensions'.
+     * 
+     * @param extensions the value of field 'extensions'.
+     */
+    public void setExtensions(org.gvsig.andami.plugins.config.generate.Extensions extensions)
+    {
+        this._extensions = extensions;
+    } //-- void setExtensions(com.iver.andami.plugins.config.generate.Extensions) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(org.gvsig.andami.plugins.config.generate.Icon icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(com.iver.andami.plugins.config.generate.Icon) 
+
+    /**
+     * Method setLabelSet
+     * 
+     * @param index
+     * @param vLabelSet
+     */
+    public void setLabelSet(int index, org.gvsig.andami.plugins.config.generate.LabelSet vLabelSet)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _labelSetList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _labelSetList.setElementAt(vLabelSet, index);
+    } //-- void setLabelSet(int, com.iver.andami.plugins.config.generate.LabelSet) 
+
+    /**
+     * Method setLabelSet
+     * 
+     * @param labelSetArray
+     */
+    public void setLabelSet(org.gvsig.andami.plugins.config.generate.LabelSet[] labelSetArray)
+    {
+        //-- copy array
+        _labelSetList.removeAllElements();
+        for (int i = 0; i < labelSetArray.length; i++) {
+            _labelSetList.addElement(labelSetArray[i]);
+        }
+    } //-- void setLabelSet(com.iver.andami.plugins.config.generate.LabelSet) 
+
+    /**
+     * Sets the value of field 'libraries'.
+     * 
+     * @param libraries the value of field 'libraries'.
+     */
+    public void setLibraries(org.gvsig.andami.plugins.config.generate.Libraries libraries)
+    {
+        this._libraries = libraries;
+    } //-- void setLibraries(com.iver.andami.plugins.config.generate.Libraries) 
+
+    /**
+     * Sets the value of field 'popupMenus'.
+     * 
+     * @param popupMenus the value of field 'popupMenus'.
+     */
+    public void setPopupMenus(org.gvsig.andami.plugins.config.generate.PopupMenus popupMenus)
+    {
+        this._popupMenus = popupMenus;
+    } //-- void setPopupMenus(com.iver.andami.plugins.config.generate.PopupMenus) 
+
+    /**
+     * Sets the value of field 'resourceBundle'.
+     * 
+     * @param resourceBundle the value of field 'resourceBundle'.
+     */
+    public void setResourceBundle(org.gvsig.andami.plugins.config.generate.ResourceBundle resourceBundle)
+    {
+        this._resourceBundle = resourceBundle;
+    } //-- void setResourceBundle(com.iver.andami.plugins.config.generate.ResourceBundle) 
+
+    /**
+     * Sets the value of field 'updateUrl'.
+     * 
+     * @param updateUrl the value of field 'updateUrl'.
+     */
+    public void setUpdateUrl(java.lang.String updateUrl)
+    {
+        this._updateUrl = updateUrl;
+    } //-- void setUpdateUrl(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.PluginConfig) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.PluginConfig.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PluginConfig.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java	(revision 38313)
@@ -0,0 +1,213 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class PopupMenuDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PopupMenuDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PopupMenuDescriptor() {
+        super();
+        xmlName = "popup-menu";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PopupMenu target = (PopupMenu) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PopupMenu target = (PopupMenu) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _menuList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Menu.class, "_menuList", "menu", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PopupMenu target = (PopupMenu) object;
+                return target.getMenu();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PopupMenu target = (PopupMenu) object;
+                    target.addMenu( (org.gvsig.andami.plugins.config.generate.Menu) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Menu();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _menuList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.PopupMenuDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.PopupMenu.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/IconDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/IconDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/IconDescriptor.java	(revision 38313)
@@ -0,0 +1,213 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class IconDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class IconDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public IconDescriptor() {
+        super();
+        xmlName = "icon";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Icon target = (Icon) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Icon target = (Icon) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _src
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_src", "src", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Icon target = (Icon) object;
+                return target.getSrc();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Icon target = (Icon) object;
+                    target.setSrc( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _src
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.IconDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Icon.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/IconDescriptor.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenu.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenu.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenu.java	(revision 38313)
@@ -0,0 +1,260 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class PopupMenu.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PopupMenu implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _menuList
+     */
+    private java.util.Vector _menuList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PopupMenu() {
+        super();
+        _menuList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.PopupMenu()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addMenu
+     * 
+     * @param vMenu
+     */
+    public void addMenu(org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _menuList.addElement(vMenu);
+    } //-- void addMenu(com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method addMenu
+     * 
+     * @param index
+     * @param vMenu
+     */
+    public void addMenu(int index, org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _menuList.insertElementAt(vMenu, index);
+    } //-- void addMenu(int, com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method enumerateMenu
+     */
+    public java.util.Enumeration enumerateMenu()
+    {
+        return _menuList.elements();
+    } //-- java.util.Enumeration enumerateMenu() 
+
+    /**
+     * Method getMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu getMenu(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _menuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Menu) _menuList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Menu getMenu(int) 
+
+    /**
+     * Method getMenu
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu[] getMenu()
+    {
+        int size = _menuList.size();
+        org.gvsig.andami.plugins.config.generate.Menu[] mArray = new org.gvsig.andami.plugins.config.generate.Menu[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Menu) _menuList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Menu[] getMenu() 
+
+    /**
+     * Method getMenuCount
+     */
+    public int getMenuCount()
+    {
+        return _menuList.size();
+    } //-- int getMenuCount() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllMenu
+     */
+    public void removeAllMenu()
+    {
+        _menuList.removeAllElements();
+    } //-- void removeAllMenu() 
+
+    /**
+     * Method removeMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu removeMenu(int index)
+    {
+        java.lang.Object obj = _menuList.elementAt(index);
+        _menuList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Menu) obj;
+    } //-- com.iver.andami.plugins.config.generate.Menu removeMenu(int) 
+
+    /**
+     * Method setMenu
+     * 
+     * @param index
+     * @param vMenu
+     */
+    public void setMenu(int index, org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _menuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _menuList.setElementAt(vMenu, index);
+    } //-- void setMenu(int, com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method setMenu
+     * 
+     * @param menuArray
+     */
+    public void setMenu(org.gvsig.andami.plugins.config.generate.Menu[] menuArray)
+    {
+        //-- copy array
+        _menuList.removeAllElements();
+        for (int i = 0; i < menuArray.length; i++) {
+            _menuList.addElement(menuArray[i]);
+        }
+    } //-- void setMenu(com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.PopupMenu) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.PopupMenu.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenu.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Icon.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Icon.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Icon.java	(revision 38313)
@@ -0,0 +1,159 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Icon.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Icon implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _src
+     */
+    private java.lang.String _src;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Icon() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Icon()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'src'.
+     * 
+     * @return the value of field 'src'.
+     */
+    public java.lang.String getSrc()
+    {
+        return this._src;
+    } //-- java.lang.String getSrc() 
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'src'.
+     * 
+     * @param src the value of field 'src'.
+     */
+    public void setSrc(java.lang.String src)
+    {
+        this._src = src;
+    } //-- void setSrc(java.lang.String) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Icon) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Icon.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Icon.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java	(revision 38313)
@@ -0,0 +1,211 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class LabelSetDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class LabelSetDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public LabelSetDescriptor() {
+        super();
+        xmlName = "label-set";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _className
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_className", "class-name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                LabelSet target = (LabelSet) object;
+                return target.getClassName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    LabelSet target = (LabelSet) object;
+                    target.setClassName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _className
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _labelList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Label.class, "_labelList", "label", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                LabelSet target = (LabelSet) object;
+                return target.getLabel();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    LabelSet target = (LabelSet) object;
+                    target.addLabel( (org.gvsig.andami.plugins.config.generate.Label) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Label();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _labelList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.LabelSetDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.LabelSet.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java	(revision 38313)
@@ -0,0 +1,244 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ComboButtonDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ComboButtonDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboButtonDescriptor() {
+        super();
+        xmlName = "combo-button";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButton target = (ComboButton) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButton target = (ComboButton) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Object.class, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButton target = (ComboButton) object;
+                return target.getPosition();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButton target = (ComboButton) object;
+                    target.setPosition( (java.lang.Object) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.Object();
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _comboButtonElementList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboButtonElement.class, "_comboButtonElementList", "combo-button-element", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButton target = (ComboButton) object;
+                return target.getComboButtonElement();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButton target = (ComboButton) object;
+                    target.addComboButtonElement( (org.gvsig.andami.plugins.config.generate.ComboButtonElement) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboButtonElement();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboButtonElementList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ComboButton.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelSet.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelSet.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelSet.java	(revision 38313)
@@ -0,0 +1,260 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class LabelSet.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class LabelSet implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _className
+     */
+    private java.lang.String _className;
+
+    /**
+     * Field _labelList
+     */
+    private java.util.Vector _labelList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public LabelSet() {
+        super();
+        _labelList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.LabelSet()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addLabel
+     * 
+     * @param vLabel
+     */
+    public void addLabel(org.gvsig.andami.plugins.config.generate.Label vLabel)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _labelList.addElement(vLabel);
+    } //-- void addLabel(com.iver.andami.plugins.config.generate.Label) 
+
+    /**
+     * Method addLabel
+     * 
+     * @param index
+     * @param vLabel
+     */
+    public void addLabel(int index, org.gvsig.andami.plugins.config.generate.Label vLabel)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _labelList.insertElementAt(vLabel, index);
+    } //-- void addLabel(int, com.iver.andami.plugins.config.generate.Label) 
+
+    /**
+     * Method enumerateLabel
+     */
+    public java.util.Enumeration enumerateLabel()
+    {
+        return _labelList.elements();
+    } //-- java.util.Enumeration enumerateLabel() 
+
+    /**
+     * Returns the value of field 'className'.
+     * 
+     * @return the value of field 'className'.
+     */
+    public java.lang.String getClassName()
+    {
+        return this._className;
+    } //-- java.lang.String getClassName() 
+
+    /**
+     * Method getLabel
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Label getLabel(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _labelList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Label) _labelList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Label getLabel(int) 
+
+    /**
+     * Method getLabel
+     */
+    public org.gvsig.andami.plugins.config.generate.Label[] getLabel()
+    {
+        int size = _labelList.size();
+        org.gvsig.andami.plugins.config.generate.Label[] mArray = new org.gvsig.andami.plugins.config.generate.Label[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Label) _labelList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Label[] getLabel() 
+
+    /**
+     * Method getLabelCount
+     */
+    public int getLabelCount()
+    {
+        return _labelList.size();
+    } //-- int getLabelCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllLabel
+     */
+    public void removeAllLabel()
+    {
+        _labelList.removeAllElements();
+    } //-- void removeAllLabel() 
+
+    /**
+     * Method removeLabel
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Label removeLabel(int index)
+    {
+        java.lang.Object obj = _labelList.elementAt(index);
+        _labelList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Label) obj;
+    } //-- com.iver.andami.plugins.config.generate.Label removeLabel(int) 
+
+    /**
+     * Sets the value of field 'className'.
+     * 
+     * @param className the value of field 'className'.
+     */
+    public void setClassName(java.lang.String className)
+    {
+        this._className = className;
+    } //-- void setClassName(java.lang.String) 
+
+    /**
+     * Method setLabel
+     * 
+     * @param index
+     * @param vLabel
+     */
+    public void setLabel(int index, org.gvsig.andami.plugins.config.generate.Label vLabel)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _labelList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _labelList.setElementAt(vLabel, index);
+    } //-- void setLabel(int, com.iver.andami.plugins.config.generate.Label) 
+
+    /**
+     * Method setLabel
+     * 
+     * @param labelArray
+     */
+    public void setLabel(org.gvsig.andami.plugins.config.generate.Label[] labelArray)
+    {
+        //-- copy array
+        _labelList.removeAllElements();
+        for (int i = 0; i < labelArray.length; i++) {
+            _labelList.addElement(labelArray[i]);
+        }
+    } //-- void setLabel(com.iver.andami.plugins.config.generate.Label) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.LabelSet) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.LabelSet.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelSet.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButton.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButton.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButton.java	(revision 38313)
@@ -0,0 +1,285 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ComboButton.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ComboButton implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _position
+     */
+    private java.lang.Object _position;
+
+    /**
+     * Field _comboButtonElementList
+     */
+    private java.util.Vector _comboButtonElementList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboButton() {
+        super();
+        _comboButtonElementList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.ComboButton()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addComboButtonElement
+     * 
+     * @param vComboButtonElement
+     */
+    public void addComboButtonElement(org.gvsig.andami.plugins.config.generate.ComboButtonElement vComboButtonElement)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonElementList.addElement(vComboButtonElement);
+    } //-- void addComboButtonElement(com.iver.andami.plugins.config.generate.ComboButtonElement) 
+
+    /**
+     * Method addComboButtonElement
+     * 
+     * @param index
+     * @param vComboButtonElement
+     */
+    public void addComboButtonElement(int index, org.gvsig.andami.plugins.config.generate.ComboButtonElement vComboButtonElement)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonElementList.insertElementAt(vComboButtonElement, index);
+    } //-- void addComboButtonElement(int, com.iver.andami.plugins.config.generate.ComboButtonElement) 
+
+    /**
+     * Method enumerateComboButtonElement
+     */
+    public java.util.Enumeration enumerateComboButtonElement()
+    {
+        return _comboButtonElementList.elements();
+    } //-- java.util.Enumeration enumerateComboButtonElement() 
+
+    /**
+     * Method getComboButtonElement
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButtonElement getComboButtonElement(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonElementList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboButtonElement) _comboButtonElementList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElement getComboButtonElement(int) 
+
+    /**
+     * Method getComboButtonElement
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButtonElement[] getComboButtonElement()
+    {
+        int size = _comboButtonElementList.size();
+        org.gvsig.andami.plugins.config.generate.ComboButtonElement[] mArray = new org.gvsig.andami.plugins.config.generate.ComboButtonElement[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboButtonElement) _comboButtonElementList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElement[] getComboButtonElement() 
+
+    /**
+     * Method getComboButtonElementCount
+     */
+    public int getComboButtonElementCount()
+    {
+        return _comboButtonElementList.size();
+    } //-- int getComboButtonElementCount() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public java.lang.Object getPosition()
+    {
+        return this._position;
+    } //-- java.lang.Object getPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllComboButtonElement
+     */
+    public void removeAllComboButtonElement()
+    {
+        _comboButtonElementList.removeAllElements();
+    } //-- void removeAllComboButtonElement() 
+
+    /**
+     * Method removeComboButtonElement
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButtonElement removeComboButtonElement(int index)
+    {
+        java.lang.Object obj = _comboButtonElementList.elementAt(index);
+        _comboButtonElementList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboButtonElement) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElement removeComboButtonElement(int) 
+
+    /**
+     * Method setComboButtonElement
+     * 
+     * @param index
+     * @param vComboButtonElement
+     */
+    public void setComboButtonElement(int index, org.gvsig.andami.plugins.config.generate.ComboButtonElement vComboButtonElement)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonElementList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboButtonElementList.setElementAt(vComboButtonElement, index);
+    } //-- void setComboButtonElement(int, com.iver.andami.plugins.config.generate.ComboButtonElement) 
+
+    /**
+     * Method setComboButtonElement
+     * 
+     * @param comboButtonElementArray
+     */
+    public void setComboButtonElement(org.gvsig.andami.plugins.config.generate.ComboButtonElement[] comboButtonElementArray)
+    {
+        //-- copy array
+        _comboButtonElementList.removeAllElements();
+        for (int i = 0; i < comboButtonElementArray.length; i++) {
+            _comboButtonElementList.addElement(comboButtonElementArray[i]);
+        }
+    } //-- void setComboButtonElement(com.iver.andami.plugins.config.generate.ComboButtonElement) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(java.lang.Object position)
+    {
+        this._position = position;
+    } //-- void setPosition(java.lang.Object) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ComboButton.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButton.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java	(revision 38313)
@@ -0,0 +1,209 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ExtensionsDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ExtensionsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ExtensionsDescriptor() {
+        super();
+        xmlName = "extensions";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _extensionList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Extension.class, "_extensionList", "extension", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Extensions target = (Extensions) object;
+                return target.getExtension();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Extensions target = (Extensions) object;
+                    target.addExtension( (org.gvsig.andami.plugins.config.generate.Extension) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Extension();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _extensionList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _skinExtensionList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.SkinExtension.class, "_skinExtensionList", "skin-extension", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Extensions target = (Extensions) object;
+                return target.getSkinExtension();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Extensions target = (Extensions) object;
+                    target.addSkinExtension( (org.gvsig.andami.plugins.config.generate.SkinExtension) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.SkinExtension();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _skinExtensionList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.ExtensionsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Extensions.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Extensions.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Extensions.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Extensions.java	(revision 38313)
@@ -0,0 +1,359 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Extensions.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Extensions implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _extensionList
+     */
+    private java.util.Vector _extensionList;
+
+    /**
+     * Field _skinExtensionList
+     */
+    private java.util.Vector _skinExtensionList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Extensions() {
+        super();
+        _extensionList = new Vector();
+        _skinExtensionList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.Extensions()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addExtension
+     * 
+     * @param vExtension
+     */
+    public void addExtension(org.gvsig.andami.plugins.config.generate.Extension vExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _extensionList.addElement(vExtension);
+    } //-- void addExtension(com.iver.andami.plugins.config.generate.Extension) 
+
+    /**
+     * Method addExtension
+     * 
+     * @param index
+     * @param vExtension
+     */
+    public void addExtension(int index, org.gvsig.andami.plugins.config.generate.Extension vExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _extensionList.insertElementAt(vExtension, index);
+    } //-- void addExtension(int, com.iver.andami.plugins.config.generate.Extension) 
+
+    /**
+     * Method addSkinExtension
+     * 
+     * @param vSkinExtension
+     */
+    public void addSkinExtension(org.gvsig.andami.plugins.config.generate.SkinExtension vSkinExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _skinExtensionList.addElement(vSkinExtension);
+    } //-- void addSkinExtension(com.iver.andami.plugins.config.generate.SkinExtension) 
+
+    /**
+     * Method addSkinExtension
+     * 
+     * @param index
+     * @param vSkinExtension
+     */
+    public void addSkinExtension(int index, org.gvsig.andami.plugins.config.generate.SkinExtension vSkinExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _skinExtensionList.insertElementAt(vSkinExtension, index);
+    } //-- void addSkinExtension(int, com.iver.andami.plugins.config.generate.SkinExtension) 
+
+    /**
+     * Method enumerateExtension
+     */
+    public java.util.Enumeration enumerateExtension()
+    {
+        return _extensionList.elements();
+    } //-- java.util.Enumeration enumerateExtension() 
+
+    /**
+     * Method enumerateSkinExtension
+     */
+    public java.util.Enumeration enumerateSkinExtension()
+    {
+        return _skinExtensionList.elements();
+    } //-- java.util.Enumeration enumerateSkinExtension() 
+
+    /**
+     * Method getExtension
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Extension getExtension(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _extensionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Extension) _extensionList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Extension getExtension(int) 
+
+    /**
+     * Method getExtension
+     */
+    public org.gvsig.andami.plugins.config.generate.Extension[] getExtension()
+    {
+        int size = _extensionList.size();
+        org.gvsig.andami.plugins.config.generate.Extension[] mArray = new org.gvsig.andami.plugins.config.generate.Extension[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Extension) _extensionList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Extension[] getExtension() 
+
+    /**
+     * Method getExtensionCount
+     */
+    public int getExtensionCount()
+    {
+        return _extensionList.size();
+    } //-- int getExtensionCount() 
+
+    /**
+     * Method getSkinExtension
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.SkinExtension getSkinExtension(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _skinExtensionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.SkinExtension) _skinExtensionList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.SkinExtension getSkinExtension(int) 
+
+    /**
+     * Method getSkinExtension
+     */
+    public org.gvsig.andami.plugins.config.generate.SkinExtension[] getSkinExtension()
+    {
+        int size = _skinExtensionList.size();
+        org.gvsig.andami.plugins.config.generate.SkinExtension[] mArray = new org.gvsig.andami.plugins.config.generate.SkinExtension[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.SkinExtension) _skinExtensionList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.SkinExtension[] getSkinExtension() 
+
+    /**
+     * Method getSkinExtensionCount
+     */
+    public int getSkinExtensionCount()
+    {
+        return _skinExtensionList.size();
+    } //-- int getSkinExtensionCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllExtension
+     */
+    public void removeAllExtension()
+    {
+        _extensionList.removeAllElements();
+    } //-- void removeAllExtension() 
+
+    /**
+     * Method removeAllSkinExtension
+     */
+    public void removeAllSkinExtension()
+    {
+        _skinExtensionList.removeAllElements();
+    } //-- void removeAllSkinExtension() 
+
+    /**
+     * Method removeExtension
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Extension removeExtension(int index)
+    {
+        java.lang.Object obj = _extensionList.elementAt(index);
+        _extensionList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Extension) obj;
+    } //-- com.iver.andami.plugins.config.generate.Extension removeExtension(int) 
+
+    /**
+     * Method removeSkinExtension
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.SkinExtension removeSkinExtension(int index)
+    {
+        java.lang.Object obj = _skinExtensionList.elementAt(index);
+        _skinExtensionList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.SkinExtension) obj;
+    } //-- com.iver.andami.plugins.config.generate.SkinExtension removeSkinExtension(int) 
+
+    /**
+     * Method setExtension
+     * 
+     * @param index
+     * @param vExtension
+     */
+    public void setExtension(int index, org.gvsig.andami.plugins.config.generate.Extension vExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _extensionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _extensionList.setElementAt(vExtension, index);
+    } //-- void setExtension(int, com.iver.andami.plugins.config.generate.Extension) 
+
+    /**
+     * Method setExtension
+     * 
+     * @param extensionArray
+     */
+    public void setExtension(org.gvsig.andami.plugins.config.generate.Extension[] extensionArray)
+    {
+        //-- copy array
+        _extensionList.removeAllElements();
+        for (int i = 0; i < extensionArray.length; i++) {
+            _extensionList.addElement(extensionArray[i]);
+        }
+    } //-- void setExtension(com.iver.andami.plugins.config.generate.Extension) 
+
+    /**
+     * Method setSkinExtension
+     * 
+     * @param index
+     * @param vSkinExtension
+     */
+    public void setSkinExtension(int index, org.gvsig.andami.plugins.config.generate.SkinExtension vSkinExtension)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _skinExtensionList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _skinExtensionList.setElementAt(vSkinExtension, index);
+    } //-- void setSkinExtension(int, com.iver.andami.plugins.config.generate.SkinExtension) 
+
+    /**
+     * Method setSkinExtension
+     * 
+     * @param skinExtensionArray
+     */
+    public void setSkinExtension(org.gvsig.andami.plugins.config.generate.SkinExtension[] skinExtensionArray)
+    {
+        //-- copy array
+        _skinExtensionList.removeAllElements();
+        for (int i = 0; i < skinExtensionArray.length; i++) {
+            _skinExtensionList.addElement(skinExtensionArray[i]);
+        }
+    } //-- void setSkinExtension(com.iver.andami.plugins.config.generate.SkinExtension) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Extensions) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Extensions.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Extensions.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java	(revision 38313)
@@ -0,0 +1,312 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class SkinExtensionTypeDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class SkinExtensionTypeDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SkinExtensionTypeDescriptor() {
+        super();
+        xmlName = "skin-extension-type";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _className
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_className", "class-name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getClassName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.setClassName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _className
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _menuList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.Menu.class, "_menuList", "menu", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getMenu();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.addMenu( (org.gvsig.andami.plugins.config.generate.Menu) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.Menu();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _menuList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _toolBarList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ToolBar.class, "_toolBarList", "tool-bar", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getToolBar();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.addToolBar( (org.gvsig.andami.plugins.config.generate.ToolBar) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ToolBar();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _toolBarList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _comboButtonList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboButton.class, "_comboButtonList", "combo-button", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getComboButton();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.addComboButton( (org.gvsig.andami.plugins.config.generate.ComboButton) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboButton();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboButtonList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _comboScaleList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboScale.class, "_comboScaleList", "combo-scale", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SkinExtensionType target = (SkinExtensionType) object;
+                return target.getComboScale();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SkinExtensionType target = (SkinExtensionType) object;
+                    target.addComboScale( (org.gvsig.andami.plugins.config.generate.ComboScale) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboScale();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboScaleList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.SkinExtensionTypeDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.SkinExtensionType.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java	(revision 38313)
@@ -0,0 +1,632 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class SkinExtensionType.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class SkinExtensionType implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _className
+     */
+    private java.lang.String _className;
+
+    /**
+     * Field _menuList
+     */
+    private java.util.Vector _menuList;
+
+    /**
+     * Field _toolBarList
+     */
+    private java.util.Vector _toolBarList;
+
+    /**
+     * Field _comboButtonList
+     */
+    private java.util.Vector _comboButtonList;
+
+    /**
+     * Field _comboScaleList
+     */
+    private java.util.Vector _comboScaleList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SkinExtensionType() {
+        super();
+        _menuList = new Vector();
+        _toolBarList = new Vector();
+        _comboButtonList = new Vector();
+        _comboScaleList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.SkinExtensionType()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addComboButton
+     * 
+     * @param vComboButton
+     */
+    public void addComboButton(org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonList.addElement(vComboButton);
+    } //-- void addComboButton(com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method addComboButton
+     * 
+     * @param index
+     * @param vComboButton
+     */
+    public void addComboButton(int index, org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonList.insertElementAt(vComboButton, index);
+    } //-- void addComboButton(int, com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method addComboScale
+     * 
+     * @param vComboScale
+     */
+    public void addComboScale(org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboScaleList.addElement(vComboScale);
+    } //-- void addComboScale(com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method addComboScale
+     * 
+     * @param index
+     * @param vComboScale
+     */
+    public void addComboScale(int index, org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboScaleList.insertElementAt(vComboScale, index);
+    } //-- void addComboScale(int, com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method addMenu
+     * 
+     * @param vMenu
+     */
+    public void addMenu(org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _menuList.addElement(vMenu);
+    } //-- void addMenu(com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method addMenu
+     * 
+     * @param index
+     * @param vMenu
+     */
+    public void addMenu(int index, org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _menuList.insertElementAt(vMenu, index);
+    } //-- void addMenu(int, com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method addToolBar
+     * 
+     * @param vToolBar
+     */
+    public void addToolBar(org.gvsig.andami.plugins.config.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _toolBarList.addElement(vToolBar);
+    } //-- void addToolBar(com.iver.andami.plugins.config.generate.ToolBar) 
+
+    /**
+     * Method addToolBar
+     * 
+     * @param index
+     * @param vToolBar
+     */
+    public void addToolBar(int index, org.gvsig.andami.plugins.config.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _toolBarList.insertElementAt(vToolBar, index);
+    } //-- void addToolBar(int, com.iver.andami.plugins.config.generate.ToolBar) 
+
+    /**
+     * Method enumerateComboButton
+     */
+    public java.util.Enumeration enumerateComboButton()
+    {
+        return _comboButtonList.elements();
+    } //-- java.util.Enumeration enumerateComboButton() 
+
+    /**
+     * Method enumerateComboScale
+     */
+    public java.util.Enumeration enumerateComboScale()
+    {
+        return _comboScaleList.elements();
+    } //-- java.util.Enumeration enumerateComboScale() 
+
+    /**
+     * Method enumerateMenu
+     */
+    public java.util.Enumeration enumerateMenu()
+    {
+        return _menuList.elements();
+    } //-- java.util.Enumeration enumerateMenu() 
+
+    /**
+     * Method enumerateToolBar
+     */
+    public java.util.Enumeration enumerateToolBar()
+    {
+        return _toolBarList.elements();
+    } //-- java.util.Enumeration enumerateToolBar() 
+
+    /**
+     * Returns the value of field 'className'.
+     * 
+     * @return the value of field 'className'.
+     */
+    public java.lang.String getClassName()
+    {
+        return this._className;
+    } //-- java.lang.String getClassName() 
+
+    /**
+     * Method getComboButton
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton getComboButton(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) _comboButtonList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboButton getComboButton(int) 
+
+    /**
+     * Method getComboButton
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton[] getComboButton()
+    {
+        int size = _comboButtonList.size();
+        org.gvsig.andami.plugins.config.generate.ComboButton[] mArray = new org.gvsig.andami.plugins.config.generate.ComboButton[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboButton) _comboButtonList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboButton[] getComboButton() 
+
+    /**
+     * Method getComboButtonCount
+     */
+    public int getComboButtonCount()
+    {
+        return _comboButtonList.size();
+    } //-- int getComboButtonCount() 
+
+    /**
+     * Method getComboScale
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale getComboScale(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboScaleList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) _comboScaleList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboScale getComboScale(int) 
+
+    /**
+     * Method getComboScale
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale[] getComboScale()
+    {
+        int size = _comboScaleList.size();
+        org.gvsig.andami.plugins.config.generate.ComboScale[] mArray = new org.gvsig.andami.plugins.config.generate.ComboScale[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboScale) _comboScaleList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboScale[] getComboScale() 
+
+    /**
+     * Method getComboScaleCount
+     */
+    public int getComboScaleCount()
+    {
+        return _comboScaleList.size();
+    } //-- int getComboScaleCount() 
+
+    /**
+     * Method getMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu getMenu(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _menuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.Menu) _menuList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.Menu getMenu(int) 
+
+    /**
+     * Method getMenu
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu[] getMenu()
+    {
+        int size = _menuList.size();
+        org.gvsig.andami.plugins.config.generate.Menu[] mArray = new org.gvsig.andami.plugins.config.generate.Menu[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.Menu) _menuList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.Menu[] getMenu() 
+
+    /**
+     * Method getMenuCount
+     */
+    public int getMenuCount()
+    {
+        return _menuList.size();
+    } //-- int getMenuCount() 
+
+    /**
+     * Method getToolBar
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ToolBar getToolBar(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _toolBarList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ToolBar) _toolBarList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ToolBar getToolBar(int) 
+
+    /**
+     * Method getToolBar
+     */
+    public org.gvsig.andami.plugins.config.generate.ToolBar[] getToolBar()
+    {
+        int size = _toolBarList.size();
+        org.gvsig.andami.plugins.config.generate.ToolBar[] mArray = new org.gvsig.andami.plugins.config.generate.ToolBar[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ToolBar) _toolBarList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ToolBar[] getToolBar() 
+
+    /**
+     * Method getToolBarCount
+     */
+    public int getToolBarCount()
+    {
+        return _toolBarList.size();
+    } //-- int getToolBarCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllComboButton
+     */
+    public void removeAllComboButton()
+    {
+        _comboButtonList.removeAllElements();
+    } //-- void removeAllComboButton() 
+
+    /**
+     * Method removeAllComboScale
+     */
+    public void removeAllComboScale()
+    {
+        _comboScaleList.removeAllElements();
+    } //-- void removeAllComboScale() 
+
+    /**
+     * Method removeAllMenu
+     */
+    public void removeAllMenu()
+    {
+        _menuList.removeAllElements();
+    } //-- void removeAllMenu() 
+
+    /**
+     * Method removeAllToolBar
+     */
+    public void removeAllToolBar()
+    {
+        _toolBarList.removeAllElements();
+    } //-- void removeAllToolBar() 
+
+    /**
+     * Method removeComboButton
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton removeComboButton(int index)
+    {
+        java.lang.Object obj = _comboButtonList.elementAt(index);
+        _comboButtonList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboButton removeComboButton(int) 
+
+    /**
+     * Method removeComboScale
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale removeComboScale(int index)
+    {
+        java.lang.Object obj = _comboScaleList.elementAt(index);
+        _comboScaleList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboScale removeComboScale(int) 
+
+    /**
+     * Method removeMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.Menu removeMenu(int index)
+    {
+        java.lang.Object obj = _menuList.elementAt(index);
+        _menuList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.Menu) obj;
+    } //-- com.iver.andami.plugins.config.generate.Menu removeMenu(int) 
+
+    /**
+     * Method removeToolBar
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ToolBar removeToolBar(int index)
+    {
+        java.lang.Object obj = _toolBarList.elementAt(index);
+        _toolBarList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ToolBar) obj;
+    } //-- com.iver.andami.plugins.config.generate.ToolBar removeToolBar(int) 
+
+    /**
+     * Sets the value of field 'className'.
+     * 
+     * @param className the value of field 'className'.
+     */
+    public void setClassName(java.lang.String className)
+    {
+        this._className = className;
+    } //-- void setClassName(java.lang.String) 
+
+    /**
+     * Method setComboButton
+     * 
+     * @param index
+     * @param vComboButton
+     */
+    public void setComboButton(int index, org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboButtonList.setElementAt(vComboButton, index);
+    } //-- void setComboButton(int, com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method setComboButton
+     * 
+     * @param comboButtonArray
+     */
+    public void setComboButton(org.gvsig.andami.plugins.config.generate.ComboButton[] comboButtonArray)
+    {
+        //-- copy array
+        _comboButtonList.removeAllElements();
+        for (int i = 0; i < comboButtonArray.length; i++) {
+            _comboButtonList.addElement(comboButtonArray[i]);
+        }
+    } //-- void setComboButton(com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method setComboScale
+     * 
+     * @param index
+     * @param vComboScale
+     */
+    public void setComboScale(int index, org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboScaleList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboScaleList.setElementAt(vComboScale, index);
+    } //-- void setComboScale(int, com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method setComboScale
+     * 
+     * @param comboScaleArray
+     */
+    public void setComboScale(org.gvsig.andami.plugins.config.generate.ComboScale[] comboScaleArray)
+    {
+        //-- copy array
+        _comboScaleList.removeAllElements();
+        for (int i = 0; i < comboScaleArray.length; i++) {
+            _comboScaleList.addElement(comboScaleArray[i]);
+        }
+    } //-- void setComboScale(com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method setMenu
+     * 
+     * @param index
+     * @param vMenu
+     */
+    public void setMenu(int index, org.gvsig.andami.plugins.config.generate.Menu vMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _menuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _menuList.setElementAt(vMenu, index);
+    } //-- void setMenu(int, com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method setMenu
+     * 
+     * @param menuArray
+     */
+    public void setMenu(org.gvsig.andami.plugins.config.generate.Menu[] menuArray)
+    {
+        //-- copy array
+        _menuList.removeAllElements();
+        for (int i = 0; i < menuArray.length; i++) {
+            _menuList.addElement(menuArray[i]);
+        }
+    } //-- void setMenu(com.iver.andami.plugins.config.generate.Menu) 
+
+    /**
+     * Method setToolBar
+     * 
+     * @param index
+     * @param vToolBar
+     */
+    public void setToolBar(int index, org.gvsig.andami.plugins.config.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _toolBarList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _toolBarList.setElementAt(vToolBar, index);
+    } //-- void setToolBar(int, com.iver.andami.plugins.config.generate.ToolBar) 
+
+    /**
+     * Method setToolBar
+     * 
+     * @param toolBarArray
+     */
+    public void setToolBar(org.gvsig.andami.plugins.config.generate.ToolBar[] toolBarArray)
+    {
+        //-- copy array
+        _toolBarList.removeAllElements();
+        for (int i = 0; i < toolBarArray.length; i++) {
+            _toolBarList.addElement(toolBarArray[i]);
+        }
+    } //-- void setToolBar(com.iver.andami.plugins.config.generate.ToolBar) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.SkinExtensionType) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.SkinExtensionType.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java	(revision 38313)
@@ -0,0 +1,175 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class LibrariesDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class LibrariesDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public LibrariesDescriptor() {
+        super();
+        xmlName = "libraries";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _libraryDir
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_libraryDir", "library-dir", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Libraries target = (Libraries) object;
+                return target.getLibraryDir();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Libraries target = (Libraries) object;
+                    target.setLibraryDir( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _libraryDir
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.LibrariesDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Libraries.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java	(revision 38313)
@@ -0,0 +1,133 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ExtensionDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ExtensionDescriptor extends ExtensionTypeDescriptor {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ExtensionDescriptor() {
+        super();
+        setExtendsWithoutFlatten(new ExtensionTypeDescriptor());
+        xmlName = "extension";
+    } //-- com.iver.andami.plugins.config.generate.ExtensionDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return super.getExtends();
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        if (identity == null)
+            return super.getIdentity();
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Extension.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Libraries.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Libraries.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Libraries.java	(revision 38313)
@@ -0,0 +1,134 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Libraries.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Libraries implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _libraryDir
+     */
+    private java.lang.String _libraryDir;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Libraries() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Libraries()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'libraryDir'.
+     * 
+     * @return the value of field 'libraryDir'.
+     */
+    public java.lang.String getLibraryDir()
+    {
+        return this._libraryDir;
+    } //-- java.lang.String getLibraryDir() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'libraryDir'.
+     * 
+     * @param libraryDir the value of field 'libraryDir'.
+     */
+    public void setLibraryDir(java.lang.String libraryDir)
+    {
+        this._libraryDir = libraryDir;
+    } //-- void setLibraryDir(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Libraries) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Libraries.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Libraries.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Extension.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Extension.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Extension.java	(revision 38313)
@@ -0,0 +1,106 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Extension.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Extension extends ExtensionType 
+implements java.io.Serializable
+{
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Extension() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Extension()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Extension) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Extension.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Extension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java	(revision 38313)
@@ -0,0 +1,173 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ResourceBundleDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ResourceBundleDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ResourceBundleDescriptor() {
+        super();
+        xmlName = "resourceBundle";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ResourceBundle target = (ResourceBundle) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ResourceBundle target = (ResourceBundle) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ResourceBundleDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ResourceBundle.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ResourceBundle.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ResourceBundle.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ResourceBundle.java	(revision 38313)
@@ -0,0 +1,134 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ResourceBundle.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ResourceBundle implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ResourceBundle() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ResourceBundle()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ResourceBundle) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ResourceBundle.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ResourceBundle.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java	(revision 38313)
@@ -0,0 +1,514 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class SelectableToolDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class SelectableToolDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SelectableToolDescriptor() {
+        super();
+        xmlName = "selectable-tool";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _isDefault
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_isDefault", "is-default", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                if(!target.hasIsDefault())
+                    return null;
+                return (target.getIsDefault() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteIsDefault();
+                        return;
+                    }
+                    target.setIsDefault( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _isDefault
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _last
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_last", "last", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                if(!target.hasLast())
+                    return null;
+                return (target.getLast() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteLast();
+                        return;
+                    }
+                    target.setLast( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _last
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setIcon( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _tooltip
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_tooltip", "tooltip", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getTooltip();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setTooltip( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _tooltip
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _enableText
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_enableText", "enable-text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getEnableText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setEnableText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _enableText
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _group
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_group", "group", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                return target.getGroup();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    target.setGroup( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _group
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Integer.TYPE, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                SelectableTool target = (SelectableTool) object;
+                if(!target.hasPosition())
+                    return null;
+                return new java.lang.Integer(target.getPosition());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    SelectableTool target = (SelectableTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePosition();
+                        return;
+                    }
+                    target.setPosition( ((java.lang.Integer)value).intValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            IntegerValidator typeValidator= new IntegerValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.SelectableToolDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.SelectableTool.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java	(revision 38313)
@@ -0,0 +1,133 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class SkinExtensionDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class SkinExtensionDescriptor extends SkinExtensionTypeDescriptor {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SkinExtensionDescriptor() {
+        super();
+        setExtendsWithoutFlatten(new SkinExtensionTypeDescriptor());
+        xmlName = "skin-extension";
+    } //-- com.iver.andami.plugins.config.generate.SkinExtensionDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return super.getExtends();
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        if (identity == null)
+            return super.getIdentity();
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.SkinExtension.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java	(revision 38313)
@@ -0,0 +1,396 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ToolBarDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ToolBarDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBarDescriptor() {
+        super();
+        xmlName = "tool-bar";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Integer.TYPE, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                if(!target.hasPosition())
+                    return null;
+                return new java.lang.Integer(target.getPosition());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePosition();
+                        return;
+                    }
+                    target.setPosition( ((java.lang.Integer)value).intValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            IntegerValidator typeValidator= new IntegerValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _isVisible
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_isVisible", "is-visible", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                if(!target.hasIsVisible())
+                    return null;
+                return (target.getIsVisible() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteIsVisible();
+                        return;
+                    }
+                    target.setIsVisible( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _isVisible
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _actionToolList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ActionTool.class, "_actionToolList", "action-tool", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getActionTool();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.addActionTool( (org.gvsig.andami.plugins.config.generate.ActionTool) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ActionTool();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionToolList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _selectableToolList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.SelectableTool.class, "_selectableToolList", "selectable-tool", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getSelectableTool();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.addSelectableTool( (org.gvsig.andami.plugins.config.generate.SelectableTool) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.SelectableTool();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _selectableToolList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _comboButtonList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboButton.class, "_comboButtonList", "combo-button", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getComboButton();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.addComboButton( (org.gvsig.andami.plugins.config.generate.ComboButton) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboButton();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboButtonList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _comboScaleList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.ComboScale.class, "_comboScaleList", "combo-scale", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getComboScale();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.addComboScale( (org.gvsig.andami.plugins.config.generate.ComboScale) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.ComboScale();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _comboScaleList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(0);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.ToolBarDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ToolBar.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SelectableTool.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SelectableTool.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SelectableTool.java	(revision 38313)
@@ -0,0 +1,426 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class SelectableTool.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class SelectableTool implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+    /**
+     * Field _isDefault
+     */
+    private boolean _isDefault;
+
+    /**
+     * keeps track of state for field: _isDefault
+     */
+    private boolean _has_isDefault;
+
+    /**
+     * Field _last
+     */
+    private boolean _last;
+
+    /**
+     * keeps track of state for field: _last
+     */
+    private boolean _has_last;
+
+    /**
+     * Field _icon
+     */
+    private java.lang.String _icon;
+
+    /**
+     * Field _tooltip
+     */
+    private java.lang.String _tooltip;
+
+    /**
+     * Field _enableText
+     */
+    private java.lang.String _enableText;
+
+    /**
+     * Field _group
+     */
+    private java.lang.String _group = "unico";
+
+    /**
+     * Field _position
+     */
+    private int _position;
+
+    /**
+     * keeps track of state for field: _position
+     */
+    private boolean _has_position;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SelectableTool() {
+        super();
+        setGroup("unico");
+    } //-- com.iver.andami.plugins.config.generate.SelectableTool()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteIsDefault
+     */
+    public void deleteIsDefault()
+    {
+        this._has_isDefault= false;
+    } //-- void deleteIsDefault() 
+
+    /**
+     * Method deleteLast
+     */
+    public void deleteLast()
+    {
+        this._has_last= false;
+    } //-- void deleteLast() 
+
+    /**
+     * Method deletePosition
+     */
+    public void deletePosition()
+    {
+        this._has_position= false;
+    } //-- void deletePosition() 
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'enableText'.
+     * 
+     * @return the value of field 'enableText'.
+     */
+    public java.lang.String getEnableText()
+    {
+        return this._enableText;
+    } //-- java.lang.String getEnableText() 
+
+    /**
+     * Returns the value of field 'group'.
+     * 
+     * @return the value of field 'group'.
+     */
+    public java.lang.String getGroup()
+    {
+        return this._group;
+    } //-- java.lang.String getGroup() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public java.lang.String getIcon()
+    {
+        return this._icon;
+    } //-- java.lang.String getIcon() 
+
+    /**
+     * Returns the value of field 'isDefault'.
+     * 
+     * @return the value of field 'isDefault'.
+     */
+    public boolean getIsDefault()
+    {
+        return this._isDefault;
+    } //-- boolean getIsDefault() 
+
+    /**
+     * Returns the value of field 'last'.
+     * 
+     * @return the value of field 'last'.
+     */
+    public boolean getLast()
+    {
+        return this._last;
+    } //-- boolean getLast() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public int getPosition()
+    {
+        return this._position;
+    } //-- int getPosition() 
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Returns the value of field 'tooltip'.
+     * 
+     * @return the value of field 'tooltip'.
+     */
+    public java.lang.String getTooltip()
+    {
+        return this._tooltip;
+    } //-- java.lang.String getTooltip() 
+
+    /**
+     * Method hasIsDefault
+     */
+    public boolean hasIsDefault()
+    {
+        return this._has_isDefault;
+    } //-- boolean hasIsDefault() 
+
+    /**
+     * Method hasLast
+     */
+    public boolean hasLast()
+    {
+        return this._has_last;
+    } //-- boolean hasLast() 
+
+    /**
+     * Method hasPosition
+     */
+    public boolean hasPosition()
+    {
+        return this._has_position;
+    } //-- boolean hasPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'enableText'.
+     * 
+     * @param enableText the value of field 'enableText'.
+     */
+    public void setEnableText(java.lang.String enableText)
+    {
+        this._enableText = enableText;
+    } //-- void setEnableText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'group'.
+     * 
+     * @param group the value of field 'group'.
+     */
+    public void setGroup(java.lang.String group)
+    {
+        this._group = group;
+    } //-- void setGroup(java.lang.String) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(java.lang.String icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(java.lang.String) 
+
+    /**
+     * Sets the value of field 'isDefault'.
+     * 
+     * @param isDefault the value of field 'isDefault'.
+     */
+    public void setIsDefault(boolean isDefault)
+    {
+        this._isDefault = isDefault;
+        this._has_isDefault = true;
+    } //-- void setIsDefault(boolean) 
+
+    /**
+     * Sets the value of field 'last'.
+     * 
+     * @param last the value of field 'last'.
+     */
+    public void setLast(boolean last)
+    {
+        this._last = last;
+        this._has_last = true;
+    } //-- void setLast(boolean) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(int position)
+    {
+        this._position = position;
+        this._has_position = true;
+    } //-- void setPosition(int) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'tooltip'.
+     * 
+     * @param tooltip the value of field 'tooltip'.
+     */
+    public void setTooltip(java.lang.String tooltip)
+    {
+        this._tooltip = tooltip;
+    } //-- void setTooltip(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.SelectableTool) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.SelectableTool.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SelectableTool.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtension.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtension.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtension.java	(revision 38313)
@@ -0,0 +1,106 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class SkinExtension.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class SkinExtension extends SkinExtensionType 
+implements java.io.Serializable
+{
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public SkinExtension() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.SkinExtension()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.SkinExtension) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.SkinExtension.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/SkinExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ToolBar.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ToolBar.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ToolBar.java	(revision 38313)
@@ -0,0 +1,726 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ToolBar.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ToolBar implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _position
+     */
+    private int _position = 50;
+
+    /**
+     * keeps track of state for field: _position
+     */
+    private boolean _has_position;
+
+    /**
+     * Field _isVisible
+     */
+    private boolean _isVisible = true;
+
+    /**
+     * keeps track of state for field: _isVisible
+     */
+    private boolean _has_isVisible;
+
+    /**
+     * Field _actionToolList
+     */
+    private java.util.Vector _actionToolList;
+
+    /**
+     * Field _selectableToolList
+     */
+    private java.util.Vector _selectableToolList;
+
+    /**
+     * Field _comboButtonList
+     */
+    private java.util.Vector _comboButtonList;
+
+    /**
+     * Field _comboScaleList
+     */
+    private java.util.Vector _comboScaleList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBar() {
+        super();
+        _actionToolList = new Vector();
+        _selectableToolList = new Vector();
+        _comboButtonList = new Vector();
+        _comboScaleList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.ToolBar()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addActionTool
+     * 
+     * @param vActionTool
+     */
+    public void addActionTool(org.gvsig.andami.plugins.config.generate.ActionTool vActionTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _actionToolList.addElement(vActionTool);
+    } //-- void addActionTool(com.iver.andami.plugins.config.generate.ActionTool) 
+
+    /**
+     * Method addActionTool
+     * 
+     * @param index
+     * @param vActionTool
+     */
+    public void addActionTool(int index, org.gvsig.andami.plugins.config.generate.ActionTool vActionTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _actionToolList.insertElementAt(vActionTool, index);
+    } //-- void addActionTool(int, com.iver.andami.plugins.config.generate.ActionTool) 
+
+    /**
+     * Method addComboButton
+     * 
+     * @param vComboButton
+     */
+    public void addComboButton(org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonList.addElement(vComboButton);
+    } //-- void addComboButton(com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method addComboButton
+     * 
+     * @param index
+     * @param vComboButton
+     */
+    public void addComboButton(int index, org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboButtonList.insertElementAt(vComboButton, index);
+    } //-- void addComboButton(int, com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method addComboScale
+     * 
+     * @param vComboScale
+     */
+    public void addComboScale(org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboScaleList.addElement(vComboScale);
+    } //-- void addComboScale(com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method addComboScale
+     * 
+     * @param index
+     * @param vComboScale
+     */
+    public void addComboScale(int index, org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _comboScaleList.insertElementAt(vComboScale, index);
+    } //-- void addComboScale(int, com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method addSelectableTool
+     * 
+     * @param vSelectableTool
+     */
+    public void addSelectableTool(org.gvsig.andami.plugins.config.generate.SelectableTool vSelectableTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _selectableToolList.addElement(vSelectableTool);
+    } //-- void addSelectableTool(com.iver.andami.plugins.config.generate.SelectableTool) 
+
+    /**
+     * Method addSelectableTool
+     * 
+     * @param index
+     * @param vSelectableTool
+     */
+    public void addSelectableTool(int index, org.gvsig.andami.plugins.config.generate.SelectableTool vSelectableTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _selectableToolList.insertElementAt(vSelectableTool, index);
+    } //-- void addSelectableTool(int, com.iver.andami.plugins.config.generate.SelectableTool) 
+
+    /**
+     * Method deleteIsVisible
+     */
+    public void deleteIsVisible()
+    {
+        this._has_isVisible= false;
+    } //-- void deleteIsVisible() 
+
+    /**
+     * Method deletePosition
+     */
+    public void deletePosition()
+    {
+        this._has_position= false;
+    } //-- void deletePosition() 
+
+    /**
+     * Method enumerateActionTool
+     */
+    public java.util.Enumeration enumerateActionTool()
+    {
+        return _actionToolList.elements();
+    } //-- java.util.Enumeration enumerateActionTool() 
+
+    /**
+     * Method enumerateComboButton
+     */
+    public java.util.Enumeration enumerateComboButton()
+    {
+        return _comboButtonList.elements();
+    } //-- java.util.Enumeration enumerateComboButton() 
+
+    /**
+     * Method enumerateComboScale
+     */
+    public java.util.Enumeration enumerateComboScale()
+    {
+        return _comboScaleList.elements();
+    } //-- java.util.Enumeration enumerateComboScale() 
+
+    /**
+     * Method enumerateSelectableTool
+     */
+    public java.util.Enumeration enumerateSelectableTool()
+    {
+        return _selectableToolList.elements();
+    } //-- java.util.Enumeration enumerateSelectableTool() 
+
+    /**
+     * Method getActionTool
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ActionTool getActionTool(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _actionToolList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ActionTool) _actionToolList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ActionTool getActionTool(int) 
+
+    /**
+     * Method getActionTool
+     */
+    public org.gvsig.andami.plugins.config.generate.ActionTool[] getActionTool()
+    {
+        int size = _actionToolList.size();
+        org.gvsig.andami.plugins.config.generate.ActionTool[] mArray = new org.gvsig.andami.plugins.config.generate.ActionTool[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ActionTool) _actionToolList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ActionTool[] getActionTool() 
+
+    /**
+     * Method getActionToolCount
+     */
+    public int getActionToolCount()
+    {
+        return _actionToolList.size();
+    } //-- int getActionToolCount() 
+
+    /**
+     * Method getComboButton
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton getComboButton(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) _comboButtonList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboButton getComboButton(int) 
+
+    /**
+     * Method getComboButton
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton[] getComboButton()
+    {
+        int size = _comboButtonList.size();
+        org.gvsig.andami.plugins.config.generate.ComboButton[] mArray = new org.gvsig.andami.plugins.config.generate.ComboButton[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboButton) _comboButtonList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboButton[] getComboButton() 
+
+    /**
+     * Method getComboButtonCount
+     */
+    public int getComboButtonCount()
+    {
+        return _comboButtonList.size();
+    } //-- int getComboButtonCount() 
+
+    /**
+     * Method getComboScale
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale getComboScale(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboScaleList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) _comboScaleList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.ComboScale getComboScale(int) 
+
+    /**
+     * Method getComboScale
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale[] getComboScale()
+    {
+        int size = _comboScaleList.size();
+        org.gvsig.andami.plugins.config.generate.ComboScale[] mArray = new org.gvsig.andami.plugins.config.generate.ComboScale[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.ComboScale) _comboScaleList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.ComboScale[] getComboScale() 
+
+    /**
+     * Method getComboScaleCount
+     */
+    public int getComboScaleCount()
+    {
+        return _comboScaleList.size();
+    } //-- int getComboScaleCount() 
+
+    /**
+     * Returns the value of field 'isVisible'.
+     * 
+     * @return the value of field 'isVisible'.
+     */
+    public boolean getIsVisible()
+    {
+        return this._isVisible;
+    } //-- boolean getIsVisible() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public int getPosition()
+    {
+        return this._position;
+    } //-- int getPosition() 
+
+    /**
+     * Method getSelectableTool
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.SelectableTool getSelectableTool(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _selectableToolList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.SelectableTool) _selectableToolList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.SelectableTool getSelectableTool(int) 
+
+    /**
+     * Method getSelectableTool
+     */
+    public org.gvsig.andami.plugins.config.generate.SelectableTool[] getSelectableTool()
+    {
+        int size = _selectableToolList.size();
+        org.gvsig.andami.plugins.config.generate.SelectableTool[] mArray = new org.gvsig.andami.plugins.config.generate.SelectableTool[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.SelectableTool) _selectableToolList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.SelectableTool[] getSelectableTool() 
+
+    /**
+     * Method getSelectableToolCount
+     */
+    public int getSelectableToolCount()
+    {
+        return _selectableToolList.size();
+    } //-- int getSelectableToolCount() 
+
+    /**
+     * Method hasIsVisible
+     */
+    public boolean hasIsVisible()
+    {
+        return this._has_isVisible;
+    } //-- boolean hasIsVisible() 
+
+    /**
+     * Method hasPosition
+     */
+    public boolean hasPosition()
+    {
+        return this._has_position;
+    } //-- boolean hasPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeActionTool
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ActionTool removeActionTool(int index)
+    {
+        java.lang.Object obj = _actionToolList.elementAt(index);
+        _actionToolList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ActionTool) obj;
+    } //-- com.iver.andami.plugins.config.generate.ActionTool removeActionTool(int) 
+
+    /**
+     * Method removeAllActionTool
+     */
+    public void removeAllActionTool()
+    {
+        _actionToolList.removeAllElements();
+    } //-- void removeAllActionTool() 
+
+    /**
+     * Method removeAllComboButton
+     */
+    public void removeAllComboButton()
+    {
+        _comboButtonList.removeAllElements();
+    } //-- void removeAllComboButton() 
+
+    /**
+     * Method removeAllComboScale
+     */
+    public void removeAllComboScale()
+    {
+        _comboScaleList.removeAllElements();
+    } //-- void removeAllComboScale() 
+
+    /**
+     * Method removeAllSelectableTool
+     */
+    public void removeAllSelectableTool()
+    {
+        _selectableToolList.removeAllElements();
+    } //-- void removeAllSelectableTool() 
+
+    /**
+     * Method removeComboButton
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboButton removeComboButton(int index)
+    {
+        java.lang.Object obj = _comboButtonList.elementAt(index);
+        _comboButtonList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboButton) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboButton removeComboButton(int) 
+
+    /**
+     * Method removeComboScale
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.ComboScale removeComboScale(int index)
+    {
+        java.lang.Object obj = _comboScaleList.elementAt(index);
+        _comboScaleList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) obj;
+    } //-- com.iver.andami.plugins.config.generate.ComboScale removeComboScale(int) 
+
+    /**
+     * Method removeSelectableTool
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.SelectableTool removeSelectableTool(int index)
+    {
+        java.lang.Object obj = _selectableToolList.elementAt(index);
+        _selectableToolList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.SelectableTool) obj;
+    } //-- com.iver.andami.plugins.config.generate.SelectableTool removeSelectableTool(int) 
+
+    /**
+     * Method setActionTool
+     * 
+     * @param index
+     * @param vActionTool
+     */
+    public void setActionTool(int index, org.gvsig.andami.plugins.config.generate.ActionTool vActionTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _actionToolList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _actionToolList.setElementAt(vActionTool, index);
+    } //-- void setActionTool(int, com.iver.andami.plugins.config.generate.ActionTool) 
+
+    /**
+     * Method setActionTool
+     * 
+     * @param actionToolArray
+     */
+    public void setActionTool(org.gvsig.andami.plugins.config.generate.ActionTool[] actionToolArray)
+    {
+        //-- copy array
+        _actionToolList.removeAllElements();
+        for (int i = 0; i < actionToolArray.length; i++) {
+            _actionToolList.addElement(actionToolArray[i]);
+        }
+    } //-- void setActionTool(com.iver.andami.plugins.config.generate.ActionTool) 
+
+    /**
+     * Method setComboButton
+     * 
+     * @param index
+     * @param vComboButton
+     */
+    public void setComboButton(int index, org.gvsig.andami.plugins.config.generate.ComboButton vComboButton)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboButtonList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboButtonList.setElementAt(vComboButton, index);
+    } //-- void setComboButton(int, com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method setComboButton
+     * 
+     * @param comboButtonArray
+     */
+    public void setComboButton(org.gvsig.andami.plugins.config.generate.ComboButton[] comboButtonArray)
+    {
+        //-- copy array
+        _comboButtonList.removeAllElements();
+        for (int i = 0; i < comboButtonArray.length; i++) {
+            _comboButtonList.addElement(comboButtonArray[i]);
+        }
+    } //-- void setComboButton(com.iver.andami.plugins.config.generate.ComboButton) 
+
+    /**
+     * Method setComboScale
+     * 
+     * @param index
+     * @param vComboScale
+     */
+    public void setComboScale(int index, org.gvsig.andami.plugins.config.generate.ComboScale vComboScale)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _comboScaleList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _comboScaleList.setElementAt(vComboScale, index);
+    } //-- void setComboScale(int, com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Method setComboScale
+     * 
+     * @param comboScaleArray
+     */
+    public void setComboScale(org.gvsig.andami.plugins.config.generate.ComboScale[] comboScaleArray)
+    {
+        //-- copy array
+        _comboScaleList.removeAllElements();
+        for (int i = 0; i < comboScaleArray.length; i++) {
+            _comboScaleList.addElement(comboScaleArray[i]);
+        }
+    } //-- void setComboScale(com.iver.andami.plugins.config.generate.ComboScale) 
+
+    /**
+     * Sets the value of field 'isVisible'.
+     * 
+     * @param isVisible the value of field 'isVisible'.
+     */
+    public void setIsVisible(boolean isVisible)
+    {
+        this._isVisible = isVisible;
+        this._has_isVisible = true;
+    } //-- void setIsVisible(boolean) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(int position)
+    {
+        this._position = position;
+        this._has_position = true;
+    } //-- void setPosition(int) 
+
+    /**
+     * Method setSelectableTool
+     * 
+     * @param index
+     * @param vSelectableTool
+     */
+    public void setSelectableTool(int index, org.gvsig.andami.plugins.config.generate.SelectableTool vSelectableTool)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _selectableToolList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _selectableToolList.setElementAt(vSelectableTool, index);
+    } //-- void setSelectableTool(int, com.iver.andami.plugins.config.generate.SelectableTool) 
+
+    /**
+     * Method setSelectableTool
+     * 
+     * @param selectableToolArray
+     */
+    public void setSelectableTool(org.gvsig.andami.plugins.config.generate.SelectableTool[] selectableToolArray)
+    {
+        //-- copy array
+        _selectableToolList.removeAllElements();
+        for (int i = 0; i < selectableToolArray.length; i++) {
+            _selectableToolList.addElement(selectableToolArray[i]);
+        }
+    } //-- void setSelectableTool(com.iver.andami.plugins.config.generate.SelectableTool) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ToolBar) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ToolBar.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ToolBar.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java	(revision 38313)
@@ -0,0 +1,473 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class MenuDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class MenuDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public MenuDescriptor() {
+        super();
+        xmlName = "menu";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _key
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_key", "key", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getKey();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setKey( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _key
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setIcon( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _tooltip
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_tooltip", "tooltip", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getTooltip();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setTooltip( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _tooltip
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _enableText
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_enableText", "enable-text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getEnableText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setEnableText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _enableText
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _mnemonic
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_mnemonic", "mnemonic", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getMnemonic();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setMnemonic( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _mnemonic
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Integer.TYPE, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                if(!target.hasPosition())
+                    return null;
+                return new java.lang.Integer(target.getPosition());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePosition();
+                        return;
+                    }
+                    target.setPosition( ((java.lang.Integer)value).intValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            IntegerValidator typeValidator= new IntegerValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _is_separator
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_is_separator", "is_separator", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Menu target = (Menu) object;
+                if(!target.hasIs_separator())
+                    return null;
+                return (target.getIs_separator() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Menu target = (Menu) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteIs_separator();
+                        return;
+                    }
+                    target.setIs_separator( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _is_separator
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.MenuDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Menu.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java	(revision 38313)
@@ -0,0 +1,213 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ComboButtonElementDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ComboButtonElementDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboButtonElementDescriptor() {
+        super();
+        xmlName = "combo-button-element";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButtonElement target = (ComboButtonElement) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButtonElement target = (ComboButtonElement) object;
+                    target.setIcon( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboButtonElement target = (ComboButtonElement) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboButtonElement target = (ComboButtonElement) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElementDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ComboButtonElement.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Menu.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Menu.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Menu.java	(revision 38313)
@@ -0,0 +1,378 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Menu.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Menu implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+    /**
+     * Field _key
+     */
+    private java.lang.String _key;
+
+    /**
+     * Field _icon
+     */
+    private java.lang.String _icon;
+
+    /**
+     * Field _tooltip
+     */
+    private java.lang.String _tooltip;
+
+    /**
+     * Field _enableText
+     */
+    private java.lang.String _enableText;
+
+    /**
+     * Field _mnemonic
+     */
+    private java.lang.String _mnemonic;
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _position
+     */
+    private int _position;
+
+    /**
+     * keeps track of state for field: _position
+     */
+    private boolean _has_position;
+
+    /**
+     * Field _is_separator
+     */
+    private boolean _is_separator;
+
+    /**
+     * keeps track of state for field: _is_separator
+     */
+    private boolean _has_is_separator;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Menu() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Menu()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteIs_separator
+     */
+    public void deleteIs_separator()
+    {
+        this._has_is_separator= false;
+    } //-- void deleteIs_separator() 
+
+    /**
+     * Method deletePosition
+     */
+    public void deletePosition()
+    {
+        this._has_position= false;
+    } //-- void deletePosition() 
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'enableText'.
+     * 
+     * @return the value of field 'enableText'.
+     */
+    public java.lang.String getEnableText()
+    {
+        return this._enableText;
+    } //-- java.lang.String getEnableText() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public java.lang.String getIcon()
+    {
+        return this._icon;
+    } //-- java.lang.String getIcon() 
+
+    /**
+     * Returns the value of field 'is_separator'.
+     * 
+     * @return the value of field 'is_separator'.
+     */
+    public boolean getIs_separator()
+    {
+        return this._is_separator;
+    } //-- boolean getIs_separator() 
+
+    /**
+     * Returns the value of field 'key'.
+     * 
+     * @return the value of field 'key'.
+     */
+    public java.lang.String getKey()
+    {
+        return this._key;
+    } //-- java.lang.String getKey() 
+
+    /**
+     * Returns the value of field 'mnemonic'.
+     * 
+     * @return the value of field 'mnemonic'.
+     */
+    public java.lang.String getMnemonic()
+    {
+        return this._mnemonic;
+    } //-- java.lang.String getMnemonic() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public int getPosition()
+    {
+        return this._position;
+    } //-- int getPosition() 
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Returns the value of field 'tooltip'.
+     * 
+     * @return the value of field 'tooltip'.
+     */
+    public java.lang.String getTooltip()
+    {
+        return this._tooltip;
+    } //-- java.lang.String getTooltip() 
+
+    /**
+     * Method hasIs_separator
+     */
+    public boolean hasIs_separator()
+    {
+        return this._has_is_separator;
+    } //-- boolean hasIs_separator() 
+
+    /**
+     * Method hasPosition
+     */
+    public boolean hasPosition()
+    {
+        return this._has_position;
+    } //-- boolean hasPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'enableText'.
+     * 
+     * @param enableText the value of field 'enableText'.
+     */
+    public void setEnableText(java.lang.String enableText)
+    {
+        this._enableText = enableText;
+    } //-- void setEnableText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(java.lang.String icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(java.lang.String) 
+
+    /**
+     * Sets the value of field 'is_separator'.
+     * 
+     * @param is_separator the value of field 'is_separator'.
+     */
+    public void setIs_separator(boolean is_separator)
+    {
+        this._is_separator = is_separator;
+        this._has_is_separator = true;
+    } //-- void setIs_separator(boolean) 
+
+    /**
+     * Sets the value of field 'key'.
+     * 
+     * @param key the value of field 'key'.
+     */
+    public void setKey(java.lang.String key)
+    {
+        this._key = key;
+    } //-- void setKey(java.lang.String) 
+
+    /**
+     * Sets the value of field 'mnemonic'.
+     * 
+     * @param mnemonic the value of field 'mnemonic'.
+     */
+    public void setMnemonic(java.lang.String mnemonic)
+    {
+        this._mnemonic = mnemonic;
+    } //-- void setMnemonic(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(int position)
+    {
+        this._position = position;
+        this._has_position = true;
+    } //-- void setPosition(int) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'tooltip'.
+     * 
+     * @param tooltip the value of field 'tooltip'.
+     */
+    public void setTooltip(java.lang.String tooltip)
+    {
+        this._tooltip = tooltip;
+    } //-- void setTooltip(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Menu) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Menu.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Menu.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java	(revision 38313)
@@ -0,0 +1,159 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ComboButtonElement.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ComboButtonElement implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _icon
+     */
+    private java.lang.String _icon;
+
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboButtonElement() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ComboButtonElement()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public java.lang.String getIcon()
+    {
+        return this._icon;
+    } //-- java.lang.String getIcon() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(java.lang.String icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ComboButtonElement) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ComboButtonElement.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java	(revision 38313)
@@ -0,0 +1,347 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ComboScaleDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ComboScaleDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboScaleDescriptor() {
+        super();
+        xmlName = "combo-scale";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _label
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_label", "label", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getLabel();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setLabel( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _label
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _elements
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Object.class, "_elements", "elements", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getElements();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setElements( (java.lang.Object) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.Object();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _elements
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _value
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Object.class, "_value", "value", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getValue();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setValue( (java.lang.Object) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.Object();
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _value
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Object.class, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ComboScale target = (ComboScale) object;
+                return target.getPosition();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ComboScale target = (ComboScale) object;
+                    target.setPosition( (java.lang.Object) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.Object();
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ComboScaleDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ComboScale.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboScale.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboScale.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboScale.java	(revision 38313)
@@ -0,0 +1,259 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ComboScale.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ComboScale implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _label
+     */
+    private java.lang.String _label;
+
+    /**
+     * Field _elements
+     */
+    private java.lang.Object _elements;
+
+    /**
+     * Field _value
+     */
+    private java.lang.Object _value;
+
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+    /**
+     * Field _position
+     */
+    private java.lang.Object _position;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ComboScale() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ComboScale()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'elements'.
+     * 
+     * @return the value of field 'elements'.
+     */
+    public java.lang.Object getElements()
+    {
+        return this._elements;
+    } //-- java.lang.Object getElements() 
+
+    /**
+     * Returns the value of field 'label'.
+     * 
+     * @return the value of field 'label'.
+     */
+    public java.lang.String getLabel()
+    {
+        return this._label;
+    } //-- java.lang.String getLabel() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public java.lang.Object getPosition()
+    {
+        return this._position;
+    } //-- java.lang.Object getPosition() 
+
+    /**
+     * Returns the value of field 'value'.
+     * 
+     * @return the value of field 'value'.
+     */
+    public java.lang.Object getValue()
+    {
+        return this._value;
+    } //-- java.lang.Object getValue() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'elements'.
+     * 
+     * @param elements the value of field 'elements'.
+     */
+    public void setElements(java.lang.Object elements)
+    {
+        this._elements = elements;
+    } //-- void setElements(java.lang.Object) 
+
+    /**
+     * Sets the value of field 'label'.
+     * 
+     * @param label the value of field 'label'.
+     */
+    public void setLabel(java.lang.String label)
+    {
+        this._label = label;
+    } //-- void setLabel(java.lang.String) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(java.lang.Object position)
+    {
+        this._position = position;
+    } //-- void setPosition(java.lang.Object) 
+
+    /**
+     * Sets the value of field 'value'.
+     * 
+     * @param value the value of field 'value'.
+     */
+    public void setValue(java.lang.Object value)
+    {
+        this._value = value;
+    } //-- void setValue(java.lang.Object) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ComboScale) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ComboScale.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ComboScale.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java	(revision 38313)
@@ -0,0 +1,437 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ActionToolDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ActionToolDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ActionToolDescriptor() {
+        super();
+        xmlName = "action-tool";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _actionCommand
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_actionCommand", "action-command", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getActionCommand();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setActionCommand( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _actionCommand
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _icon
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_icon", "icon", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getIcon();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setIcon( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _icon
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _last
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_last", "last", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                if(!target.hasLast())
+                    return null;
+                return (target.getLast() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteLast();
+                        return;
+                    }
+                    target.setLast( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _last
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _tooltip
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_tooltip", "tooltip", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getTooltip();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setTooltip( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _tooltip
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _enableText
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_enableText", "enable-text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                return target.getEnableText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    target.setEnableText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _enableText
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _position
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Integer.TYPE, "_position", "position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ActionTool target = (ActionTool) object;
+                if(!target.hasPosition())
+                    return null;
+                return new java.lang.Integer(target.getPosition());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ActionTool target = (ActionTool) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePosition();
+                        return;
+                    }
+                    target.setPosition( ((java.lang.Integer)value).intValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _position
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            IntegerValidator typeValidator= new IntegerValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ActionToolDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ActionTool.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java	(revision 38313)
@@ -0,0 +1,175 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class PopupMenusDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PopupMenusDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PopupMenusDescriptor() {
+        super();
+        xmlName = "popup-menus";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _popupMenuList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.plugins.config.generate.PopupMenu.class, "_popupMenuList", "popup-menu", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PopupMenus target = (PopupMenus) object;
+                return target.getPopupMenu();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PopupMenus target = (PopupMenus) object;
+                    target.addPopupMenu( (org.gvsig.andami.plugins.config.generate.PopupMenu) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.plugins.config.generate.PopupMenu();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _popupMenuList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.plugins.config.generate.PopupMenusDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.PopupMenus.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ActionTool.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ActionTool.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ActionTool.java	(revision 38313)
@@ -0,0 +1,353 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ActionTool.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ActionTool implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _actionCommand
+     */
+    private java.lang.String _actionCommand;
+
+    /**
+     * Field _icon
+     */
+    private java.lang.String _icon;
+
+    /**
+     * Field _last
+     */
+    private boolean _last;
+
+    /**
+     * keeps track of state for field: _last
+     */
+    private boolean _has_last;
+
+    /**
+     * Field _tooltip
+     */
+    private java.lang.String _tooltip;
+
+    /**
+     * Field _enableText
+     */
+    private java.lang.String _enableText;
+
+    /**
+     * Field _position
+     */
+    private int _position;
+
+    /**
+     * keeps track of state for field: _position
+     */
+    private boolean _has_position;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ActionTool() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ActionTool()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteLast
+     */
+    public void deleteLast()
+    {
+        this._has_last= false;
+    } //-- void deleteLast() 
+
+    /**
+     * Method deletePosition
+     */
+    public void deletePosition()
+    {
+        this._has_position= false;
+    } //-- void deletePosition() 
+
+    /**
+     * Returns the value of field 'actionCommand'.
+     * 
+     * @return the value of field 'actionCommand'.
+     */
+    public java.lang.String getActionCommand()
+    {
+        return this._actionCommand;
+    } //-- java.lang.String getActionCommand() 
+
+    /**
+     * Returns the value of field 'enableText'.
+     * 
+     * @return the value of field 'enableText'.
+     */
+    public java.lang.String getEnableText()
+    {
+        return this._enableText;
+    } //-- java.lang.String getEnableText() 
+
+    /**
+     * Returns the value of field 'icon'.
+     * 
+     * @return the value of field 'icon'.
+     */
+    public java.lang.String getIcon()
+    {
+        return this._icon;
+    } //-- java.lang.String getIcon() 
+
+    /**
+     * Returns the value of field 'last'.
+     * 
+     * @return the value of field 'last'.
+     */
+    public boolean getLast()
+    {
+        return this._last;
+    } //-- boolean getLast() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'position'.
+     * 
+     * @return the value of field 'position'.
+     */
+    public int getPosition()
+    {
+        return this._position;
+    } //-- int getPosition() 
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Returns the value of field 'tooltip'.
+     * 
+     * @return the value of field 'tooltip'.
+     */
+    public java.lang.String getTooltip()
+    {
+        return this._tooltip;
+    } //-- java.lang.String getTooltip() 
+
+    /**
+     * Method hasLast
+     */
+    public boolean hasLast()
+    {
+        return this._has_last;
+    } //-- boolean hasLast() 
+
+    /**
+     * Method hasPosition
+     */
+    public boolean hasPosition()
+    {
+        return this._has_position;
+    } //-- boolean hasPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'actionCommand'.
+     * 
+     * @param actionCommand the value of field 'actionCommand'.
+     */
+    public void setActionCommand(java.lang.String actionCommand)
+    {
+        this._actionCommand = actionCommand;
+    } //-- void setActionCommand(java.lang.String) 
+
+    /**
+     * Sets the value of field 'enableText'.
+     * 
+     * @param enableText the value of field 'enableText'.
+     */
+    public void setEnableText(java.lang.String enableText)
+    {
+        this._enableText = enableText;
+    } //-- void setEnableText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'icon'.
+     * 
+     * @param icon the value of field 'icon'.
+     */
+    public void setIcon(java.lang.String icon)
+    {
+        this._icon = icon;
+    } //-- void setIcon(java.lang.String) 
+
+    /**
+     * Sets the value of field 'last'.
+     * 
+     * @param last the value of field 'last'.
+     */
+    public void setLast(boolean last)
+    {
+        this._last = last;
+        this._has_last = true;
+    } //-- void setLast(boolean) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'position'.
+     * 
+     * @param position the value of field 'position'.
+     */
+    public void setPosition(int position)
+    {
+        this._position = position;
+        this._has_position = true;
+    } //-- void setPosition(int) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'tooltip'.
+     * 
+     * @param tooltip the value of field 'tooltip'.
+     */
+    public void setTooltip(java.lang.String tooltip)
+    {
+        this._tooltip = tooltip;
+    } //-- void setTooltip(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ActionTool) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ActionTool.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ActionTool.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenus.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenus.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenus.java	(revision 38313)
@@ -0,0 +1,235 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class PopupMenus.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PopupMenus implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _popupMenuList
+     */
+    private java.util.Vector _popupMenuList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PopupMenus() {
+        super();
+        _popupMenuList = new Vector();
+    } //-- com.iver.andami.plugins.config.generate.PopupMenus()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addPopupMenu
+     * 
+     * @param vPopupMenu
+     */
+    public void addPopupMenu(org.gvsig.andami.plugins.config.generate.PopupMenu vPopupMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _popupMenuList.addElement(vPopupMenu);
+    } //-- void addPopupMenu(com.iver.andami.plugins.config.generate.PopupMenu) 
+
+    /**
+     * Method addPopupMenu
+     * 
+     * @param index
+     * @param vPopupMenu
+     */
+    public void addPopupMenu(int index, org.gvsig.andami.plugins.config.generate.PopupMenu vPopupMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _popupMenuList.insertElementAt(vPopupMenu, index);
+    } //-- void addPopupMenu(int, com.iver.andami.plugins.config.generate.PopupMenu) 
+
+    /**
+     * Method enumeratePopupMenu
+     */
+    public java.util.Enumeration enumeratePopupMenu()
+    {
+        return _popupMenuList.elements();
+    } //-- java.util.Enumeration enumeratePopupMenu() 
+
+    /**
+     * Method getPopupMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.PopupMenu getPopupMenu(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _popupMenuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.plugins.config.generate.PopupMenu) _popupMenuList.elementAt(index);
+    } //-- com.iver.andami.plugins.config.generate.PopupMenu getPopupMenu(int) 
+
+    /**
+     * Method getPopupMenu
+     */
+    public org.gvsig.andami.plugins.config.generate.PopupMenu[] getPopupMenu()
+    {
+        int size = _popupMenuList.size();
+        org.gvsig.andami.plugins.config.generate.PopupMenu[] mArray = new org.gvsig.andami.plugins.config.generate.PopupMenu[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.plugins.config.generate.PopupMenu) _popupMenuList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.plugins.config.generate.PopupMenu[] getPopupMenu() 
+
+    /**
+     * Method getPopupMenuCount
+     */
+    public int getPopupMenuCount()
+    {
+        return _popupMenuList.size();
+    } //-- int getPopupMenuCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllPopupMenu
+     */
+    public void removeAllPopupMenu()
+    {
+        _popupMenuList.removeAllElements();
+    } //-- void removeAllPopupMenu() 
+
+    /**
+     * Method removePopupMenu
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.plugins.config.generate.PopupMenu removePopupMenu(int index)
+    {
+        java.lang.Object obj = _popupMenuList.elementAt(index);
+        _popupMenuList.removeElementAt(index);
+        return (org.gvsig.andami.plugins.config.generate.PopupMenu) obj;
+    } //-- com.iver.andami.plugins.config.generate.PopupMenu removePopupMenu(int) 
+
+    /**
+     * Method setPopupMenu
+     * 
+     * @param index
+     * @param vPopupMenu
+     */
+    public void setPopupMenu(int index, org.gvsig.andami.plugins.config.generate.PopupMenu vPopupMenu)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _popupMenuList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _popupMenuList.setElementAt(vPopupMenu, index);
+    } //-- void setPopupMenu(int, com.iver.andami.plugins.config.generate.PopupMenu) 
+
+    /**
+     * Method setPopupMenu
+     * 
+     * @param popupMenuArray
+     */
+    public void setPopupMenu(org.gvsig.andami.plugins.config.generate.PopupMenu[] popupMenuArray)
+    {
+        //-- copy array
+        _popupMenuList.removeAllElements();
+        for (int i = 0; i < popupMenuArray.length; i++) {
+            _popupMenuList.addElement(popupMenuArray[i]);
+        }
+    } //-- void setPopupMenu(com.iver.andami.plugins.config.generate.PopupMenu) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.PopupMenus) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.PopupMenus.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/PopupMenus.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java	(revision 38313)
@@ -0,0 +1,299 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class ExtensionTypeDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ExtensionTypeDescriptor extends org.gvsig.andami.plugins.config.generate.SkinExtensionTypeDescriptor {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ExtensionTypeDescriptor() {
+        super();
+        setExtendsWithoutFlatten(new org.gvsig.andami.plugins.config.generate.SkinExtensionTypeDescriptor());
+        xmlName = "extension-type";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _priority
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Integer.TYPE, "_priority", "priority", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ExtensionType target = (ExtensionType) object;
+                if(!target.hasPriority())
+                    return null;
+                return new java.lang.Integer(target.getPriority());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ExtensionType target = (ExtensionType) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deletePriority();
+                        return;
+                    }
+                    target.setPriority( ((java.lang.Integer)value).intValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _priority
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            IntegerValidator typeValidator= new IntegerValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _active
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_active", "active", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ExtensionType target = (ExtensionType) object;
+                if(!target.hasActive())
+                    return null;
+                return (target.getActive() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ExtensionType target = (ExtensionType) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteActive();
+                        return;
+                    }
+                    target.setActive( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _active
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _description
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_description", "description", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ExtensionType target = (ExtensionType) object;
+                return target.getDescription();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ExtensionType target = (ExtensionType) object;
+                    target.setDescription( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _description
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _alwaysvisible
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Boolean.TYPE, "_alwaysvisible", "alwaysvisible", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ExtensionType target = (ExtensionType) object;
+                if(!target.hasAlwaysvisible())
+                    return null;
+                return (target.getAlwaysvisible() ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ExtensionType target = (ExtensionType) object;
+                    // if null, use delete method for optional primitives 
+                    if (value == null) {
+                        target.deleteAlwaysvisible();
+                        return;
+                    }
+                    target.setAlwaysvisible( ((java.lang.Boolean)value).booleanValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _alwaysvisible
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        { //-- local scope
+            BooleanValidator typeValidator = new BooleanValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.ExtensionTypeDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return super.getExtends();
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        if (identity == null)
+            return super.getIdentity();
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.ExtensionType.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionType.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionType.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionType.java	(revision 38313)
@@ -0,0 +1,277 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class ExtensionType.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ExtensionType extends org.gvsig.andami.plugins.config.generate.SkinExtensionType 
+implements java.io.Serializable
+{
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _priority
+     */
+    private int _priority;
+
+    /**
+     * keeps track of state for field: _priority
+     */
+    private boolean _has_priority;
+
+    /**
+     * Field _active
+     */
+    private boolean _active;
+
+    /**
+     * keeps track of state for field: _active
+     */
+    private boolean _has_active;
+
+    /**
+     * Field _description
+     */
+    private java.lang.String _description;
+
+    /**
+     * Field _alwaysvisible
+     */
+    private boolean _alwaysvisible;
+
+    /**
+     * keeps track of state for field: _alwaysvisible
+     */
+    private boolean _has_alwaysvisible;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ExtensionType() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.ExtensionType()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteActive
+     */
+    public void deleteActive()
+    {
+        this._has_active= false;
+    } //-- void deleteActive() 
+
+    /**
+     * Method deleteAlwaysvisible
+     */
+    public void deleteAlwaysvisible()
+    {
+        this._has_alwaysvisible= false;
+    } //-- void deleteAlwaysvisible() 
+
+    /**
+     * Method deletePriority
+     */
+    public void deletePriority()
+    {
+        this._has_priority= false;
+    } //-- void deletePriority() 
+
+    /**
+     * Returns the value of field 'active'.
+     * 
+     * @return the value of field 'active'.
+     */
+    public boolean getActive()
+    {
+        return this._active;
+    } //-- boolean getActive() 
+
+    /**
+     * Returns the value of field 'alwaysvisible'.
+     * 
+     * @return the value of field 'alwaysvisible'.
+     */
+    public boolean getAlwaysvisible()
+    {
+        return this._alwaysvisible;
+    } //-- boolean getAlwaysvisible() 
+
+    /**
+     * Returns the value of field 'description'.
+     * 
+     * @return the value of field 'description'.
+     */
+    public java.lang.String getDescription()
+    {
+        return this._description;
+    } //-- java.lang.String getDescription() 
+
+    /**
+     * Returns the value of field 'priority'.
+     * 
+     * @return the value of field 'priority'.
+     */
+    public int getPriority()
+    {
+        return this._priority;
+    } //-- int getPriority() 
+
+    /**
+     * Method hasActive
+     */
+    public boolean hasActive()
+    {
+        return this._has_active;
+    } //-- boolean hasActive() 
+
+    /**
+     * Method hasAlwaysvisible
+     */
+    public boolean hasAlwaysvisible()
+    {
+        return this._has_alwaysvisible;
+    } //-- boolean hasAlwaysvisible() 
+
+    /**
+     * Method hasPriority
+     */
+    public boolean hasPriority()
+    {
+        return this._has_priority;
+    } //-- boolean hasPriority() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'active'.
+     * 
+     * @param active the value of field 'active'.
+     */
+    public void setActive(boolean active)
+    {
+        this._active = active;
+        this._has_active = true;
+    } //-- void setActive(boolean) 
+
+    /**
+     * Sets the value of field 'alwaysvisible'.
+     * 
+     * @param alwaysvisible the value of field 'alwaysvisible'.
+     */
+    public void setAlwaysvisible(boolean alwaysvisible)
+    {
+        this._alwaysvisible = alwaysvisible;
+        this._has_alwaysvisible = true;
+    } //-- void setAlwaysvisible(boolean) 
+
+    /**
+     * Sets the value of field 'description'.
+     * 
+     * @param description the value of field 'description'.
+     */
+    public void setDescription(java.lang.String description)
+    {
+        this._description = description;
+    } //-- void setDescription(java.lang.String) 
+
+    /**
+     * Sets the value of field 'priority'.
+     * 
+     * @param priority the value of field 'priority'.
+     */
+    public void setPriority(int priority)
+    {
+        this._priority = priority;
+        this._has_priority = true;
+    } //-- void setPriority(int) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.ExtensionType) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.ExtensionType.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/ExtensionType.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java	(revision 38313)
@@ -0,0 +1,214 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.mapping.AccessMode;
+import org.exolab.castor.xml.TypeValidator;
+import org.exolab.castor.xml.XMLFieldDescriptor;
+import org.exolab.castor.xml.validators.*;
+
+/**
+ * Class LabelDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class LabelDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public LabelDescriptor() {
+        super();
+        xmlName = "label";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _size
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.Integer.TYPE, "_size", "size", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Label target = (Label) object;
+                if(!target.hasSize())
+                    return null;
+                return new java.lang.Integer(target.getSize());
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Label target = (Label) object;
+                    // ignore null values for non optional primitives
+                    if (value == null) return;
+                    
+                    target.setSize( ((java.lang.Integer)value).intValue());
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _size
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            IntegerValidator typeValidator= new IntegerValidator();
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _id
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_id", "id", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Label target = (Label) object;
+                return target.getId();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Label target = (Label) object;
+                    target.setId( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _id
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.plugins.config.generate.LabelDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.plugins.config.generate.Label.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Label.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Label.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Label.java	(revision 38313)
@@ -0,0 +1,181 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+package org.gvsig.andami.plugins.config.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+import org.exolab.castor.xml.ValidationException;
+import org.xml.sax.ContentHandler;
+
+/**
+ * Class Label.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Label implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _size
+     */
+    private int _size;
+
+    /**
+     * keeps track of state for field: _size
+     */
+    private boolean _has_size;
+
+    /**
+     * Field _id
+     */
+    private java.lang.String _id;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Label() {
+        super();
+    } //-- com.iver.andami.plugins.config.generate.Label()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method deleteSize
+     */
+    public void deleteSize()
+    {
+        this._has_size= false;
+    } //-- void deleteSize() 
+
+    /**
+     * Returns the value of field 'id'.
+     * 
+     * @return the value of field 'id'.
+     */
+    public java.lang.String getId()
+    {
+        return this._id;
+    } //-- java.lang.String getId() 
+
+    /**
+     * Returns the value of field 'size'.
+     * 
+     * @return the value of field 'size'.
+     */
+    public int getSize()
+    {
+        return this._size;
+    } //-- int getSize() 
+
+    /**
+     * Method hasSize
+     */
+    public boolean hasSize()
+    {
+        return this._has_size;
+    } //-- boolean hasSize() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'id'.
+     * 
+     * @param id the value of field 'id'.
+     */
+    public void setId(java.lang.String id)
+    {
+        this._id = id;
+    } //-- void setId(java.lang.String) 
+
+    /**
+     * Sets the value of field 'size'.
+     * 
+     * @param size the value of field 'size'.
+     */
+    public void setSize(int size)
+    {
+        this._size = size;
+        this._has_size = true;
+    } //-- void setSize(int) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.plugins.config.generate.Label) Unmarshaller.unmarshal(org.gvsig.andami.plugins.config.generate.Label.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/config/generate/Label.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/HiddableExtension.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/HiddableExtension.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/HiddableExtension.java	(revision 38313)
@@ -0,0 +1,68 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package org.gvsig.andami.plugins;
+
+
+/**
+ * Extending andami's classical extension this interface will support hidding or
+ * showing an extension on the fly.
+ * 
+ * @autor Jaume Dominguez Faus - jaume.dominguez@iver.es
+ */
+public interface HiddableExtension extends IExtension{
+	
+	/**
+	 * Determines whether the extension will be visible or not, overriding
+	 * the value defined by the extension itself.
+	 * 
+	 * @return
+	 */
+	public int getVisibility();
+	
+	
+	
+	/**
+	 * Sets the absolute visibility of this extension (overriding the value
+	 * set at the MDIManager)
+	 * @param b
+	 */
+	public void setVisibility(int state);
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/plugins/HiddableExtension.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/Launcher.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/Launcher.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/Launcher.java	(revision 38313)
@@ -0,0 +1,3164 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibï¿½ï¿½ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.KeyboardFocusManager;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.net.Authenticator;
+import java.net.MalformedURLException;
+import java.net.PasswordAuthentication;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.channels.FileChannel;
+import java.security.AllPermission;
+import java.security.CodeSource;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.security.Policy;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.prefs.Preferences;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.PatternLayout;
+import org.apache.log4j.PropertyConfigurator;
+import org.apache.log4j.RollingFileAppender;
+import org.apache.log4j.spi.LoggingEvent;
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.ValidationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.authentication.IAuthentication;
+import org.gvsig.andami.authentication.LoginUI;
+import org.gvsig.andami.config.generate.Andami;
+import org.gvsig.andami.config.generate.AndamiConfig;
+import org.gvsig.andami.config.generate.Plugin;
+import org.gvsig.andami.iconthemes.IIconTheme;
+import org.gvsig.andami.iconthemes.IconThemeManager;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.ExtensionDecorator;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.plugins.config.generate.ActionTool;
+import org.gvsig.andami.plugins.config.generate.ComboButton;
+import org.gvsig.andami.plugins.config.generate.ComboButtonElement;
+import org.gvsig.andami.plugins.config.generate.ComboScale;
+import org.gvsig.andami.plugins.config.generate.Depends;
+import org.gvsig.andami.plugins.config.generate.Extension;
+import org.gvsig.andami.plugins.config.generate.Extensions;
+import org.gvsig.andami.plugins.config.generate.LabelSet;
+import org.gvsig.andami.plugins.config.generate.Menu;
+import org.gvsig.andami.plugins.config.generate.PluginConfig;
+import org.gvsig.andami.plugins.config.generate.PopupMenu;
+import org.gvsig.andami.plugins.config.generate.PopupMenus;
+import org.gvsig.andami.plugins.config.generate.SelectableTool;
+import org.gvsig.andami.plugins.config.generate.SkinExtension;
+import org.gvsig.andami.plugins.config.generate.SkinExtensionType;
+import org.gvsig.andami.plugins.config.generate.ToolBar;
+import org.gvsig.andami.plugins.status.IExtensionStatus;
+import org.gvsig.andami.plugins.status.IUnsavedData;
+import org.gvsig.andami.ui.AndamiEventQueue;
+import org.gvsig.andami.ui.MDIManagerLoadException;
+import org.gvsig.andami.ui.ToolsWindowManager;
+import org.gvsig.andami.ui.fonts.FontUtils;
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.gvsig.andami.ui.mdiFrame.NewStatusBar;
+import org.gvsig.andami.ui.mdiManager.MDIManagerFactory;
+import org.gvsig.andami.ui.splash.MultiSplashWindow;
+import org.gvsig.andami.ui.theme.Theme;
+import org.gvsig.andami.ui.wizard.UnsavedDataPanel;
+import org.gvsig.installer.lib.api.InstallerLocator;
+import org.gvsig.installer.lib.api.InstallerManager;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.execution.AbstractInstallPackageWizard;
+import org.gvsig.installer.swing.api.wizard.InstallerWizardActionListener;
+import org.gvsig.installer.swing.api.wizard.InstallerWizardPanel;
+import org.gvsig.tools.exception.ListBaseException;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.utils.DateTime;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.xml.XMLEncodingUtils;
+import org.gvsig.utils.xmlEntity.generate.XmlTag;
+
+/**
+ * <p>
+ * Andami's launching class. This is the class used to create the Andami's
+ * plugin environment.<br>
+ * </p>
+ * 
+ * <p>
+ * <b>Syntax:</b> <br>
+ * java [-Xmx512M (for 512MB of RAM)] [-classpath={a colon-separated(unix) or
+ * semicolon-separated(windows) list of files containg base library of classes}]
+ * [-Djava.library.path=PATH_TO_NATIVE_LIBRARIES]
+ * PATH_TO_APPLICATION_HOME_DIRECTORY PATH_TO_APPLICATION_PLUGINS_DIRECTORY
+ * [{list of additional custom application arguments separated by spaces}]
+ * </p>
+ * 
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
+public class Launcher {
+
+	protected static Logger logger = LoggerFactory.getLogger(Launcher.class
+			.getName());
+	protected static Preferences prefs = Preferences.userRoot().node(
+			"gvsig.connection");
+	protected static AndamiConfig andamiConfig;
+	protected static MultiSplashWindow splashWindow;
+	protected static String appName;
+	protected static Locale locale;
+	protected static HashMap<String, PluginConfig> pluginsConfig = new HashMap<String, PluginConfig>();
+	protected static HashMap<String, PluginServices> pluginsServices = new HashMap<String, PluginServices>();
+	protected static MDIFrame frame;
+	protected static HashMap<Class<? extends IExtension>, ExtensionDecorator> classesExtensions = new HashMap<Class<? extends IExtension>, ExtensionDecorator>();
+	protected static String andamiConfigPath;
+	protected static final String nonWinDefaultLookAndFeel = "com.jgoodies.looks.plastic.PlasticXPLookAndFeel";
+
+	protected static ArrayList<String> pluginsOrdered = new ArrayList<String>();
+	protected static ArrayList<IExtension> extensions = new ArrayList<IExtension>();
+	protected static String appHomeDir = null;
+	// it seems castor uses this encoding
+	protected static final String CASTORENCODING = "UTF8";
+
+	protected static ListBaseException launcherrors = null;
+
+	protected static Theme theme = null;
+
+	private static final class ProxyAuth extends Authenticator {
+
+		private PasswordAuthentication auth;
+
+		private ProxyAuth(String user, String pass) {
+			auth = new PasswordAuthentication(user, pass.toCharArray());
+		}
+
+		protected PasswordAuthentication getPasswordAuthentication() {
+			return auth;
+		}
+	}
+
+	public static void main(String[] args) throws Exception {
+		Launcher launcher = new Launcher();
+		boolean install = false;
+		for (int i = 0; i < args.length; i++) {
+			if (args[i].equalsIgnoreCase("--install")) {
+				install = true;
+			}
+		}
+		try {
+			if (install) {
+				launcher.doInstall(args);
+			} else {
+				launcher.doMain(args);
+			}
+		} catch (Exception e) {
+			logger.error("excepción al arrancar", e);
+			System.exit(-1);
+		}
+	}
+
+	protected void downloadExtensions(String extDir) {
+		// do nothing
+	}
+
+	public static class LaunchException extends ListBaseException {
+
+		private static final long serialVersionUID = 4541192746962684705L;
+
+		public LaunchException() {
+			super("Errors in initialization of application.",
+					"_errors_in_initialization_of_application",
+					serialVersionUID);
+		}
+
+	}
+
+	protected void addError(Throwable ex) {
+		if (launcherrors == null) {
+			launcherrors = new LaunchException();
+		}
+		launcherrors.add(ex);
+	}
+
+	protected void addError(String msg, Throwable cause) {
+		logger.error(msg, cause);
+		this.addError(new RuntimeException(msg, cause));
+	}
+
+	protected void addError(String msg) {
+		this.addError(msg, null);
+	}
+
+	public void doMain(String[] args) throws Exception {
+
+		if (args.length < 1) {
+			System.err
+					.println("Uso: Launcher appName plugins-directory [language=locale]");
+		}
+
+		initializeApp(args);
+
+		// Solucionamos el problema de permisos que se producï¿½a con Java
+		// Web Start con este cï¿½digo.
+		// System.setSecurityManager(null);
+		Policy.setPolicy(new Policy() {
+
+			public PermissionCollection getPermissions(CodeSource codesource) {
+				Permissions perms = new Permissions();
+				perms.add(new AllPermission());
+				return (perms);
+			}
+
+			public void refresh() {
+			}
+		});
+
+		try {
+			initIconThemes();
+		} catch (Exception ex) {
+			this.addError("Can't initialize icon theme", ex);
+		}
+		// Registramos los iconos base
+		try {
+			registerIcons();
+		} catch (Exception ex) {
+			this.addError("Can't register icons", ex);
+		}
+		validate();
+
+		// Obtener la personalización de la aplicación.
+		try {
+			logger.info("Initialize andami theme");
+			theme = getTheme(andamiConfig.getPluginsDirectory());
+		} catch (Exception ex) {
+			this.addError("Can't get personalized theme for the application",
+					ex);
+		}
+
+		// Mostrar la ventana de inicio
+		Frame f = new Frame();
+		splashWindow = new MultiSplashWindow(f, theme, 190);
+
+		// 1. Ponemos los datos del proxy
+		splashWindow.process(10, PluginServices.getText(Launcher.class,
+				"SplashWindow.configuring_proxy"));
+		logger.info("Configute http proxy");
+		configureProxy();
+
+		// 2. TODO Buscar actualizaciones de los plugins
+		splashWindow.process(20, PluginServices.getText(Launcher.class,
+				"SplashWindow.looking_for_updates"));
+		try {
+			this.downloadExtensions(andamiConfig.getPluginsDirectory());
+		} catch (Exception ex) {
+			this.addError("Can't downloads plugins", ex);
+		}
+
+		// 2.5. Initialize andami libraries
+		splashWindow.process(25, PluginServices.getText(Launcher.class,
+				"SplashWindow.initialize_andami_libraries"));
+		new DefaultLibrariesInitializer().fullInitialize(true);
+		logger.info("Dump system information");
+		logger_info(getInformation());
+
+		// 3. Se leen los config.xml de los plugins -----++++
+		splashWindow.process(30, PluginServices.getText(Launcher.class,
+				"SplashWindow.reading_plugins_config.xml"));
+		try {
+			logger.info("Load plugins information");
+			this.loadPlugins(andamiConfig.getPluginsDirectory());
+		} catch (Exception ex) {
+			this.addError("Can't load plugins", ex);
+		}
+
+		// 4. Se configura el classloader del plugin
+		splashWindow.process(40, PluginServices.getText(Launcher.class,
+				"SplashWindow.setting_up_class_loaders"));
+		try {
+			logger.info("Configure plugins class loader");
+			this.pluginsClassLoaders();
+		} catch (Exception ex) {
+			this.addError("Can't initialize plugin's classloaders  ", ex);
+		}
+
+		// 5. Initialize libraries
+		splashWindow.process(50, PluginServices.getText(Launcher.class,
+				"SplashWindow.initialize_libraries"));
+		initializeLibraries();
+
+		// 6. Se carga un Skin si alguno ide los plugins trae información
+		// para ello
+		splashWindow.process(60, PluginServices.getText(Launcher.class,
+				"SplashWindow.looking_for_a_skin"));
+		// skinPlugin( "com.iver.core.mdiManager.NewSkin");
+		logger.info("Initialize skin");
+		skinPlugin(null);
+
+		// 7. Se configura la cola de eventos
+		splashWindow.process(70, PluginServices.getText(Launcher.class,
+				"setting_up_event_queue"));
+		EventQueue waitQueue = new AndamiEventQueue();
+		Toolkit.getDefaultToolkit().getSystemEventQueue().push(waitQueue);
+
+		// 8. Se configura la mensajería del plugin
+		splashWindow.process(80, PluginServices.getText(Launcher.class,
+				"SplashWindow.starting_plugin_internationalization_system"));
+		pluginsMessages();
+
+		// 9. Se modifica el andami-config con los plugins nuevos
+		splashWindow.process(90, PluginServices.getText(Launcher.class,
+				"SplashWindow.looking_for_a_skin"));
+		updateAndamiConfig();
+
+		frame = new MDIFrame();
+		// 10. Se configura el nombre e icono de la aplicación
+		splashWindow.process(100, PluginServices.getText(Launcher.class,
+				"SplashWindow.setting_up_applications_name_and_icons"));
+		frameIcon(theme);
+
+		// 11. Se prepara el MainFrame para albergar las extensiones
+		splashWindow.process(110, PluginServices.getText(Launcher.class,
+				"SplashWindow.preparing_workbench"));
+		JPopupMenu.setDefaultLightWeightPopupEnabled(false);
+
+		SwingUtilities.invokeAndWait(new Runnable() {
+
+			public void run() {
+				frame.init();
+			}
+		});
+		ToolsSwingLocator.registerWindowManager(ToolsWindowManager.class);
+
+		// 12. Leer el fichero de persistencia
+		// info de los plugins
+		// bookmarks de los plugins
+		splashWindow.process(120, PluginServices.getText(Launcher.class,
+				"SplashWindow.loading_plugin_settings"));
+		loadPluginsPersistence();
+
+		// Se instalan los controles del skin
+		// 13. Se inicializan todas las extensiones de todos los plugins
+		splashWindow.process(130, PluginServices.getText(Launcher.class,
+				"SplashWindow.initializing_extensions"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+
+			public void run() {
+				initializeExtensions();
+			}
+		});
+
+		// 14. Se inicializan la extensión exclusiva
+		splashWindow.process(140, PluginServices.getText(Launcher.class,
+				"SplashWindow.setting_up_master_extension"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+
+			public void run() {
+				initializeExclusiveUIExtension();
+			}
+		});
+		frame.setClassesExtensions(classesExtensions);
+
+		// 15. Se instalan los controles de las extensiones de los plugins
+		splashWindow.process(150, PluginServices.getText(Launcher.class,
+				"SplashWindow.installing_extensions_controls"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+
+			public void run() {
+				installPluginsControls();
+
+			}
+		});
+
+		// 16. Se instalan los menus de las extensiones de los plugins
+		splashWindow.process(160, PluginServices.getText(Launcher.class,
+				"SplashWindow.installing_extensions_menus"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+
+			public void run() {
+				installPluginsMenus();
+
+			}
+		});
+
+		// 17. Se instalan las etiquetas de las extensiones de los plugins
+		splashWindow.process(170, PluginServices.getText(Launcher.class,
+				"SplashWindow.installing_extensions_labels"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+
+			public void run() {
+				installPluginsLabels();
+
+			}
+		});
+
+		// 18. Se instalan los bookmarks de los plugins
+
+		// 19. Se muestra el frame principal
+		splashWindow.process(180, PluginServices.getText(Launcher.class,
+				"creating_main_window"));
+		frame.setVisible(true);
+
+		File defaultAddonsRepository = PluginsLocator.getManager()
+				.getPluginsFolder();
+		InstallerManager installerManager = InstallerLocator
+				.getInstallerManager();
+		installerManager.addLocalAddonRepository(defaultAddonsRepository);
+		installerManager
+				.setDefaultLocalAddonRepository(defaultAddonsRepository);
+
+		// 19. Se ejecuta el postInitialize
+		splashWindow.process(190, PluginServices.getText(Launcher.class,
+				"SplashWindow.post_initializing_extensions"));
+		SwingUtilities.invokeAndWait(new Runnable() {
+
+			public void run() {
+				postInitializeExtensions();
+
+			}
+		});
+
+		// Definimos un KeyEventDispatcher global para que las extensiones
+		// puedan registrar sus "teclas rápidas".
+		GlobalKeyEventDispatcher keyDispatcher = GlobalKeyEventDispatcher
+				.getInstance();
+		KeyboardFocusManager.getCurrentKeyboardFocusManager()
+				.addKeyEventDispatcher(keyDispatcher);
+
+		SwingUtilities.invokeAndWait(new Runnable() {
+
+			public void run() {
+				frame.enableControls();
+			}
+		});
+		splashWindow.close();
+		if (launcherrors != null) {
+			NotificationManager.addError(launcherrors);
+		}
+
+		org.apache.log4j.Logger.getRootLogger().addAppender(
+				new NotificationAppender());
+
+	}
+
+	/**
+     * 
+     */
+	private void initializeLibraries() {
+		List<ClassLoader> classLoaders = new ArrayList<ClassLoader>(
+				pluginsOrdered.size() + 1);
+		classLoaders.add(getClass().getClassLoader());
+		Iterator<String> iter = pluginsOrdered.iterator();
+
+		logger.debug("Initializing plugins libraries: ");
+		while (iter.hasNext()) {
+			String pName = (String) iter.next();
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+			classLoaders.add(ps.getClassLoader());
+		}
+
+		// Create the libraries initializer and
+		// initialize the plugin libraries
+		new DefaultLibrariesInitializer(classLoaders
+				.toArray(new ClassLoader[classLoaders.size()]))
+				.fullInitialize(true);
+
+		// Remove them all, we don't need them anymore
+		classLoaders.clear();
+		classLoaders = null;
+	}
+
+	/**
+	 * @param args
+	 * @throws IOException
+	 * @throws ConfigurationException
+	 */
+	private void initializeApp(String[] args) throws IOException,
+			ConfigurationException {
+		if (!validJVM()) {
+			System.exit(-1);
+		}
+
+		// Clean temporal files
+		Utilities.cleanUpTempFiles();
+
+		appName = args[0];
+
+		getOrCreateConfigFolder();
+
+		configureLogging(appName);
+
+		loadAndamiConfig(args[1]);
+
+		// Hacemos visibles los argumentos como una propiedad estï¿½tica
+		// de plugin services para quien lo quiera usar (por ejemplo, para
+		// cargar un proyecto por lï¿½nea de comandos)
+		PluginServices.setArguments(args);
+
+		configureLocales(args);
+
+		logger.info("Load and initialize andami and plugins libraries");
+		// LibrariesInitializer libsInitializer =
+		// new DefaultLibrariesInitializer();
+		// libsInitializer.initialize(true);
+		// libsInitializer.postInitialize(true);
+
+		logger.info("Configure LookAndFeel");
+		configureLookAndFeel();
+	}
+
+	/**
+     * 
+     */
+	private void configureLookAndFeel() {
+		// Se pone el lookAndFeel
+		try {
+			String lookAndFeel = getAndamiConfig().getLookAndFeel();
+			if (lookAndFeel == null) {
+				lookAndFeel = getDefaultLookAndFeel();
+			}
+			UIManager.setLookAndFeel(lookAndFeel);
+		} catch (Exception e) {
+			logger.warn(Messages.getString("Launcher.look_and_feel"), e);
+		}
+		FontUtils.initFonts();
+	}
+
+	/**
+	 * @param args
+	 * @throws ConfigurationException
+	 */
+	private void loadAndamiConfig(String pluginFolder)
+			throws ConfigurationException {
+		// Leer el fichero de configuraciï¿½n de andami (andami-config.xsd)
+		// locale
+		// Buscar actualizaciï¿½nes al comenzar
+		// Andami
+		// Plugins
+		// Directorio de las extensiones
+		andamiConfigPath = appHomeDir + File.separator + "andami-config.xml";
+		andamiConfigFromXML(andamiConfigPath);
+		andamiConfig.setPluginsDirectory(pluginFolder);
+	}
+
+	/**
+     * 
+     */
+	private void getOrCreateConfigFolder() {
+		// Create application configuration folder
+		appHomeDir = System.getProperty(appName + ".home");
+		if (appHomeDir == null) {
+			appHomeDir = System.getProperty("user.home");
+		}
+
+		appHomeDir += File.separator + appName;
+		File parent = new File(appHomeDir);
+		parent.mkdirs();
+	}
+
+	/**
+	 * @param args
+	 * @throws IOException
+	 */
+	private void configureLogging(String appName) throws IOException {
+		// Configurar el log4j
+		Launcher.class.getClassLoader().getResource(".");
+		PropertyConfigurator.configure("log4j.properties");
+
+		PatternLayout l = new PatternLayout("%p %t %C - %m%n");
+		RollingFileAppender fa = new RollingFileAppender(l, appHomeDir
+				+ File.separator + appName + ".log", false);
+		fa.setMaxFileSize("512KB");
+		fa.setMaxBackupIndex(3);
+		org.apache.log4j.Logger.getRootLogger().addAppender(fa);
+	}
+
+	private class NotificationAppender extends AppenderSkeleton {
+
+		@Override
+		protected void append(LoggingEvent event) {
+			if (event.getLevel() == org.apache.log4j.Level.ERROR
+					|| event.getLevel() == org.apache.log4j.Level.FATAL) {
+				NotificationManager.dispatchError(event.getRenderedMessage(),
+						null);
+				return;
+			}
+			// if (event.getLevel() == org.apache.log4j.Level.WARN) {
+			// NotificationManager.dispatchWarning(event.getRenderedMessage(),
+			// null);
+			// return;
+			// }
+		}
+
+		@Override
+		public void close() {
+			// TODO Auto-generated method stub
+
+		}
+
+		@Override
+		public boolean requiresLayout() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+	}
+
+	/**
+	 * Return the directory applicaction is installed.
+	 */
+	public static String getApplicationDirectory() {
+		return new File("").getAbsolutePath();
+	}
+
+	private void registerIcons() {
+		PluginServices.getIconTheme().registerDefault(
+				"login-gvsig",
+				LoginUI.class.getClassLoader().getResource(
+						"images/login_gvsig.png"));
+		PluginServices.getIconTheme().registerDefault(
+				"splash-gvsig",
+				MultiSplashWindow.class.getClassLoader().getResource(
+						"images/splash.png"));
+		PluginServices.getIconTheme().registerDefault(
+				"info-icon",
+				NewStatusBar.class.getClassLoader().getResource(
+						"images/info.gif"));
+		PluginServices.getIconTheme().registerDefault(
+				"error-icon",
+				NewStatusBar.class.getClassLoader().getResource(
+						"images/error.gif"));
+		PluginServices.getIconTheme().registerDefault(
+				"warning-icon",
+				NewStatusBar.class.getClassLoader().getResource(
+						"images/warning.gif"));
+		PluginServices.getIconTheme().registerDefault(
+				"no-icon",
+				NewStatusBar.class.getClassLoader().getResource(
+						"images/no_icon.png"));
+	}
+
+	/**
+	 * Obtiene la personalización de los iconos, splash, fondo y el nombre de la
+	 * aplicación.
+	 * 
+	 * @return Theme
+	 */
+	private Theme getTheme(String pluginsDirectory) {
+		File themeFile = null;
+		Theme theme = new Theme();
+
+		// Try to get theme from args
+		String name = PluginServices.getArgumentByName("andamiTheme");
+		if (name != null) {
+			themeFile = new File(name);
+			logger.info("search andami-theme in {}", themeFile
+					.getAbsolutePath());
+			if (themeFile.exists()) {
+				theme.readTheme(themeFile);
+				logger.info("andami-theme found in {}", themeFile
+						.getAbsolutePath());
+				return theme;
+			}
+		}
+
+		// Try to get theme from a plugin
+		File pluginsDir = new File(pluginsDirectory);
+		if (!pluginsDir.isAbsolute()) {
+			pluginsDir = new File(System.getProperty("user.dir"),
+					pluginsDirectory);
+		}
+		if (pluginsDir.exists()) {
+			logger.info("search andami-theme in plugins folder.");
+			File[] pluginDirs = pluginsDir.listFiles();
+			if (pluginDirs.length > 0) {
+				for (int i = 0; i < pluginDirs.length; i++) {
+					File pluginThemeFile = new File(pluginDirs[i], "theme"
+							+ File.separator + "andami-theme.xml");
+					if (pluginThemeFile.exists()) {
+						themeFile = pluginThemeFile;
+						// This if is a hack to allow more themes than the
+						// one available in org.gvsig.app. Remove this
+						// when a the theme format is changed to allow for
+						// priorities
+						if (!"org.gvsig.app".equals(pluginDirs[i].getName())) {
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		// The theme file will be the one into a plugin or by default the one
+		// in the org.gvsig.app plugin
+		if (themeFile != null && themeFile.exists()) {
+			theme.readTheme(themeFile);
+			logger.info("andami-theme found in plugin {}", themeFile
+					.getAbsolutePath());
+			return theme;
+		}
+
+		// Try to get theme from dir gvSIG in user home
+		themeFile = new File(getAppHomeDir(), "theme" + File.separator
+				+ "andami-theme.xml");
+		logger.info("search andami-theme in user's home {}", themeFile
+				.getAbsolutePath());
+		if (themeFile.exists()) {
+			theme.readTheme(themeFile);
+			logger.info("andami-theme found in user's home {}", themeFile
+					.getAbsolutePath());
+			return theme;
+		}
+
+		// Try to get theme from the instalation dir of gvSIG.
+		themeFile = new File(getApplicationDirectory(), "theme"
+				+ File.separator + "andami-theme.xml");
+		logger.info("search andami-theme in installation folder {}", themeFile
+				.getAbsolutePath());
+		if (themeFile.exists()) {
+			theme.readTheme(themeFile);
+			logger.info("andami-theme found in instalation folder {}",
+					themeFile.getAbsolutePath());
+			return theme;
+		}
+		logger.info("Apply default andami-theme.");
+		return theme;
+	}
+
+	/**
+	 * Establece los datos que teníamos guardados respecto de la configuración
+	 * del proxy.
+	 */
+	private void configureProxy() {
+		String host = prefs.get("firewall.http.host", "");
+		String port = prefs.get("firewall.http.port", "");
+
+		System.getProperties().put("http.proxyHost", host);
+		System.getProperties().put("http.proxyPort", port);
+
+		// Ponemos el usuario y clave del proxy, si existe
+		String proxyUser = prefs.get("firewall.http.user", null);
+		String proxyPassword = prefs.get("firewall.http.password", null);
+		if (proxyUser != null) {
+			System.getProperties().put("http.proxyUserName", proxyUser);
+			System.getProperties().put("http.proxyPassword", proxyPassword);
+
+			Authenticator.setDefault(new ProxyAuth(proxyUser, proxyPassword));
+		} else {
+			Authenticator.setDefault(new ProxyAuth("", ""));
+		}
+	}
+
+	/**
+	 * Recupera la geometría (tamaño, posicón y estado) de la ventana principal
+	 * de Andami. TODO Pendiente de ver como se asigna un pluginServices para el
+	 * launcher.
+	 * 
+	 * @author LWS
+	 */
+	private void restoreMDIStatus(XMLEntity xml) {
+		if (xml == null) {
+			xml = new XMLEntity();
+		}
+		// restore frame size
+		Dimension sz = new Dimension(700, 580);
+		if (xml.contains("MDIFrameSize")) {
+			int[] wh = xml.getIntArrayProperty("MDIFrameSize");
+			sz = new Dimension(wh[0], wh[1]);
+		}
+		frame.setSize(sz);
+		// restore frame location
+		Point pos = new Point(10, 10);
+		if (xml.contains("MDIFramePos")) {
+			int[] xy = xml.getIntArrayProperty("MDIFramePos");
+			pos = new Point(xy[0], xy[1]);
+		}
+		frame.setLocation(pos);
+
+		// restore frame status (Maximized, minimized, etc);
+		int state = java.awt.Frame.MAXIMIZED_BOTH;
+		if (xml.contains("MDIFrameState")) {
+			state = xml.getIntProperty("MDIFrameState");
+		}
+		frame.setExtendedState(state);
+	}
+
+	private XMLEntity saveMDIStatus() {
+		XMLEntity xml = new XMLEntity();
+		// save frame size
+		int[] wh = new int[2];
+		wh[0] = frame.getWidth();
+		wh[1] = frame.getHeight();
+		xml.putProperty("MDIFrameSize", wh);
+		// save frame location
+		int[] xy = new int[2];
+		xy[0] = frame.getX();
+		xy[1] = frame.getY();
+		xml.putProperty("MDIFramePos", xy);
+		// save frame status
+		xml.putProperty("MDIFrameState", frame.getExtendedState());
+		return xml;
+	}
+
+	private boolean validJVM() {
+		char thirdCharacter = System.getProperty("java.version").charAt(2);
+		if (thirdCharacter < '4') {
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	private void loadPluginsPersistence() throws ConfigurationException {
+		XMLEntity entity = persistenceFromXML();
+
+		for (int i = 0; i < entity.getChildrenCount(); i++) {
+			XMLEntity plugin = entity.getChild(i);
+			String pName = plugin
+					.getStringProperty("com.iver.andami.pluginName");
+
+			if (pName.compareToIgnoreCase("com.iver.cit.gvsig") == 0) {
+				pName = "org.gvsig.app";
+			}
+			if (pluginsServices.get(pName) != null) {
+				((PluginServices) pluginsServices.get(pName))
+						.setPersistentXML(plugin);
+			} else {
+				if (pName.startsWith("Andami.Launcher")) {
+					restoreMDIStatus(plugin);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Salva la persistencia de los plugins.
+	 * 
+	 * @author LWS
+	 */
+	private void savePluginPersistence() {
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		XMLEntity entity = new XMLEntity();
+
+		while (i.hasNext()) {
+			String pName = i.next();
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+			XMLEntity ent = ps.getPersistentXML();
+
+			if (ent != null) {
+				ent.putProperty("com.iver.andami.pluginName", pName);
+				entity.addChild(ent);
+			}
+		}
+		XMLEntity ent = saveMDIStatus();
+		if (ent != null) {
+			ent.putProperty("com.iver.andami.pluginName", "Andami.Launcher");
+			entity.addChild(ent);
+		}
+		try {
+			persistenceToXML(entity);
+		} catch (ConfigurationException e1) {
+			this
+					.addError(
+							Messages
+									.getString("Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins"),
+							e1);
+		}
+	}
+
+	private void installPluginsLabels() {
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String name = i.next();
+			PluginConfig pc = pluginsConfig.get(name);
+			PluginServices ps = (PluginServices) pluginsServices.get(name);
+
+			LabelSet[] ls = pc.getLabelSet();
+
+			for (int j = 0; j < ls.length; j++) {
+				PluginClassLoader loader = ps.getClassLoader();
+
+				try {
+					Class clase = loader.loadClass(ls[j].getClassName());
+					frame.setStatusBarLabels(clase, ls[j].getLabel());
+				} catch (ClassNotFoundException e) {
+					this.addError(
+							Messages.getString("Launcher.labelset_class"), e);
+				}
+			}
+		}
+	}
+
+	private String configureSkin(XMLEntity xml, String defaultSkin) {
+		if (defaultSkin == null) {
+			for (int i = 0; i < xml.getChildrenCount(); i++) {
+				if (xml.getChild(i).contains("Skin-Selected")) {
+					String className = xml.getChild(i).getStringProperty(
+							"Skin-Selected");
+					return className;
+				}
+			}
+		}
+		// return "com.iver.core.mdiManager.NewSkin";
+		return defaultSkin;
+	}
+
+	private void fixSkin(SkinExtension skinExtension,
+			PluginClassLoader pluginClassLoader) throws MDIManagerLoadException {
+		// now insert the skin selected.
+		MDIManagerFactory.setSkinExtension(skinExtension, pluginClassLoader);
+		// MDIManagerFactory.setSkinExtension(se,
+		// ps.getClassLoader());
+
+		Class<? extends IExtension> skinClass;
+
+		try {
+			skinClass = (Class<? extends IExtension>) pluginClassLoader
+					.loadClass(skinExtension.getClassName());
+
+			IExtension skinInstance = skinClass.newInstance();
+			ExtensionDecorator newExtensionDecorator = new ExtensionDecorator(
+					skinInstance, ExtensionDecorator.INACTIVE);
+			classesExtensions.put(skinClass, newExtensionDecorator);
+		} catch (ClassNotFoundException e) {
+			logger.error(Messages
+					.getString("Launcher.No_se_encontro_la_clase_mdi_manager"),
+					e);
+			throw new MDIManagerLoadException(e);
+		} catch (InstantiationException e) {
+			logger
+					.error(
+							Messages
+									.getString("Launcher.No_se_pudo_instanciar_la_clase_mdi_manager"),
+							e);
+			throw new MDIManagerLoadException(e);
+		} catch (IllegalAccessException e) {
+			logger
+					.error(
+							Messages
+									.getString("Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager"),
+							e);
+			throw new MDIManagerLoadException(e);
+		}
+
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 * 
+	 * @throws MDIManagerLoadException
+	 */
+	private void skinPlugin(String defaultSkin) throws MDIManagerLoadException {
+		XMLEntity entity = null;
+		try {
+			entity = persistenceFromXML();
+		} catch (ConfigurationException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		SkinExtension skinExtension = null;
+		PluginClassLoader pluginClassLoader = null;
+		List<SkinExtension> skinExtensions = new ArrayList<SkinExtension>();
+		while (i.hasNext()) {
+			String name = i.next();
+			PluginConfig pc = pluginsConfig.get(name);
+			PluginServices ps = pluginsServices.get(name);
+
+			if (pc.getExtensions().getSkinExtension() != null) {
+				// if (MDIManagerFactory.getSkinExtension() != null) {
+				// logger.warn(Messages.getString(
+				// "Launcher.Dos_skin_extension"));
+				// }
+
+				SkinExtension[] se = pc.getExtensions().getSkinExtension();
+				for (int numExten = 0; numExten < se.length; numExten++) {
+					skinExtensions.add(se[numExten]);
+				}
+				for (int j = 0; j < se.length; j++) {
+					String configuredSkin = this.configureSkin(entity,
+							defaultSkin);
+					if ((configuredSkin != null)
+							&& configuredSkin.equals(se[j].getClassName())) {
+						skinExtension = se[j];
+						pluginClassLoader = ps.getClassLoader();
+					}
+				}
+			}
+		}
+
+		if ((skinExtension != null) && (pluginClassLoader != null)) {
+			// configured skin was found
+			fixSkin(skinExtension, pluginClassLoader);
+		} else {
+			if (skinExtensions.contains("com.iver.core.mdiManager.NewSkin")) {
+				// try first NewSkin (from CorePlugin)
+				skinPlugin("com.iver.core.mdiManager.NewSkin");
+			} else if (skinExtensions.size() > 0) {
+				// try to load the first skin found
+				SkinExtension se = (SkinExtension) skinExtensions.get(0);
+				skinPlugin((String) se.getClassName());
+			} else {
+				throw new MDIManagerLoadException("No Skin-Extension installed");
+			}
+		}
+
+	}
+
+	private static void frameIcon(Theme theme) {
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String pName = i.next();
+			PluginConfig pc = pluginsConfig.get(pName);
+			if (pc.getIcon() != null) {
+				if (theme.getIcon() != null) {
+					frame.setIconImage(theme.getIcon().getImage());
+				} else {
+
+					ImageIcon icon = PluginServices.getIconTheme().get(
+							pc.getIcon().getSrc());
+					frame.setIconImage(icon.getImage());
+
+				}
+				if (theme.getName() != null) {
+					frame.setTitlePrefix(theme.getName());
+				} else {
+					frame.setTitlePrefix(pc.getIcon().getText());
+				}
+				if (theme.getBackgroundImage() != null) {
+
+					PluginServices.getMDIManager().setBackgroundImage(
+							theme.getBackgroundImage(), theme.getTypeDesktop());
+				}
+			}
+		}
+	}
+
+	private void initializeExtensions() {
+
+		List<ClassLoader> classLoaders = new ArrayList<ClassLoader>(
+				pluginsOrdered.size());
+		classLoaders.add(getClass().getClassLoader());
+		Iterator<String> iter = pluginsOrdered.iterator();
+
+		// logger.debug("Initializing plugins libraries: ");
+		// while (iter.hasNext()) {
+		// String pName = (String) iter.next();
+		// PluginServices ps = (PluginServices) pluginsServices.get(pName);
+		// classLoaders.add(ps.getClassLoader());
+		// }
+		//
+		// // Create the libraries initializer and
+		// // initialize the plugin libraries
+		// new DefaultLibrariesInitializer(
+		// classLoaders.toArray(new ClassLoader[classLoaders.size()]))
+		// .fullInitialize();
+		//
+		// // Remove them all, we don't need them anymore
+		// classLoaders.clear();
+		// classLoaders = null;
+
+		logger.info("Initializing plugins: ");
+		// iter = pluginsOrdered.iterator();
+		while (iter.hasNext()) {
+			String pName = (String) iter.next();
+			logger.info("Initializing plugin " + pName);
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(pName);
+			PluginServices ps = (PluginServices) pluginsServices.get(pName);
+
+			Extension[] exts = pc.getExtensions().getExtension();
+
+			TreeSet<Extension> orderedExtensions = new TreeSet<Extension>(
+					new ExtensionComparator());
+
+			for (int j = 0; j < exts.length; j++) {
+				if (!exts[j].getActive()) {
+					continue;
+				}
+
+				if (orderedExtensions.contains(exts[j])) {
+					logger.warn("Two extensions with the same priority ("
+							+ exts[j].getClassName() + ")");
+				}
+
+				orderedExtensions.add(exts[j]);
+			}
+
+			Iterator<Extension> e = orderedExtensions.iterator();
+
+			logger.info("Initializing extensions of plugin " + pName + ": ");
+			while (e.hasNext()) {
+				Extension extension = e.next();
+				org.gvsig.andami.plugins.IExtension extensionInstance;
+
+				try {
+					logger.info("Initializing " + extension.getClassName()
+							+ "...");
+					Class<? extends IExtension> extensionClass = (Class<? extends IExtension>) ps
+							.getClassLoader().loadClass(
+									extension.getClassName());
+					extensionInstance = extensionClass.newInstance();
+
+					// CON DECORATOR
+					// ANTES: classesExtensions.put(extensionClass,
+					// extensionInstance);
+					// AHORA: CREAMOS UNA ExtensionDecorator y asignamos esta
+					// instancia para
+					// poder ampliar con nuevas propiedades (AlwaysVisible, por
+					// ejemplo)
+					// Para crear la nueva clase ExtensionDecorator, le pasamos
+					// como parï¿½metro
+					// la extensiï¿½n original que acabamos de crear
+					// 0-> Inactivo, controla la extension
+					// 1-> Siempre visible
+					// 2-> Invisible
+					ExtensionDecorator newExtensionDecorator = new ExtensionDecorator(
+							extensionInstance, ExtensionDecorator.INACTIVE);
+					classesExtensions
+							.put(extensionClass, newExtensionDecorator);
+
+					extensionInstance.initialize();
+					extensions.add(extensionInstance);
+
+				} catch (NoClassDefFoundError e1) {
+					this.addError("Can't find class extension ("
+							+ extension.getClassName() + ")", e1);
+				} catch (Throwable e1) {
+					this.addError("Can't initialize extension '"
+							+ extension.getClassName() + "'.", e1);
+				}
+			}
+		}
+	}
+
+	private void postInitializeExtensions() {
+		logger.info("PostInitializing extensions: ");
+
+		for (int i = 0; i < extensions.size(); i++) {
+			org.gvsig.andami.plugins.IExtension extensionInstance = (org.gvsig.andami.plugins.IExtension) extensions
+					.get(i);
+			logger.info("PostInitializing "
+					+ extensionInstance.getClass().getName() + "...");
+			try {
+				extensionInstance.postInitialize();
+			} catch (Throwable ex) {
+				this.addError("postInitialize of extension '"
+						+ extensionInstance.getClass().getName() + "' failed",
+						ex);
+			}
+		}
+	}
+
+	private void installPluginsMenus() {
+		TreeSet<SortableMenu> orderedMenus = new TreeSet<SortableMenu>(
+				new MenuComparator());
+
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String pName = i.next();
+			try {
+				PluginServices ps = pluginsServices.get(pName);
+				PluginConfig pc = pluginsConfig.get(pName);
+
+				Extension[] exts = pc.getExtensions().getExtension();
+
+				for (int j = 0; j < exts.length; j++) {
+					if (!exts[j].getActive()) {
+						continue;
+					}
+
+					Menu[] menus = exts[j].getMenu();
+
+					for (int k = 0; k < menus.length; k++) {
+						SortableMenu sm = new SortableMenu(ps.getClassLoader(),
+								exts[j], menus[k]);
+
+						if (orderedMenus.contains(sm)) {
+							this
+									.addError(Messages
+											.getString("Launcher.Two_menus_with_the_same_position")
+											+ " - "
+											+ menus[k].getText()
+											+ " - " + exts[j].getClassName());
+						}
+
+						orderedMenus.add(sm);
+					}
+				}
+
+				// Se instalan las extensiones de MDI
+				SkinExtension[] skinExts = pc.getExtensions()
+						.getSkinExtension();
+				for (int j = 0; j < skinExts.length; j++) {
+
+					if (skinExts[j] != null) {
+						Menu[] menu = skinExts[j].getMenu();
+
+						for (int k = 0; k < menu.length; k++) {
+							SortableMenu sm = new SortableMenu(ps
+									.getClassLoader(), skinExts[j], menu[k]);
+
+							if (orderedMenus.contains(sm)) {
+								this
+										.addError(Messages
+												.getString("Launcher.Two_menus_with_the_same_position")
+												+ skinExts[j].getClassName());
+							}
+
+							orderedMenus.add(sm);
+						}
+					}
+				}
+
+			} catch (Throwable e) {
+				addError("Error initializing menus of plugin '" + pName + "'",
+						e);
+			}
+
+		}
+
+		// Se itera por los menus ordenados
+		Iterator<SortableMenu> e = orderedMenus.iterator();
+
+		// Se ordenan los menues
+		while (e.hasNext()) {
+			try {
+				SortableMenu sm = e.next();
+
+				frame.addMenu(sm.loader, sm.extension, sm.menu);
+
+			} catch (ClassNotFoundException ex) {
+				this
+						.addError(
+								Messages
+										.getString("Launcher.No_se_encontro_la_clase_de_la_extension"),
+								ex);
+			} catch (NoClassDefFoundError ex) {
+				this
+						.addError(
+								Messages
+										.getString("Launcher.No_se_encontro_la_clase_de_la_extension"),
+								ex);
+			} catch (Throwable ex) {
+				this
+						.addError(
+								Messages
+										.getString("Launcher.No_se_encontro_la_clase_de_la_extension"),
+								ex);
+			}
+		}
+	}
+
+	/**
+	 * Installs the menus, toolbars, actiontools, selectable toolbars and
+	 * combos. The order in which they are shown is determined here.
+	 */
+	private void installPluginsControls() {
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		Map<Extension, PluginServices> extensionPluginServices = new HashMap<Extension, PluginServices>();
+		Map<Extension, PluginConfig> extensionPluginConfig = new HashMap<Extension, PluginConfig>();
+		Set<Extension> orderedExtensions = new TreeSet<Extension>(
+				new ExtensionComparator());
+
+		// First of all, sort the extensions.
+		// We need to iterate on the plugins, and iterate on each plugin's
+		// extensions
+		// (each plugin may contain one or more extensions)
+		while (i.hasNext()) { // iterate on the plugins
+			String pName = i.next();
+			try {
+				PluginConfig pc = pluginsConfig.get(pName);
+				PluginServices ps = pluginsServices.get(pName);
+
+				Extension[] exts = pc.getExtensions().getExtension();
+
+				for (int j = 0; j < exts.length; j++) { // iterate on the
+					// extensions
+					String cname = "unknow";
+					try {
+						cname = exts[j].getClassName();
+						if (exts[j].getActive()
+								&& !cname.equals(LibraryExtension.class
+										.getName())) {
+							if (orderedExtensions.contains(exts[j])) {
+								this
+										.addError(Messages
+												.getString("Launcher.Two_extensions_with_the_same_priority")
+												+ cname);
+							}
+
+							orderedExtensions.add(exts[j]);
+							extensionPluginServices.put(exts[j], ps);
+							extensionPluginConfig.put(exts[j], pc);
+						}
+					} catch (Exception e) {
+						addError("Error initializing controls of plugin '"
+								+ pName + "' extension '" + cname + "'", e);
+					}
+				}
+			} catch (Throwable e) {
+				addError("Error initializing controls of plugin '" + pName
+						+ "'", e);
+			}
+		}
+
+		TreeSet<SortableTool> orderedTools = new TreeSet<SortableTool>(
+				new ToolComparator());
+		Iterator<Extension> e = orderedExtensions.iterator();
+
+		// sort the toolbars and tools from 'normal' extensions (actiontools,
+		// selectabletools)
+		// and load the combo-scales and combo-buttons for the status bar
+		while (e.hasNext()) {
+			Extension ext = e.next();
+			String extName = "unknow";
+			try {
+				extName = ext.getClassName();
+				ToolBar[] toolbars = ext.getToolBar();
+
+				// get tools from toolbars
+				for (int k = 0; k < toolbars.length; k++) {
+					ActionTool[] tools = toolbars[k].getActionTool();
+
+					for (int t = 0; t < tools.length; t++) {
+						SortableTool sm = new SortableTool(
+								(extensionPluginServices.get(ext))
+										.getClassLoader(), ext, toolbars[k],
+								tools[t]);
+						orderedTools.add(sm);
+					}
+
+					SelectableTool[] sTools = toolbars[k].getSelectableTool();
+
+					for (int t = 0; t < sTools.length; t++) {
+						SortableTool sm = new SortableTool(
+								(extensionPluginServices.get(ext))
+										.getClassLoader(), ext, toolbars[k],
+								sTools[t]);
+						orderedTools.add(sm);
+					}
+				}
+
+				// get controls for statusBar
+				PluginServices ps = extensionPluginServices.get(ext);
+				PluginClassLoader loader = ps.getClassLoader();
+
+				// ArrayList componentList = new ArrayList();
+				ComboScale[] comboScaleArray = ext.getComboScale();
+				for (int k = 0; k < comboScaleArray.length; k++) {
+					org.gvsig.gui.beans.controls.comboscale.ComboScale combo = new org.gvsig.gui.beans.controls.comboscale.ComboScale();
+					String label = comboScaleArray[k].getLabel();
+					if (label != null) {
+						combo.setLabel(label);
+					}
+					String name = comboScaleArray[k].getName();
+					if (name != null) {
+						combo.setName(name);
+					}
+					String[] elementsString = ((String) comboScaleArray[k]
+							.getElements()).split(";");
+					long[] elements = new long[elementsString.length];
+					for (int currentElem = 0; currentElem < elementsString.length; currentElem++) {
+						try {
+							elements[currentElem] = Long
+									.parseLong(elementsString[currentElem]);
+						} catch (NumberFormatException nfex1) {
+							this
+									.addError(ext.getClassName()
+											+ " -- "
+											+ Messages
+													.getString("error_parsing_comboscale_elements"));
+							elements[currentElem] = 0;
+						}
+					}
+					combo.setItems(elements);
+					try {
+						long value = Long.parseLong((String) comboScaleArray[k]
+								.getValue());
+						combo.setScale(value);
+					} catch (NumberFormatException nfex2) {
+						this
+								.addError(ext.getClassName()
+										+ " -- "
+										+ Messages
+												.getString("error_parsing_comboscale_value"));
+					}
+					try {
+						frame.addStatusBarControl(loader.loadClass(ext
+								.getClassName()), combo);
+					} catch (ClassNotFoundException e1) {
+						this
+								.addError(
+										Messages
+												.getString("Launcher.error_getting_class_loader_for_status_bar_control"),
+										e1);
+					}
+				}
+
+				ComboButton[] comboButtonArray = ext.getComboButton();
+				for (int k = 0; k < comboButtonArray.length; k++) {
+					ComboButtonElement[] elementList = comboButtonArray[k]
+							.getComboButtonElement();
+					org.gvsig.gui.beans.controls.combobutton.ComboButton combo = new org.gvsig.gui.beans.controls.combobutton.ComboButton();
+					String name = comboButtonArray[k].getName();
+					if (name != null) {
+						combo.setName(name);
+					}
+					for (int currentElement = 0; currentElement < elementList.length; currentElement++) {
+						ComboButtonElement element = elementList[currentElement];
+						ImageIcon icon;
+						URL iconLocation = loader
+								.getResource(element.getIcon());
+						if (iconLocation == null) {
+							this.addError(Messages.getString("Icon_not_found_")
+									+ element.getIcon());
+						} else {
+							icon = new ImageIcon(iconLocation);
+							JButton button = new JButton(icon);
+							combo.addButton(button);
+							button.setActionCommand(element.getActionCommand());
+						}
+					}
+					try {
+						frame.addStatusBarControl(loader.loadClass(ext
+								.getClassName()), combo);
+					} catch (ClassNotFoundException e1) {
+						this
+								.addError(
+										Messages
+												.getString("Launcher.error_getting_class_loader_for_status_bar_control"),
+										e1);
+					}
+				}
+			} catch (Throwable e2) {
+				addError(
+						"Error initializing tools and status bars of extension '"
+								+ extName + "'", e2);
+			}
+		}
+
+		// Add the tools from MDI extensions to the ordered tool-list, so that
+		// we get a sorted list containing all the tools
+		i = pluginsConfig.keySet().iterator();
+		while (i.hasNext()) {
+			String pName = (String) i.next();
+			try {
+				PluginConfig pc = (PluginConfig) pluginsConfig.get(pName);
+				PluginServices ps = (PluginServices) pluginsServices.get(pName);
+
+				SkinExtension[] skinExts = pc.getExtensions()
+						.getSkinExtension();
+				for (int j = 0; j < skinExts.length; j++) {
+
+					if (skinExts[j] != null) {
+						ToolBar[] toolbars = skinExts[j].getToolBar();
+
+						for (int k = 0; k < toolbars.length; k++) {
+							ActionTool[] tools = toolbars[k].getActionTool();
+
+							for (int t = 0; t < tools.length; t++) {
+								SortableTool stb = new SortableTool(ps
+										.getClassLoader(), skinExts[j],
+										toolbars[k], tools[t]);
+								orderedTools.add(stb);
+							}
+
+							SelectableTool[] sTools = toolbars[k]
+									.getSelectableTool();
+
+							for (int t = 0; t < sTools.length; t++) {
+								SortableTool stb = new SortableTool(ps
+										.getClassLoader(), skinExts[j],
+										toolbars[k], sTools[t]);
+								orderedTools.add(stb);
+							}
+						}
+					}
+				}
+				// Install popup menus
+				PopupMenus pus = pc.getPopupMenus();
+
+				if (pus != null) {
+					PopupMenu[] menus = pus.getPopupMenu();
+
+					for (int j = 0; j < menus.length; j++) {
+						frame.addPopupMenu(ps.getClassLoader(), menus[j]);
+					}
+				}
+			} catch (Throwable e3) {
+				addError("Error initializing skins of the plugin '" + pName
+						+ "'", e3);
+			}
+		}
+
+		// loop on the ordered extension list, to add them to the interface in
+		// an ordered way
+		Iterator<SortableTool> t = orderedTools.iterator();
+		while (t.hasNext()) {
+			SortableTool stb = t.next();
+			try {
+				if (stb.actiontool != null) {
+					frame.addTool(stb.loader, stb.extension, stb.toolbar,
+							stb.actiontool);
+				} else {
+					frame.addTool(stb.loader, stb.extension, stb.toolbar,
+							stb.selectabletool);
+				}
+			} catch (ClassNotFoundException ex) {
+				this
+						.addError(
+								Messages
+										.getString("Launcher.No_se_encontro_la_clase_de_la_extension"),
+								ex);
+			} catch (Throwable e2) {
+				addError("Error adding tools to the interface of extension '"
+						+ stb.extension.getClassName() + "'", e2);
+			}
+		}
+	}
+
+	/**
+	 * Adds new plugins to the the andami-config file.
+	 */
+	private void updateAndamiConfig() {
+		Set<String> olds = new HashSet<String>();
+
+		Plugin[] plugins = andamiConfig.getPlugin();
+
+		for (int i = 0; i < plugins.length; i++) {
+			olds.add(plugins[i].getName());
+		}
+
+		Iterator<PluginServices> i = pluginsServices.values().iterator();
+
+		while (i.hasNext()) {
+			PluginServices ps = i.next();
+
+			if (!olds.contains(ps.getPluginName())) {
+				Plugin p = new Plugin();
+				p.setName(ps.getPluginName());
+				p.setUpdate(false);
+
+				andamiConfig.addPlugin(p);
+			}
+		}
+	}
+
+	private void pluginsClassLoaders() {
+		Set<String> installed = new HashSet<String>();
+
+		// Se itera hasta que están todos instalados
+		while (installed.size() != pluginsConfig.size()) {
+			boolean circle = true;
+
+			// Hacemos una pasada por todos los plugins
+			Iterator<String> i = pluginsConfig.keySet().iterator();
+
+			while (i.hasNext()) {
+				String pluginName = i.next();
+				PluginConfig config = (PluginConfig) pluginsConfig
+						.get(pluginName);
+
+				if (installed.contains(pluginName)) {
+					continue;
+				}
+
+				// Se obtienen las dependencias y sus class loaders
+				boolean ready = true;
+				Depends[] dependencies = config.getDepends();
+				PluginClassLoader[] loaders = new PluginClassLoader[dependencies.length];
+
+				for (int j = 0; j < dependencies.length; j++) {
+					if (pluginsConfig.get(dependencies[j].getPluginName()) == null) {
+						this
+								.addError(Messages
+										.getString("Launcher.Dependencia_no_resuelta_en_plugin")
+										+ " "
+										+ pluginName
+										+ ": "
+										+ dependencies[j].getPluginName());
+
+						continue;
+					}
+
+					if (!installed.contains(dependencies[j].getPluginName())) {
+						ready = false;
+					} else {
+						loaders[j] = (pluginsServices.get(dependencies[j]
+								.getPluginName())).getClassLoader();
+					}
+				}
+
+				// Si no están sus dependencias satisfechas se aborta la
+				// instalación
+				if (!ready) {
+					continue;
+				}
+
+				// Se genera el class loader
+				String jardir = config.getLibraries().getLibraryDir();
+				File jarDir = new File(andamiConfig.getPluginsDirectory(),
+						pluginName + File.separator + jardir);
+				File[] jarFiles = jarDir.listFiles(new FileFilter() {
+
+					public boolean accept(File pathname) {
+						return (pathname.getName().toUpperCase()
+								.endsWith(".JAR"))
+								|| (pathname.getName().toUpperCase()
+										.endsWith(".ZIP"));
+					}
+				});
+
+				URL[] urls = new URL[jarFiles.length];
+
+				for (int j = 0; j < jarFiles.length; j++) {
+					try {
+						urls[j] = new URL("file:" + jarFiles[j]);
+					} catch (MalformedURLException e) {
+						this.addError(Messages
+								.getString("Launcher.No_se_puede_acceder_a")
+								+ " " + jarFiles[j]);
+					}
+				}
+
+				PluginClassLoader loader;
+
+				try {
+					loader = new PluginClassLoader(urls, andamiConfig
+							.getPluginsDirectory()
+							+ File.separator + pluginName, Launcher.class
+							.getClassLoader(), loaders);
+
+					PluginServices ps = new PluginServices(loader);
+
+					pluginsServices.put(ps.getPluginName(), ps);
+
+					installed.add(pluginName);
+					// FJP: Los metemos ordenados para luego no cargar uno que
+					// necesita de otro antes de tiempo. Esto lo usaremos al
+					// inicializar los plugins
+					pluginsOrdered.add(pluginName);
+
+					circle = false;
+				} catch (IOException e) {
+					this
+							.addError(
+									Messages
+											.getString("Launcher.Error_con_las_librerias_del_plugin"),
+									e);
+					pluginsConfig.remove(pluginName);
+					i = pluginsConfig.keySet().iterator();
+				}
+			}
+
+			if (circle) {
+				this.addError(Messages
+						.getString("Launcher.Hay_dependencias_circulares"));
+
+				break;
+			}
+		}
+
+		// Se eliminan los plugins que no fueron instalados
+		Iterator<String> i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String pluginName = i.next();
+			PluginServices ps = (PluginServices) pluginsServices
+					.get(pluginName);
+
+			if (ps == null) {
+				pluginsConfig.remove(pluginName);
+				i = pluginsConfig.keySet().iterator();
+			}
+		}
+	}
+
+	private void pluginsMessages() {
+		Iterator<String> iterator = pluginsOrdered.iterator();
+		PluginConfig config;
+		PluginServices ps;
+
+		while (iterator.hasNext()) {
+			String pluginName = iterator.next();
+			config = pluginsConfig.get(pluginName);
+			ps = pluginsServices.get(pluginName);
+
+			if ((config.getResourceBundle() != null)
+					&& !config.getResourceBundle().getName().equals("")) {
+				// add the locale files associated with the plugin
+				org.gvsig.i18n.Messages.addResourceFamily(config
+						.getResourceBundle().getName(), ps.getClassLoader(),
+						pluginName);
+			}
+		}
+	}
+
+	static public PluginServices getPluginServices(String name) {
+		return (PluginServices) pluginsServices.get(name);
+	}
+
+	static String getPluginsDir() {
+		return andamiConfig.getPluginsDirectory();
+	}
+
+	static void setPluginsDir(String s) {
+		andamiConfig.setPluginsDirectory(s);
+	}
+
+	static MDIFrame getMDIFrame() {
+		return frame;
+	}
+
+	private void loadPlugins(String pluginsDirectory) {
+		File pDir = new File(pluginsDirectory);
+
+		if (!pDir.exists()) {
+			logger
+					.error("\n\tPlugins directory not found: "
+							+ pDir.getAbsolutePath()
+							+ "\n\tDid you specify the correct directory in the Launch Configuration parameters?\n\tExiting now...");
+			System.exit(-1);
+			return;
+		}
+
+		File[] pluginDirs = pDir.listFiles();
+		if (pluginDirs.length == 0) {
+			logger
+					.error("\n\tPlugins directory is empty: "
+							+ pDir.getAbsolutePath()
+							+ "Did you specify the correct directory in the Launch Configuration parameters?\n\tExiting now...");
+			System.exit(-1);
+			return;
+		}
+
+		for (int i = 0; i < pluginDirs.length; i++) {
+			if (pluginDirs[i].isDirectory()) {
+				File configXml = new File(pluginDirs[i].getAbsolutePath(),
+						"config.xml");
+
+				try {
+					FileInputStream is = new FileInputStream(configXml);
+					Reader xml = org.gvsig.utils.xml.XMLEncodingUtils
+							.getReader(is);
+					if (xml == null) {
+						// the encoding was not correctly detected, use system
+						// default
+						xml = new FileReader(configXml);
+					} else {
+						// use a buffered reader to improve performance
+						xml = new BufferedReader(xml);
+					}
+					PluginConfig pConfig = (PluginConfig) PluginConfig
+							.unmarshal(xml);
+					pluginsConfig.put(pluginDirs[i].getName(), pConfig);
+				} catch (FileNotFoundException e) {
+					logger
+							.info("Plugin folder without config.xml. Skip plugin '"
+									+ pluginDirs[i].getAbsolutePath() + "'.");
+				} catch (MarshalException e) {
+					this.addError("Can't load plugin '"
+							+ pluginDirs[i].getAbsolutePath() + "'.", e);
+				} catch (ValidationException e) {
+					this.addError("Can't load plugin '"
+							+ pluginDirs[i].getAbsolutePath() + "'.", e);
+				}
+			}
+		}
+
+		if (pluginsConfig.size() == 0) {
+			logger
+					.error("No valid plugin was found. The plugins directory currently is: "
+							+ pDir.getAbsolutePath()
+							+ "\n\tDid you specify the correct directory in the Launch Configuration parameters?\n\tExiting now...");
+			System.exit(-1);
+			return;
+		}
+	}
+
+	private static Locale getLocale(String language, String country,
+			String variant) {
+		if (variant != null) {
+			return new Locale(language, country, variant);
+		} else if (country != null) {
+			return new Locale(language, country);
+		} else if (language != null) {
+			return new Locale(language);
+		} else {
+			return new Locale("es");
+		}
+	}
+
+	private static void andamiConfigToXML(String file) throws IOException,
+			MarshalException, ValidationException {
+		// write on a temporary file in order to not destroy current file if
+		// there is some problem while marshaling
+		File tmpFile = new File(file + "-"
+				+ DateTime.getCurrentDate().getTime());
+		File xml = new File(file);
+		File parent = xml.getParentFile();
+		parent.mkdirs();
+
+		BufferedOutputStream os = new BufferedOutputStream(
+				new FileOutputStream(tmpFile));
+		OutputStreamWriter writer = new OutputStreamWriter(os, CASTORENCODING);
+		andamiConfig.marshal(writer);
+		writer.close();
+
+		// if marshaling process finished correctly, move the file to the
+		// correct one
+		xml.delete();
+		if (!tmpFile.renameTo(xml)) {
+			// if rename was not succesful, try copying it
+			FileChannel sourceChannel = new FileInputStream(tmpFile)
+					.getChannel();
+			FileChannel destinationChannel = new FileOutputStream(xml)
+					.getChannel();
+			sourceChannel.transferTo(0, sourceChannel.size(),
+					destinationChannel);
+			sourceChannel.close();
+			destinationChannel.close();
+		}
+	}
+
+	private static void andamiConfigFromXML(String file)
+			throws ConfigurationException {
+		File xml = new File(file);
+
+		InputStreamReader reader = null;
+		try {
+			// Se lee la configuración
+			reader = XMLEncodingUtils.getReader(xml);
+			andamiConfig = (AndamiConfig) AndamiConfig.unmarshal(reader);
+		} catch (FileNotFoundException e) {
+			// Si no existe se ponen los valores por defecto
+			andamiConfig = getDefaultAndamiConfig();
+		} catch (MarshalException e) {
+			// try to close the stream, maybe it remains open
+			if (reader != null) {
+				try {
+					reader.close();
+				} catch (IOException e1) {
+				}
+			}
+			// if there was a problem reading the file, backup it and create a
+			// new one with default values
+			String backupFile = file + "-"
+					+ DateTime.getCurrentDate().getTime();
+			NotificationManager
+					.addError(
+							Messages
+									.getString("Error_reading_andami_config_New_file_created_A_backup_was_made_on_")
+									+ backupFile, new ConfigurationException(e));
+			xml.renameTo(new File(backupFile));
+			andamiConfig = getDefaultAndamiConfig();
+		} catch (ValidationException e) {
+			throw new ConfigurationException(e);
+		}
+	}
+
+	private static AndamiConfig getDefaultAndamiConfig() {
+		AndamiConfig andamiConfig = new AndamiConfig();
+
+		Andami andami = new Andami();
+		andami.setUpdate(true);
+		andamiConfig.setAndami(andami);
+		andamiConfig.setLocaleCountry(Locale.getDefault().getCountry());
+		andamiConfig.setLocaleLanguage(Locale.getDefault().getLanguage());
+		andamiConfig.setLocaleVariant(Locale.getDefault().getVariant());
+
+		if (System.getProperty("javawebstart.version") != null) // Es java web
+		// start)
+		{
+			andamiConfig
+					.setPluginsDirectory(new File(appHomeDir, "extensiones")
+							.getAbsolutePath());
+		} else {
+			andamiConfig.setPluginsDirectory(new File(appName, "extensiones")
+					.getAbsolutePath());
+		}
+
+		andamiConfig.setPlugin(new Plugin[0]);
+		return andamiConfig;
+	}
+
+	private static XMLEntity persistenceFromXML() throws ConfigurationException {
+		File xml = getPluginsPersistenceFile(true);
+
+		if (xml.exists()) {
+			InputStreamReader reader = null;
+
+			try {
+				reader = XMLEncodingUtils.getReader(xml);
+				XmlTag tag = (XmlTag) XmlTag.unmarshal(reader);
+				return new XMLEntity(tag);
+			} catch (FileNotFoundException e) {
+				throw new ConfigurationException(e);
+			} catch (MarshalException e) {
+
+				// try to reopen with default encoding (for backward
+				// compatibility)
+				try {
+					reader = new FileReader(xml);
+					XmlTag tag = (XmlTag) XmlTag.unmarshal(reader);
+					return new XMLEntity(tag);
+
+				} catch (MarshalException ex) {
+					// try to close the stream, maybe it remains open
+					if (reader != null) {
+						try {
+							reader.close();
+						} catch (IOException e1) {
+						}
+					}
+					// backup the old file
+					String backupFile = getPluginsPersistenceFile(true)
+							.getPath()
+							+ "-" + DateTime.getCurrentDate().getTime();
+					NotificationManager
+							.addError(
+									Messages
+											.getString("Error_reading_plugin_persinstence_New_file_created_A_backup_was_made_on_")
+											+ backupFile,
+									new ConfigurationException(e));
+					xml.renameTo(new File(backupFile));
+					// create a new, empty configuration
+					return new XMLEntity();
+				} catch (FileNotFoundException ex) {
+					return new XMLEntity();
+				} catch (ValidationException ex) {
+					throw new ConfigurationException(e);
+				}
+			} catch (ValidationException e) {
+				throw new ConfigurationException(e);
+			}
+		} else {
+			return new XMLEntity();
+		}
+	}
+
+	private static File getPluginsPersistenceFile(boolean read) {
+		if (read) {
+			File pluginsPersistenceFile = new File(getAppHomeDir(),
+					"plugins-persistence-2_0.xml");
+			if (pluginsPersistenceFile.exists()) {
+				return pluginsPersistenceFile;
+			}
+			pluginsPersistenceFile = new File(getAppHomeDir(),
+					"plugins-persistence.xml");
+			if (pluginsPersistenceFile.exists()) {
+				return pluginsPersistenceFile;
+			}
+		}
+		return new File(getAppHomeDir(), "plugins-persistence-2_0.xml");
+
+	}
+
+	private static void persistenceToXML(XMLEntity entity)
+			throws ConfigurationException {
+		// write on a temporary file in order to not destroy current file if
+		// there is some problem while marshaling
+		File tmpFile = new File(getPluginsPersistenceFile(false).getPath()
+				+ "-" + DateTime.getCurrentDate().getTime());
+
+		File xml = getPluginsPersistenceFile(false);
+		OutputStreamWriter writer = null;
+
+		try {
+			writer = new OutputStreamWriter(new FileOutputStream(tmpFile),
+					CASTORENCODING);
+			entity.getXmlTag().marshal(writer);
+			writer.close();
+
+			// if marshaling process finished correctly, move the file to the
+			// correct one
+			xml.delete();
+			if (!tmpFile.renameTo(xml)) {
+				// if rename was not succesful, try copying it
+				FileChannel sourceChannel = new FileInputStream(tmpFile)
+						.getChannel();
+				FileChannel destinationChannel = new FileOutputStream(xml)
+						.getChannel();
+				sourceChannel.transferTo(0, sourceChannel.size(),
+						destinationChannel);
+				sourceChannel.close();
+				destinationChannel.close();
+
+			}
+		} catch (FileNotFoundException e) {
+			throw new ConfigurationException(e);
+		} catch (MarshalException e) {
+			// try to close the stream, maybe it remains open
+			if (writer != null) {
+				try {
+					writer.close();
+				} catch (IOException e1) {
+				}
+			}
+		} catch (ValidationException e) {
+			throw new ConfigurationException(e);
+		} catch (IOException e) {
+			throw new ConfigurationException(e);
+		}
+	}
+
+	static MDIFrame getFrame() {
+		return frame;
+	}
+
+	/**
+	 * Gracefully closes the application. It shows dialogs to save data, finish
+	 * processes, etc, then it terminates the extensions, removes temporal files
+	 * and finally exits.
+	 */
+	public synchronized static void closeApplication() {
+		TerminationProcess terminationProcess = (new Launcher()).new TerminationProcess();
+		terminationProcess.run();
+	}
+
+	static HashMap getClassesExtensions() {
+		return classesExtensions;
+	}
+
+	private static Extensions[] getExtensions() {
+		List<Extensions> array = new ArrayList<Extensions>();
+		Iterator<PluginConfig> iter = pluginsConfig.values().iterator();
+
+		while (iter.hasNext()) {
+			array.add(iter.next().getExtensions());
+		}
+
+		return array.toArray(new Extensions[array.size()]);
+	}
+
+	public static Iterator getExtensionIterator() {
+		return extensions.iterator();
+	}
+
+	public static HashMap getPluginConfig() {
+		return pluginsConfig;
+	}
+
+	public static Extension getExtension(String s) {
+		Extensions[] exts = getExtensions();
+
+		for (int i = 0; i < exts.length; i++) {
+			for (int j = 0; j < exts[i].getExtensionCount(); j++) {
+				if (exts[i].getExtension(j).getClassName().equals(s)) {
+					return exts[i].getExtension(j);
+				}
+			}
+		}
+
+		return null;
+	}
+
+	public static AndamiConfig getAndamiConfig() {
+		return andamiConfig;
+	}
+
+	private static class ExtensionComparator implements Comparator {
+
+		public int compare(Object o1, Object o2) {
+			Extension e1 = (Extension) o1;
+			Extension e2 = (Extension) o2;
+
+			if (!e1.hasPriority() && !e2.hasPriority()) {
+				return -1;
+			}
+
+			if (e1.hasPriority() && !e2.hasPriority()) {
+				return Integer.MIN_VALUE;
+			}
+
+			if (e2.hasPriority() && !e1.hasPriority()) {
+				return Integer.MAX_VALUE;
+			}
+
+			if (e1.getPriority() != e2.getPriority()) {
+				return e2.getPriority() - e1.getPriority();
+			} else {
+				return (e2.toString().compareTo(e1.toString()));
+			}
+		}
+	}
+
+	private static class MenuComparator implements Comparator<SortableMenu> {
+
+		private static ExtensionComparator extComp = new ExtensionComparator();
+
+		public int compare(SortableMenu e1, SortableMenu e2) {
+
+			if (!e1.menu.hasPosition() && !e2.menu.hasPosition()) {
+				if (e1.extension instanceof SkinExtensionType) {
+					return 1;
+				} else if (e2.extension instanceof SkinExtensionType) {
+					return -1;
+				} else {
+					return extComp.compare(e1.extension, e2.extension);
+				}
+			}
+
+			if (e1.menu.hasPosition() && !e2.menu.hasPosition()) {
+				return Integer.MIN_VALUE;
+			}
+
+			if (e2.menu.hasPosition() && !e1.menu.hasPosition()) {
+				return Integer.MAX_VALUE;
+			}
+			if (e1.menu.getPosition() != e2.menu.getPosition()) {
+				// we don't return 0 unless both objects are the same, otherwise
+				// the objects get overwritten in the treemap
+				return e1.menu.getPosition() - e2.menu.getPosition();
+			} else {
+				return (e1.toString().compareTo(e2.toString()));
+			}
+		}
+	}
+
+	private static class SortableMenu {
+
+		public PluginClassLoader loader;
+		public Menu menu;
+		public SkinExtensionType extension;
+
+		public SortableMenu(PluginClassLoader loader,
+				SkinExtensionType skinExt, Menu menu2) {
+			extension = skinExt;
+			menu = menu2;
+			this.loader = loader;
+		}
+	}
+
+	private static class SortableTool {
+
+		public PluginClassLoader loader;
+		public ToolBar toolbar;
+		public ActionTool actiontool;
+		public SelectableTool selectabletool;
+		public SkinExtensionType extension;
+
+		public SortableTool(PluginClassLoader loader,
+				SkinExtensionType skinExt, ToolBar toolbar2,
+				ActionTool actiontool2) {
+			extension = skinExt;
+			toolbar = toolbar2;
+			actiontool = actiontool2;
+			this.loader = loader;
+		}
+
+		public SortableTool(PluginClassLoader loader,
+				SkinExtensionType skinExt, ToolBar toolbar2,
+				SelectableTool selectabletool2) {
+			extension = skinExt;
+			toolbar = toolbar2;
+			selectabletool = selectabletool2;
+			this.loader = loader;
+		}
+	}
+
+	private static class ToolBarComparator implements Comparator<SortableTool> {
+
+		private static ExtensionComparator extComp = new ExtensionComparator();
+
+		public int compare(SortableTool e1, SortableTool e2) {
+
+			// if the toolbars have the same name, they are considered to be
+			// the same toolbar, so we don't need to do further comparing
+			if (e1.toolbar.getName().equals(e2.toolbar.getName())) {
+				return 0;
+			}
+
+			if (!e1.toolbar.hasPosition() && !e2.toolbar.hasPosition()) {
+				if (e1.extension instanceof SkinExtensionType) {
+					return 1;
+				} else if (e2.extension instanceof SkinExtensionType) {
+					return -1;
+				} else {
+					return extComp.compare(e1.extension, e2.extension);
+				}
+			}
+
+			if (e1.toolbar.hasPosition() && !e2.toolbar.hasPosition()) {
+				return Integer.MIN_VALUE;
+			}
+
+			if (e2.toolbar.hasPosition() && !e1.toolbar.hasPosition()) {
+				return Integer.MAX_VALUE;
+			}
+			if (e1.toolbar.getPosition() != e2.toolbar.getPosition()) {
+				return e1.toolbar.getPosition() - e2.toolbar.getPosition();
+			}
+
+			if (e1.toolbar.getActionTool().equals(e2.toolbar.getActionTool())
+					&& e1.toolbar.getSelectableTool().equals(
+							e2.toolbar.getSelectableTool())) {
+				return 0;
+			}
+			return (e1.toolbar.toString().compareTo(e2.toolbar.toString()));
+		}
+	}
+
+	/**
+	 * <p>
+	 * This class is used to compare tools (selectabletool and actiontool),
+	 * using the "position" attribute.
+	 * </p>
+	 * <p>
+	 * The ordering criteria are:
+	 * </p>
+	 * <ul>
+	 * <li>If the tools are placed in different toolbars, they use the toolbars'
+	 * order. (using the ToolBarComparator).</li>
+	 * <li></li>
+	 * <li>If any of the tools has not 'position' attribute, the tool which
+	 * <strong>has</strong> the attribute will be placed first.</li>
+	 * <li>If both tools have the same position (or they don't have a 'position'
+	 * attribute), the priority of the extensions where the tool is defined.</li>
+	 * </ul>
+	 * 
+	 * @author cesar
+	 * @version $Revision$
+	 */
+	private static class ToolComparator implements Comparator<SortableTool> {
+
+		private static ToolBarComparator toolBarComp = new ToolBarComparator();
+
+		public int compare(SortableTool e1, SortableTool e2) {
+			// compare the toolbars which contain the tools
+			int result = toolBarComp.compare(e1, e2);
+			if (result != 0) { // if the toolbars are different, use their order
+				return result;
+			}
+			// otherwise, compare the tools
+			int e1Position = -1, e2Position = -1;
+
+			if (e1.actiontool != null) {
+				if (e1.actiontool.hasPosition()) {
+					e1Position = e1.actiontool.getPosition();
+				}
+			} else if (e1.selectabletool != null) {
+				if (e1.selectabletool.hasPosition()) {
+					e1Position = e1.selectabletool.getPosition();
+				}
+			}
+
+			if (e2.actiontool != null) {
+				if (e2.actiontool.hasPosition()) {
+					e2Position = e2.actiontool.getPosition();
+				}
+			} else if (e2.selectabletool != null) {
+				if (e2.selectabletool.hasPosition()) {
+					e2Position = e2.selectabletool.getPosition();
+				}
+			}
+
+			if ((e1Position == -1) && (e2Position != -1)) {
+				return 1;
+			}
+			if ((e1Position != -1) && (e2Position == -1)) {
+				return -1;
+			}
+			if ((e1Position != -1) && (e2Position != -1)) {
+				result = e1Position - e2Position;
+				// we don't return 0 unless both objects are the same, otherwise
+				// the objects get overwritten in the treemap
+				if (result != 0) {
+					return result;
+				}
+			}
+			return e1.toString().compareTo(e2.toString());
+		}
+	}
+
+	/**
+	 * validates the user before starting gvsig
+	 * 
+	 */
+	private static void validate() {
+
+		IAuthentication session = null;
+		try {
+			session = (IAuthentication) Class.forName(
+					"com.iver.andami.authentication.Session").newInstance();
+
+		} catch (ClassNotFoundException e) {
+			return;
+		} catch (InstantiationException e) {
+			return;
+		} catch (IllegalAccessException e) {
+			return;
+		}
+
+		session.setPluginDirectory(andamiConfig.getPluginsDirectory());
+		if (session.validationRequired()) {
+			if (session.Login()) {
+				logger.info("You are logged in");
+			} else {
+				JOptionPane.showMessageDialog((Component) PluginServices
+						.getMainFrame(), "You are not logged in");
+			}
+			PluginServices.setAuthentication(session);
+		}
+	}
+
+	public static String getDefaultLookAndFeel() {
+		String osName = (String) System.getProperty("os.name");
+
+		if ((osName.length() > 4)
+				&& osName.substring(0, 5).toLowerCase().equals("linux")) {
+			return nonWinDefaultLookAndFeel;
+		}
+		if (osName.toLowerCase().startsWith("mac os x")) {
+			return "ch.randelshofer.quaqua.QuaquaLookAndFeel";
+		}
+
+		return UIManager.getSystemLookAndFeelClassName();
+	}
+
+	/**
+	 * Gets the ISO 839 two-characters-long language code matching the provided
+	 * language code (which may be an ISO 839-2/T three-characters-long code or
+	 * an ISO 839-1 two-characters-long code).
+	 * 
+	 * If the provided parameter is already two characters long, it returns the
+	 * parameter without any modification.
+	 * 
+	 * @param langCode
+	 *            A language code representing either an ISO 839-2/T language
+	 *            code or an ISO 839-1 code.
+	 * @return A two-characters-long code specifying an ISO 839 language code.
+	 */
+	private static String normalizeLanguageCode(String langCode) {
+		final String fileName = "iso_639.tab";
+		if (langCode.length() == 2) {
+			return langCode;
+		} else if (langCode.length() == 3) {
+			if (langCode.equals("va") || langCode.equals("val")) { // special
+				// case
+				// for
+				// Valencian
+				return "ca";
+			}
+			URL isoCodes = Launcher.class.getClassLoader()
+					.getResource(fileName);
+			if (isoCodes != null) {
+				try {
+					BufferedReader reader = new BufferedReader(
+							new InputStreamReader(isoCodes.openStream(),
+									"ISO-8859-1"));
+					String line;
+
+					while ((line = reader.readLine()) != null) {
+						String[] language = line.split("\t");
+						if (language[0].equals(langCode)) {
+							// the three
+							// characters code
+							return language[2]; // third column i the two
+							// characters code
+						}
+					}
+				} catch (IOException ex) {
+					logger.error(Messages
+							.getString("Error_reading_isocodes_file"), ex);
+					return "es";
+				}
+			} else {
+				logger.error(Messages.getString("Error_reading_isocodes_file"));
+				return "es";
+			}
+		}
+		return "es";
+	}
+
+	/**
+	 * Configures the locales (languages and local resources) to be used by the
+	 * application.
+	 * 
+	 * First it tries to get the locale from the command line parameters, then
+	 * the andami-config file is checked.
+	 * 
+	 * The locale name is normalized to get a two characters language code as
+	 * defined by ISO-639-1 (although ISO-639-2/T three characters codes are
+	 * also accepted from the command line or the configuration file).
+	 * 
+	 * Finally, the gvsig-i18n library and the default locales for Java and
+	 * Swing are configured.
+	 * 
+	 */
+	private static void configureLocales(String[] args) {
+		// Configurar el locale
+		String localeStr = null;
+		/*
+		 * for (int i=2; i < args.length; i++) { int index =
+		 * args[i].indexOf("language="); if (index != -1) localeStr =
+		 * args[i].substring(index+9); }
+		 */
+		localeStr = PluginServices.getArgumentByName("language");
+		if (localeStr == null) {
+			localeStr = andamiConfig.getLocaleLanguage();
+		}
+		localeStr = normalizeLanguageCode(localeStr);
+		locale = getLocale(localeStr, andamiConfig.getLocaleCountry(),
+				andamiConfig.getLocaleVariant());
+		Locale.setDefault(locale);
+		JComponent.setDefaultLocale(locale);
+		org.gvsig.i18n.Messages.addLocale(locale);
+		// add english and spanish as fallback languages
+		if (localeStr.equals("es") || localeStr.equals("ca")
+				|| localeStr.equals("gl") || localeStr.equals("eu")
+				|| localeStr.equals("va")) {
+			// prefer Spanish for languages spoken in Spain
+			org.gvsig.i18n.Messages.addLocale(new Locale("es"));
+			org.gvsig.i18n.Messages.addLocale(new Locale("en"));
+		} else {
+			// prefer English for the rest
+			org.gvsig.i18n.Messages.addLocale(new Locale("en"));
+			org.gvsig.i18n.Messages.addLocale(new Locale("es"));
+		}
+
+        // Create classloader for the i18n resources in the
+        // andami and user i18n folder. Those values will have
+        // precedence over any other values added afterwards
+        File andamiI18nFolder =
+            new File(System.getProperty("user.dir"), "i18n");
+        File userI18nFolder = new File(getAppHomeDir(), "i18n");
+
+        logger.info("Loading i18n resources from the application and user "
+            + "folders: {}, {}", andamiI18nFolder, userI18nFolder);
+
+        URL[] i18nURLs;
+        try {
+            i18nURLs =
+                new URL[] { userI18nFolder.toURI().toURL(),
+                    andamiI18nFolder.toURI().toURL() };
+            ClassLoader i18nClassLoader = new URLClassLoader(i18nURLs);
+            org.gvsig.i18n.Messages.addResourceFamily("text", i18nClassLoader,
+                "Andami Launcher");
+        } catch (MalformedURLException e) {
+            logger.error("Error loading i18n resources from the application "
+                + "and user folders: " + andamiI18nFolder + ", "
+                + userI18nFolder, e);
+        }
+
+        // Finally load the andami own i18n resources
+        org.gvsig.i18n.Messages.addResourceFamily("org.gvsig.andami.text",
+            "Andami Launcher");
+	}
+
+	/**
+	 * Gets Home Directory location of the application into users home folder.
+	 * 
+	 * May be set from outside the aplication by means of
+	 * -DgvSIG.home=C:/data/gvSIG, where gvSIG its the name of the application
+	 * 
+	 * @return
+	 */
+	public static String getAppHomeDir() {
+		return appHomeDir;
+	}
+
+	/**
+	 * Sets Home Directory location of the application. May be set from outside
+	 * the aplication by means of -DgvSIG.home=C:/data/gvSIG, where gvSIG its
+	 * the name of the application
+	 * 
+	 * @param appHomeDir
+	 */
+	public static void setAppHomeDir(String appHomeDir) {
+		Launcher.appHomeDir = appHomeDir;
+	}
+
+	/**
+	 * Initialize the extesion that have to take the control of the state of
+	 * action controls of the UI of all extensions. <br>
+	 * <br>
+	 * For use this option you have to add an argument to the command line like
+	 * this: <br>
+	 * <br>
+	 * -exclusiveUI={pathToExtensionClass} <br>
+	 * 
+	 * @see org.gvsig.andami.plugins.IExtension#isEnabled(IExtension extension)
+	 * @see org.gvsig.andami.plugins.IExtension#isVisible(IExtension extension)
+	 */
+	private static void initializeExclusiveUIExtension() {
+		String name = PluginServices.getArgumentByName("exclusiveUI");
+		if (name == null) {
+			return;
+		}
+
+		Iterator<Class<? extends IExtension>> iter = classesExtensions.keySet()
+				.iterator();
+		int charIndex;
+		Class<? extends IExtension> key;
+		while (iter.hasNext()) {
+			key = iter.next();
+			charIndex = key.getName().indexOf(name);
+			// System.out.println("key='"+key.getName()+"' name='"+name+"' charIndex="+charIndex);
+			if (charIndex == 0) {
+				IExtension ext = classesExtensions.get(key);
+				if (ext instanceof ExtensionDecorator) {
+					ext = ((ExtensionDecorator) ext).getExtension();
+				}
+				if (ext instanceof ExclusiveUIExtension) {
+					PluginServices
+							.setExclusiveUIExtension((ExclusiveUIExtension) ext);
+				}
+				break;
+			}
+		}
+
+		logger
+				.error(Messages
+						.getString("No_se_encontro_la_extension_especificada_en_el_parametro_exclusiveUI")
+						+ " '" + name + "'");
+	}
+
+	// public static void initIconThemes() {
+	// // load the iconTheme
+	// IconThemeManager iconManager = new IconThemeManager();
+	// PluginServices.setIconThemeManager(iconManager);
+	// IconThemeInfo selectedTheme = iconManager.readConfig();
+	// if (selectedTheme!=null) {
+	// iconManager.setDefault(selectedTheme);
+	// logger.info("Setting the icon theme: "+selectedTheme.toVerboseString());
+	// }
+	// else {
+	// // set the default dir and try to load the default theme
+	// try {
+	// iconManager.setThemesDir(new File("iconThemes"));
+	// IconThemeInfo[] list = iconManager.list();
+	//
+	// for (int i=0; i<list.length; i++) {
+	// if (list[i].getResourceName().equals("iconThemes/icons")) {
+	// iconManager.setDefault(list[i]);
+	// logger.info("Setting the default icon theme: "+list[i].toVerboseString());
+	// return;
+	// }
+	// }
+	// } catch (FileNotFoundException e) {
+	// logger.info("IconTheme basedir does not exist");
+	// }
+	// // create an empty theme
+	// IconThemeInfo info = new IconThemeInfo();
+	// info.setName("No theme loaded");
+	// info.setResource(null); // null resource means that no real theme is
+	// loaded
+	// info.setDescription("No theme loaded");
+	// info.setVersion("0");
+	// iconManager.setDefault(new IconTheme(info));
+	// logger.info("Setting an empty icon theme");
+	//
+	// }
+	// }
+
+	public static void initIconThemes() {
+		IconThemeManager iconManager = IconThemeManager.getIconThemeManager();
+		IIconTheme icontheme = iconManager.getIconThemeFromConfig();
+		if (icontheme != null) {
+			iconManager.setCurrent(icontheme);
+		}
+	}
+
+	/**
+	 * Manages Andami termination process
+	 * 
+	 * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+	 */
+	public class TerminationProcess {
+
+		private boolean proceed = false;
+		private UnsavedDataPanel panel = null;
+
+		public void run() {
+			try {
+				int exit = manageUnsavedData();
+				if ((exit == JOptionPane.NO_OPTION)
+						|| (exit == JOptionPane.CLOSED_OPTION)) {
+					// the user doesn't want to exit
+					return;
+				}
+				closeAndami();
+			} catch (Exception e) {
+				// It is not possible to close the application.
+				// this exception has been registered before
+			}
+		}
+
+		/**
+		 * Finishes the application without asking user if want or not to save
+		 * unsaved data.
+		 */
+		public void closeAndami() {
+			try {
+				saveAndamiConfig();
+			} catch (Exception ex) {
+				logger
+						.error(
+								"There was an error exiting application, can't save andami-config.xml",
+								ex);
+			}
+
+			try {
+				// Persistencia de los plugins
+				savePluginPersistence();
+				savePluginsProperties();
+			} catch (Exception ex) {
+				logger
+						.error(
+								"There was an error exiting application, can't save plugins properties",
+								ex);
+			}
+
+			// Finalize all the extensions
+			finalizeExtensions();
+
+			try {
+				// Clean any temp data created
+				Utilities.cleanUpTempFiles();
+			} catch (Exception ex) {
+				logger
+						.error(
+								"There was an error exiting application, can't remove temporary files",
+								ex);
+			}
+
+			logger.info("Quiting application.");
+
+			// Para la depuración de memory leaks
+			System.gc();
+
+			System.exit(0);
+		}
+
+		/**
+         * 
+         */
+		public void saveAndamiConfig() {
+			// Configuración de Andami
+			try {
+				andamiConfigToXML(andamiConfigPath);
+			} catch (MarshalException e) {
+				logger
+						.error(
+								Messages
+										.getString("Launcher.No_se_pudo_guardar_la_configuracion_de_andami"),
+								e);
+			} catch (ValidationException e) {
+				logger
+						.error(
+								Messages
+										.getString("Launcher.No_se_pudo_guardar_la_configuracion_de_andami"),
+								e);
+			} catch (IOException e) {
+				logger
+						.error(
+								Messages
+										.getString("Launcher.No_se_pudo_guardar_la_configuracion_de_andami"),
+								e);
+			}
+		}
+
+		private void savePluginsProperties() {
+			PluginsManager manager = PluginsLocator.getManager();
+			List<PluginServices> plugins = manager.getPlugins();
+			for (PluginServices plugin : plugins) {
+				if (plugin != null) {
+					plugin.savePluginProperties();
+				}
+			}
+		}
+
+		/**
+		 * Exectutes the terminate method for all the extensions, in the reverse
+		 * order they were initialized
+		 * 
+		 */
+		private void finalizeExtensions() {
+			for (int i = extensions.size() - 1; i >= 0; i--) {
+				org.gvsig.andami.plugins.IExtension extensionInstance = (org.gvsig.andami.plugins.IExtension) extensions
+						.get(i);
+				String extensionName = "(unknow)";
+				try {
+					extensionName = extensionInstance.getClass().getName();
+					extensionInstance.terminate();
+				} catch (Exception ex) {
+					logger.error(MessageFormat.format(
+							"There was an error extension ending {0}",
+							extensionName), ex);
+				}
+			}
+		}
+
+		private IUnsavedData[] getUnsavedData() throws Exception {
+			List<IUnsavedData> unsavedDataList = new ArrayList<IUnsavedData>();
+			IExtension exclusiveExtension = PluginServices
+					.getExclusiveUIExtension();
+
+			for (int i = extensions.size() - 1; i >= 0; i--) {
+				org.gvsig.andami.plugins.IExtension extensionInstance = (org.gvsig.andami.plugins.IExtension) extensions
+						.get(i);
+				IExtensionStatus status = null;
+				if (exclusiveExtension != null) {
+					status = exclusiveExtension.getStatus(extensionInstance);
+				} else {
+					status = extensionInstance.getStatus();
+				}
+				if (status != null) {
+					try {
+						if (status.hasUnsavedData()) {
+							IUnsavedData[] array = status.getUnsavedData();
+							for (int element = 0; element < array.length; element++) {
+								unsavedDataList.add(array[element]);
+							}
+						}
+					} catch (Exception e) {
+						logger.info("Error calling the hasUnsavedData method",
+								new Exception());
+						int option = JOptionPane
+								.showConfirmDialog(
+										frame,
+										Messages
+												.getString("error_getting_unsaved_data"),
+										Messages.getString("MDIFrame.salir"),
+										JOptionPane.YES_NO_OPTION);
+						if (option == JOptionPane.NO_OPTION) {
+							throw e;
+						}
+					}
+				}
+			}
+			return unsavedDataList.toArray(new IUnsavedData[unsavedDataList
+					.size()]);
+		}
+
+		public UnsavedDataPanel getUnsavedDataPanel() {
+			if (panel == null) {
+				panel = new UnsavedDataPanel(new IUnsavedData[0]);
+			}
+			return panel;
+		}
+
+		/**
+		 * Checks if the extensions have some unsaved data, and shows a dialog
+		 * to allow saving it. This dialog also allows to don't exit Andami.
+		 * 
+		 * @return true if the user confirmed he wishes to exit, false otherwise
+		 * @throws Exception
+		 */
+		public int manageUnsavedData() throws Exception {
+			IUnsavedData[] unsavedData = getUnsavedData();
+
+			// there was no unsaved data
+			if (unsavedData.length == 0) {
+				int option = JOptionPane
+						.showConfirmDialog(frame, Messages
+								.getString("MDIFrame.quiere_salir"), Messages
+								.getString("MDIFrame.salir"),
+								JOptionPane.YES_NO_OPTION);
+				return option;
+			}
+
+			UnsavedDataPanel panel = getUnsavedDataPanel();
+			panel.setUnsavedDataArray(unsavedData);
+
+			panel.addActionListener(panel.new UnsavedDataPanelListener() {
+
+				public void cancel(UnsavedDataPanel panel) {
+					proceed(false);
+					PluginServices.getMDIManager().closeWindow(panel);
+
+				}
+
+				public void discard(UnsavedDataPanel panel) {
+					proceed(true);
+					PluginServices.getMDIManager().closeWindow(panel);
+
+				}
+
+				public void accept(UnsavedDataPanel panel) {
+					IUnsavedData[] unsavedDataArray = panel
+							.getSelectedsUnsavedData();
+					boolean saved;
+					for (int i = 0; i < unsavedDataArray.length; i++) {
+						try {
+							saved = unsavedDataArray[i].saveData();
+						} catch (Exception ex) {
+							PluginServices.getLogger().error(
+									"Error saving"
+											+ unsavedDataArray[i]
+													.getResourceName(), ex);
+							saved = false;
+						}
+						if (!saved) {
+							JOptionPane
+									.showMessageDialog(
+											panel,
+											PluginServices
+													.getText(this,
+															"The_following_resource_could_not_be_saved_")
+													+ "\n"
+													+ unsavedDataArray[i]
+															.getResourceName()
+													+ " -- "
+													+ unsavedDataArray[i]
+															.getDescription(),
+											PluginServices.getText(this,
+													"Resource_was_not_saved"),
+											JOptionPane.ERROR_MESSAGE);
+
+							try {
+								unsavedDataArray = getUnsavedData();
+							} catch (Exception e) {
+								// This exception has been registered before
+							}
+							panel.setUnsavedDataArray(unsavedDataArray);
+							return;
+						}
+					}
+					proceed(true);
+					PluginServices.getMDIManager().closeWindow(panel);
+				}
+			});
+
+			PluginServices.getMDIManager().addWindow(panel);
+			if (proceed) {
+				return JOptionPane.YES_OPTION;
+			} else {
+				return JOptionPane.NO_OPTION;
+			}
+		}
+
+		private void proceed(boolean proceed) {
+			this.proceed = proceed;
+		}
+
+	}
+
+	public static TerminationProcess getTerminationProcess() {
+		return (new Launcher()).new TerminationProcess();
+	}
+
+	/**
+	 * Launch the gvSIG package installer.
+	 * 
+	 * @throws Exception
+	 *             if there is any error
+	 */
+	private void doInstall(String[] args) throws Exception {
+		String installURL = null;
+		String installURLFile = null;
+		String gvSIGVersion = null;
+		String[] myArgs = new String[2];
+
+		Options options = new Options();
+		options.addOption("i", "install", false, "install");
+		options.addOption("u", "installURL", true, "installURL");
+		options.addOption("f", "installURLFile", true, "installURLFile");
+		options.addOption("v", "installVersion", true, "installVersion");
+		options.addOption("A", "applicationName", true, "applicationName");
+		options.addOption("P", "pluginsFolder", true, "pluginsFolder");
+
+		CommandLineParser parser = new PosixParser();
+		CommandLine line = null;
+		try {
+			line = parser.parse(options, args);
+			boolean hasAllMandatoryOptions = true;
+			if (!line.hasOption("install")) {
+				hasAllMandatoryOptions = false;
+			}
+			if (line.hasOption("installURL")) {
+				installURL = line.getOptionValue("installURL");
+			}
+			if (line.hasOption("installURLFile")) {
+				installURLFile = line.getOptionValue("installURLFile");
+			}
+			if (line.hasOption("installVersion")) {
+				gvSIGVersion = line.getOptionValue("installVersion");
+			}
+			if (line.hasOption("applicationName")) {
+				myArgs[0] = line.getOptionValue("applicationName");
+			} else {
+				hasAllMandatoryOptions = false;
+			}
+			if (line.hasOption("pluginsFolder")) {
+				myArgs[1] = line.getOptionValue("pluginsFolder");
+			} else {
+				hasAllMandatoryOptions = false;
+			}
+			if (!hasAllMandatoryOptions) {
+				System.err
+						.println(Messages.get("usage")
+								+ ": Launcher --applicationName=appName --pluginsFolder=plugins-directory "
+								+ "[--installURLFile=File] "
+								+ "--install [--installURL=URL] [language=locale]");
+				return;
+			}
+		} catch (ParseException exp) {
+			System.out.println("Unexpected exception:" + exp.getMessage());
+		}
+
+		initializeApp(myArgs);
+		initializeLibraries();
+		AndamiConfig config = getAndamiConfig();
+		config.setLocaleLanguage(locale.getLanguage());
+		config.setLocaleCountry(locale.getCountry());
+		config.setLocaleVariant(locale.getVariant());
+
+		// Configure default index download URL
+		if (installURL != null) {
+			SwingInstallerLocator.getSwingInstallerManager()
+					.setDefaultDownloadURL(installURL);
+		}
+
+		if (installURLFile != null) {
+			// TODO: Convertir a File y pasarlo
+			SwingInstallerLocator.getSwingInstallerManager()
+					.setDefaultDownloadURL(new File(installURLFile));
+		}
+
+		// Launch installer
+		PluginsManager manager = PluginsLocator.getManager();
+
+		File defaultAddonsRepository = PluginsLocator.getManager()
+				.getPluginsFolder();
+		InstallerManager installerManager = InstallerLocator
+				.getInstallerManager();
+		installerManager.addLocalAddonRepository(defaultAddonsRepository);
+		installerManager
+				.setDefaultLocalAddonRepository(defaultAddonsRepository);
+
+		AbstractInstallPackageWizard installPackageWizard = SwingInstallerLocator
+				.getSwingInstallerManager().createInstallPackageWizard(
+						manager.getApplicationFolder(),
+						manager.getInstallFolder());
+		installPackageWizard
+				.setWizardActionListener(new InstallerWizardActionListener() {
+
+					public void finish(InstallerWizardPanel installerWizard) {
+						System.exit(0);
+					}
+
+					public void cancel(InstallerWizardPanel installerWizard) {
+						System.exit(0);
+					}
+				});
+
+		// the wizard will show the Typical or Advanced mode option.
+		installPackageWizard.setAskTypicalOrCustom(true);
+		// default packages will be selected.
+		installPackageWizard.setSelectDefaultPackages(true);
+
+		// set the gvSIG version to the install manager, to compose the download
+		// URL:
+		InstallerLocator.getInstallerManager().setVersion(gvSIGVersion);
+
+		// 1. Create the frame.
+		JFrame frame = new JFrame(Messages.get("gvsig_package_installer"));
+
+		// 2. What happens when the frame closes?
+		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		Runtime.getRuntime().addShutdownHook(new Thread() {
+
+			@Override
+			public void run() {
+				getTerminationProcess().saveAndamiConfig();
+			}
+		});
+
+		// 3. Add the installer panel to the frame
+		frame.getContentPane().add(installPackageWizard, BorderLayout.CENTER);
+
+		// 4. Size the frame and center on the screen
+		frame.pack();
+		frame.setLocationRelativeTo(null);
+
+		// 5. Show it.
+		frame.setVisible(true);
+	}
+
+	public static String getInformation() {
+		PluginsManager pluginmgr = PluginsLocator.getManager();
+		InstallerManager installmgr = InstallerLocator.getInstallerManager();
+
+		StringWriter writer = new StringWriter();
+
+		Properties props = System.getProperties();
+
+		// OS information
+		String osName = props.getProperty("os.name");
+		writer.write("OS\n");
+		writer.write("    name   : " + osName + "\n");
+		writer.write("    arch   : " + props.get("os.arch") + "\n");
+		writer.write("    version: " + props.get("os.version") + "\n");
+		if (osName.startsWith("Linux")) {
+			try {
+				String[] command = { "lsb_release", "-a" };
+				Process p = Runtime.getRuntime().exec(command);
+				InputStream is = p.getInputStream();
+				BufferedReader reader = new BufferedReader(
+						new InputStreamReader(is));
+				String line;
+				while ((line = reader.readLine()) != null) {
+					writer.write("    " + line + "\n");
+				}
+			} catch (Exception ex) {
+				writer
+						.write("Can't get detailled os information (lsb_release -a).");
+			}
+		}
+
+		// JRE information
+		writer.write("JRE\n");
+		writer.write("    vendor : " + props.get("java.vendor") + "\n");
+		writer.write("    version: " + props.get("java.version") + "\n");
+		writer.write("    home   : " + props.get("java.home") + "\n");
+
+		writer.write("HTTP Proxy\n");
+		writer.write("    http.proxyHost     : " + props.get("http.proxyHost")
+				+ "\n");
+		writer.write("    http.proxyPort     : " + props.get("http.proxyPort")
+				+ "\n");
+		writer.write("    http.proxyUserName : "
+				+ props.get("http.proxyUserName") + "\n");
+		writer.write("    http.proxyPassword : "
+				+ props.get("http.proxyPassword") + "\n");
+
+		String skinName = "(unknow)";
+		try {
+			skinName = MDIManagerFactory.getSkinExtension().getClassName();
+		} catch (Throwable e) {
+			// Ignore
+		}
+		writer.write("Application\n");
+		writer.write("    locale language         : "
+				+ Launcher.getAndamiConfig().getLocaleLanguage() + "\n");
+		writer.write("    application forlder     : "
+				+ pluginmgr.getApplicationFolder() + "\n");
+		writer.write("    install forlder         : "
+				+ pluginmgr.getInstallFolder() + "\n");
+		writer.write("    application home forlder: "
+				+ pluginmgr.getApplicationHomeFolder() + "\n");
+		writer.write("    plugins forlder         : "
+				+ pluginmgr.getPluginsFolder() + "\n");
+		writer.write("    theme                   : "
+				+ Launcher.theme.getSource() + "\n");
+		// writer.write("    Skin                    : " + skinName + "\n");
+
+		try {
+			PackageInfo[] pkgs = installmgr.getInstalledPackages(pluginmgr
+					.getPluginsFolder());
+			writer.write("Installed packages\n");
+			for (int i = 0; i < pkgs.length; i++) {
+				writer.write("    ");
+				writer.write(pkgs[i].toStringCompact());
+				writer.write("\n");
+			}
+		} catch (Throwable e) {
+			writer.write("Can't get installed package information.");
+		}
+		return writer.toString();
+	}
+
+	private void logger_info(String msg) {
+		String info[] = msg.split("\n");
+		for (int i = 0; i < info.length; i++) {
+			logger.info(info[i]);
+		}
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/Launcher.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/LibraryExtension.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/LibraryExtension.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/LibraryExtension.java	(revision 38313)
@@ -0,0 +1,23 @@
+package org.gvsig.andami;
+
+import org.gvsig.andami.plugins.Extension;
+
+public class LibraryExtension extends Extension {
+
+	public void initialize() {
+		// Do nothing
+	}
+
+	public void execute(String actionCommand) {
+		// Do nothing
+	}
+
+	public boolean isEnabled() {
+		return false;
+	}
+
+	public boolean isVisible() {
+		return false;
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/LibraryExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginServices.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginServices.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginServices.java	(revision 38313)
@@ -0,0 +1,890 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami;
+
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.KeyEventDispatcher;
+import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Properties;
+
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.authentication.IAuthentication;
+import org.gvsig.andami.iconthemes.IIconTheme;
+import org.gvsig.andami.iconthemes.IconThemeManager;
+import org.gvsig.andami.messages.Messages;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.ExtensionDecorator;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.preferences.DlgPreferences;
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseRuntimeException;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.AddDefinitionException;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.swing.threads.IMonitorableTask;
+import org.gvsig.utils.swing.threads.IProgressMonitorIF;
+import org.gvsig.utils.swing.threads.TaskMonitorTimerListener;
+import org.gvsig.utils.swing.threads.UndefinedProgressMonitor;
+
+/**
+ * Provides services to Plugins. Each plugin has an associated PluginServices
+ * object, which provides specific services. Main of them: translations,
+ * logging, access to plugin's resources, background tasks, clipboard access
+ * and data persistence.
+ * 
+ * @author Fernando González Cortés
+ */
+public class PluginServices {
+
+    private static Logger logger =
+        LoggerFactory.getLogger(PluginServices.class);
+
+    private static String[] arguments;
+
+    private static IAuthentication authentication;
+
+    private static ExclusiveUIExtension exclusiveUIExtension = null;
+
+    private PluginClassLoader loader;
+
+    private XMLEntity persistentXML;
+
+    private DynObject pluginPersistence = null;
+
+    /**
+     * Creates a new PluginServices objetct.
+     * 
+     * @param loader
+     *            The Plugin's ClassLoader.
+     */
+    public PluginServices(PluginClassLoader loader) {
+        this.loader = loader;
+    }
+
+    /**
+     * Returns the message in the current's locale language
+     * corresponding to the provided translation key.
+     * The key-message pairs are obtained from the plugin's
+     * translation files (text_xx.properties files).
+     * 
+     * @param key
+     *            Translation key whose associated message is to be obtained
+     * 
+     * @return The message associated with the provided key, in one of the
+     *         current locale languages, or the key if the translation is not
+     *         found.
+     */
+    public String getText(String key) {
+        if (key == null)
+            return null;
+        String translation = org.gvsig.i18n.Messages.getText(key, false);
+        if (translation != null)
+            return translation;
+        else {
+            logger.debug("Can't find translation for ''{}'' in plugin ''{}''.",
+                key,
+                getPluginName());
+            return key;
+        }
+    }
+
+    /**
+     * Gets the plugin's classloader.
+     * 
+     * @return Returns the loader.
+     */
+    public PluginClassLoader getClassLoader() {
+        return loader;
+    }
+
+    /**
+     * Gets the plugin's name
+     * 
+     * @return The plugin's name
+     */
+    String getPluginName() {
+        return loader.getPluginName();
+    }
+
+    /**
+     * Gets a reference to the PluginServices object associated with the
+     * plugin containing the provided class.
+     * 
+     * Obtienen una referencia al PluginServices del plugin cuyo nombre se pasa
+     * como parámetro
+     * 
+     * @param pluginClassInstance
+     *            An instance of a class. This class is contained in a plugin,
+     *            whose
+     *            services are to be obtained
+     * 
+     * @return The PluginServices object associated to the containing plugin
+     * 
+     * @throws RuntimeException
+     *             If the parameter was not loaded from a plugin
+     */
+    public static PluginServices getPluginServices(Object pluginClassInstance) {
+        try {
+            PluginClassLoader loader =
+                (PluginClassLoader) pluginClassInstance.getClass()
+                .getClassLoader();
+
+            return Launcher.getPluginServices(loader.getPluginName());
+        } catch (ClassCastException e) {
+            /*
+             * throw new RuntimeException( "Parameter is not a plugin class
+             * instance");
+             */
+            return null;
+        }
+    }
+
+    /**
+     * Gets a reference to the PluginServices object associated with the
+     * provided plugin.
+     * 
+     * @param pluginName
+     *            Plugin's name whose services are going to be used
+     * 
+     * @return The PluginServices object associated with the provided plugin.
+     */
+    public static PluginServices getPluginServices(String pluginName) {
+        return Launcher.getPluginServices(pluginName);
+    }
+
+    /**
+     * Gets the window manager (MDIManager).
+     * 
+     * @return A reference to the window manager (MDIManager).
+     */
+    public static MDIManager getMDIManager() {
+        return Launcher.getFrame().getMDIManager();
+    }
+
+    /**
+     * Gets the application's main frame.
+     * 
+     * @return A reference to the application's main window
+     */
+    public static MainFrame getMainFrame() {
+        return Launcher.getFrame();
+    }
+
+    public static void registerKeyStroke(KeyStroke key, KeyEventDispatcher a) {
+        GlobalKeyEventDispatcher.getInstance().registerKeyStroke(key, a);
+    }
+
+    public static void unRegisterKeyStroke(KeyStroke key) {
+        GlobalKeyEventDispatcher.getInstance().removeKeyStrokeBinding(key);
+    }
+
+    /**
+     * Gets the instance of the extension whose class is provided.
+     * 
+     * @param extensionClass
+     *            Class of the extension whose instance is to be returned
+     * 
+     * @return The instance of the extension, or null if the instance does
+     *         not exist.Instancia de la extensión o null en caso de que no haya
+     *         una
+     */
+    public static IExtension getExtension(Class extensionClass) {
+        ExtensionDecorator extAux =
+            (ExtensionDecorator) Launcher.getClassesExtensions()
+            .get(extensionClass);
+        try {
+            return extAux.getExtension();
+        } catch (NullPointerException ex) {
+            return null;
+        }
+    }
+
+    /**
+     * Gets a reference to the Extension Decorator which adds some extra options
+     * to the basic extension interface.
+     * 
+     * @param extensionClass
+     *            The class of the extension whose decorator is to be returned
+     * @return The ExtensionDecorator associated with the provided extension,
+     *         or null if the extension does not exist.
+     */
+    public static ExtensionDecorator getDecoratedExtension(Class extensionClass) {
+        return (ExtensionDecorator) Launcher.getClassesExtensions()
+        .get(extensionClass);
+    }
+
+    /**
+     * Returns an array containing references to all the loaded extensions.
+     * 
+     * @return ExtensionDecorator[] An array of ExtensionDecorators (each
+     *         Decorator contains one extension).
+     */
+    public static ExtensionDecorator[] getDecoratedExtensions() {
+        HashMap map = Launcher.getClassesExtensions();
+        ExtensionDecorator[] extensions =
+            (ExtensionDecorator[]) map.values()
+            .toArray(new ExtensionDecorator[0]);
+        return extensions;
+    }
+
+    /**
+     * Gets an iterator with all the loaded Extensions.
+     * 
+     * @return Iterator over the decorated extensions (each member of
+     *         the iterator is an ExtensionDecorator, which in turn contains
+     *         one IExtension object).
+     */
+    public static Iterator getExtensions() {
+        return Launcher.getClassesExtensions().values().iterator();
+    }
+
+    /**
+     * Returns the message in the current's locale language
+     * corresponding to the provided translation key.
+     * The key-message pairs are obtained from the plugin's
+     * translation files (text_xx.properties files).
+     * 
+     * @param pluginObject
+     *            Any object which was loaded from a plugin
+     * 
+     * @param key
+     *            Translation key whose associated message is to be obtained
+     * 
+     * @return The message associated with the provided key, in one of the
+     *         current locale languages, or the key if the translation is not
+     *         found.
+     */
+    public static String getText(Object pluginObject, String key) {
+        if (key == null)
+            return null;
+        String translation = org.gvsig.i18n.Messages.getText(key, false);
+        if (translation != null)
+            return translation;
+        else {
+            logger.debug("Can't find translation for ''{}''.", key);
+            return key;
+        }
+    }
+
+    /**
+     * Sets the XML data which should be saved on disk for this plugin. This
+     * data can be retrieved on following sessions.
+     * 
+     * @param The
+     *            XMLEntity object containing the data to be persisted.
+     * 
+     * @see PluginServices.getPersistentXML()
+     * @see XMLEntity
+     */
+    public void setPersistentXML(XMLEntity entity) {
+        persistentXML = entity;
+    }
+
+    /**
+     * Gets the XML data which was saved on previous sessions for this
+     * plugins.
+     * 
+     * @return An XMLEntity object containing the persisted data
+     */
+    public XMLEntity getPersistentXML() {
+        if (persistentXML == null) {
+            persistentXML = new XMLEntity();
+        }
+        return persistentXML;
+    }
+
+    /**
+     * Añade un listener a un popup menu registrado en el config.xml de algún
+     * plugin
+     * 
+     * @param name
+     *            Nombre del menú contextual
+     * @param c
+     *            Componente que desplegará el menú cuando se haga click con el
+     *            botón derecho
+     * @param listener
+     *            Listener que se ejecutará cuando se seleccione cualquier
+     *            entrada del menú
+     * 
+     * @throws RuntimeException
+     *             Si la interfaz no está preparada todavía. Sólo puede darse
+     *             durante el arranque
+     */
+    public void addPopupMenuListener(String name,
+        Component c,
+        ActionListener listener) {
+        MDIFrame frame = Launcher.getFrame();
+
+        if (frame == null) {
+            throw new RuntimeException("MDIFrame not loaded yet");
+        }
+
+        frame.addPopupMenuListener(name, c, listener, loader);
+    }
+
+    /**
+     * Gets the plugin's root directory.
+     * 
+     * @return A File pointing to the plugin's root directory.
+     */
+    public File getPluginDirectory() {
+        return new File(Launcher.getPluginsDir() + File.separator
+            + getPluginName());
+    }
+
+    /**
+     * Runs a background task. The events produced on the main frame will
+     * be inhibited.
+     * 
+     * @param r
+     *            The task to run.
+     * 
+     * @return The Thread on which the task is executed.
+     */
+    public static Thread backgroundExecution(Runnable r) {
+        Thread t = new Thread(new RunnableDecorator(r));
+        t.start();
+
+        return t;
+    }
+
+    /**
+     * Runs a backbround task. This task may be monitored and canceled, and
+     * does not inhibit any event.
+     * 
+     * @param task
+     *            The task to run.
+     */
+    public static void cancelableBackgroundExecution(final IMonitorableTask task) {
+        final org.gvsig.utils.swing.threads.SwingWorker worker =
+            new org.gvsig.utils.swing.threads.SwingWorker() {
+
+            public Object construct() {
+                try {
+                    task.run();
+                    return task;
+                } catch (Exception e) {
+                    NotificationManager.addError(null, e);
+                }
+                return null;
+            }
+
+            /**
+             * Called on the event dispatching thread (not on the worker
+             * thread)
+             * after the <code>construct</code> method has returned.
+             */
+            public void finished() {
+                task.finished();
+            }
+        };
+
+        Component mainFrame = (Component) PluginServices.getMainFrame();
+
+        IProgressMonitorIF progressMonitor = null;
+        String title = getText(null, "PluginServices.Procesando");
+        progressMonitor =
+            new UndefinedProgressMonitor((Frame) mainFrame, title);
+        progressMonitor.setIndeterminated(!task.isDefined());
+        progressMonitor.setInitialStep(task.getInitialStep());
+        progressMonitor.setLastStep(task.getFinishStep());
+        progressMonitor.setCurrentStep(task.getCurrentStep());
+        progressMonitor.setMainTitleLabel(task.getStatusMessage());
+        progressMonitor.setNote(task.getNote());
+        progressMonitor.open();
+        int delay = 500;
+        TaskMonitorTimerListener timerListener =
+            new TaskMonitorTimerListener(progressMonitor, task);
+        Timer timer = new Timer(delay, timerListener);
+        timerListener.setTimer(timer);
+        timer.start();
+
+        worker.start();
+
+    }
+
+    /**
+     * Closes the application. Cleanly exits from the application:
+     * terminates all the extensions, then exits.
+     * 
+     */
+    public static void closeApplication() {
+        Launcher.closeApplication();
+    }
+
+    /**
+     * DOCUMENT ME!
+     * 
+     * @author Fernando González Cortés
+     */
+    private static class RunnableDecorator implements Runnable {
+
+        private Runnable r;
+
+        /**
+         * Crea un nuevo RunnableDecorator.
+         * 
+         * @param r
+         *            DOCUMENT ME!
+         */
+        public RunnableDecorator(Runnable r) {
+            this.r = r;
+        }
+
+        /**
+         * @see java.lang.Runnable#run()
+         */
+        public void run() {
+            try {
+                SwingUtilities.invokeAndWait(new Runnable() {
+
+                    public void run() {
+                        try {
+                            r.run();
+                        } catch (RuntimeException e) {
+                            NotificationManager.addError(Messages.getString("PluginServices.Bug_en_el_codigo"),
+                                e);
+                        } catch (Error e) {
+                            NotificationManager.addError(Messages.getString("PluginServices.Error_grave_de_la_aplicación"),
+                                e);
+                        }
+                    }
+                });
+            } catch (InterruptedException e) {
+                NotificationManager.addWarning(Messages.getString("PluginServices.No_se_pudo_poner_el_reloj_de_arena"),
+                    e);
+            } catch (InvocationTargetException e) {
+                NotificationManager.addWarning(Messages.getString("PluginServices.No_se_pudo_poner_el_reloj_de_arena"),
+                    e);
+            }
+        }
+    }
+
+    /**
+     * Gets an array containing the application's startup arguments. <br>
+     * <br>
+     * Usually: <code>appName plugins-directory [locale] [other args]</code>
+     * 
+     * @return the original arguments that Andami received. (app-name
+     *         plugins-directory, locale, etc)
+     */
+    public static String[] getArguments() {
+        return arguments;
+    }
+
+    /**
+     * Replaces the original Andami arguments with the provided arguments.
+     * 
+     * @param arguments
+     *            An array of String, each element of the array
+     *            represents one
+     *            argument.
+     */
+    public static void setArguments(String[] arguments) {
+        PluginServices.arguments = arguments;
+    }
+
+    /**
+     * Returns the value of a command line named argument. <br>
+     * <br>
+     * The argument format is: <br>
+     * -{argumentName}={argumentValue} <br>
+     * <br>
+     * example: <br>
+     * ' -language=en '
+     * 
+     * @return String The value of the argument
+     */
+    public static String getArgumentByName(String name) {
+        for (int i = 2; i < PluginServices.arguments.length; i++) {
+            int index = PluginServices.arguments[i].indexOf(name + "=");
+            if (index != -1)
+                return PluginServices.arguments[i].substring(index
+                    + name.length() + 1);
+        }
+        return null;
+    }
+
+    /**
+     * Gets the logger. The logger is used to register important
+     * events (errors, etc), which are stored on a file which
+     * can be checked later.
+     * 
+     * @return A Logger object.
+     * @see Logger object from the Log4j library.
+     * 
+     */
+    public static Logger getLogger() {
+        return logger;
+    }
+
+    public static IAuthentication getAuthentication() {
+        return authentication;
+    }
+
+    public static void setAuthentication(IAuthentication authen) {
+        authentication = authen;
+    }
+
+    public static DlgPreferences getDlgPreferences() {
+        return DlgPreferences.getInstance();
+    }
+
+    /**
+     * Stores the provided text data on the clipboard.
+     * 
+     * @param data
+     *            An String containing the data to be stored
+     *            on the clipboard.
+     */
+    public static void putInClipboard(String data) {
+        StringSelection ss = new StringSelection(data);
+
+        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss);
+    }
+
+    /**
+     * Gets text data from the Clipboard, if available.
+     * 
+     * @return An String containing the clipboard's data, or <code>null</code>
+     *         if the data was not available.
+     */
+    public static String getFromClipboard() {
+
+        try {
+            return (String) Toolkit.getDefaultToolkit()
+            .getSystemClipboard()
+            .getContents(null)
+            .getTransferData(DataFlavor.stringFlavor);
+        } catch (UnsupportedFlavorException e) {
+            return null;
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            return null;
+        }
+    }
+
+    /**
+     * Gets the ExclusiveUIExtension, an special extension which
+     * will take
+     * control over the UI and will decide which extensions may be
+     * enable/disabled or visible/hidden.
+     * 
+     * @return If an ExclusiveUIExtension was set, return this extension.
+     *         Otherwise, return <code>null</code>.
+     * 
+     * @see org.gvsig.andami.Launcher#initializeExclusiveUIExtension()
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled(IExtension extension)
+     * @see org.gvsig.andami.plugins.IExtension#isVisible(IExtension extension)
+     */
+    public static ExclusiveUIExtension getExclusiveUIExtension() {
+        return PluginServices.exclusiveUIExtension;
+    }
+
+    /**
+     * Sets the ExclusiveUIExtension, an special extension which
+     * will take
+     * control over the UI and will decide which extensions may be
+     * enable/disabled or visible/hidden. <br>
+     * <br>
+     * The ExclusiveUIExtension is normally set by the following
+     * Andami startup argument: <br>
+     * <br>
+     * <code>ExclusiveUIExtension=ExtensionName</code>
+     * 
+     * @see org.gvsig.andami.Launcher#initializeExclusiveUIExtension()
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled(IExtension extension)
+     * @see org.gvsig.andami.plugins.IExtension#isVisible(IExtension extension)
+     */
+    public static void setExclusiveUIExtension(ExclusiveUIExtension extension) {
+        PluginServices.exclusiveUIExtension = extension;
+    }
+
+    public static void addLoaders(ArrayList classLoaders) {
+        PluginClassLoader.addLoaders(classLoaders);
+    }
+
+    public static IconThemeManager getIconThemeManager() {
+        return IconThemeManager.getIconThemeManager();
+    }
+
+    public static IIconTheme getIconTheme() {
+        return IconThemeManager.getIconThemeManager().getCurrent();
+    }
+
+    /**
+     * Try to detect if the application is running in a development
+     * environment. <br>
+     * This look for <b>.project</b> and <b>.classpath</b> files in the starts
+     * path of the application.
+     * 
+     * @return true if <b>.project</b> and <b>.classpath</b> are in the
+     *         development path
+     */
+    public static boolean runningInDevelopment() {
+        String andamiPath;
+        Properties props = System.getProperties();
+
+        try {
+            try {
+                andamiPath =
+                    (new File(Launcher.class.getResource(".").getFile()
+                        + File.separator + ".." + File.separator + ".."
+                        + File.separator + ".." + File.separator + "..")).getCanonicalPath();
+            } catch (IOException e) {
+                andamiPath =
+                    (new File(Launcher.class.getResource(".").getFile()
+                        + File.separator + ".." + File.separator + ".."
+                        + File.separator + ".." + File.separator + "..")).getAbsolutePath();
+            }
+        } catch (Exception e1) {
+            andamiPath = (String) props.get("user.dir");
+        }
+
+        File andamiJar = new File(andamiPath + File.separator + "andami.jar");
+        if (!andamiJar.exists())
+            return false;
+        File projectFile = new File(andamiPath + File.separator + ".project");
+        File classpathFile =
+            new File(andamiPath + File.separator + ".classpath");
+        return projectFile.exists() && classpathFile.exists();
+
+    }
+
+    public PluginsManager getManager() {
+        return PluginsLocator.getManager();
+    }
+
+    public DynObject getPluginProperties() {
+        if (this.pluginPersistence == null) {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            DynStruct dynStruct = manager.getDynObjectDefinition(getPluginName());
+            if ( dynStruct == null) {
+                File persistenceDefinitionFile =
+                    new File(getManager().getPluginsDirectory().getAbsolutePath()
+                        + File.separator + this.getPluginName()
+                        + File.separator + "plugin-persistence.def");
+                try {
+                    dynStruct = manager.addDefinition(DynObject.class,
+                        this.getPluginName(),
+                        new FileInputStream(persistenceDefinitionFile),
+                        this.getClassLoader(),
+                        null,
+                        null);
+                } catch (AddDefinitionException e) {
+                    throw new PluginPersistenceAddDefinitionException(this.getPluginName());
+                } catch (FileNotFoundException e) {
+                    throw new PluginPersistenceNeedDefinitionException(this.getPluginName());
+                }
+            }
+
+
+			File persistenceFile = getPluginPersistenceFile();
+            if (persistenceFile.exists()) {
+                PersistentState state;
+
+                try {
+                    state = manager.loadState(new FileInputStream(persistenceFile));
+                    pluginPersistence = (DynObject) manager.create(state);
+                } catch (Exception e) {
+                    logger.error("Can't retrieve persistent values from plugin "+this.getPluginName(), e);
+                }
+            }
+            if (this.pluginPersistence == null) {
+                this.pluginPersistence =
+                    ToolsLocator.getDynObjectManager()
+                    .createDynObject(dynStruct); 
+            }
+        }
+        return pluginPersistence;
+    }
+
+    public void savePluginProperties() {
+        if (this.pluginPersistence == null) {
+            return;
+        }
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		File persistenceFile = getPluginPersistenceFile();
+        PersistentState state;
+        FileOutputStream fos;
+        try {
+            state = manager.getState(pluginPersistence);
+            manager.saveState(state, new FileOutputStream(persistenceFile));
+        } catch (Exception e) {
+            throw new PluginSaveDataException(this.getPluginName(), e);
+        }
+
+
+    }
+
+	/**
+	 * Returns the plugin persistence file.
+	 * 
+	 * @return the plugin persistence file
+	 */
+	private File getPluginPersistenceFile() {
+		return new File(getPluginHomeFolder(), "plugin-persistence.dat");
+	}
+
+	/**
+	 * Returns the folder where the plugin stores its resources. That folder
+	 * will be usually a subfolder into the application folder in the user home
+	 * folder.
+	 * 
+	 * @return the folder where the plugin stores its resources
+	 */
+	public File getPluginHomeFolder() {
+		File persistenceFolder = new File(Launcher.getAppHomeDir()
+				+ File.separator + "plugins" + File.separator
+				+ this.getPluginName());
+
+		if (!persistenceFolder.exists()) {
+			persistenceFolder.mkdirs();
+		}
+
+		return persistenceFolder;
+	}
+
+    public class PluginPersistenceNeedDefinitionException extends
+    BaseRuntimeException {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = -2036279527440882712L;
+
+        PluginPersistenceNeedDefinitionException(String name) {
+            super("Can't load persistence definition of plugin %(name).",
+                "_cant_load_persistence_definition_of_plugin_XnameX",
+                serialVersionUID);
+            setValue("name", name);
+        }
+    }
+
+    public class PluginPersistenceAddDefinitionException extends
+    BaseRuntimeException {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 2227722796640780361L;
+
+        PluginPersistenceAddDefinitionException(String name) {
+            super("Can't add persistence definition of plugin %(name).",
+                "_cant_add_persistence_definition_of_plugin_XnameX",
+                serialVersionUID);
+            setValue("name", name);
+        }
+    }
+
+    public class PluginLoadDataException extends
+    BaseRuntimeException {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 1168749231143949111L;
+
+        PluginLoadDataException(String name) {
+            super("Can't load data of plugin %(name).",
+                "_cant_load_data_of_plugin_XnameX",
+                serialVersionUID);
+            setValue("name", name);
+        }
+    }
+
+    public class PluginSaveDataException extends
+    BaseRuntimeException {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 4893241183911774542L;
+        private final static String MESSAGE_FORMAT = "Can't save data of plugin %(name).";
+        private final static String MESSAGE_KEY = "_cant_save_data_of_plugin_XnameX";
+
+        PluginSaveDataException(String name) {
+            super(MESSAGE_FORMAT,
+                MESSAGE_KEY,
+                serialVersionUID);
+            setValue("name", name);
+        }
+
+        public PluginSaveDataException(String name, Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+            setValue("name", name);
+
+        }
+    }
+    
+    @Override
+    public String toString() {
+        return super.toString()+" "+this.getPluginName();
+    }
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginServices.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PropertyDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PropertyDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PropertyDescriptor.java	(revision 38313)
@@ -0,0 +1,249 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.NameValidator;
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class PropertyDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PropertyDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PropertyDescriptor() {
+        super();
+        xmlName = "property";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Property target = (Property) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Property target = (Property) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _value
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_value", "value", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Property target = (Property) object;
+                return target.getValue();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Property target = (Property) object;
+                    target.setValue( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _value
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.persistence.generate.PropertyDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Property.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PropertyDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java	(revision 38313)
@@ -0,0 +1,246 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class PluginsStatusDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PluginsStatusDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginsStatusDescriptor() {
+        super();
+        xmlName = "plugins-status";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _plugin
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Plugin.class, "_plugin", "plugin", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginsStatus target = (PluginsStatus) object;
+                return target.getPlugin();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginsStatus target = (PluginsStatus) object;
+                    target.setPlugin( (org.gvsig.andami.persistence.generate.Plugin) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Plugin();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _plugin
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _toolBars
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.ToolBars.class, "_toolBars", "tool-bars", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                PluginsStatus target = (PluginsStatus) object;
+                return target.getToolBars();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    PluginsStatus target = (PluginsStatus) object;
+                    target.setToolBars( (org.gvsig.andami.persistence.generate.ToolBars) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.ToolBars();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _toolBars
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.PluginsStatusDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.PluginsStatus.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Property.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Property.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Property.java	(revision 38313)
@@ -0,0 +1,192 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Property.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Property implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _value
+     */
+    private java.lang.String _value;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Property() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Property()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'value'.
+     * 
+     * @return the value of field 'value'.
+     */
+    public java.lang.String getValue()
+    {
+        return this._value;
+    } //-- java.lang.String getValue() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'value'.
+     * 
+     * @param value the value of field 'value'.
+     */
+    public void setValue(java.lang.String value)
+    {
+        this._value = value;
+    } //-- void setValue(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Property) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Property.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Property.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java	(revision 38313)
@@ -0,0 +1,211 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class ToolBarsDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ToolBarsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBarsDescriptor() {
+        super();
+        xmlName = "tool-bars";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _toolBarList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.ToolBar.class, "_toolBarList", "tool-bar", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBars target = (ToolBars) object;
+                return target.getToolBar();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBars target = (ToolBars) object;
+                    target.addToolBar( (org.gvsig.andami.persistence.generate.ToolBar) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.ToolBar();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _toolBarList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.ToolBarsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.ToolBars.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginsStatus.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginsStatus.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginsStatus.java	(revision 38313)
@@ -0,0 +1,192 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class PluginsStatus.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PluginsStatus implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _plugin
+     */
+    private org.gvsig.andami.persistence.generate.Plugin _plugin;
+
+    /**
+     * Field _toolBars
+     */
+    private org.gvsig.andami.persistence.generate.ToolBars _toolBars;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginsStatus() {
+        super();
+    } //-- com.iver.andami.persistence.generate.PluginsStatus()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'plugin'.
+     * 
+     * @return the value of field 'plugin'.
+     */
+    public org.gvsig.andami.persistence.generate.Plugin getPlugin()
+    {
+        return this._plugin;
+    } //-- com.iver.andami.persistence.generate.Plugin getPlugin() 
+
+    /**
+     * Returns the value of field 'toolBars'.
+     * 
+     * @return the value of field 'toolBars'.
+     */
+    public org.gvsig.andami.persistence.generate.ToolBars getToolBars()
+    {
+        return this._toolBars;
+    } //-- com.iver.andami.persistence.generate.ToolBars getToolBars() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'plugin'.
+     * 
+     * @param plugin the value of field 'plugin'.
+     */
+    public void setPlugin(org.gvsig.andami.persistence.generate.Plugin plugin)
+    {
+        this._plugin = plugin;
+    } //-- void setPlugin(com.iver.andami.persistence.generate.Plugin) 
+
+    /**
+     * Sets the value of field 'toolBars'.
+     * 
+     * @param toolBars the value of field 'toolBars'.
+     */
+    public void setToolBars(org.gvsig.andami.persistence.generate.ToolBars toolBars)
+    {
+        this._toolBars = toolBars;
+    } //-- void setToolBars(com.iver.andami.persistence.generate.ToolBars) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.PluginsStatus) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.PluginsStatus.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginsStatus.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBars.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBars.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBars.java	(revision 38313)
@@ -0,0 +1,268 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class ToolBars.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ToolBars implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _toolBarList
+     */
+    private java.util.Vector _toolBarList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBars() {
+        super();
+        _toolBarList = new Vector();
+    } //-- com.iver.andami.persistence.generate.ToolBars()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addToolBar
+     * 
+     * @param vToolBar
+     */
+    public void addToolBar(org.gvsig.andami.persistence.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _toolBarList.addElement(vToolBar);
+    } //-- void addToolBar(com.iver.andami.persistence.generate.ToolBar) 
+
+    /**
+     * Method addToolBar
+     * 
+     * @param index
+     * @param vToolBar
+     */
+    public void addToolBar(int index, org.gvsig.andami.persistence.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _toolBarList.insertElementAt(vToolBar, index);
+    } //-- void addToolBar(int, com.iver.andami.persistence.generate.ToolBar) 
+
+    /**
+     * Method enumerateToolBar
+     */
+    public java.util.Enumeration enumerateToolBar()
+    {
+        return _toolBarList.elements();
+    } //-- java.util.Enumeration enumerateToolBar() 
+
+    /**
+     * Method getToolBar
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.ToolBar getToolBar(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _toolBarList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.persistence.generate.ToolBar) _toolBarList.elementAt(index);
+    } //-- com.iver.andami.persistence.generate.ToolBar getToolBar(int) 
+
+    /**
+     * Method getToolBar
+     */
+    public org.gvsig.andami.persistence.generate.ToolBar[] getToolBar()
+    {
+        int size = _toolBarList.size();
+        org.gvsig.andami.persistence.generate.ToolBar[] mArray = new org.gvsig.andami.persistence.generate.ToolBar[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.persistence.generate.ToolBar) _toolBarList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.persistence.generate.ToolBar[] getToolBar() 
+
+    /**
+     * Method getToolBarCount
+     */
+    public int getToolBarCount()
+    {
+        return _toolBarList.size();
+    } //-- int getToolBarCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllToolBar
+     */
+    public void removeAllToolBar()
+    {
+        _toolBarList.removeAllElements();
+    } //-- void removeAllToolBar() 
+
+    /**
+     * Method removeToolBar
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.ToolBar removeToolBar(int index)
+    {
+        java.lang.Object obj = _toolBarList.elementAt(index);
+        _toolBarList.removeElementAt(index);
+        return (org.gvsig.andami.persistence.generate.ToolBar) obj;
+    } //-- com.iver.andami.persistence.generate.ToolBar removeToolBar(int) 
+
+    /**
+     * Method setToolBar
+     * 
+     * @param index
+     * @param vToolBar
+     */
+    public void setToolBar(int index, org.gvsig.andami.persistence.generate.ToolBar vToolBar)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _toolBarList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _toolBarList.setElementAt(vToolBar, index);
+    } //-- void setToolBar(int, com.iver.andami.persistence.generate.ToolBar) 
+
+    /**
+     * Method setToolBar
+     * 
+     * @param toolBarArray
+     */
+    public void setToolBar(org.gvsig.andami.persistence.generate.ToolBar[] toolBarArray)
+    {
+        //-- copy array
+        _toolBarList.removeAllElements();
+        for (int i = 0; i < toolBarArray.length; i++) {
+            _toolBarList.addElement(toolBarArray[i]);
+        }
+    } //-- void setToolBar(com.iver.andami.persistence.generate.ToolBar) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.ToolBars) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.ToolBars.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBars.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java	(revision 38313)
@@ -0,0 +1,211 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class BookmarksDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class BookmarksDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public BookmarksDescriptor() {
+        super();
+        xmlName = "bookmarks";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _bookmark
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Bookmark.class, "_bookmark", "bookmark", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Bookmarks target = (Bookmarks) object;
+                return target.getBookmark();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Bookmarks target = (Bookmarks) object;
+                    target.setBookmark( (org.gvsig.andami.persistence.generate.Bookmark) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Bookmark();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _bookmark
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.BookmarksDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Bookmarks.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Bookmarks.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Bookmarks.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Bookmarks.java	(revision 38313)
@@ -0,0 +1,167 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Bookmarks.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Bookmarks implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _bookmark
+     */
+    private org.gvsig.andami.persistence.generate.Bookmark _bookmark;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Bookmarks() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Bookmarks()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'bookmark'.
+     * 
+     * @return the value of field 'bookmark'.
+     */
+    public org.gvsig.andami.persistence.generate.Bookmark getBookmark()
+    {
+        return this._bookmark;
+    } //-- com.iver.andami.persistence.generate.Bookmark getBookmark() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'bookmark'.
+     * 
+     * @param bookmark the value of field 'bookmark'.
+     */
+    public void setBookmark(org.gvsig.andami.persistence.generate.Bookmark bookmark)
+    {
+        this._bookmark = bookmark;
+    } //-- void setBookmark(com.iver.andami.persistence.generate.Bookmark) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Bookmarks) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Bookmarks.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Bookmarks.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/WindowsDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/WindowsDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/WindowsDescriptor.java	(revision 38313)
@@ -0,0 +1,211 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class WindowsDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class WindowsDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public WindowsDescriptor() {
+        super();
+        xmlName = "windows";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _windowList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Window.class, "_windowList", "window", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Windows target = (Windows) object;
+                return target.getWindow();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Windows target = (Windows) object;
+                    target.addWindow( (org.gvsig.andami.persistence.generate.Window) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Window();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _windowList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.WindowsDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Windows.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/WindowsDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Windows.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Windows.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Windows.java	(revision 38313)
@@ -0,0 +1,268 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Windows.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Windows implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _windowList
+     */
+    private java.util.Vector _windowList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Windows() {
+        super();
+        _windowList = new Vector();
+    } //-- com.iver.andami.persistence.generate.Windows()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addWindow
+     * 
+     * @param vWindow
+     */
+    public void addWindow(org.gvsig.andami.persistence.generate.Window vWindow)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _windowList.addElement(vWindow);
+    } //-- void addWindow(com.iver.andami.persistence.generate.Window) 
+
+    /**
+     * Method addWindow
+     * 
+     * @param index
+     * @param vWindow
+     */
+    public void addWindow(int index, org.gvsig.andami.persistence.generate.Window vWindow)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _windowList.insertElementAt(vWindow, index);
+    } //-- void addWindow(int, com.iver.andami.persistence.generate.Window) 
+
+    /**
+     * Method enumerateWindow
+     */
+    public java.util.Enumeration enumerateWindow()
+    {
+        return _windowList.elements();
+    } //-- java.util.Enumeration enumerateWindow() 
+
+    /**
+     * Method getWindow
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.Window getWindow(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _windowList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.persistence.generate.Window) _windowList.elementAt(index);
+    } //-- com.iver.andami.persistence.generate.Window getWindow(int) 
+
+    /**
+     * Method getWindow
+     */
+    public org.gvsig.andami.persistence.generate.Window[] getWindow()
+    {
+        int size = _windowList.size();
+        org.gvsig.andami.persistence.generate.Window[] mArray = new org.gvsig.andami.persistence.generate.Window[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.persistence.generate.Window) _windowList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.persistence.generate.Window[] getWindow() 
+
+    /**
+     * Method getWindowCount
+     */
+    public int getWindowCount()
+    {
+        return _windowList.size();
+    } //-- int getWindowCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllWindow
+     */
+    public void removeAllWindow()
+    {
+        _windowList.removeAllElements();
+    } //-- void removeAllWindow() 
+
+    /**
+     * Method removeWindow
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.Window removeWindow(int index)
+    {
+        java.lang.Object obj = _windowList.elementAt(index);
+        _windowList.removeElementAt(index);
+        return (org.gvsig.andami.persistence.generate.Window) obj;
+    } //-- com.iver.andami.persistence.generate.Window removeWindow(int) 
+
+    /**
+     * Method setWindow
+     * 
+     * @param index
+     * @param vWindow
+     */
+    public void setWindow(int index, org.gvsig.andami.persistence.generate.Window vWindow)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _windowList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _windowList.setElementAt(vWindow, index);
+    } //-- void setWindow(int, com.iver.andami.persistence.generate.Window) 
+
+    /**
+     * Method setWindow
+     * 
+     * @param windowArray
+     */
+    public void setWindow(org.gvsig.andami.persistence.generate.Window[] windowArray)
+    {
+        //-- copy array
+        _windowList.removeAllElements();
+        for (int i = 0; i < windowArray.length; i++) {
+            _windowList.addElement(windowArray[i]);
+        }
+    } //-- void setWindow(com.iver.andami.persistence.generate.Window) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Windows) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Windows.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Windows.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java	(revision 38313)
@@ -0,0 +1,211 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+
+/**
+ * Class XmlEntityDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class XmlEntityDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public XmlEntityDescriptor() {
+        super();
+        xmlName = "xml-entity";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- initialize element descriptors
+        
+        //-- _propertyList
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Property.class, "_propertyList", "property", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                XmlEntity target = (XmlEntity) object;
+                return target.getProperty();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    XmlEntity target = (XmlEntity) object;
+                    target.addProperty( (org.gvsig.andami.persistence.generate.Property) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Property();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _propertyList
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.XmlEntityDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.XmlEntity.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginDescriptor.java	(revision 38313)
@@ -0,0 +1,354 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.NameValidator;
+
+/**
+ * Class PluginDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class PluginDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public PluginDescriptor() {
+        super();
+        xmlName = "plugin";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _lastUpdate
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_lastUpdate", "lastUpdate", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getLastUpdate();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setLastUpdate( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _lastUpdate
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _xmlEntity
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.XmlEntity.class, "_xmlEntity", "xml-entity", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getXmlEntity();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setXmlEntity( (org.gvsig.andami.persistence.generate.XmlEntity) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.XmlEntity();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _xmlEntity
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _bookmarks
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Bookmarks.class, "_bookmarks", "bookmarks", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getBookmarks();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setBookmarks( (org.gvsig.andami.persistence.generate.Bookmarks) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Bookmarks();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _bookmarks
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+        //-- _windows
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.Windows.class, "_windows", "windows", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Plugin target = (Plugin) object;
+                return target.getWindows();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Plugin target = (Plugin) object;
+                    target.setWindows( (org.gvsig.andami.persistence.generate.Windows) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.Windows();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _windows
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.PluginDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Plugin.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/PluginDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/XmlEntity.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/XmlEntity.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/XmlEntity.java	(revision 38313)
@@ -0,0 +1,268 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.util.Vector;
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class XmlEntity.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class XmlEntity implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _propertyList
+     */
+    private java.util.Vector _propertyList;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public XmlEntity() {
+        super();
+        _propertyList = new Vector();
+    } //-- com.iver.andami.persistence.generate.XmlEntity()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addProperty
+     * 
+     * @param vProperty
+     */
+    public void addProperty(org.gvsig.andami.persistence.generate.Property vProperty)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _propertyList.addElement(vProperty);
+    } //-- void addProperty(com.iver.andami.persistence.generate.Property) 
+
+    /**
+     * Method addProperty
+     * 
+     * @param index
+     * @param vProperty
+     */
+    public void addProperty(int index, org.gvsig.andami.persistence.generate.Property vProperty)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        _propertyList.insertElementAt(vProperty, index);
+    } //-- void addProperty(int, com.iver.andami.persistence.generate.Property) 
+
+    /**
+     * Method enumerateProperty
+     */
+    public java.util.Enumeration enumerateProperty()
+    {
+        return _propertyList.elements();
+    } //-- java.util.Enumeration enumerateProperty() 
+
+    /**
+     * Method getProperty
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.Property getProperty(int index)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _propertyList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        
+        return (org.gvsig.andami.persistence.generate.Property) _propertyList.elementAt(index);
+    } //-- com.iver.andami.persistence.generate.Property getProperty(int) 
+
+    /**
+     * Method getProperty
+     */
+    public org.gvsig.andami.persistence.generate.Property[] getProperty()
+    {
+        int size = _propertyList.size();
+        org.gvsig.andami.persistence.generate.Property[] mArray = new org.gvsig.andami.persistence.generate.Property[size];
+        for (int index = 0; index < size; index++) {
+            mArray[index] = (org.gvsig.andami.persistence.generate.Property) _propertyList.elementAt(index);
+        }
+        return mArray;
+    } //-- com.iver.andami.persistence.generate.Property[] getProperty() 
+
+    /**
+     * Method getPropertyCount
+     */
+    public int getPropertyCount()
+    {
+        return _propertyList.size();
+    } //-- int getPropertyCount() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Method removeAllProperty
+     */
+    public void removeAllProperty()
+    {
+        _propertyList.removeAllElements();
+    } //-- void removeAllProperty() 
+
+    /**
+     * Method removeProperty
+     * 
+     * @param index
+     */
+    public org.gvsig.andami.persistence.generate.Property removeProperty(int index)
+    {
+        java.lang.Object obj = _propertyList.elementAt(index);
+        _propertyList.removeElementAt(index);
+        return (org.gvsig.andami.persistence.generate.Property) obj;
+    } //-- com.iver.andami.persistence.generate.Property removeProperty(int) 
+
+    /**
+     * Method setProperty
+     * 
+     * @param index
+     * @param vProperty
+     */
+    public void setProperty(int index, org.gvsig.andami.persistence.generate.Property vProperty)
+        throws java.lang.IndexOutOfBoundsException
+    {
+        //-- check bounds for index
+        if ((index < 0) || (index > _propertyList.size())) {
+            throw new IndexOutOfBoundsException();
+        }
+        _propertyList.setElementAt(vProperty, index);
+    } //-- void setProperty(int, com.iver.andami.persistence.generate.Property) 
+
+    /**
+     * Method setProperty
+     * 
+     * @param propertyArray
+     */
+    public void setProperty(org.gvsig.andami.persistence.generate.Property[] propertyArray)
+    {
+        //-- copy array
+        _propertyList.removeAllElements();
+        for (int i = 0; i < propertyArray.length; i++) {
+            _propertyList.addElement(propertyArray[i]);
+        }
+    } //-- void setProperty(com.iver.andami.persistence.generate.Property) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.XmlEntity) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.XmlEntity.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/XmlEntity.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Plugin.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Plugin.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Plugin.java	(revision 38313)
@@ -0,0 +1,267 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Plugin.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Plugin implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+    /**
+     * Field _lastUpdate
+     */
+    private java.lang.String _lastUpdate;
+
+    /**
+     * Field _xmlEntity
+     */
+    private org.gvsig.andami.persistence.generate.XmlEntity _xmlEntity;
+
+    /**
+     * Field _bookmarks
+     */
+    private org.gvsig.andami.persistence.generate.Bookmarks _bookmarks;
+
+    /**
+     * Field _windows
+     */
+    private org.gvsig.andami.persistence.generate.Windows _windows;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Plugin() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Plugin()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'bookmarks'.
+     * 
+     * @return the value of field 'bookmarks'.
+     */
+    public org.gvsig.andami.persistence.generate.Bookmarks getBookmarks()
+    {
+        return this._bookmarks;
+    } //-- com.iver.andami.persistence.generate.Bookmarks getBookmarks() 
+
+    /**
+     * Returns the value of field 'lastUpdate'.
+     * 
+     * @return the value of field 'lastUpdate'.
+     */
+    public java.lang.String getLastUpdate()
+    {
+        return this._lastUpdate;
+    } //-- java.lang.String getLastUpdate() 
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'windows'.
+     * 
+     * @return the value of field 'windows'.
+     */
+    public org.gvsig.andami.persistence.generate.Windows getWindows()
+    {
+        return this._windows;
+    } //-- com.iver.andami.persistence.generate.Windows getWindows() 
+
+    /**
+     * Returns the value of field 'xmlEntity'.
+     * 
+     * @return the value of field 'xmlEntity'.
+     */
+    public org.gvsig.andami.persistence.generate.XmlEntity getXmlEntity()
+    {
+        return this._xmlEntity;
+    } //-- com.iver.andami.persistence.generate.XmlEntity getXmlEntity() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'bookmarks'.
+     * 
+     * @param bookmarks the value of field 'bookmarks'.
+     */
+    public void setBookmarks(org.gvsig.andami.persistence.generate.Bookmarks bookmarks)
+    {
+        this._bookmarks = bookmarks;
+    } //-- void setBookmarks(com.iver.andami.persistence.generate.Bookmarks) 
+
+    /**
+     * Sets the value of field 'lastUpdate'.
+     * 
+     * @param lastUpdate the value of field 'lastUpdate'.
+     */
+    public void setLastUpdate(java.lang.String lastUpdate)
+    {
+        this._lastUpdate = lastUpdate;
+    } //-- void setLastUpdate(java.lang.String) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'windows'.
+     * 
+     * @param windows the value of field 'windows'.
+     */
+    public void setWindows(org.gvsig.andami.persistence.generate.Windows windows)
+    {
+        this._windows = windows;
+    } //-- void setWindows(com.iver.andami.persistence.generate.Windows) 
+
+    /**
+     * Sets the value of field 'xmlEntity'.
+     * 
+     * @param xmlEntity the value of field 'xmlEntity'.
+     */
+    public void setXmlEntity(org.gvsig.andami.persistence.generate.XmlEntity xmlEntity)
+    {
+        this._xmlEntity = xmlEntity;
+    } //-- void setXmlEntity(com.iver.andami.persistence.generate.XmlEntity) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Plugin) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Plugin.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Plugin.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java	(revision 38313)
@@ -0,0 +1,282 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.NameValidator;
+
+/**
+ * Class ToolBarDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ToolBarDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBarDescriptor() {
+        super();
+        xmlName = "tool-bar";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _xPosition
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_xPosition", "x-position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getXPosition();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.setXPosition( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _xPosition
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _yPosition
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_yPosition", "y-position", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getYPosition();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.setYPosition( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _yPosition
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _name
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_name", "name", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getName();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) object;
+                    target.setName( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _name
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.persistence.generate.ToolBarDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.ToolBar.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBar.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBar.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBar.java	(revision 38313)
@@ -0,0 +1,217 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class ToolBar.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class ToolBar implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _xPosition
+     */
+    private java.lang.String _xPosition;
+
+    /**
+     * Field _yPosition
+     */
+    private java.lang.String _yPosition;
+
+    /**
+     * Field _name
+     */
+    private java.lang.String _name;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public ToolBar() {
+        super();
+    } //-- com.iver.andami.persistence.generate.ToolBar()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getName()
+    {
+        return this._name;
+    } //-- java.lang.String getName() 
+
+    /**
+     * Returns the value of field 'xPosition'.
+     * 
+     * @return the value of field 'xPosition'.
+     */
+    public java.lang.String getXPosition()
+    {
+        return this._xPosition;
+    } //-- java.lang.String getXPosition() 
+
+    /**
+     * Returns the value of field 'yPosition'.
+     * 
+     * @return the value of field 'yPosition'.
+     */
+    public java.lang.String getYPosition()
+    {
+        return this._yPosition;
+    } //-- java.lang.String getYPosition() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setName(java.lang.String name)
+    {
+        this._name = name;
+    } //-- void setName(java.lang.String) 
+
+    /**
+     * Sets the value of field 'xPosition'.
+     * 
+     * @param xPosition the value of field 'xPosition'.
+     */
+    public void setXPosition(java.lang.String xPosition)
+    {
+        this._xPosition = xPosition;
+    } //-- void setXPosition(java.lang.String) 
+
+    /**
+     * Sets the value of field 'yPosition'.
+     * 
+     * @param yPosition the value of field 'yPosition'.
+     */
+    public void setYPosition(java.lang.String yPosition)
+    {
+        this._yPosition = yPosition;
+    } //-- void setYPosition(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.ToolBar) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.ToolBar.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/ToolBar.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java	(revision 38313)
@@ -0,0 +1,250 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class BookmarkDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class BookmarkDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public BookmarkDescriptor() {
+        super();
+        xmlName = "bookmark";
+        
+        //-- set grouping compositor
+        setCompositorAsSequence();
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _text
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_text", "text", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Bookmark target = (Bookmark) object;
+                return target.getText();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Bookmark target = (Bookmark) object;
+                    target.setText( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _text
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+        //-- _xmlEntity
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(org.gvsig.andami.persistence.generate.XmlEntity.class, "_xmlEntity", "xml-entity", org.exolab.castor.xml.NodeType.Element);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Bookmark target = (Bookmark) object;
+                return target.getXmlEntity();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Bookmark target = (Bookmark) object;
+                    target.setXmlEntity( (org.gvsig.andami.persistence.generate.XmlEntity) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new org.gvsig.andami.persistence.generate.XmlEntity();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        desc.setMultivalued(false);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _xmlEntity
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+        }
+        desc.setValidator(fieldValidator);
+    } //-- com.iver.andami.persistence.generate.BookmarkDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Bookmark.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Bookmark.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Bookmark.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Bookmark.java	(revision 38313)
@@ -0,0 +1,192 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Bookmark.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Bookmark implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _text
+     */
+    private java.lang.String _text;
+
+    /**
+     * Field _xmlEntity
+     */
+    private org.gvsig.andami.persistence.generate.XmlEntity _xmlEntity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Bookmark() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Bookmark()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'text'.
+     * 
+     * @return the value of field 'text'.
+     */
+    public java.lang.String getText()
+    {
+        return this._text;
+    } //-- java.lang.String getText() 
+
+    /**
+     * Returns the value of field 'xmlEntity'.
+     * 
+     * @return the value of field 'xmlEntity'.
+     */
+    public org.gvsig.andami.persistence.generate.XmlEntity getXmlEntity()
+    {
+        return this._xmlEntity;
+    } //-- com.iver.andami.persistence.generate.XmlEntity getXmlEntity() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'text'.
+     * 
+     * @param text the value of field 'text'.
+     */
+    public void setText(java.lang.String text)
+    {
+        this._text = text;
+    } //-- void setText(java.lang.String) 
+
+    /**
+     * Sets the value of field 'xmlEntity'.
+     * 
+     * @param xmlEntity the value of field 'xmlEntity'.
+     */
+    public void setXmlEntity(org.gvsig.andami.persistence.generate.XmlEntity xmlEntity)
+    {
+        this._xmlEntity = xmlEntity;
+    } //-- void setXmlEntity(com.iver.andami.persistence.generate.XmlEntity) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Bookmark) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Bookmark.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Bookmark.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/WindowDescriptor.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/WindowDescriptor.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/WindowDescriptor.java	(revision 38313)
@@ -0,0 +1,249 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.validators.NameValidator;
+import org.exolab.castor.xml.validators.StringValidator;
+
+/**
+ * Class WindowDescriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class WindowDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field nsPrefix
+     */
+    private java.lang.String nsPrefix;
+
+    /**
+     * Field nsURI
+     */
+    private java.lang.String nsURI;
+
+    /**
+     * Field xmlName
+     */
+    private java.lang.String xmlName;
+
+    /**
+     * Field identity
+     */
+    private org.exolab.castor.xml.XMLFieldDescriptor identity;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public WindowDescriptor() {
+        super();
+        xmlName = "window";
+        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
+        org.exolab.castor.xml.XMLFieldHandler              handler        = null;
+        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
+        //-- initialize attribute descriptors
+        
+        //-- _rectangle
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_rectangle", "rectangle", org.exolab.castor.xml.NodeType.Attribute);
+        desc.setImmutable(true);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Window target = (Window) object;
+                return target.getRectangle();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Window target = (Window) object;
+                    target.setRectangle( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return null;
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _rectangle
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            StringValidator typeValidator = new StringValidator();
+            typeValidator.setWhiteSpace("preserve");
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- _id
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "_id", "id", org.exolab.castor.xml.NodeType.Attribute);
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {
+            public java.lang.Object getValue( java.lang.Object object ) 
+                throws IllegalStateException
+            {
+                Window target = (Window) object;
+                return target.getId();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    Window target = (Window) object;
+                    target.setId( (java.lang.String) value);
+                }
+                catch (java.lang.Exception ex) {
+                    throw new IllegalStateException(ex.toString());
+                }
+            }
+            public java.lang.Object newInstance( java.lang.Object parent ) {
+                return new java.lang.String();
+            }
+        } );
+        desc.setHandler(handler);
+        desc.setRequired(true);
+        addFieldDescriptor(desc);
+        
+        //-- validation code for: _id
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();
+        fieldValidator.setMinOccurs(1);
+        { //-- local scope
+            NameValidator typeValidator = new NameValidator(NameValidator.NMTOKEN);
+            fieldValidator.setValidator(typeValidator);
+        }
+        desc.setValidator(fieldValidator);
+        //-- initialize element descriptors
+        
+    } //-- com.iver.andami.persistence.generate.WindowDescriptor()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method getAccessMode
+     */
+    public org.exolab.castor.mapping.AccessMode getAccessMode()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 
+
+    /**
+     * Method getExtends
+     */
+    public org.exolab.castor.mapping.ClassDescriptor getExtends()
+    {
+        return null;
+    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 
+
+    /**
+     * Method getIdentity
+     */
+    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
+    {
+        return identity;
+    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 
+
+    /**
+     * Method getJavaClass
+     */
+    public java.lang.Class getJavaClass()
+    {
+        return org.gvsig.andami.persistence.generate.Window.class;
+    } //-- java.lang.Class getJavaClass() 
+
+    /**
+     * Method getNameSpacePrefix
+     */
+    public java.lang.String getNameSpacePrefix()
+    {
+        return nsPrefix;
+    } //-- java.lang.String getNameSpacePrefix() 
+
+    /**
+     * Method getNameSpaceURI
+     */
+    public java.lang.String getNameSpaceURI()
+    {
+        return nsURI;
+    } //-- java.lang.String getNameSpaceURI() 
+
+    /**
+     * Method getValidator
+     */
+    public org.exolab.castor.xml.TypeValidator getValidator()
+    {
+        return this;
+    } //-- org.exolab.castor.xml.TypeValidator getValidator() 
+
+    /**
+     * Method getXMLName
+     */
+    public java.lang.String getXMLName()
+    {
+        return xmlName;
+    } //-- java.lang.String getXMLName() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/WindowDescriptor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Window.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Window.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Window.java	(revision 38313)
@@ -0,0 +1,192 @@
+/*
+ * This class was automatically generated with 
+ * <a href="http://www.castor.org">Castor 0.9.5.3</a>, using an XML
+ * Schema.
+ * $Id$
+ */
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami.persistence.generate;
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.Unmarshaller;
+
+/**
+ * Class Window.
+ * 
+ * @version $Revision$ $Date$
+ */
+public class Window implements java.io.Serializable {
+
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field _rectangle
+     */
+    private java.lang.String _rectangle;
+
+    /**
+     * Field _id
+     */
+    private java.lang.String _id;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public Window() {
+        super();
+    } //-- com.iver.andami.persistence.generate.Window()
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Returns the value of field 'id'.
+     * 
+     * @return the value of field 'id'.
+     */
+    public java.lang.String getId()
+    {
+        return this._id;
+    } //-- java.lang.String getId() 
+
+    /**
+     * Returns the value of field 'rectangle'.
+     * 
+     * @return the value of field 'rectangle'.
+     */
+    public java.lang.String getRectangle()
+    {
+        return this._rectangle;
+    } //-- java.lang.String getRectangle() 
+
+    /**
+     * Method isValid
+     */
+    public boolean isValid()
+    {
+        try {
+            validate();
+        }
+        catch (org.exolab.castor.xml.ValidationException vex) {
+            return false;
+        }
+        return true;
+    } //-- boolean isValid() 
+
+    /**
+     * Method marshal
+     * 
+     * @param out
+     */
+    public void marshal(java.io.Writer out)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, out);
+    } //-- void marshal(java.io.Writer) 
+
+    /**
+     * Method marshal
+     * 
+     * @param handler
+     */
+    public void marshal(org.xml.sax.ContentHandler handler)
+        throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        
+        Marshaller.marshal(this, handler);
+    } //-- void marshal(org.xml.sax.ContentHandler) 
+
+    /**
+     * Sets the value of field 'id'.
+     * 
+     * @param id the value of field 'id'.
+     */
+    public void setId(java.lang.String id)
+    {
+        this._id = id;
+    } //-- void setId(java.lang.String) 
+
+    /**
+     * Sets the value of field 'rectangle'.
+     * 
+     * @param rectangle the value of field 'rectangle'.
+     */
+    public void setRectangle(java.lang.String rectangle)
+    {
+        this._rectangle = rectangle;
+    } //-- void setRectangle(java.lang.String) 
+
+    /**
+     * Method unmarshal
+     * 
+     * @param reader
+     */
+    public static java.lang.Object unmarshal(java.io.Reader reader)
+        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException
+    {
+        return (org.gvsig.andami.persistence.generate.Window) Unmarshaller.unmarshal(org.gvsig.andami.persistence.generate.Window.class, reader);
+    } //-- java.lang.Object unmarshal(java.io.Reader) 
+
+    /**
+     * Method validate
+     */
+    public void validate()
+        throws org.exolab.castor.xml.ValidationException
+    {
+        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
+        validator.validate(this);
+    } //-- void validate() 
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/generate/Window.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java	(revision 38313)
@@ -0,0 +1,280 @@
+package org.gvsig.andami.persistence.serverData;
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.7  2006-09-01 13:39:38  jorpiell
+ * Se ha añadido la capacidad de almacenar properties en los server data
+ *
+ * Revision 1.6  2006/09/01 02:23:09  luisw2
+ * Geters and Seters added
+ *
+ * Revision 1.5  2006/08/28 07:56:54  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/05/19 06:41:50  jaume
+ * removed unnecessary imports
+ *
+ * Revision 1.3  2006/05/02 15:53:06  jorpiell
+ * Se ha cambiado la interfaz Extension por dos clases: una interfaz (IExtension) y una clase abstract(Extension). A partir de ahora todas las extensiones deben heredar de Extension
+ *
+ * Revision 1.2  2006/03/21 18:06:46  jorpiell
+ * Se ha hecho una modificación para continuar soportando los servidores anteriores
+ *
+ * Revision 1.1  2006/03/07 11:32:13  jorpiell
+ * Se ha añadido la clase ServerDataPersistence en el paquete persistence.serverData que se usa para persistir los servidores por orden de último acceso.
+ *
+ *
+ */
+
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Set;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.utils.DateTime;
+import org.gvsig.utils.NotExistInXMLEntity;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.swing.jcomboServer.ServerData;
+
+
+/**
+ * This class is used to save a list of servers (using the
+ * Andami persistence model) to the plugins-persistence.xml file.
+ * It has methods to create a set of ServerData objects  from an
+ * xml file. It can also save a set of ServerData objects in an
+ * xml file.
+ *
+ * @see es.gva.cit.catalogClient.utils.comboserver.ServerData
+ * @author Jorge Piera Llodra (piera_jor@gva.es)
+ */
+public class ServerDataPersistence {
+	private XMLEntity xml = null;
+	private PluginServices ps = null;
+	private String serviceType = null;
+	private static final String SERVER_URL = "serverURL";
+	private static final String SERVER_ADDED = "added";
+	private static final String SERVER_LASTACCESS = "lastAccess";
+	private static final String SERVER_TYPE = "type";
+	private static final String SERVER_SUBTYPE = "subType";
+	private static final String SERVER_DATABASE = "database";
+	
+	/**
+	 * Constructor
+	 * @param view
+	 * The View Class
+	 * @param sevice Type
+	 * Service type to load
+	 */
+	public ServerDataPersistence(Object pluginClassInstance,String serviceType){
+		ps = PluginServices.getPluginServices(pluginClassInstance);
+		xml = ps.getPersistentXML();
+		this.serviceType = serviceType;
+	}
+
+	/**
+	 * This methos is used to save the information in an XML file
+	 */
+	public void setPersistent(){
+		ps.setPersistentXML(xml);
+	}
+
+	/**
+	 * This method saves an array of ServerData using the Anadami
+	 * persistence model
+	 * @param servers
+	 * Array of servers
+	 */
+	public void setArrayOfServerData(ServerData[] servers){
+		xml.getXmlTag().removeAllXmlTag();
+
+		for (int i=0 ; i<servers.length ; i++){
+			xml.addChild(serverDataToXml(servers[i]));
+		}
+
+	}
+
+	/**
+	 * This method adds a ServerData using the Anadami
+	 * persistence model. If the server exists just actualizes
+	 * the type and subtype fileds and changes the last access
+	 * value to the current time.
+	 * @param server
+	 * ServerData
+	 */
+	public void addServerData(ServerData server){
+		ServerData[] servers = getArrayOfServerData();
+		ServerData[] newServers = new ServerData[servers.length + 1];
+
+		boolean found = false;
+
+		for (int i = 0; i < servers.length; i++) {
+			if (servers[i].getServerAddress().equals(server.getServerAddress())) {
+				found = true;
+				servers[i].updateLastAccess();
+				servers[i].setServiceSubType(server.getServiceSubType());
+				servers[i].setServiceType(server.getServiceType());
+				servers[i].setDatabase(server.getDatabase());
+				servers[i].setProperies(server.getProperies());
+				setArrayOfServerData(servers);
+			}
+		}
+
+		if (!found) {
+			System.arraycopy(servers, 0, newServers, 0, servers.length);
+			newServers[servers.length] = server;
+			setArrayOfServerData(newServers);
+
+		}
+	}
+
+
+
+	/**
+	 * This method returns an array of ServerData objects that
+	 * have been saved using the Andami persistence model.
+	 * @return
+	 * String[]
+	 */
+	public ServerData[] getArrayOfServerData(){
+		ServerData[] servers = new ServerData[xml.getChildrenCount()];
+		for (int i=0 ; i<xml.getChildrenCount() ; i++){
+			servers[i] = xmlToServerData(xml.getChild(i));
+		}
+		return servers;
+	}
+
+
+	/**
+	 * This method creates and returns a new XMLEntity.
+	 * @param server
+	 * ServerData with all the server information
+	 * @return
+	 * XMLEntity
+	 */
+	public XMLEntity serverDataToXml(ServerData server){
+		String dFormat="Y-m-d H:i:s.Z";
+
+		XMLEntity xmlEnt = new XMLEntity();
+		xmlEnt.putProperty(SERVER_URL,server.getServerAddress());
+		xmlEnt.putProperty(SERVER_ADDED,DateTime.dateToString(server.getAdded(),dFormat));
+		xmlEnt.putProperty(SERVER_LASTACCESS,DateTime.dateToString(server.getLastAccess(),dFormat));
+		xmlEnt.putProperty(SERVER_TYPE,server.getServiceType());
+		xmlEnt.putProperty(SERVER_SUBTYPE,server.getServiceSubType());
+		if (server.getServiceSubType().equals(ServerData.SERVER_SUBTYPE_CATALOG_Z3950)){
+			xmlEnt.putProperty(SERVER_DATABASE,server.getDatabase());
+		}
+		Set keys = server.getProperies().keySet();
+		Iterator it = keys.iterator();
+	    while (it.hasNext()) {
+	    	String next = (String)it.next();
+	    	xmlEnt.putProperty(next,
+	    			server.getProperies().get(next));
+	    }		   
+		return xmlEnt;
+	}
+
+	/**
+	 * This method creates a new serverData from a XMLEntity
+	 * @param xmlEnt
+	 * XMLRntity that contains the server information
+	 * @return
+	 * ServerData
+	 */
+	public ServerData xmlToServerData(XMLEntity xmlEnt){
+		String serverAddress;
+		Date added;
+		Date lastAccess;
+		String serviceType = "";
+		String serviceSubType = "";
+		String databaseName = "";
+
+		serverAddress = xmlEnt.getStringProperty(SERVER_URL);
+		added = DateTime.stringToDate(xmlEnt.getStringProperty(SERVER_ADDED));
+		lastAccess = DateTime.stringToDate(xmlEnt.getStringProperty(SERVER_LASTACCESS));
+		serviceType = xmlEnt.getStringProperty(SERVER_TYPE).toUpperCase();
+		serviceSubType = xmlEnt.getStringProperty(SERVER_SUBTYPE).toUpperCase();
+		
+		if (serviceSubType.equals(ServerData.SERVER_SUBTYPE_CATALOG_Z3950)){
+			try{
+				databaseName = xmlEnt.getStringProperty(SERVER_DATABASE);
+			}catch(NotExistInXMLEntity e){
+
+			}
+		}
+		
+		ServerData serverData = new ServerData(serverAddress,added,lastAccess,serviceType,serviceSubType,databaseName);
+		
+		Properties props = new Properties();
+		for (int i=0 ; i<xmlEnt.getPropertyCount() ; i++){
+			String property = xmlEnt.getPropertyName(i);
+			if (!((property.equals(SERVER_URL)) ||
+				(property.equals(SERVER_ADDED)) ||
+				(property.equals(SERVER_LASTACCESS)) ||
+				(property.equals(SERVER_TYPE)) ||
+				(property.equals(SERVER_SUBTYPE)) ||
+				(property.equals(SERVER_DATABASE)))){
+					props.put(property,xmlEnt.getStringProperty(property));
+				}					
+		}
+		serverData.setProperies(props);
+		return serverData;
+	}
+
+	public String getServiceType() {
+		return serviceType;
+	}
+
+	public void setServiceType(String serviceType) {
+		this.serviceType = serviceType;
+	}
+
+	public XMLEntity getXml() {
+		return xml;
+	}
+
+	public void setXml(XMLEntity xml) {
+		this.xml = xml;
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsLocator.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsLocator.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsLocator.java	(revision 38313)
@@ -0,0 +1,77 @@
+package org.gvsig.andami;
+
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.Locator;
+import org.gvsig.tools.locator.LocatorException;
+
+
+public class PluginsLocator extends AbstractLocator {
+
+    private static final String LOCATOR_NAME = "PluginsLocator";
+
+    /**
+     * PluginsManager name used by the locator to access the instance
+     */
+    public static final String PLUGINS_MANAGER_NAME = "PluginsManager";
+
+    private static final String PLUGINS_MANAGER_DESCRIPTION = "PluginsManager of Andami framework";
+
+    /**
+     * Unique instance.
+     */
+    private static final PluginsLocator instance = new PluginsLocator();
+
+    /**
+     * Return the singleton instance.
+     *
+     * @return the singleton instance
+     */
+    public static PluginsLocator getInstance() {
+        return instance;
+    }
+
+    /**
+     * Returns the Locator name.
+     *
+     * @return String containing the locator name.
+     */
+    public String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to DataManager.
+     *
+     * @return a reference to DataManager
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static PluginsManager getManager() throws LocatorException {
+        return (PluginsManager) getInstance().get(PLUGINS_MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the DataManager interface.
+     *
+     * @param clazz
+     *            implementing the DataManager interface
+     */
+    public static void registerManager(Class clazz) {
+        getInstance().register(PLUGINS_MANAGER_NAME, PLUGINS_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+    /**
+     * Registers a class as the default DataManager.
+     *
+     * @param clazz
+     *            implementing the DataManager interface
+     */
+    public static void registerDefaultManager(Class clazz) {
+        getInstance().registerDefault(PLUGINS_MANAGER_NAME, PLUGINS_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsLocator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsLibrary.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsLibrary.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsLibrary.java	(revision 38313)
@@ -0,0 +1,37 @@
+package org.gvsig.andami;
+
+import org.gvsig.andami.impl.DefaultPluginsManager;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.util.Caller;
+import org.gvsig.tools.util.impl.DefaultCaller;
+
+
+public class PluginsLibrary extends AbstractLibrary {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(PluginsLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        PluginsLocator.registerDefaultManager(DefaultPluginsManager.class);
+    }
+
+    protected void doPostInitialize() throws LibraryException {
+        Caller caller = new DefaultCaller();
+
+        caller.add( new WindowInfo.RegisterPersistence() );
+
+        /*
+         * Do register of all
+         */
+        if( !caller.call() ) {
+        	throw new LibraryException(PluginsLibrary.class, caller.getExceptions());
+        }
+
+
+    }
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/AndamiHelpPanel.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/AndamiHelpPanel.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/AndamiHelpPanel.java	(revision 38313)
@@ -0,0 +1,46 @@
+package org.gvsig.andami.help;
+
+import javax.help.HelpSet;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+
+
+public class AndamiHelpPanel extends HelpPanel implements IWindow {
+
+	private static final long serialVersionUID = 2683827167020046672L;
+
+	private WindowInfo info = null ;
+
+	public AndamiHelpPanel(HelpSet hs){
+		super(hs);
+	}
+
+	public AndamiHelpPanel(HelpSet hs, String id){
+		super(hs,id);
+	}
+
+	public void showWindow() {
+		MDIManager mdim = PluginServices.getMDIManager();
+		mdim.addWindow((IWindow) this);
+	}
+
+	public WindowInfo getWindowInfo() {
+		if( info == null ) {
+			info = new WindowInfo( WindowInfo.RESIZABLE |
+	                WindowInfo.MAXIMIZABLE | WindowInfo.MODELESSDIALOG);
+			info.setHeight(HEIGHT);
+			info.setWidth(WIDTH);
+			info.setTitle(getTitle());
+		}
+		return info;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.TOOL_PROFILE;
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/AndamiHelpPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/Help.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/Help.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/Help.java	(revision 38313)
@@ -0,0 +1,191 @@
+package org.gvsig.andami.help;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Locale;
+
+import javax.help.HelpSet;
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class Help  {
+
+	private static Help help = null;
+
+	private HelpSet mainHS = null;
+	private ArrayList resources = new ArrayList();
+	private ArrayList helps = new ArrayList();
+
+	private HelpPanel window=null;
+
+	public static Help getHelp() {
+		if( help == null ) {
+			help = new Help();
+		}
+		return help;
+	}
+
+	private Logger log() {
+		return LoggerFactory.getLogger("org.gvsig");
+	}
+
+	public void show() {
+		log().info("show()");
+		show(null);
+	}
+
+	public void show(String id) {
+		try {
+			log().info("show(id) id="+id);
+			initHelp();
+			try {
+				window.showWindow(id);
+			}catch(NullPointerException e) {
+				window = new AndamiHelpPanel(mainHS, id);
+				window.showWindow();
+			}
+		} catch (Exception ex) {
+			log().error("Se ha producido un error mostrando la ventana de ayuda.",ex);
+		}
+	}
+
+	public void enableHelp(JComponent comp, String id)
+	{
+		try{
+			initHelp();
+			comp.registerKeyboardAction(new DisplayHelpFromFocus(id), KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+		}
+		catch(Exception except){
+			log().error("ID: "+id+" erronea");
+		}
+	}
+
+	public boolean addResource(String path) {
+		URL url = null;
+		try {
+			url =  (new File(path)).toURL();
+		} catch (MalformedURLException e) {
+			return false;
+		}
+		resources.add(url);
+		return true;
+	}
+
+
+	public boolean addHelp(String helpName) {
+		helps.add(helpName);
+		return true;
+	}
+
+	private void initHelp()
+	{
+		if ( mainHS != null ) {
+			return;
+		}
+
+		//
+		// Obtenemos un array de URLs de array list de URLs
+		//
+		URL urls[] = new URL[resources.size()];
+		int i=0;
+	    for( Iterator it=resources.iterator(); it.hasNext() ;) {
+	    	urls[i++] = (URL) it.next();
+	    }
+
+	    //
+	    // Creamos la lista de helpsets que han de componer
+	    // la ayuda
+	    //
+	    ArrayList helpSets = new ArrayList();
+
+	    for( Iterator it=helps.iterator(); it.hasNext() ;) {
+	    	String name = (String) it.next();
+	    	String lang = Locale.getDefault().getLanguage();
+	    	HelpSet hs = createHelpSet(urls, name + "/" + lang + "/help.hs");
+	    	if( hs == null ) {
+	    		lang = "en";
+	    		hs = createHelpSet(urls, name + "/" + lang + "/help.hs");
+	    	}
+	    	if( hs != null ) {
+	    		helpSets.add(hs);
+	    	}
+	    }
+
+	    //
+	    // Fijamos el primer helpset de la lista como master y
+	    // le añadimos (merge) a este los demas helpsets
+	    //
+	    Iterator it=helpSets.iterator();
+	    if( ! it.hasNext() ) {
+	    	return;
+	    }
+	    mainHS = (HelpSet) it.next();
+	    while( it.hasNext() ) {
+			try {
+		    	mainHS.add( (HelpSet) it.next() );
+			} catch (Exception ex) {
+				log().error(ex.toString());
+			}
+	    }
+	}
+
+	private HelpSet createHelpSet(URL resources[], String hsName) {
+		HelpSet hs = null;
+
+		ClassLoader loader = ClassLoader.getSystemClassLoader();
+	    loader = new URLClassLoader(resources, loader);
+	    URL url = HelpSet.findHelpSet(loader, hsName);
+		if (url == null) {
+			log().error(
+					MessageFormat.format(
+							"No se ha encontrado el helpset ''{0}''.",
+							new Object[] { hsName }
+					)
+			);
+			return null;
+		}
+		log().info("createHelpSet:  url="+url);
+
+		try {
+			hs = new HelpSet(null, url);
+		} catch (Exception ex) {
+			log().error(
+				MessageFormat.format(
+					"No se ha podido cargar el helpset desde ''{0}''.",
+					new Object[] { url }
+				),
+			    ex
+			);
+			return null;
+		}
+		return hs;
+	}
+
+
+    public class DisplayHelpFromFocus implements ActionListener {
+
+	private String id = null;
+
+        public DisplayHelpFromFocus(String id) {
+        	log().info("DisplayHelpFromFocus(id) id="+id);
+            this.id=id;
+        }
+
+		public void actionPerformed(ActionEvent e) {
+			Help.getHelp().show(this.id);
+	    }
+    }
+}
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/Help.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/HelpPanel.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/HelpPanel.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/HelpPanel.java	(revision 38313)
@@ -0,0 +1,95 @@
+package org.gvsig.andami.help;
+
+import java.awt.BorderLayout;
+import java.awt.Frame;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.help.BadIDException;
+import javax.help.HelpSet;
+import javax.help.JHelp;
+import javax.swing.JPanel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HelpPanel extends JPanel  {
+
+	private static final long serialVersionUID = 4164482247505362337L;
+
+	public static int WIDTH = 645;
+	public static int HEIGHT = 495;
+	private String title = null;
+	private JHelp jh;
+
+	private Logger log() {
+		return LoggerFactory.getLogger("org.gvsig");
+	}
+
+	public HelpPanel(HelpSet hs){
+		log().info("HelpPanel(hs)");
+		init(hs,null);
+	}
+
+	public HelpPanel(HelpSet hs, String id){
+		log().info("HelpPanel(hs,id) id="+id);
+		init(hs,id);
+	}
+
+	private void init(HelpSet hs, String id){
+		jh = new JHelp(hs);
+		log().info("init() ID "+ id);
+		if (id != null) {
+			try {
+				log().info("init() setCurrentID "+ id);
+				jh.setCurrentID(id);
+			} catch (BadIDException ex) {
+				log().error(ex.toString());
+
+			} catch (NullPointerException ex) {
+				log().error(ex.toString());
+			}
+		}
+		String hsTitle = hs.getTitle();
+		if (hsTitle == null || hsTitle.equals("")) {
+			hsTitle = "gvSIG Help";
+		}
+		title = hsTitle;
+		setLayout(new BorderLayout());
+		add(jh,BorderLayout.CENTER);
+	}
+
+	public void showWindow() {
+
+		log().info("showWindow()");
+		Frame frame = new Frame();
+        frame.add(this);
+        frame.setSize(WIDTH, HEIGHT + 30);
+        frame.setTitle(getTitle());
+        frame.setResizable(true);
+		this.setVisible(true);
+		frame.show();
+	}
+
+	public void showWindow(String id) {
+		if (id != null) {
+			try {
+				log().info("showWindow(id) -> setCurrentID "+ id);
+				jh.setCurrentID(id);
+			} catch (BadIDException ex) {
+				log().error(ex.toString());
+			}
+		}
+		String hsTitle = jh.getHelpSetPresentation().getTitle();
+		if (hsTitle == null || hsTitle.equals("")) {
+			hsTitle = "gvSIG Help";
+		}
+		title = hsTitle;
+		showWindow();
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/help/HelpPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/Utilities.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/Utilities.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/Utilities.java	(revision 38313)
@@ -0,0 +1,395 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.andami;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ConnectException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+import javax.swing.ImageIcon;
+import javax.swing.RootPaneContainer;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.splash.MultiSplashWindow;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+
+/**
+ * This class offers several general purpose method, to perform common
+ * tasks in an easy way.
+ *
+ * @version $Revision$
+ */
+public class Utilities {
+	/**
+     * <b>key</b>: URL, <b>value</b>: path to the downloaded file.
+     */
+    private static Hashtable downloadedFiles;
+    /** DOCUMENT ME! */
+    private static Logger logger = LoggerFactory.getLogger(Utilities.class.getName());
+	public static final String TEMPDIRECTORYPATH = System.getProperty("java.io.tmpdir")+"/tmp-andami";
+
+
+    /**
+     * Creates an icon from an image path.
+     *
+     * @param path Path to the image to be loaded
+     *
+     * @return ImageIcon if the image is found, null otherwise
+     */
+    public static ImageIcon createImageIcon(String path) {
+        URL imgURL = null;
+
+        try {
+            imgURL = new URL("file:" + path);
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        }
+
+        if (imgURL != null) {
+            return new ImageIcon(imgURL);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Method which frees the memory from JInternalFrames
+     *
+     * @param baseComponent JInternalFrame whose memory is to be
+     * freed
+     */
+    public static void cleanComponent(Component baseComponent) {
+        try {
+            cleanComponent(baseComponent, 0);
+        } catch (Exception ignore) { // give some exception handling...
+        }
+    }
+
+    /*    * The "depth" parameter was being used for text output debugging.    * But isn't essential now.  I'll keep it anyways, as it avoids    * calling the garbage collector every recursion.    */
+    protected static void cleanComponent(Component baseComponent, int depth) {
+        if (baseComponent == null) // recursion terminating clause
+         {
+            return;
+        }
+
+        if (baseComponent instanceof IWindow){
+        	return;
+        }
+
+        Container cont;
+        Component[] childComponents;
+        int numChildren; // clean up component containers
+
+        if (baseComponent instanceof Container) { // now clean up container instance variables
+
+            if (baseComponent instanceof RootPaneContainer) { // Swing specialised container
+                cont = (Container) baseComponent;
+                numChildren = cont.getComponentCount();
+                childComponents = cont.getComponents();
+
+                for (int i = 0; i < numChildren; i++) { // remove each component from the current container
+
+                    // each child component may be a container itself
+                    cleanComponent(childComponents[i], depth + 1);
+                    ((RootPaneContainer) cont).getContentPane().remove(childComponents[i]);
+                }
+
+                ((RootPaneContainer) cont).getContentPane().setLayout(null);
+            } else { // General Swing, and AWT, Containers
+                cont = (Container) baseComponent;
+                numChildren = cont.getComponentCount();
+                childComponents = cont.getComponents();
+
+                for (int i = 0; i < numChildren; i++) //for(int i = 0;i < numChildren;i++)
+                 {
+                    // remove each component from the current container                    // each child component may be a container itself
+                    cleanComponent(childComponents[i], depth + 1);
+                    cont.remove(childComponents[i]);
+                }
+
+                cont.setLayout(null);
+            }
+        }
+
+        // if component is also a container
+    }
+
+
+
+    /**
+     * Extracts a ZIP file in the provided directory
+     *
+     * @param file Compressed file
+     * @param dir Directory to extract the files
+     * @param splash The splash window to show the extraction progress
+     *
+     * @throws ZipException If there is some problem in the file format
+     * @throws IOException If there is a problem reading the file
+     */
+    public static void extractTo(File file, File dir, MultiSplashWindow splash)
+        throws ZipException, IOException {
+        ZipFile zip = new ZipFile(file);
+        Enumeration e = zip.entries();
+
+		// Pasada para crear las carpetas
+		while (e.hasMoreElements()) {
+			ZipEntry entry = (ZipEntry) e.nextElement();
+
+			if (entry.isDirectory()) {
+				File directorio = new File(dir.getAbsolutePath()
+						+ File.separator + entry.getName());
+
+				directorio.mkdirs();
+			}
+
+    		}
+
+		// Pasada para crear los ficheros
+		e = zip.entries();
+		while (e.hasMoreElements()) {
+			ZipEntry entry = (ZipEntry) e.nextElement();
+			splash.process(30, "Procesando " + entry.getName() + "...");
+			if (!entry.isDirectory()) {
+				InputStream in = zip.getInputStream(entry);
+				OutputStream out = new FileOutputStream(dir + File.separator
+						+ entry.getName());
+				BufferedInputStream bin = new BufferedInputStream(in);
+				BufferedOutputStream bout = new BufferedOutputStream(out);
+
+				int i;
+
+				while ((i = bin.read()) != -1) {
+					bout.write(i);
+				}
+
+				bout.flush();
+				bout.close();
+				bin.close();
+
+			}
+
+		}
+
+		zip.close();
+		zip = null;
+		System.gc();
+
+	}
+    /**
+     * Returns the content of this URL as a file from the file system.<br>
+     * <p>
+     * If the URL has been already downloaded in this session and notified
+     * to the system using the static <b>Utilities.addDownloadedURL(URL)</b>
+     * method, it can be restored faster from the file system avoiding to
+     * download it again.
+     * </p>
+     * @param url
+     * @return File containing this URL's content or null if no file was found.
+     */
+    private static File getPreviousDownloadedURL(URL url){
+        File f = null;
+        if (downloadedFiles!=null && downloadedFiles.containsKey(url)){
+            String filePath = (String) downloadedFiles.get(url);
+            f = new File(filePath);
+        }
+        return f;
+    }
+
+    /**
+     * Adds an URL to the table of downloaded files for further uses. If the URL
+     * already exists in the table its filePath value is updated to the new one and
+     * the old file itself is removed from the file system.
+     *
+     * @param url
+     * @param filePath
+     */
+    private static void addDownloadedURL(URL url, String filePath){
+        if (downloadedFiles==null)
+            downloadedFiles = new Hashtable();
+        String fileName = (String) downloadedFiles.put(url, filePath);
+        //JMV: No se puede eliminar el anterior porque puede que alguien lo
+        // este usando
+        /*
+        if (fileName!=null){
+            File f = new File(fileName);
+            if (f.exists())
+                f.delete();
+        }
+        */
+    }
+
+    /**
+     * Downloads an URL into a temporary file that is removed the next time the
+     * tempFileManager class is called, which means the next time gvSIG is launched.
+     *
+     * @param url
+     * @param name
+     * @return
+     * @throws IOException
+     * @throws ServerErrorResponseException
+     * @throws ConnectException
+     * @throws UnknownHostException
+     */
+    public static File downloadFile(URL url, String name) throws IOException,ConnectException, UnknownHostException{
+    	File f = null;
+
+	    try{
+	        if ((f=getPreviousDownloadedURL(url))==null){
+	        	File tempDirectory = new File(TEMPDIRECTORYPATH);
+	        	if (!tempDirectory.exists())
+	        		tempDirectory.mkdir();
+
+	        	f = new File(TEMPDIRECTORYPATH+"/"+name+System.currentTimeMillis());
+
+	            System.out.println("downloading '"+url.toString()+"' to: "+f.getAbsolutePath());
+
+	            f.deleteOnExit();
+                DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(f)));
+                byte[] buffer = new byte[1024*256];
+                InputStream is = url.openStream();
+                long readed = 0;
+                for (int i = is.read(buffer); i>0; i = is.read(buffer)){
+                    dos.write(buffer, 0, i);
+                    readed += i;
+                }
+                dos.close();
+                addDownloadedURL(url, f.getAbsolutePath());
+	        }
+	    } catch (IOException io) {
+	    	io.printStackTrace();
+	    }
+
+	    return f;
+	}
+
+    /**
+     * Cleans every temporal file previously downloaded.
+     */
+    public static void cleanUpTempFiles() {
+    	try{
+    		File tempDirectory = new File(TEMPDIRECTORYPATH);
+
+    		File[] files = tempDirectory.listFiles();
+    		if (files!=null) {
+    			for (int i = 0; i < files.length; i++) {
+    				 // sólo por si en un futuro se necesitan crear directorios temporales
+    				if (files[i].isDirectory())	deleteDirectory(files[i]);
+    				files[i].delete();
+    			}
+    		}
+    		tempDirectory.delete();
+    	} catch (Exception e) {	}
+
+    }
+    /**
+     * Recursive directory delete.
+     * @param f
+     */
+	private static void deleteDirectory(File f) {
+		File[] files = f.listFiles();
+		for (int i = 0; i < files.length; i++) {
+			if (files[i].isDirectory()) deleteDirectory(files[i]);
+			files[i].delete();
+		}
+
+	}
+
+    /**
+     * Creates a temporary file with a the provided name and data. The file
+     * will be automatically deleted when the application exits. 
+     * 
+     * @param fileName Name of the temporary file to create
+     * @param data The data to store in the file
+     */
+    public static File createTemp(String fileName, String data)throws IOException{
+    	File f = new File(fileName);
+    	DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(f)) );
+		dos.writeBytes(data);
+		dos.close();
+    	f.deleteOnExit();
+    	return f;
+    }
+
+    /**
+     * Remove an URL from the system cache. The file will remain in the file
+     * system for further eventual uses.
+     * @param request
+     */
+	public static void removeURL(URL url) {
+		if (downloadedFiles != null && downloadedFiles.containsKey(url))
+			downloadedFiles.remove(url);
+	}
+	
+	/**
+	 * Creates the directory for temporary files, and returns the path of
+	 * this directory. If the directory already exists, it just returns
+	 * its path. Any file or directory created in this special directory
+	 * will be delete when the application finishes.
+	 * 
+	 * @return An String containing the full path to the temporary directory
+	 */
+	public static String createTempDirectory(){
+		File tempDirectory = new File(TEMPDIRECTORYPATH);
+    	if (!tempDirectory.exists())
+    		tempDirectory.mkdir();
+    	return TEMPDIRECTORYPATH;
+	}
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/Utilities.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsManager.java
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsManager.java	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsManager.java	(revision 38313)
@@ -0,0 +1,63 @@
+package org.gvsig.andami;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.IExtension;
+
+public interface PluginsManager {
+    /**
+     * Return the associated pluginServices to the extension class passed as parameter.
+     * @param extension
+     * @return
+     */
+	public PluginServices getPlugin(Class<? extends IExtension> extension);
+	
+	public PluginServices getPlugin(String pluginName);
+	public List<PluginServices> getPlugins();
+	
+	public IExtension getExtension(Class<? extends IExtension> extension);
+	public Iterator<IExtension> getExtensions();
+	
+	public void setExclusiveUIExtension(ExclusiveUIExtension extension);
+	
+	public ExclusiveUIExtension getExclusiveUIExtension();
+
+    /**
+     * @deprecated @see {@link #getPluginsFolder()}
+     */
+    @Deprecated
+	public File getPluginsDirectory();
+
+    public String getText(Object obj, String msg);
+    
+    /**
+     * Returns the main application folder, where the application is installed.
+     * 
+     * @return the main application folder
+     */
+    public File getApplicationFolder();
+
+    /**
+     * Returns the application folder in the home of user.
+     * 
+     * @return the main application folder
+     */
+    public File getApplicationHomeFolder();
+
+    /**
+     * Returns the plugins folder.
+     * 
+     * @return the plugins folder
+     */
+    public File getPluginsFolder();
+
+    /**
+     * Returns the default folder with the installable package bundles.
+     * 
+     * @return the default folder with the installable package bundles
+     */
+    public File getInstallFolder();
+}

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/org/gvsig/andami/PluginsManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/log4j.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/log4j.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/log4j.properties	(revision 38313)
@@ -0,0 +1,8 @@
+log4j.rootLogger=debug, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/src/log4j.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/style.css
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/style.css
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/Servicios para los plugins.txt
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/Servicios para los plugins.txt	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/Servicios para los plugins.txt	(revision 38313)
@@ -0,0 +1,12 @@
+1 Ejecución en segundo plano.
+
+	Es conveniente que la interfaz esté siempre en funcionamiento,
+nunca bloqueada, aunque sea sólo para mostrar al usuario que el
+programa está procesando. Para ello hay que realizar las tareas
+que puedan tomar demasiado tiempo en un thread a parte. La
+clase PluginServices proporciona un método estático 
+backgroundExecution al cual se le pasa un objeto Runnable, que
+es ejecutado en segundo plano, dejando el thread de la interfaz
+libre para responder pero con sus eventos bloqueados con el fin
+de que la interfaz responda y se redibuje, pero se ignoren los
+eventos que produce el usuario mientras se procesa la petición
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/Servicios para los plugins.txt
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/funcionamiento class loader.txt
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/funcionamiento class loader.txt	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/funcionamiento class loader.txt	(revision 38313)
@@ -0,0 +1,5 @@
+En Andami, el class loader de cada plugin delega primero en el classloader del sistemaes decir, que si se ejecuta desde eclipse buscará por todos los jars que haya en el classpath del proyecto, y si se ejecuta desde la linea de comandos, buscará en la variable de entorno CLASSPATH o en el argumento -classpath que se pase como parámetro a java.
+
+Si el class loader del sistema no satisface la búsqueda, se buscará en los jars especificados por el config.xml del plugin que intenta cargar la clase y si no se encuentra en dichos jars, se buscará en los jars de los plugins de los cuales depende el plugin que intenta cargar la clase.
+
+Por otra parte, FMap tiene un directorio de drivers en los que vas dejando los jars y automáticamente los procesa FMap. Sin embargo, FMap no conoce que es usado por Andami, y de hecho, FMap puede ser usado desde otros entornos, por lo que no usa directamente el class loader del plugin que tiene la librería fmap.jar en el config.xml. Usa su propio class loader, que está definido en el proyecto driver-manager. Este class loader busca en los jars que hay en el mismo directorio del driver y de no encontrarla éstos, delega en el classloader padre. El class loader padre, en el caso de gvSIG con Andami es el class loader del plugin que accede al driver.

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/funcionamiento class loader.txt
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/Andami developer guide.html
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/Andami developer guide.html	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/Andami developer guide.html	(revision 38313)
@@ -0,0 +1,289 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <meta content="text/html; charset=ISO-8859-1"
+ http-equiv="content-type">
+  <title>Andami developer guide</title>
+<link href="style.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<table width="90%" border="0">
+  <tr>
+    <td class="Nivel2"><a href="#Introduccion"><strong><font color="#FFFFFF">Introducci&oacute;n</font></strong></a></td>
+  </tr>
+  <tr>
+    <td class="Nivel2"><a href="#Creacion_de_plugins"><font color="#FFFFFF"><strong>Creaci&oacute;n 
+      de plugins</strong></font></a></td>
+  </tr>
+  <tr>
+    <td class="Nivel2"><a href="#Funcionamiento_del_class_loader"><strong><font color="#FFFFFF">Funcionamiento 
+      del class loader</font></strong></a></td>
+  </tr>
+  <tr>
+    <td class="Nivel2"><a href="#Servicios_a_los_plugins"><font color="#FFFFFF"><strong>Servicios 
+      a los plugins</strong></font></a></td>
+  </tr>
+  <tr>
+    <td><strong>&nbsp;&nbsp;&nbsp; <a
+ href="#Ejecucion_en_segundo_plano">Ejecuci&oacute;n en segundo plano</a></strong></td>
+  </tr>
+  <tr>
+    <td><strong>&nbsp;&nbsp;&nbsp; <a href="#Acceso_a_las_extensiones">Acceso 
+      a las extensiones</a></strong></td>
+  </tr>
+  <tr>
+    <td class="urbanismo"><strong>&nbsp;&nbsp;&nbsp; <a href="#Persistencia_de_los_plugins">Persistencia 
+      de los plugins</a></strong></td>
+  </tr>
+  <tr>
+    <td><strong>&nbsp;&nbsp;&nbsp; <a href="#popupmenus">Pop-up menus</a></strong></td>
+  </tr>
+  <tr>
+    <td><strong>&nbsp;&nbsp;&nbsp; <a href="#Vistas">Vistas</a></strong></td>
+  </tr>
+  <tr>
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#SingletonView">SingletonView's</a></td>
+  </tr>
+</table>
+
+
+
+<p> <strong><font size="+1"><a name="Introduccion"></a>Introducci&oacute;n</font></strong></p>
+<p> &nbsp;&nbsp;&nbsp; Andami es un framework orientado a plugins construido sobre 
+  swing que permite la construcci&oacute;n de forma r&aacute;pida y extensible 
+  de aplicaciones MDI (Multiple Document Interface). Tiene ya implementadas muchas 
+  de las funcionalidades requeridas para este tipo de aplicaciones tales como 
+  un men&uacute; Ventana, en la que van apareciendo las ventanas que se abren, 
+  soporte para el traducciones, configuraci&oacute;n personalizada para cada usuario, 
+  actualizaciones autom&aacute;ticas, tanto del propio Andami como de los plugins, 
+  persistencia del tama&ntilde;o y posici&oacute;n de la ventana, del idioma, 
+  distintos tipos de vista, con la finalidad de facilitar la programaci&oacute;n 
+  de ventanas especiales, ... Todo esto adem&aacute;s de tener ya solventados 
+  los problemas t&iacute;picos de la programaci&oacute;n de un entorno como &eacute;ste 
+  que no son pocos.<br>
+  <br>
+  &nbsp;&nbsp;&nbsp; Adem&aacute;s, Andami est&aacute; dise&ntilde;ada de forma 
+  que la propia l&oacute;gica MDI puede ser reemplazada. Si en lugar de una aplicaci&oacute;n 
+  estilo arcView, se quiere que cada vista que se a&ntilde;ada, se haga en una 
+  ventana de windows nueva (de las que aparecen en la barra de estado) o una vista 
+  como la de Eclipse, no hay m&aacute;s que desarrollar el plugin adecuado.<br>
+  <br>
+  &nbsp;&nbsp;&nbsp; Andami est&aacute; dise&ntilde;ada para ser amistosa con 
+  el usuario y para ello incorpora la posibilidad de a&ntilde;adir tooltips y 
+  enabletexts a los botones. El tooltip es el texto que aparece cuando el rat&oacute;n 
+  se detiene sobre un bot&oacute;n o men&uacute;. El enableText es el texto que 
+  aparece en el caso anterior cuando el bot&oacute;n est&aacute; desactivado, 
+  permitiendo mostrar al usuario qu&eacute; es lo que debe hacer para que dicho 
+  bot&oacute;n se active (o cualquier otro mensaje).<br>
+  <br>
+  &nbsp;&nbsp;&nbsp; Por &uacute;ltimo, Andami tiene una gesti&oacute;n de errores 
+  que agradar&aacute; a cualquier programador, ya que en casos de errores graves, 
+  el propio framework avisa de dicho fallo y aconseja al usuario salvar los cambios 
+  y reiniciar el programa, a parte de que toda excepci&oacute;n no capturada por 
+  el usuario se redirige a un fichero de log configurable en el que se escribir&aacute; 
+  su traza.<br>
+</p>
+<p> <strong><font size="+1"><a name="Creacion_de_plugins"></a>Creaci&oacute;n 
+  de plugins</font></strong></p>
+<p> &nbsp;&nbsp;&nbsp; Andami gira en torno al concepto de plugin. Andami mantiene 
+  un directorio como directorio de los plugins, que se puede cambiar en cualquier 
+  momento. Un plugin viene definido por la existencia de un subdirectorio dentro 
+  del directorio de los plugins, siendo el nombre del plugin el nombre de dicho 
+  directorio. Dentro de dicho directorio debe haber un fichero config.xml en el 
+  que se configuran los puntos de entrada y salida del plugin (men&uacute;es, 
+  barras de herramientas, etiquetas de la barra de estado, men&uacute;es contextuales), 
+  las librer&iacute;as que va a usar, el paquete de traducciones, los plugins 
+  de los que depende, etc. El fichero plugin-config.xsd contiene el esquema que 
+  ha de seguir este fichero y est&aacute;n comentados todos los elementos. En 
+  el CorePlugin que viene con Adami se puede ver un ejemplo de config.xml.<br>
+  <br>
+  &nbsp;&nbsp;&nbsp; Las rutas de los directorios son siempre relativas al directorio 
+  del plugin y los textos de los men&uacute;es, tooltips y enabletext's son claves 
+  en el fichero de traducciones en caso de que haya y textos literales en caso 
+  de que no haya traducciones. El fichero de traducciones es un fichero de propiedades 
+  com&uacute;n: ver ResourceBundle en la API de Java.<br>
+  <br>
+  &nbsp;&nbsp;&nbsp; Dentro de los plugins aparece el concepto de extensi&oacute;n. 
+  Una extensi&oacute;n es instalada por los plugins mediante la implementaci&oacute;n 
+  de la interfaz com.iver.andami.plugins.Extension y la instalaci&oacute;n de 
+  unos controles geobernados por &eacute;sta en el fichero config.xml. Mediante 
+  esta implementaci&oacute;n se le dice a Andami la condici&oacute;n que se debe 
+  cumplir para que los controles sean visibles o est&eacute;n activos. Adem&aacute;s 
+  se implementa la acci&oacute;n a llevar a cabo cuando se selecciona uno de los 
+  men&uacute;es o botones asociados a la extensi&oacute;n. Cabe resaltar que Andami 
+  crea una instancia de cada extensi&oacute;n configurada en config.xml, por lo 
+  que las clases que implementen la interfaz Extension deben de tener un constructor 
+  sin argumentos.<br>
+  <br>
+  &nbsp;&nbsp;&nbsp; En los tag 'extension' existe un atributo class-name en el 
+  que se especifica la clase que gobierna el punto de extensi&oacute;n que se 
+  est&aacute; definiendo. Esta clase deber&aacute; implementar la interfaz com.iver.andami.plugins.Extension 
+  y ser&aacute; mediante &eacute;sta que gobernar&aacute; los men&uacute;es y 
+  botones asociados a este punto de extensi&oacute;n<br>
+  <br>
+  &nbsp;&nbsp;&nbsp; Una problema com&uacute;n en este framework es no ver c&oacute;mo 
+  se mantiene la informaci&oacute;n del proyecto concreto que se est&aacute; desarrollando. 
+  El lugar adecuado es una de las extensiones instaladas. Por ejemplo en el caso 
+  de gvSIG est&aacute; la extensi&oacute;n com.iver.cit.gvsig.ProjectExtension, 
+  en la cual hay un atributo Project que es la ra&iacute;z del &aacute;rbol jer&aacute;rquico 
+  del cual penden las vistas, mapas, tablas, ... Adem&aacute;s esta extensi&oacute;n 
+  tiene un m&eacute;todo getProject que devuelve la referencia al proyecto, de 
+  manera que se puede acceder desde cualquier punto de la aplicaci&oacute;n. Para 
+  ver el acceso a las instancias de las extensiones ver <a href="#Acceso_a_las_extensiones">acceso 
+  a las extensiones</a></p>
+<p><br>
+  <font size="+1"><strong><a name="Funcionamiento_del_class_loader"></a>Funcionamiento 
+  del class loader</strong></font></p>
+<p> En Andami, el class loader de cada plugin delega primero en el classloader 
+  del sistemaes decir, que si se ejecuta desde eclipse buscar&aacute; por todos 
+  los jars que haya en el classpath del proyecto, y si se ejecuta desde la linea 
+  de comandos, buscar&aacute; en la variable de entorno CLASSPATH o en el argumento 
+  -classpath que se pase como par&aacute;metro a java.<br>
+  <br>
+  Si el class loader del sistema no satisface la b&uacute;squeda, se buscar&aacute; 
+  en los jars del directorio especificado por el config.xml del plugin que intenta 
+  cargar la clase y si no se encuentra en dichos jars, se buscar&aacute; en los 
+  jars de los plugins de los cuales depende el plugin que intenta cargar la clase.<br>
+  <br>
+  <strong><font size="+1"><a name="Servicios_a_los_plugins"></a>Servicios 
+  a los plugins</font></strong></p>
+<p><br>
+&nbsp;&nbsp;&nbsp; Andami ofrece a los plugins distintos servicios 
+  a trav&eacute;s de la clase PluginServices en cuyo javadoc se puede obtener 
+  informaci&oacute;n sobre como usarlos. Existen unos servicios gen&eacute;ricos 
+  que vienen dados por m&eacute;todos est&aacute;ticos de dicha clase y luego 
+  est&aacute; el m&eacute;todo getPluginServices que obtiene una instancia de 
+  esta clase espec&iacute;fica del plugin, mediante la cual puede acceder a servicios 
+  concretos de cada plugin, traducciones, persistencia, directorio del plugin, 
+  ...<br>
+  &nbsp;<br>
+  <strong><a name="Ejecucion_en_segundo_plano"></a>Ejecuci&oacute;n en segundo 
+  plano</strong><br>
+  &nbsp;&nbsp;&nbsp; Es conveniente que la interfaz gr&aacute;fica est&eacute; 
+  siempre en funcionamiento, nunca bloqueada, aunque sea s&oacute;lo para mostrar 
+  al usuario que el programa est&aacute; procesando. Para ello hay que realizar 
+  las tareas que puedan tomar demasiado tiempo en un thread a parte. La clase 
+  PluginServices proporciona un m&eacute;todo est&aacute;tico backgroundExecution 
+  al cual se le pasa un objeto Runnable, que es ejecutado en segundo plano, dejando 
+  el thread de la interfaz libre para responder pero con sus eventos bloqueados 
+  con el fin de que la interfaz responda y se redibuje, pero se ignoren los eventos 
+  que produce el usuario mientras se procesa la petici&oacute;n<br>
+  <br>
+  <a name="Acceso_a_las_extensiones"></a><strong>Acceso a las extensiones</strong><br>
+  &nbsp;&nbsp;&nbsp; Para acceder a la instancia de una extensi&oacute;n 
+  se puede usar simplemente el m&eacute;todo de PluginServices getExtension(Class) 
+  a la cual habr&aacute; que pasar como par&aacute;metro la clase de la extensi&oacute;n 
+  a la que se quiere acceder. Dicho m&eacute;todo retorna un objeto Extensi&oacute;n 
+  y por tanto habr&aacute; que hacer casting a la clase concreta de dicha extensi&oacute;n, 
+  habiendo obtenido as&iacute; la referencia a la instancia de la extensi&oacute;n 
+  deseada.<br>
+  &nbsp;&nbsp;&nbsp; A la hora de desarrollar habr&aacute; que tener en el build 
+  path del entorno de desarrollo que se use, el jar del plugin dentro del cual 
+  est&aacute; la extensi&oacute;n que se quiere obtener, para poder pasarle como 
+  par&aacute;metro a getExtension(Class) la clase de la misma.<br>
+  <br>
+  <strong><a name="Persistencia_de_los_plugins"></a>Persistencia de 
+  los plugins</strong><br>
+  &nbsp;&nbsp;&nbsp; Uno de los servicios que ofrece Andami a los 
+  plugins es la facilidad de guardar datos gen&eacute;ricos de los mismos en el 
+  directorio del usuario de manera que cada usuario mantiene su propia configuraci&oacute;n 
+  de los plugins. Para ello, las instancias de PluginServices contienen una propiedad 
+  persistentXML que puede ser obtenida y asignada y que es de tipo XMLEntity, 
+  pudiendo a&ntilde;adir informaci&oacute;n de tipo b&aacute;sico (String, int, 
+  long, ...) a dicha instancia y siendo esta informaci&oacute;n persistente entre 
+  ejecuciones.<br>
+  <br>
+  <strong><a name="popupmenus"></a>Pop-up menus</strong><br>
+  &nbsp;&nbsp;&nbsp;&nbsp; Otro servicio proporcionado por Andami es el de pop-up 
+  menu's extensibles. Mediante el XML se puede definir un pop-up menu con un nombre 
+  y unas entradas al igual que cualquier otro men&uacute;, con la &uacute;nica 
+  diferencia que para mostrar el popup men&uacute; habr&aacute; que registrar 
+  un listener de la siguiente manera:<br>
+</p>
+<div style="text-align: center;">
+<pre><>public void addPopupMenuListener(String name, Component c, ActionListener listener)</><br></pre>
+</div>
+&nbsp;&nbsp;&nbsp; Lo cual har&aacute; que al pinchar con el
+bot&oacute;n derecho sobre el componente 'c' aparezca el men&uacute;
+'name' del fichero de configuraci&oacute;n del plugin y al seleccionar
+cualquier entrada se ejecutar&aacute; el ActionListener que se pasa
+como par&aacute;metro.<br>
+<br>
+&nbsp;&nbsp;&nbsp; Estos men&uacute;es son extensibles porque cualquier
+otro plugin puede a&ntilde;adir entradas a dicho men&uacute; en su
+propio fichero config.xml referenciando el men&uacute; al que quiere
+extender mediante el nombre del plugin m&aacute;s el nombre del
+men&uacute;. Un ejemplo. Tenemos un plugin llamado com.iver.cit.gvsig
+que instala un men&uacute; de la siguiente manera:<br>
+<pre>		&lt;popupMenu name="cascada"&gt;<br>			&lt;entry text="Cascada" <br>				tooltip="cascada_tooltip" <br>				enableText="cascada_enable" actionCommand="CASCADA"/&gt;<br>			&lt;entry text="Tile" <br>				tooltip="tile_tooltip" <br>				enableText="cascada_enable" actionCommand="CASCADA"/&gt;<br>		&lt;/popupMenu&gt;<br></pre>
+y tenemos otro plugin que quiere a&ntilde;adir una entrada a dicho
+men&uacute;. Para ello deber&aacute; de incluir un fragmento similar a
+este en su fichero config.xml:<br>
+<pre>		&lt;popupMenu name="com.iver.cit.gvsig.cascada"&gt;<br>			&lt;entry text="Nueva entrada" actionCommand="NUEVA"/&gt;<br>		&lt;/popupMenu&gt;<br></pre>
+y adem&aacute;s deber&aacute; de registrarse como listener de la manera
+que se explic&oacute; anteriormente.<br>
+<br>
+<strong><a name="Vistas"></a>Vistas</strong><br>
+&nbsp;&nbsp;&nbsp; El servicio m&aacute;s importante que
+proporciona Andami es el de a&ntilde;adir vistas al marco principal.
+Podemos calsificar las vistas por varios criterios:<br>
+<ul>
+  <li>Por su modalidad</li>
+  <ul>
+    <li>Modales</li>
+    <li>No modales</li>
+  </ul>
+</ul>
+<ul>
+  <li>Por su contenido</li>
+  <ul>
+    <li>Singleton (Contenido identificable)</li>
+    <li>Normales (Contenido no identificable)</li>
+  </ul>
+</ul>
+&nbsp;&nbsp;&nbsp; Para crear una vista hay que hacer una clase que
+derive de JPanel en la que se pone toda la funcionalidad como si de un
+di&aacute;logo normal se tratara. Adem&aacute;s esta clase ha de
+implementar la interfaz View la cual proporciona un m&eacute;todo
+getViewInfo que es invocado una vez en la vida de la vista. Este objeto
+contiene las caracter&iacute;sticas que tendr&aacute; la vista:
+maximizable, resizable, title, ... y puede ser actualizado en cualquier
+momento, reflej&aacute;ndose estos cambios de manera autom&aacute;tica
+en la interfaz de usuario. Una vez implementada la vista, hay que
+a&ntilde;adirla al manger MDI, que es el encargado de manejar toda la
+l&oacute;gica relacionada con las vistas. Para obtener una referencia
+al manager MDI la clase PluginServices tiene un m&eacute;todo
+getMDIManager, el cual a su vez tiene un m&eacute;todo addView mediante
+el cual se puede a&ntilde;adir la vista.<br>
+<br>
+&nbsp;&nbsp;&nbsp; Si durante la ejecuci&oacute;n se quiere cambiar
+alguna propiedad de la vista tal como el tama&ntilde;o, la
+posici&oacute;n o el
+t&iacute;tulo, s&oacute;lo hay que acceder al objeto ViewInfo de la
+misma y realizar los cambios de la manera deseada. El siguiente trozo
+de c&oacute;digo cambia el t&iacute;tulo de una ventana (se supone que
+es ejecutado desde la clase que implementa View).<br>
+<pre>	PluginServices.getMDIManager().getViewInfo(this).setTitle("Nuevo t&iacute;tulo");<br></pre>
+&nbsp;&nbsp;&nbsp; Puede ser necesario que algunas vistas realicen
+alg&uacute;n tipo de procesamiento al ser activadas pero esto no se
+sabe cuando ocurre ya que lo que se entrega al manager MDI es un
+JPanel. Para recibir los eventos sobre las vistas, adem&aacute;s de
+implementar View hay que implementar ViewListener la cual
+proporcionar&aacute; los m&eacute;todos que ser&aacute;n invocados
+cuando sucedan los eventos oportunos en las vistas.<br>
+<br>
+<big><a name="SingletonView"></a>SingletonView<br>
+</big>&nbsp;&nbsp;&nbsp; Un tipo especial de vistas son las
+SingletonView. Su principal caracter&iacute;stica es que se les define
+el contenido de las mismas, de manera que cuando hay una SingletonView
+minimizada en el proyecto y se intenta a&ntilde;adir un JPanel con el
+mismo contenido, en lugar de aparecer otra ventana en el escritorio, lo
+que sucede es que la ventana que estaba minimizada se restaura a su
+posici&oacute;n anterior. Para esto, el m&eacute;todo addView devuelve
+una referencia a la vista que se muestra, sea esta la que se
+est&aacute; a&ntilde;adiendo o la que ya est&aacute; a&ntilde;adida.
+Adem&aacute;s, al cerrar dicha ventana se guardan las dimensiones y la
+posici&oacute;n de las mismas, de manera que al volverla a abrir se
+recuerdan estos datos.<br>
+</body>
+</html>

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/docs/Andami developer guide.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/log4j.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/log4j.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/log4j.properties	(revision 38313)
@@ -0,0 +1,8 @@
+log4j.rootLogger=DEBUG, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
+

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/log4j.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/pom.xml
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/pom.xml	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/pom.xml	(revision 38313)
@@ -0,0 +1,318 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.andami</artifactId>
+    <packaging>jar</packaging>
+    <version>2.0-SNAPSHOT</version>
+    <name>_fwAndami</name>
+    <description>Plugins and extensions management framework</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>gvsig-base-library-pom</artifactId>
+        <version>2.0-SNAPSHOT</version>
+    </parent>
+    <properties>
+        <andami.lib.dir>${gvsig.install.dir}/lib</andami.lib.dir>
+        <build-dir>${basedir}/../build</build-dir>
+        <eclipse.project.name>_fwAndami</eclipse.project.name>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <!-- TODO: Change to runtime when everything becomes fully migrated to 
+                SLF4J -->
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.spi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.serv.field</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.serv.jform</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.serv.jlist</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.utils</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.ui</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.lib.impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.lib.spi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.prov.plugin</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.installer.swing.impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.help</groupId>
+            <artifactId>javahelp</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>jwizardcomponent</groupId>
+            <artifactId>jwizardcomponent</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.jgoodies</groupId>
+            <artifactId>looks</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>xerces</groupId>
+            <artifactId>xercesImpl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>castor</groupId>
+            <artifactId>castor</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.kxml</groupId>
+            <artifactId>kxml2</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sardak</groupId>
+            <artifactId>antform</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>ant-contrib</groupId>
+            <artifactId>ant-contrib</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+			<groupId>commons-cli</groupId>
+			<artifactId>commons-cli</artifactId>
+			<version>1.2</version>
+		</dependency>
+        
+    </dependencies>
+    <build>
+        <sourceDirectory>src</sourceDirectory>
+        <testSourceDirectory>src-test</testSourceDirectory>
+        <resources>
+            <resource>
+                <directory>${basedir}/resources</directory>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <artifactId>maven-clean-plugin</artifactId>
+                <configuration>
+                    <filesets>
+                        <fileset>
+                            <directory>${andami.lib.dir}</directory>
+                            <includes>
+                                <include>**/**</include>
+                            </includes>
+                            <followSymlinks>false</followSymlinks>
+                        </fileset>
+                        <fileset>
+                            <directory>${gvsig.install.dir}/gvSIG/extensiones</directory>
+                            <includes>
+                                <include>**</include>
+                            </includes>
+                        </fileset>
+                    </filesets>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <executable>java</executable>
+                    <arguments>
+                        <argument>-classpath</argument>
+                        <!-- automatically creates the classpath using all project 
+                            dependencies, also adding the project build directory -->
+                        <classpath />
+                        <argument>org.gvsig.andami.Launcher</argument>
+                        <argument>gvSIG</argument>
+                        <argument>${gvsig.install.dir}/gvSIG/extensiones</argument>
+                    </arguments>
+                    <environmentVariables>
+                        <GDAL_DATA>${user.home}/.depman/data/gdal</GDAL_DATA>
+                        <PROJ_LIB>gvSIG/extensiones/org.gvsig.crs.extension/data</PROJ_LIB>
+                        <LD_LIBRARY_PATH>${user.home}/.depman/lib</LD_LIBRARY_PATH>
+                        <PATH>${user.home}/.depman/bin</PATH>
+                    </environmentVariables>
+                </configuration>
+            </plugin>
+            <!-- TODO: MAKE TESTS WORK AND REMOVE THIS OPTION -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <mainClass>org.gvsig.andami.Launcher</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <profiles>
+        <profile>
+            <id>install-extension</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+                <property>
+                    <name>install-extension</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins
+						</groupId>
+                        <artifactId>maven-dependency-plugin
+						</artifactId>
+                        <executions>
+                            <execution>
+                                <id>copy-own-dependencies-for-andami
+								</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>copy-dependencies</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>${andami.lib.dir}</outputDirectory>
+                                    <overWriteReleases>true</overWriteReleases>
+                                    <overWriteSnapshots>true</overWriteSnapshots>
+                                    <overWriteIfNewer>true</overWriteIfNewer>
+                                    <includeScope>runtime</includeScope>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>copy-andami</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>copy</goal>
+                                </goals>
+                                <configuration>
+                                    <artifactItems>
+                                        <artifactItem>
+                                            <groupId>org.gvsig</groupId>
+                                            <artifactId>org.gvsig.andami</artifactId>
+                                            <version>2.0-SNAPSHOT</version>
+                                            <type>jar</type>
+                                            <overWrite>true</overWrite>
+                                        </artifactItem>
+                                    </artifactItems>
+                                    <outputDirectory>${andami.lib.dir}</outputDirectory>
+                                    <overWriteReleases>true</overWriteReleases>
+                                    <overWriteSnapshots>false</overWriteSnapshots>
+                                    <overWriteIfNewer>true</overWriteIfNewer>
+                                    <excludeTransitive>false</excludeTransitive>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <artifactId>maven-resources-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>copy-theme</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>${gvsig.install.dir}/theme</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>theme</directory>
+                                            <filtering>false</filtering>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+</project>
\ No newline at end of file
Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 38313)
@@ -0,0 +1 @@
+org.gvsig.andami.PluginsLibrary
\ No newline at end of file
Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/no_icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/no_icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/warning.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/warning.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/error.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/error.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/splash.png
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/splash.png	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/splash.png	(revision 38313)
@@ -0,0 +1,1708 @@
+‰PNG
+
+
+IHDR��€¿6Ì	pHYs.#.#x¥?v
+OiCCPPhotoshop ICC profilexÚ�SgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*!	Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ,Š
+Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó�³ÏÀ–H3Q5€©BàƒÇÄÆáä.@�
+$p³d!sý#ø~<<+"À¾xÓÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€�˜&S `ËcbãP-`'æÓ€�ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ²0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E�[-qWW.(ÎI+6aaš@.Ây™2�4àóÌ ‘àƒóýxÎ®ÎÎ6Ž¶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^ u÷‹f²@µ éÚWópø~<<E¡�¹ÙÙåääØJÄB[aÊW}þgÂ_ÀWýlù~<ü÷õà¾â$�2]�GøàÂÌôL¥Ï’	„bÜæ�Gü·ÿüÓ"ÄIb¹X*ãQqŽDšŒó2¥"‰B’)Å%Òÿdâß,û>ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.TÊ³?ÇD �*°AôÁ,ÀÁÜÁü`6„B$ÄÂBB
+d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼�	AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ÉˆQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”�²Q=ÔµC¹¨7„F¢Ðdt1š� ›Ðr´=Œ6¡çÐ«hÚ�>CÇ0Àè3Äl0.ÆÃB±8,	“cË±"¬«Æ°V¬»‰õcÏ±w�EÀ	6wB aAHXLXNØH¨ $4Ú	7	„QÂ'"“¨K´&ºùÄb21‡XH,#Ö�/{ˆCÄ7$‰C2'¹�I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ä�äÃä3ää!ò[
+�b@q¤øSâ(RÊjJåå4åe˜2AU£šRÝ¨¡T5�ZB­¡¶R¯Q‡¨4uš9ÍƒIK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw
+†ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê
+•J•&•*/T©ª¦ªÞªUóUËT�©^S}®FU3Sã©	Ô–«Uª�PëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k
+«†u�5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN	ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§�¦½E»Yû�AÇJ'\'Gg�Î�çSÙSÝ§
+§M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õGX³$ÛÎ<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕF�FŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­�­%Ö»­»§§¹N“N«žÖgÃ°ñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ãî“½“}º}�ý=
+‡Ù«Z~s´r:V:ÞšÎœî?}Åô–é/gXÏÏØ3ã¶Ë)Äi�S›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝÈ½äJtõq]ázÒõ�›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ?Ÿ•0kß¬~OCO�gµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿÑ§€%g‰�A�[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA�‚­‚åÁ­!hÈì�­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~'…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕX�XIlK9.*®6nl¾ßüíó‡â�âã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž
+yÂÂg"/Ñ6ÑˆØC\*NòH*Mz’ì‘¼5y$Å3¥,å¹„'©�¼L
+LÝ›:žšv m2=:½1ƒ’‘�qBª!M“¶gêgæfvË¬e…²þÅn‹·/•Ék³�¬Y-
+¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+ÍíÌ³ÊÛ�7œïŸÿíÂá’¶¥†KW-Xæ½¬j9²<qyÛ
+ã+†V¬<¸Š¶*mÕO«íW—®~½&zMk�^ÁÊ‚ÁµkëU
+å…}ëÜ×í]OX/Yßµaú†�>‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n
+ÙÚ´
+ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒÝµa×ønÑî{¼ö4ìÕÛ[¼÷ý>É¾ÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TR�Ö+ëGÇ¾þ�ïw-
+6
+U�œÆâ#pDyäé÷	ß÷
+:ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ4<YyJóTÉiÚé‚Ó“gòÏŒ�•�}~.ùÜ`Û¢¶{çcÎßjoïºtáÒEÿ‹ç;¼;Î\ò¸tò²ÛåW¸Wš¯:_mêtê<þ“ÓOÇ»œ»š®¹\k¹îz½µ{f÷éž7ÎÝô½yñÿÖÕž9=Ý½ózo÷Å÷õßÝ~r'ýÎË»Ùw'î­¼O¼_ô@íAÙCÝ‡Õ?[þÜØïÜjÀw óÑÜG÷…ƒÏþ‘õ�C�™�Ë†
+†ëž8>99â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×ÎÑ˜Ñ¡—ò—“¿m|¥ýêÀë¯ÛÆÂÆ¾Éx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSÐ§û“““ÿ˜óüc3-ÛgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFˆžIDATxÚìýw�-Y~ß~~çdæ½UÏu÷k;ã˜ÆN˜0°$‘(RƒZ1–\E-É
+R\®V¡�P(»+‰¡Åj¹+EH¡UÐ,)ŠIÑS"n€Á`€Áøi3m_÷3åî½™yÎï·œ“öÞªWífº•¯«^½[U7Í9?ó5?13ãâ¸8.Ž‹ãâ¸8^æá..ÁÅqq\ÇÅq@.Ž‹ãâ¸8.Ž‹rq\ÇÅqq\�‹ãâ¸8.Ž‹ã›ð(.0ô‹ã�pÈ+øûmrþ_Ïó‘‹
+áâ8¹Ø¬¾97¤ß.÷Ñ¾IŸÅoÔafrL.Ž‹ò
+¬\’‹ ò�|ß`àE0¹8.È«XÜ+æë¸Y½³ñ¯[ðxœøE0¹8.È,(È9ú«Y)o”¾öEò&oðº&ÇErÎ¬÷•¬ey¯¹X}¯Mòf"oÆÊã"˜\äuÚ´^iðx³fÏ¿Ý«œWSE¾¬àñ&} .‚ÉE¹"_Çàqq¼þýõ¼§ç©"åMø ¼IÍE0¹ ×Åñ¦¹¯õ%/óµöZÅ	{c#ò^ãq0¹(äbãº¨>Þ0÷â8^ÑÏyT¯gerQ�\�oú�ë
+¹°E0³þc÷µ»,ÔÉ÷Î?ßõ÷W³ÙØ›ü^¼–jøW”Œ¼ª�»½ï×œüaÖG�‹`òæ;DU/nÚë½ùÜeÕÙ)Abüñëº‰œ# |3ªù_ÎU¶Wó3Ïyñì›ä¼’eqLÞ$kæb ÔÅqq\ÇÅñJŽ‹Öú0°¡Á,‚D¬Ý Í†6Ä¶Fc�i@˜FÌ4àqR°X\ÁWûH¹ÅU‡s)öÀ\˜3_ÇÅqQ�¼)c…bÚ"Z7'hsŒg
+q�6+´M�Â;Q0M=Ñ³�ã†‚"€X~mnæ@!*A
+_íSì]†b¥Ä•×ðWß‚¸q%ÈEŽqq\ÇEyãÚba�†t}«pÚ€ETWx‰ˆ"†™&|Âh‡)˜tÁ,ã–‚† HŠ“y<ˆÃÔQQÄ±Ž
+~±dqåí¸ý·€¿�rÿ>�êâž]ÇÅq@¾1UFÄ´«;„õm$Ö×¸Øà	8K­(!¦�ßFjK‰)¦q XŽ¢cFŠ’ÚY=<©©XÑÐ½‘L·TS°1HÕ	
+î±€²@uŸV.ÃâA´¸Ÿ½ko¥¼ò¸œ¿¸§ÇÅq@.Ž×1j`q�µwh×7hÖ·ðÎEP§-¢mª.,UŠ¡b ×È¯44Ë­©.8�«•I1Ð6}ÏôÝ¥€cÝ·*…Ö)�P*u+—Dó(‹ko§¸ï½øåuÄ_¹ÀO.Ž‹ã"€\¯Í¡-ÚÑžÜ@›q¶A¤IÃ<¨*	‰8�@nMY3ÍÛ}"’*‘˜1K�¨è˜0s«Kú¨�¾ª-¢
+’ZZÓ'¡ûVÃ*†"Ë‚E”ˆ¸‚ÚDý5WÞÂâ¾wã–‚ß¿¸÷ÇÅñÛ%€\è@^ÅÅ“R:]cõ!aõ"as€·†Â¥*kÑP§ïM½YÄ¹¼ÑkD5bp¦(ž?Ë:1ýF‹ˆÙHL¢}”ÔÖ’éÞpFn_%Ð=�Ž€ù¡�%–[jJ6ˆ¾ðÄ¶ÅÉeL<­*ÁÈ¥GXÜÿ!üå÷"å5æª‚¹òâx=ËoˆZýëëR}¡5¹ oŒÀaF
+aý,¶þZªLñ1œ*Ä\]ˆ�µ5MÃ'©bÐPUL…&\„žš›q
+‹)€ô_£€¡ósXŽV‚CÔ2>" â#–!—Šsˆ:Ä9PÁÔ3ÄV éwSZ· æ
+±xˆ½ëayßûqË«	¬Ÿ’‹ã"€Ü-˜|�×ôÅCy@¾^•F÷”+´'Ä“›„õ-�#Ämp€SÃˆ8#U
+!BŒ©½$5&I·A`¹…eŠhÀbÚ"{L„¨›)"¡oO	éçª¦:Û:Lœ/IZéAtÓÎâÄåó¢+zLCòGËTàŽÁU8‡…±€‰ Á\	R±id�«»ÿ;ñ{m’‹`r<î@dT™Ø×ë\“‹òúCÛñøylý7ˆ+	¨ÖÔvr�¨©]¥4 Ò`Ò ÑRðˆ
+¢M
+1äÚ¨n(ªmj[‰b’*c„›XbUIÞô�“>0$±  ¸T¸HþIÕ†¤óT«0)¾"‚æ×©Yÿ5qÑ˜I_’‚HþýÞ;T#mÛb®dcWÙ{äcì=ô	'Ù±e]’‹2oc}=«9ý/æEy
+«­iV/NžCtƒ£¡ à¼$ì"*bÓˆ³ˆh�hÂ?,†HØ Ö$šnLm*
+$6H¯ñP°5bmÞ\Ç$Ìª‹6U3y#oÆÞyœsˆÌ*Ìüh…N|_•tØŒ¸æŠ´‹ÃpˆK¸ˆÑ©Û¦Š˜ . �hDC¡E|C]{y˜+ïø1–|;T—.‚ÇÅñ_û/7výö6ä” ±ebh-qóõÑÓ8-X“0
+m€¼™FIAmqÖ‚ÖùOƒi›ØSq�^c‹-b
+kLÄÚÔ2ÅtÖäM6ëð�.7“\ÙÌ6áŽÂ+"8×µ­*ÌÆÊr—ˆHvm«b‘lm"ÌãŠ
+3—¿æW Ñ ÿ|“DÌ ÕÚ{ïâú‹Å’ NšÛ—ßý£÷¼Üò¢¹8.‚É›õºÄí·ïCq¾âÝÂ1zôB}ÖRxK‚?
+`ÉFDcÄEMØ‡¶Xl«±¸]ƒÕÙª$æÒ sÐh0Ý¤–•…üQ1š^0Ø�T=dð¼S™wš�»žpøIéü¯’ÚÝçJ¤ÀÄ�ˆx�÷ËüÚä«…8�8�s>c&’$+âSKK
+'…•ÐnÀcEÍÚ”šËÈõïáÊÛ~¿÷È+n¤\œoŽÖÕËiq½nç~×rzP8€ùæ
+,c°WþxÙ›j¹ˆ¤D]Î;íGíñ-Ú£'©ÜN’øO5U	BÀ¬M-'�É†$®ÑÐ"Ú ºÂtƒh
+ºAc“‚ƒnp0‹¨¥
+$†
+ªM
+†žškC­8»î6
+1=–i4™‚�ÝKÕéìŽuø‡ŒÎ_R€<&(pR�ˆ	ÿÀ¡¾ÄHDÄåÏ‹ÜÎJâDÁƒî�·�ÛàZÇí½´î]Üó®•ò�o¿wæsfwyìN³¾ý9Ïê¸+öÛ·"Ù¾ÙËkX�¼‘ÏÿnÁcÇ›#ÂÉ
+âæ¯Ç®ÉÊï°Ø`Z§*$F°€Ø!OR[JkbÜ`q•ZX–ˆ…ºkLT^
+@L*ôN(˜øL¨¥My÷õµ¼Ù[æF�Æ¢¾f®ÍUÌìßz{@2h.)0`E¾÷Ïñà«\�øÜ
+sˆ”9€¤àdæ	…ÃP
+«)r†xÔ¬BA�=Êkïgñž?€¿ô§Á¨ö
+µ³Ë+
+"r<.Ž×#˜$vä›&˜¼N-¬7ÊùËøæ�òï3Þ‡El}ƒæà)$ÖDºŠ#
+b‹µÐ‰M-p‹D
+HlÐ¸Aã
+¬†Ø$¬Äb(IÓ!ª}KJÄr�Jí)ÃÏ,JNË{í\÷Ä\K¯1.Ê,€¶€Iz}•á2{Ëã\•Àuñ½e|ªZòGˆÊÁÇ
+KœIGâ"ÑV´zDÏIõW¾å_aïáÇv7Úô,_«´gÇ¯‹àqq¼¬ÝE¶r6{ÙÁÄ¦«üÍ2¥QBhßü=¹¬ièJ9k»�E?ÚOž!?‡·5…„žçÍÞYmq±†v�hmÈ‰-Æm‚dÑ`CŒ	qÖÍ¬ª6·ªF›£Yè�!‘'!³€'ÿ8Gr#šíÝçCfÁVò\0ËèŠË- \¯q®Ê�Ãá¤ÄÄ#©Zñéû\Ì²ÅØgE~¿°DN0'ºÏÆîgñð�ríÝ?Å•sW
+¯µÊýÜ?G¾YÃ‡¼Ž‹õý^åo“—{²C8gµr×‹ôF	,Å7Ï³Þõ§ŒNOgŽüÂ	›;ObímJj
+iir«*&“&VU¢Ü®!¦�j,¶(w0=BCÂF,ÖXl€6	- Y�Žè`«žv¬ü®ÝdÃ7g£´DfOpÚ½\§H?+rš$ßEüèäÝôäG²È€ºY2s”IþG¶YŠXÂ<Ì…!xPb.W$æð1%ú
+ê’uŠiH"K-ˆ¡aß?‹·›<~@8¾Ã}�þÈòÁQP³³Ôäuó–Õë¶¿¡‚‡¼FåÙëyFoÌà!ç}ÑyÝÛüG›tU‰Ù|Û‰�÷fÚè}#ƒ‰„0ÑßÜÅHÚ<îŽsÈ¼öÜ¼D{ç	ÄV®NÔÙŽ	¥ŠÍš�
+�‘xáô	k4nR+áâ:êB
+8$°ÜeµøÕ~Ù‹N^Åâ”WµÙŽ—ið$·»
+œ÷	h§Hà:c�“ç
+Ô9T’Ý¼€T�YÜPÚš@M�g¯Q»÷óÀÿÕCe—¯ÖËmS½Òï}óT¯&ˆ|=Îæ�@ä•¼Ø^“_¼³Å%#2þ)Aá
+W™-,{u·û½Î¢äîú7I)0²zŽpç)DjD°Ä�J bj¸ÐB¬«ª==�xŒè1¦ëDÕ�×®qZc¦‰¢kÚ{E
+žTú
+)Ï_�C¥£wvò’ƒG'vDY€/“¶D|®†bÒ»ÐôcyËP`º¦uGÔb¬â=4å·qýÑ?Êå·|/HÙ§�DÄ^Yûi«íµ#(¤„äU2¸¾	OoÄÃÎ{þoè‹’JI¼Ëy°s‡ohP‘¶mß´ÈiíŠñS#;<
+RÑ£ç°“çk�
+Pã,©Á5¶É“JÂ1�Ó\�pŒéIª@â	h�Å4«ÎcbSY¶‘wèƒ‡1Ðg¿Èø|r ±@’0Ñ¡R!>ã"xÀp"$›–@ˆ5×^F5ì�Úmh�ã$ÞÃaûÞþá›Þû;ÁU/{#?>r^œå.�Ñ‹ã
+>åõ*ör_z×4Øò3eÓ¿OÀÝ‚Ê×5 ç)=Þ¸°—m-ì¡�Õ
+JÊtW-xmáðêÛ_cQ¾tXÓ`Ú$Ëm� 6)ˆ„$$�G\!z‚†#«¤×lŒhmòÃb4‡Cº‘³:MkßôÄ¦Öñ6ØÝùu'ŠX¢ú
+ê°\‘iT¢jšÑn-!Äp�`—iiPoìW+ÿô_ÇÚÀïÿq(Î?sänÁcþõ!!Ù�ìÍÖôÛåM¶­~óT"²k§’Ý{ØËî"¿V�»ëN&ù™É$Èé7öj¯>ÈÌëÉ´�õÌ¿Ú`Rl{Õ7óõ]
+»0�õt†�4?b±…Û_EN^`YE %lZ
+I=y
+	'¶h»ÉŒªÛ¸x�5„ª+Ð5bÉM¶ì©ÚÈLª‘WÕðž¿¹TÓÎÆç(™Ç £s—>˜šÄŒ%&{”ŒhBPslDÙ¨G›{‰m…ÑÜ	Í¦ÁïÕ|õÿŒM½ámø	¤ÚË�Ë�±$sÉŽBÑw¥2H™� Óü�<=Ý‚ê™qÖ¹wBÊ!XÌŽÈ¸smoÈÝú·ƒVßví¶Û$ñ5Aíô/¼ÆRö›Ç¡ÍÕí3¸½{âÕLÆAánewU}þ RØ˜€|ž b¯CšsŽ;Úe…»TÅ§ŠÍú0ÞUvøvò…o¯XH~VFDÂ§kˆk,$<#Æ
+oav�±Ž5b5šý¬Mš‘œUwºŽñ£`;Þ7aË@t+#7*Ñlubi‹W©h£ÐÏz
+Ï7Ž(÷"Í5êp¾E%ÒºF7üòßþ|ü¹gxàAeïÒš½{ß‡ñm´î>Ü²Fäˆ%×°ÍU¢¿…ºÄ¢Ó<´Ë¬!Ä@ÛÖ¨œxÚÆNñzÌæð6ÍFyéÅš·}ðGxç£ßqj•27®¼kf+oú;ü&
+J{P¶ð-lõ`ëîxa¯Íu¹Û7u�$³¹é9X’l'’w¿ñ[/HöÈIP±—TÎ
+(ÅxÅŸTÏQ—¼VÉ×$˜Ù]8æ7.¿fÈ:m–ûa-zøzò<U¥@€v�eU¹Ë´[Â
+Â	�M7¬0½v!™Bò¯Js8ò
+2—o±îÌ„¦Kò›!€Hzxïz3Ÿ¯
+¦‚ZAÀq²Ô]f�çKO¼Äßÿ¥[üèïúí*Ù¿´ë;¨ÛP,x¹Ìßþ;?Ï�þØïçýþ!ÿüßDš[\ä}ø+€<E
+Asª+PÝ>ŒÞKÒñàÜð÷P³¹óuÑ6
+‡/nøô¯}–¦ø¾û÷~0·­NkuM¿n¯v£ø††ÓïãÎ[l¯ÕÎø:EX·¶l+[ßj Ÿ'hÜ­­o¯ì¼ìKiˆ1¡ðjÏê2±”×È4],}q;œ˜?+ »/”½Ì‹´cŸ|-ÈÛlÂ§åYÿ Œ²�'žú{‹Š‡~8yV<�¬^¤�
+�-ÑéÜr“{®…� C<„x’€óxŒê‹‘¨5Ž<ó£×fÈh±íZî›´o Ûç6{%gIÝ—U!F¡µ‚:V4z‰ƒ¶à¹;G|õÉß×ÞËÑú)b¸�Æcð•]å«_¸Íµ>ÂOýÁ?ÉÕ‡îå‘ð,/~ág¸ù[�sï£ï¡¼çR¶\¹\™íeJˆå4 ÍfÃÁáGwnN^ Þ¼Äã�‰Ç‚ý{ÞÍúcÿ>Þ—ýâÙUê¿R#kyB€�ÙÌ‘»¬U;ý½ÙË_¶¯¶jxµ¿c\ðÛ„8³ÝÆºëì‘]�™—ÃX}�;å%fYœúæ©ù*/"C@‘­ÃL·Z^wåÇk¡°»û:W Û!2·¢è«‘q€‘­'Á€¿ûþ!ïÇ[ùÑùv=|Wð�Z�”fxmÑØ¢Ú$ì#lÓ*"v„ÅbHC�ÌÚ”µnõÜ\zJ›j×cúÍÐ™ö»ÊmæKÔwÃ¨ÌÐm4ûlJ6¹—åÞ-n³Ya±FØÃä^îÜÞã«�ßâÏÿ_ÿÏ\è:'¬xðÝßÏ’+<õ©D]üÞþ±’(ï¥%•W
+wŒq‰ïI–óm9<8àöíÛÜ¹sÀñÑmêÛ/rãÆ×øÍ/~…·½ëQþÐýsxç§¥�¾…›Ù�]9_Vÿš÷=ÎhIÛé•ˆ½œ(g¯Ùn9û	òÊ{g27µ_c'r×jÃvåÙöúÕs¼¹)†æ‚ËpÎ©HNÝd`s‰ÈÐØß5nW*wÃPúÖŽ0s®‹ûJÆ<!çSe&y|ë€ô}Ïª²ì×D?QÏ€Å¢àÖÍX½ø*w€Èë4ð©ôhŒÄ¶FB��ó	'¹ê8ÆÂ1bG„°Â”<Å/™:@ãþw�½¥N[�Cãò›¨‘»EIT_SˆêˆZR‡‚Uë9©=ë°à¨†õú˜¶= Æg{¬×œ»ŸÏþY>ñƒ¿›�}ÏÇXÅCjw‰B/qõ¡âþo©yêÙÄþ³ŸãúÛÞ‡wžˆC�âïJhBËÑÑ!·oßæÖ­[Ü98àøø˜“ÃCn>ÿ_øâxÇ{å�ü‘_ø­Lk¼¶p¸3×ÄO`%ã€!§Töíw¯¨³sý°�Ð©Í–Ú(zØŽ×õß|Úmš·ñÏ\^ûºìì¿Øä²Y®ŽÕõW@Äœ5K$UÓÆ)£
+×Lrb2°¼Î(…�Zyœþµ�}ÄS	¹K>4-ž5MoI¬ûµ£E›ÂíÐ:Ê¯(»†l^â½ïx×ª;Ð�´é¡2Cê5{±FÚCGH\Â1Žq–‚Ä!Ö Š³˜ìBzŒÊFe²œ<uw5õFk†¿Ú†C_yå!W¢ùô\_¥3‚
+JI�k[r÷8i+V�ã$DÖm® 4BÝî!¾@—O=ûM±á'úwŽB.q™çZ:þÐïäØj¾ü™BaÆµ·ý.¢^§vW“3°B]×Ü¾õ7_ºÁí›/rxp›Õñw8<<â“¿öi>ôáßÁŸú“ï}~æt»±!Hêhö¼q†ÕŠ�±¾A"’	íu †¾Î›Ýp^�U°3Žœ}m�cÐ\Î¬,æ÷}kmÜöºÞ«³"•�£Kdf¢ÙÖÛ‰h
+)��«”XŒ¡Ý5Ôk#	DåGˆ™�ÒA�Í£À¶®ÓvÑ¶Š÷»6¿zŸ§ßH›³@²qnDÁ²¤)Öî
+i~Ó¥�\»äpVcºéÁmÓ€„ÖÐž$À\W÷8Æì$é=´FbÌ¿/lzÕYÆ7#¡rôüÈÈ“K#p³.GI´ÝÖ<­Ô­£	žU«œlê<×h£Ð‡™PTŽ·oðÇÿÄŸá]ï}'®À™b
+PUŽ÷<öÃØ'Ÿæ‹Ÿþ¨byÏGz/ëfÅjuÌÑÁn¾tƒÃƒ›Üf}xÈjuÂÉÉ1¿ú©OñÑïú~þäŸüSxŸ¬á¢ê¤¡“°ŽiÂ¨ÙÅÈ:ÏÝ—³^ÿº(ßØ�ö{ÂkDì4,†~^Í]Ïë•‚![ÁÃ�Ü%@¦m,»ë9lï{6ÇDŒ¯Sð°3*¤³dŠÃ} š¹ÁÖKLœ¨Ñ!�d,E:íœ˜ejpoØ ã
+dÛb+ºÚ]ÃypÎ‰›ŒOM†^²uÕ†¸^G 8R„ìª‘a’2-­¢n89<Àg¿Z@,$W]�ø¸BÃ	'X8&jnoéÓä kZƒ&'SïÎÝ–�L_ÏãoM
+ÍóÒÕ FKH„6BÝ(›ZÀ<m´<.×SVK>ÿÅ/óÖGÞÎ'~ð‡ð®L5Ž�i�8Á—¬¡,¼ç±ƒÏüÌ_ã7>ý/xô£{œ¬ßÍ�Õ	Ç'w¸sû6wnßäèè€ÕÑM]Ó¶
+¿ø‹¿Ä‡?òêOýiÊ²˜n~¹`#œm¨Ï5$/W¿³krN~©œÒA|¹‚ß—'ç”6Á@ä;¹½Œ¼ÈN)SD^E?ü”_b2X¶¼dgvG�˜|n;{�«�Y5q×@²UêÍŠ�á£‰E¼">îN�Kb¶!�t´áák6Òš6=mGwÍî&‘9¯,çná>…>ø¨f}°O=ºÔ
+—‘§­N"Ç‡7X¯NÐÐiD¬Iƒeu¹†\H¾VÖ"¶�˜Ä�–ÇÏºØôÕŽp@NÇ6æ¤$å0MÕ.­èhB«BMp¬¡iUOœ$_Wpt¼âÎÁ1âOý9ö/]ÃÐL•Nx”)˜o1ÙYâËë|ëwþ$?÷Ïÿk>ýÉŸå[©8©kŽ9<8àèð�ÕjÅzµfS×üâ/þ<Ÿø¡æßùwSð˜‚>xŒÖGWmh ýÚÉ-¯S›é§=î–YËNfÊôi”sdÓ§¦~dYN	p§Ú;óZtpN½b;*¢s“Îaj÷çpwÙßv*›À¯—EÚéÁÃNÇ‘ä|lˆôh›×Ž‚Iú<}dÊ‹€ÛoÊf%ž�û!‘s8¾l�Ž÷Ž»Eêr•ž•!§ü„îµ¦¥=z–°>Lè\A¤Yë¤õÐ:µ«Â
+Â1èqþÚl�è¡¥Ÿ5.òMÛ|zÍ[X�½°ÆóF²€GTOÐ‚F6­ãd£´¡@­ n¡	W”Ü¸Åýð�ñÝßýñþgÅqâû ¤¦ ž€C
+öî{ßù±Ÿâîæ¦ÿ
+ÚÅ}¬Ž�Ùœ³>9fu²âèàˆÏþÖoñáßñÿÎ¿ûd±XL2ËÔŠêªŒqP±¾M%Ã‹S…{W§�»ïò»:VÓ¤RÆÈÓÙ,¢»l¸2þ^›¶šsÛbk“<÷³pÊ©žÖµˆRSæ•�Tw{»tC"³jäîiî®öÕðÑÎ¬øÎfgÉ]«È­þeT~;¯¹�ÛBrÞµèUñ	QÍÁCe S˜êY¹ÅÎˆ{Úcž.êóJ»2VúÅÙ
+3Bf7JF¡$÷¡{ÌD4/ÐÜyŠÂ-)°d§k-Ä† +,¬p!Y²k<H�˜‹Pƒµ�9y?œJ/¢Ä9÷�´‘�‰™££'XI£%u,XµÂº†M›h½ÞWDKÃ©nsx²á÷ÿ�?H¹¸’7M¡(ü ìwFEA J~‘è¹ïíßÅ¿ý˜_ýäßäÒßFlBs‚Åšf½æóŸÿ<yì1þÌŸýs“àÑ�â=–aI®ejÛ`G-·w_N/gk•Ë™ŒX™U{=ëï.{‚�Õ4�Ý+r¢©zE½£WÆÆ2™‚#»ù&rÊ9ÙŽÍSÆs5‡dÜ¶µÊ;ÛR³vÕ¼
+Ù>O;Ç¹Ûîªë¼ê÷3ÏüÈŽ2ÏÎb[ï.%Rbà
+|‡™ôÁ¬P³³ß²�
+í5´Œð�šƒ¦#/¨­™‰ŽÖ¿!q®§ìŠ8'´·¿LeG4*Ä¶ÁÚBª.4'œ#cñk�@W`©â0i²¢Nç†Û7sêëHrãÏSGPGÚè¨[Ï¦uD·@]×ÖŠMÂÌry‰¯|ú³|â?Ê»Þó�œ(¸Iß>e‘1GaBpFË
+óûXô¼õ=å©§ÿO<û>ø^oÕ4ë¾üå/óÎw¿‡?ógÿ{{ûÄóæ £ "7KAKs+uHl$k‚èq»Wâü³k—?;K—YåÑ9 ìžµkvÞöÕi©Ÿ½Œ¶´í*B^qKk2ã”f×Yñzì ;~Öä:Úéû]Ç/`±]äå�»ðjh7§uƒì”€"Èu��RýÈü'Û3éƒ‰ˆ}¶¾gœ»™a�w�ùJÌíd”n‘^pnôS22fShÿ½-áö—°Ím®¡‰%!¶	óÈvëÌ¶:At�ÄWh7<JÚÌÔR†dÈÍiÇy¶G‘ÿ0Ðª!V4ZÐÄ‚Mcl‚ÑšÃœÇyÎsóÖmö/_á÷ÿ�3ÍÑíþD$â1ÄÓEO‹¢êY\¾‡Ç¾÷w³ù™ÊíÛ7(½ã…çžåýï{?üOÿYööös°°iËª£âÚ€wt˜GŸw•¯éÄ´ñîØ†�ÿjÊîÖ»²lyeÓÆ­£ž­Ôo‚²³ò9£cõ²ËyËjh6ngô¯ììNŒÈéŸOºcrî1lÍ“[8«<í¼olë_Ïác§w†ÎSñ*Ž¡�7áemáî;Ð¡±Ù`O 113)ÎoÇ`çúwãî=P$ŽJ)7Óm‹cjœ˜Û[nê°)ù?«oR¿Ä¾ˆ®ñì¥±²ÒÜm�Ð
+W	,×%©Ë“`QÀm4$)ÍÞ‹ñâ®ÏDrÛµN`i‰yeæ�
+UOm‚	j)ëWSÚØP.<ùµ§ø=¿û§xç{ÞGÛ´e1É£#Jüˆ=ìÜQVnæÙ¿ï#|û·ßä×>ùóÜxöy‚FþØÿáOsåÊ•¦Ñ;ííæÒ÷Z�N›4jkŒÚ];S\¶éð/k�·YÓFvW"]v(Ü½�uþ¦ò9›Ñç£OÏÂmôÌä„Í˜|~—r6Ô`§U&£*ç”jã Ò1CÇˆqJy¹¢Q;£4¸ÛË]p*™@r—Ë³ÝÞÛqåw<ç…îÀ@äu¶bó52³¤As2jSu-‚´r»2Ý,)r9~:ÁKM}ü<¥�¸˜f˜ûBõ†Z
+´›ä¤6Zm‘€¹€I²*�K�|ôÓ¿Ïæìÿ6=d`é‚®dk|
+æhÍÑDŸÛXP¨k¥
+šî)žÅbÁóÏ¿À[Þön~÷ÿæ÷æ
+Ôqº„x´4U<”JàžkX(yø=aùô³ÜúÊþ?üO¸vÏ½³$%ö‹B$ùt�åŠÃPeÆ¶ÊøˆÌÒÝ³ÕW@Fç8ÞäºŠ`Ž�Ö£…/¯~oa-¯"hœLlRñŒÉiþzgé5evÉÇA£ïŒˆlIæM–­¶•
+{P^‰cÇ+ÍÑmg»ìâFfô;³XÇ÷opTØþþ»&&vÞ";Z¢/§p‘m,gÜ0Q7¢îåÊ¢ëI;×ÓC'T
+�èÁS'7ðn�1YÐFÇzs‚…5´+|XáÃ	ElÐF‘à ,À¯Àm¶ëÄþ�ÆÉ#z1yn<§à¡%U0óó´æRRãÙ¨g+ê°¤
+.wD
+o×–¬WÆ·}à1xàmd]ßìQtxÊ7|êraÉ•ËS!\ÇQ`žl®ó_¾äïÿq.ß{}2º¶ÇÍ æÑÅý’ÔÜ^UEÍ&"A'UÝ²t°™˜�–¥Û+	$Û½û±~j²ÆEÎõÆS‰dÌŠl÷Àï¶OÝe”y{“9+Ê†ÏÇ4©I°–S[g¶cùžæ—4nIË©U��È¨ê°Ýÿ¾³G÷zÔù»ÜÑí4Å�dåø¾ÚjÞ‰1Øm§Ì¬[6Ì,Ù•ØÝŽîe2D±^Ü#ÃìÆ>W©�¥j$áyþ>'ÓçÇ¦BßÜ!?�³£¤8'€xÚP²Þ,hÑ’@ÐAŽ1‚²ÂI
+..º=�+Ò?ÐYˆ”EŒ2·„ÞXçóIFkpÞƒ�Yý§çùšœñ¾çïqÞûeôº»}mô¾ev] $�FþÁ!D‚AkBkÐÄHÔÑ±i…ucÔu D5T…Â—ÄÐ Râ‹ê®9«�[œ£4²·$µ¸³Žüíÿå³¬ýƒüüã/ñÅ5�>´˜ÝK@úÿPÕþBõŸ‹õ×DÑžz>šµÀ”sZ9Oïú.ÿb£–ÏÈÒg°Y›÷~î&éžÑâ­«ÂÏ
+ŠÞuD�íÈlm÷~—ÖÚH9>Ý=å\Ìd}Í@Ù-ŒvW§f|/»6Ö8xØüÞ¾~Šô»:¥Ÿ@f×ykóêíi'ÛºìÀã¶çÜÈ8€ìf6t£aç¼óþ’�søÁøä¤ï'^\ÿ¹Ë}hq.ÿÝåˆ)ÉÊ¤ÿ|0,	„ã/ÒÆXøc�uÊ„Å¡þ+½ÉÆQ_ÐºC°#¢ý
+‘Î5ø¸-úiþ‘ÑBµ‘«çäå”U#ìt6m×"zÙ_;í}ŸöO9‡s}mÄLŒàÓL”n<-Ùè>Ù•DjZ‹´1µ°šÖhZ¥�yÐ£
+QSÛòñ'¿ÆáÁ!Þ¹sôÏÑ:)@ò“¯‚‰GŽãýå/r²2®/¯rXó—þñ/ñŸþ¡`)£”]SÔbJfTÓ³¨Ù¶F„^48¦îÊˆø1ñÀ‹ÖÎHÕíe¦óGË&Á8•6EÙ™Ë¼
+°Ð:næØ+uRÜs6i¿áÍµ�^cüï[B¸3O;èŸƒÉé4‰›*ÕOï»ÛéÖN[î—!t|}­9mül;–ÑsÙáÈã¢@lª³3ëGRÈø<ENP˜Ú„/=¥,Ìw�9³š»äÛ—ÂÉ@“ìUæù-›Zî{ ¿nÐœCÚ	õ-¼xÄeÚDÌ#¶B›§Aß	xÐˆ-t�©G²½‰XsÎ›x��Ìo ¸dTb£@Ì#º€Xb±@crÞ]·Âºu´Á5Uu(—9>iØ4�ë÷ß.?)e4–«gÆ*ŸüìóÜ®Õò
+÷¹sÝñ/Ÿø-þÁo>ÉïýÐ;F˜àOIí¬ñãï\¦òŽžÅq.¼å“5Ë
+·2ÕÓª’3È<ë”iÅØ½¯ÑÚ•}¯¡"µ­VÒË—}ØùÖÍ¨e²Ów4Æƒàl¼ÛÈ™Y¹íˆÃõ±�U9ªJÄvÝlm�ZWã¶Õìß^öey ÈÜÀÑÎ‘rL¨m[ŸÏª1›âR»’¢qû¶Œã˜Ðùl"ûßa_yªG–p–ßãF¦è¦õï¼D„âPSœ÷¹I€g×îçñÒPßy‚ØnXûÐ\]¢µ#ªCtEy\³Xµ¸U¤Ze:ið˜9œ9¼8w‚HxYáTzÙÛÝ…ñÍvü¾ÓÞã«ù½§œ_Ñ.1\þ’ÇðÐz4.p¡Â…bÁ&–¬ZÏºêÖÑ†d¯^VK6­òÕ'Ÿá{¾ÿ<û÷þá¹W 0›Ç#Zz¾ðø^:Ž„ò
+KWP®NˆVï{€ÿþW¾Ä�½ï]\^hÆ1 í[W�B!ƒé’‡É÷˜�°ìÃÑÚ0ÛîYoeŽg)�w4nçÈY_Ë­ä¡e9uá­¢óß§4òÀ¦-’qËµÓ}�Ðî>ëµÁ_ÆÄ‚»`[-0›f»·«­äbâN0	(3�Äë•_ž1Öî*^œ�üfTåõ×w ‚Ë–ã¤l‰†zRI¾‘…æŒkx°f½úÙ¨ÝÓ*Ö‰EôL•*Ð8vÜu“€axç1�©•¥Ë†ˆIL&Î§VWx‰P¿@énã¼¥W •bDØ\£Ý,Ø¬pšÐP”-ÑŽ1× –ÜyÅÔ�ï.Š�Oo5ßÌO)¯_“¯ÉAä´V÷+ù½;ÏO(Ì„nFT# ´âh65P‹£fICE­ÆFÓ\ô#V¬6-=ò-üøïúÝüÍ¿û�úÅcÄÌ(Šbšùt­%MXDÊÆR–<w«á¹—ñË+Xh4P¡ô{´þ2_¼ùÿè—>ÏO}ü}ˆfÎè0u ãàücIdÚ•õùYžn £ùØ
+cWÖhì‚«ïhFad–ÊŽÝ_fUÈØa¡»�2±19c3´3›*³GeÊošÐDû ÕýN›ayÒ·Sd?%ç6ÙÎ#ÜvÜ£‘ò|jq3ýúÊ^‡ØqZ�m¦ß.zî<F´o±ž®4ž};Ü‹1íN¦cG÷¤ga�¬É�<Þaó!.ãYùMÇQû
+ƒ.p!‚w¾Ï@Ô,¹'ùì¤«Šó‰c©"”ÎhžÆéËEC³>¢ºtx[Q·w(%›[ì
+,Ö,î)@�}W�Æ°*ØX^´°^ñ>p‹h,¢§Ñ‚ÂH»@7B]!”D¿�+Ày°©–-Â�—žç§~ß¿Íû?ðALï="ÒŽn“WU\vp–Ú˜jŠ¸ž»½ás_}�@&h´
+*àbIÙ‚¿ò¿Î�<ö.®î¹~$mTÍZKXHÔþž‹8b£D¼ë4.6ÆçìÛòPÚ5CâL ô´�oØÀžÞ±wN‚Æ¨¯mÂDKÒ…�AÎrÎ!èvÖ67ìÞS�V&8ˆL;2
+"CÀÙ~9µD>ËdrÀt·±ùŽ	všóîXl:Ž¹>ä—M^æÚ:YÞJZNÁ‚†sQz»B!3³ÃÚÆè‰LM|;š#6ÑwžÄ9¶3â[_Ñ¤÷”|îô´ÜÑ¬+ÌÒèÑT�hD0p…Ã	¸“g°Õ”(lö(ô~~öï~†[·W4¶fyêäi>×\ç¿úg_à}ê+4'š¶&"„D¥I–“4·:GFÑÂšŸŸÚŽ%è€y�º’ZêV±F$Ép¢€ÚŒç_<æžþ?ÿÉÏppç€úOÿ›Í†““>ñ‰Oð?ñ	oñÝ”À4àKÄc8pã0òù'obÕ%<F-—ž�µXáð*”k�q‰¯ÉŠðkŸã_ÿþö¸[·a¤ëÀ‹wÎ¡1N&bŠ“~<ï´‚žE¶t§e‰çèvjåb;)3cC¿´!çjª#-I²:ŸV»{;LåÙ¨çÐé2iÏÞme²‘‹ÀË;ÎÁà®í2aî²Â7›ÿ.pôÑb¤	ÙeurfrŠíÌÝÈ;tóYM»¾í4»š-êæöõû“	cvÜ€£bùÈy{�ãºWN�i{kÉ¬ªNÜ
+�rÞg&LbÃ¸üšîn{opô•k(œÃá
+Ï<¾æéGœÄCÖá&�¯„;õ‚¯<wÂ³_Û`uKÝ�	±Ãäû>ú9ÁÀ»ßu^§©ðoØ£f¶’Ñ)Ñê…Æ
+BT®øH‘¿ÙâD ¬xéÎVAøËõ¯ÓGU¿ú«¿ÂÏýÜÏ²Z­øÊW¾ÂÇ>ö1î½÷Þ‰Ý�!øŠ[¾øÔmîÔP–	SÛ/«ã;´­ÒªÇjGµv”‹}Žö/ñ·>ý~òÃïãò¥2U4"£d~`%¥êÇ
+b(Î»I»jkÞ‚ÙÄ
+c7rJî<Ë‚w·(ìôv’ÍÛ2j!
+�DFœïí rVÕa;·û»Íšþõn¨ýH'ãUs³Å3~Nn»Ì÷Ð9•ž3ÚD6âëãyE£{l;°»Ë>Ò'Û²û9xÙJtÛù÷áz{t‡}ØœZ1“|l«×eâØÜ…ŠBó>\óôÒž÷/ç”²£ûÙ•AùAuÎ4ÄÜ3÷¾ìÛˆbÄûÎ®;U,EQ'±¾�ÔyèS±Á¬!ØŠó�~Œ7huÀqý4Žûù×þ•ÿˆ?ÿ¿ý	~üÇ‚ƒ§ÀEðF�ÐO<tj/ýê×»ø‚ÝF9µ¯0¶}ifÃ‚A†�°‹gøF
+¹ýW`ª´QiUØÄ‚“PrT®”ãàxþøÇë%›•Òl@Å#âùüã�óÑïú8ï|÷‡øÚÓ/ñÿ³¿À�þè'øÉŸüWiÛ†+W®öm«~\q÷»�£6xük7yéÎ†Å¥klêHá=ÇÇD3VMà nYÕ‰Få*Új�;ÇÂÿú‹Ÿâ÷üÈwƒ¤V×&3KÌª.`E�ˆë*åtÿ»ªD†4{2Od¤Û˜‘µk¾¶œTvµ¿fAå\CÛdÜÂ�,Íï7ÔqÇ`§g´Îª€ž`ßwÄ˜™Op˜1Þ%³]kB"àŒ
+eNâTç™­Šn¨0}ÞÆ²¹ ÐîÆÃ–Ù¯9‡=Ô©Z—¹¦Èv0�~nÜÊ›|ìpnz¥z¼»Êu¾—�Œ¢»2Êº$aÜ7<3Îøp2w&9ÛézÙ–?öoFz¯sn4‡!õŸM_”…b·¾€…çR%¢((]Í3¸æ9>àR8æ€†€px¼ÂN¾FÜ<a�9ÃüX‰3!¦9yw]€J‰‰ÇY‹q}µåÀ<F™Hn…È†ñŒþ�
+u�³€’yc7–4•OÌãâðÄ¢Aå�ëÁ%x4&¯«V+êP°Ò=ŽjåÎÆ8ÜxŽj£©7¬OV4ÁX·`nÉíƒ5ï|Ïûøcÿû?ÁÞåk<ñå¯ñÿþ/ÿsý¶GùéŸþ©íÇMu³NA£žÏ=~“ƒ£È²ºLØÊ¢`ÕDŽbÅA,8ˆ-µúîøcˆÂ=uE/ó?ýòoð#?ð,½ô­*UMÁ$·Ê:@=†�’*—Ø€ÎyTc¯M¨ð£,uPfÈ©™ªíÚlf%n»ÝaÙsÇtËñF1&"cìSæUgL¬Úýu›å>¶µ'Lu,;q†)‚}µ”[Yƒ†CFhË¶0Fdw‡Àì<øŽÍè»ÀtÛ
+"wec™íÀ©N�Ë»›Wg%g`U6©Hé ž…7þ(Ò·:»ötß
+•ÌšËJÑñèmš6Lú†§4nÏæ_ô8G×P@ºTáøD×•”aj˜ù¤É,›¢ðóª¹C\ß¢ô-H¢ãZw’±F´Æ…BÄ\¤VPó‰mEÄM<ñÓS=DwV“[áˆi^QÏ`²°¬jKA`8&\HHAEdÐ5fez¯‰40Ú5ß˜8zÁG¤¤�uÖ~Ô± 	BÛX6·L„‰F"7^z‰û]¿—½Ë×hš51´Ä¶qúÜÞ$üTO>{‡'ž~·¼—¨)A‰MC
+óžZ�ã&pT¯9nV˜WeIg�«øôç¿ÂÇ?òméwæ¤Æ{�ÅHì€ô®Œ‡Å{7š>HÜÇmŒíŒ¦í­-˜ñÔ½fžb³à1m—íöÔ›¯KéƒGGM–ÑXè‰Ëïd˜~ÍvÙÐoQÿW>L„edö>»M¯›Ï½ÅÆ�FÑ8°žc"Õ)dwõ±»ÙÕÂ:µ±½³…&¼,MÐ©úéuÍœLÑ'£É¯c\Œ.Xˆ
+{mÏÈJA½˜÷»MSFÕ¶¥ûÙ�n~BÄ¹¼ˆ*Þ¹Þé¶o�¹œË‹›Xjû"Í½HTÝãÄ°¡’<—Á,`Úb±Å4`1¹îF
+4�åý&mo"C1×‚:LÀk‘ƒÁÙõÔ˜«‰R Rö†‹iÎ^ÀÓ$¼.3³‹Yà˜^�‰ï	å©k•ƒ‰¤€"ù>8{c¢9T!deyŒéó6!(mq®HY¾AŒà‹Š~ä#ÃU6PkQ‹#|!odnl¦	wNZž|öEªý+7Š+ç©7VMËq7ÔÑX56õ†Â;
+BÀ»Uág~á×ùèûßIUúDÓÜ¨ÊªtKto±ˆsŽcÏòÎOÖ~GGŸd¦§ÐzÇ;¥�Å¾1›Yk›Û<`Íw°Áúdè]÷DnWuÝ}~ÖÛ±1¡�GRl3†í|.¹�Ìf,¡¼‚lèe�ß™Œg^œ2€êk€3ZóÛíHÆeÇÇÉ­»Û¯Üº¼ÂödÏ3È®‰±ç C‡i˜B9Á¾FV2ã×�uEÇŽ˜dI;hpv†j'‘¯ïeúþ‡“8°�~(”šâ¬Ã;ŠL×L“çbˆ¸ÊQ¸†¸¹�Œ2Äò@E,æ9çi¢ YƒYCŒ-¡é¨‚–<²P�4Ä$ä"ç7hz	u{àó†Ša¢8³´À)©¥ujð�qÒ¦ $Ž4ÛKèxa*�5ˆâMÞðÀ¼æYçÑ|¶0)Z¢ä? Î³9iPWàü‚ÏÿÖøØ÷|‚w¾ãÝY ê(«2·óÚ)Öd‚Hb[™ÀÑªå7¿ø4ëX²V XR‡ˆ¶-MlÚ–u3V±å¤mÚRV.¶ÎÀ±àÙ›'<ñôK|ë»Æž¶m'™fQ{
+KˆÌ>Uc�ÍŒg¨ÛˆÒ;ÔÙQ}ØéŒ·´Ý c—†I›l«�!šÿ˜Î9%´Œÿ>mÙ®îûŽMl‡eÔ®’I5²käÉ t³¡å"Ãû–n£“1¹fkLvÑ«ä¬éô
+ÍîZ�Œ«�9sîŒHv0²NUÖØÙÓwÍ,9#�Èè^ŒiÜãª´ÿ¼w	ªÓ>É°¡2)dî­sj?mÇB8#€tI0Ã9Áá2EW°“Ÿ‘E™‚†÷>ù¹ÔSÒÎhÑi^"nnQÑ¤¿ç
+Ä4`Ö¦1´ÚbÚ¤ùçªh›n’K=Ä)XLBÃ®(6ùïsfÛàŠAÑÞGÑ\FŠ±\.Åg=>x¼XÑ¢®é,™ˆjlÈš\
+¢8õ8)õ˜ù”õæL;ÚI‚CÅÑ2Ì;¯ÕÑFGÐ6Ð¥\,	�¢î»ïA¾ïã?ˆ/ÄhxŸªÕnB`×K??1¤b¾_yê·Ž´º‚º%›6Ù®«*­	'mä`8l�ÛuÍQ³¡ÑÀe))L©DˆMÀ—KÖ'þù/–o}×ÃhÔÔ^kj�DnÛï’^Ä²�IÓÛÝVÍ×!·±º€3ÃBì¬µÒƒ•ó}ÐfâÄ‘.a¶¡¥@>mqíj5�ý»Ý×°AŒH�Ê®ÕNñ0eÜÄ·2ì�6c„eLÛWÝ†æ$1ˆÜV
+?d·ÕÒ:uã•3±…	ÃN»Íüô
+dNé=­�e¯dÂ©Ùé#lw¸!Ÿ&lœ²ˆåìÂŽê”‘‚=’ÂuÎ¸£bzb˜`cEúÐâš?».IÌ’ÂW\Â:Àá{ðRñED2Û&ƒéEÏÛ;Ïaõ¼k@C^E1� ¥E¬AµFµAlCá’Ë+™9#Ž^Ù
+‚¹‚&À÷þ[ÏßåÁU=+-Ö¸!
+¥x,T}öS`ÌÕ˜¸<Ç"m>®(ð2ŒEí2kq‘Â+¡nqyˆ•PªI�;Èÿ�ka¥&ž’ìÛõ´´ê³eIj…˜ýzÍ³jZöö¯ðá�<ø¨‰ÖaY‰¬†ž˜…¨_{þ6Ï½t„{D©X×)h´m 4‘º­ÙDc¥Âq46æYµ–ôD)Lñ(Eˆ¤Üã³O¼À�ã
+×./mKQ„ú`–ñ)¸˜)1ï¢‰YØá„5�Û�g§w´6–eÖ�f=Õsc<o»ê£,©wî_ëØú†.xt6$»šUf[DÁm7`NÏü�¹°ykÇílVÔåä¦opœ�Ç`Ë¤Å&;qÜ»[±ÏhÚ3�®]¯?µ9Ç�î"…9
+"0;…Îd;ÃÇ?ß¶L%{ìcr_v4²F�B1
+OÅ9fð4±yö£¤öu¢bfJdZ–Ow=´-¾,“–@u·cnaÚã©X¥ì¿çF¦iƒ¢³4Ï\¬Æ¬EµÍì D«ÓÄšñ‚s%mð””TV€¶}fÖ�È�êîç�‘ýÑ=,îSÙŠ%Úöªó
+Ú,ð¶GÐHQ”iÃÉžK} hã‚MT
+”Ê9¤0$´`Š·
+(ˆxTš-‡†7VÉ“9ŽÖ<›ìwÕ¡	BZÀA#e¹ÏÍçoðØwý÷Ü÷p
+Q©œÏ-¤HÛ†¼sù”PäÄå¥ƒ
+¿ñùX^ºFThUj4Q©Û@Ó4¬ÚÈQk8l…Û›È:
+{8<ŽÊ)Eýà°à*Ž›
+¿ùÅ'øøGß�÷žº©QMx‡do‡Ï™‘ž”ø¤×ùDÿÍ‚DÝU…œV�Èt®‡œÊ5µ‘èßfm,’@wüïãµ(³\ÝF:€¾"±­¬s ùžÍx•Ó†´ŠÜ¥=³³¨�ºjä êXô:"ãª©£$ÛÇö+� Ö»‹(8½û²»Ú°ÁÞ…‘µ+(Ø]©Ägwv&.§´w–t§Œ<ÉíÁ¾mØãbl-D:!¡ígÌvRÅ¦hÇÀFýK�©a”C•e™HMÎ¡!¢,ÁB ,«^÷ÑÙY„ÍMšõmöe“f—“ÕbÑš£Ó&·°Z4†ÜvH3UïiÍˆê(ü%Äö°ºÅ©	Î‡ªŒ±õb‰ŽBq¾!´\QÊ}Ön�:6,�«eES×
+”U‘-[†ÇÙ{ˆÖ–ìùšãæ6{¾ÆK‹sq$^zcc–[/Q… ¢K›:‘•ÖŠj ÆÔÊ¼qã�>ú¡ìLÀHoÑ²\.é*�„i„ÖŒgž=‚â
+«àq…#¶JDhÚ@4UQ9‰pGÑ8jÓûÁYoLÀYÄ™¦aÎ!¾â—~ís|×‡Þƒ—î¹+išº'tÄ¬OêØ„!„áJ6'®ßX4Ï×é7š9¶8NNl4�|¤Ú;K{1Å@l¦Œã$2Oöæ˜Áx ›�ÚWç_¦ãr{Ð{ê71	P[V-2éß0jäî<&3+%IÝ‘TÅJþ¼Î1Ã·¹O»Ü6Ìv‘NÛGÝ9yaÞÆÿ¾�@&	÷9Šµ-ØàSÅÉÛŸþÿ´`%2kgÍZ˜Ó=à"Ãm•dç><”»Þ¤í.=O™ç5öDŸ™+EYdºdÂBBø>X�.¡¿ Þ<Õ¢ mîàEÁ…Dß¡È¿'¦M!ÿIxHH•#¡W®U“ÃK‰F¡^·È½�âïy/Î9œw™R<¼÷îô*	l¾Æêö—À=Ï¢¸>Ðºk5÷#W?Dyí�¸™æø³Õ3K=t?#¼*ÈµP^z/.>Ïñ3ŸÂ•®Él.Km¬ÝcwÞXA$/œ˜H5
+M0êÖh‚‚¥ö•%ÖÕáÑ	o{ËÛøàG>Ú_ß©ºî½÷>œ£ÞÃ_½Å7N ¼BÄš&(ªMˆ´QYojNšÀQp6Žƒ6êÀ-p>"m‹hHÖó’6ù(P”%O>÷<wŽV\¿ºŸg¢§#dW^ç}ßÊÒ)|j¹‚â$CvÕJ·vÔvû`�ûü6²û±	È9ÏâÏ®ûÖgÍ›‘-ØÂÆL)¦ëVrPéÛ“µ¯œ™âŒmD&#RÀdó“	f2p†@Ñé¦‡¥ ¡½5Ò (ìÉ	³vë4NØ™½µùÀ¦91â4<d~¿§e‚ìÌ
+Ït“ÚQ:�6�}·#ôÙ‚Ó¹>hS’…È;£3SŒ[-(;È3}¨lD9ì9ÄicÀû‹y’›Ú&Û–ÄHéßËÒ¥v€)Ž¨{Ù›C¼‹8‹ylaÂ?ÌFÖ€Õ™Ê«o†ðšxÂºÀiDË’ÃPRø¹÷ÑÀ½ã§±Å04Ö:êø¥Ê!RPÐbOþs6wþ;j½A!
+ÆM[Pí„«øýÈ=ß/þ�œüÚ³hsL¹×©d=jiƒñ–ý.½ÿÇ©®œpôIŽ^ü
+Ñ$[«Ò»ð#àTÞ€4^™PoÍS—‡C¹Ä¼ÒnXTr W�Ï=wƒ?öq®ßwg°Üoz‹j�K—®¦$BÔ0ç¹s\óÔÇPí¡–„¨u¬Û–¥nšh¬‚r,ýi�U›Ú[…Îxçðæ¦Éq(6ÑøÜ—žàû¿óÛ)‹’ºNbPçªI`bè[YACzfhÖ0uø‚Ž+Û¥ÿ�ÙÜoe�6ˆû8Ý1Ê&¤OÙž:ÃzûŠ±xoÎ;¢«vA‘ÙökS�âèÏx¾Çœä»5"v�Æç<2uí67'yøWÆeÜxƒs³v;„z¶kŽÈ$dÛÞŒÇí+íÛ‡©Ó1²G;¥yyn½vfsŠ”Âvµ·˜kTÎð0›UãöÕäºvšœ®…¥QgV;ª›Rí¶È,#ÕlyÝ«A¼÷8:š®ŒÊ}Ã;£
+ï4Ñ-�Pž"<K8|ŠEQbA!%„$„g'iT­#ºÎ‚A¡‚(4¾ö‘x/.¼H»0nVïæßö‡q÷ý^Ð*ŸEÒ1$
+cnŸÔ5T5w¸‡+n�Û« x�*zb{/¢KÙ§
+ •K30îû8í}¿ÂâÅ_ v· 0š\f£#ÖW¨ßò]\»þ½ €\ÇÜ1¥{�E»‡†û0	PåÅü�jcé¬-àFVy´k´4�Ü¥Áä‰®íp¤�–]ž“m¾áqÜsï<öØ÷âÊ*?éßœx¼[°X,ñNAÚ¤ÇSÊKqskOXkÁ‰yÖuM­‘“¨ÜQáˆŠ#5Vm¤�•€M‚Usž ‚b”¢”¦HŒ4Vò¹¯<Í÷=ö(¡mz ½mS›5‰‡J#´!;K§Í¤KœTm2ò´"Â–	a/œëhÀ2›y.£¯±{Æ‡�Z*[sZeø)Ó:DØé,£MPFJGU,süføù£aDãùÎLh·Éä S³é¼ö„d"ÙbÆ‰]çÊ,HLÁ%'2‹h;ZC;´m»|J',¨�sAljÇ»å¡µ£v^YŠ�AîÝ1LÊv`#Ñé)àÏØâ„�„&&»™ÂfB%c6ðwr…çˆÜ<�.œ’³7—ÛV¦�'VöVé„…y1E‰ªBdQ9Âíg(¤M‚A@ƒâ4µ¯ŠX@­b2k1–#"yRžAU²Y×ý—úÔØÂÉg¶Æ±Äôs%.îáš¬X³wùûðîÁd)"ëôÐZ�óK¬1Âú6«çgï=ß�ÙÃ”ˆö¥_Á£,À¹nö‰çDáòýD¸œÑ>CU„TDÅŒÅHì7o1á
+å…eÓ�‰>›¼£4…!w5Û˜*ëMƒ*¼ï}ïŸAðÃQE¶3œ+¸søÒã/°‰û#ÍæGÄ|I%aM`”UY‹P‹£%ÐÄ€ÃRK›J§¨M£i�‚/—<õìK�l¸´,û`0®<N£yILôtR.ÆØ[ñÄ­aòãÍU&
+`vP)Ghå4ß±©¹Z…�üÿñÿe,–	‰Æ¦˜�
+A`¼Èäœd�eLÔæ2±+¶å,<öÓggÕÈVË.¹w¦{©–Y“�H7�±åò»ŽÍlfL¶]tª·³´ÆŽÃë”»lw§Zm;ÛÉîÚv8Ø@v»ÌƒHN8æà¹cÀÆN ©—;�`ì�dàþ†[²UrÙ¨Óë}A§KOýdI›©…”Ä²¯f,Åû‚EUáhêC*„¶É¢–€Z
+jùsU¤te³:%Jù™ê6@¤¬ÞÉåû¿ìT„'ÿ!/~é¯²¶±„b….ö�Õ‚K'kÂ²äÊ\Ã— (Ã‘˜]¾Öë€øíMÐ[„p•½åæ¥û¸Öœ áçÁE%JA¸vWþÄ=�Ü|þ—që®×Óæ£ë¤11ßÀfŠJVž+MÂ»6*!D¢ekôÜ*hÚÀþ¥+<ò¶·åàcˆS¾…½½=‚:�’6Â§?÷UšX°X,¨Å|�ªƒš@ÝÖM›ZV!p·å°QêžÒÞ˜0%ÍîÔDÏZ“ÜK»ypÄK/ÝâÚ;ßÊ¦ÞôôŠ¢LÏ®Y&(eQà1T“å‰s)IÑ‡
+slc.ÝŠ©¦;Þ=Óž3;,FLa(„]Zúôœ6_LœoÜW·¼ù™
+˜Hº6›1:‰a°–Ì*œ-õ¹íhgtIO£¢êØØÉæ—ŒðßÓ&î§§¼2ÛÚ°ÇæŠ;K	ÛáÎl»­úw�åÝEB8ÍâÛÊ}Œcïx.vXãŒÝxûÀáF ºÉ2ÁM€¢?McÚÜrÁ¦Ùp§íƒˆLOR$y	eû—{ÃÎI_‰ É@ÑT±ÑtÕ€—¶B´ÁbM!Šij�a4Ï<ŽÄ�IO�SL4#	�5¿¦ÝÔT}+‹kƒ(Ôë¯pë‹Ÿ+Í—¹÷²Ç7F´;´ºÄûËìUŽãXQ¸0J¾c²ÇÒHÖeIn}í7xä]ÏP–�{ëòa.<IQxœOv'«‘·¼W¾
+‚€¿�×'¨Ê@Xï!¢HyDt5°Ÿ=µÞàC¬re•^ž�Ôóyô
+®(9^ñmøÅþ^šMï]~ˆSâEpâˆ8Ï­“ÏÞ<¤]\g}²¢
+Æ²t„Öu›ƒ‡²jþÑ¸‚µNBK-‚•‘˜ˆ�i<a­c™€óx_òå'¿Æ;ÞöÐà+Ž¦Þ "4MÓ[»‡ÐBÇ 4ÍíW—@�1w¶ËÐÂPq-ƒqšÑkÑµÛMÃï6}v˜9ÞÅfDæé÷„�9jÅiRâ�…€cg7ëÏcD&í¢ñnÓÁíuœ
+ÏìÄÇY½M·–ùÁ~Óïž(é�Ol»e·…È¶•Ó¤¥'ìä6ÙN”g*˜´±wØx£Ÿjìd„)Ê)˜‰í(¶Ã=øTÀ‚ÍXÏ:�Ð¹W3J7»0&FÚžF]›D¬‘wÏ™nþš˜+¦šZ¢‰¹bJÛ4TÕ‚¶i(Ê’¢(ÈNzPËr	õñ
+¤9Ák‹¯„¶	É€ÐBîÑ±®†�iSHV#Šew[Å¤ÆJ‡ÊýîZ‚Þ„ð"—O»ÙPš£,"W %â.áÂÖ^zÊfx2Û@‹s5e|‰xô%ü½»Îµ‡¿}é×(œÒÔk*¨�§xð;�â!PX½øYÚƒ/pÅJ¹¶N>]®�x)yt�k^û7îH3ë @I—âŠ$KÌˆ&Ü¸u›|$k?Ô(
+ÙšócD\‰Ÿ{ò%Ù£	†:Eê¨lÚÈI­lZhTØ˜cmpÔFV
+µslÔh-Ñs¢¤°¯âÐÞ.èRå‹’Ïñq~äû¾3é*º6k6W,ÊDííˆ´mKY–É«sïu£à€dƒÌ.ó—­ÏûÐ„Ý2Íôf"dlD„m#Æ�‚™0ƒód:›L™DsiîKÃß“gzöŸÖ'Òc!“ùÚ]UÓyÀ1š8ÁYl‚×Øh–¹ŒÜ»i*$ïÛ:®ðvxŽI?&w\èVËHw\7;uöúŽVÿ¸ŠÛIxÖaNü¨K(;q›T,¶#Èè¸2‘8t<f£&îÀ]pˆ)±O•ˆLÀuæ­J è]GÏBxdÚOÙÆx�ŒF3åïmHö$šô�Ø©(JÚ¶é±�Ð¶xï)‹2íY	îl�…¥XpxL[�˜±�:™ïi‹…QÍØÈSì¦²“ZZ–ÉrŠ‘|MPKæ†êAÁ)Î¥ª,¸=*OŸmwg™ú€.WU
+•ÞáèkŸäú}?Bä–÷?Æ¦¸’]#u<¢ºÿ­\¾þ]hœÞDo}ð,Òbtd�-Ë�á9æî|=ƒE¶ôèú£5™(šLÍ-7†lÈÒaÿÒÞúöw¦ŸåGÊÿ1â<¾\ps£<skC-Ì•HQššVGMä$ÀºUZ<'¡å$wêÀ�Ù˜\j]âò(d£w6NÆºI™n–L<[‹ì—KêIÚÐR•uS§êY�ÄTôE	fI#8ç	yv{Gq9U‚*Œ©GÇ4PÈTà7˜Þ�É°e3ñ»uÀ'ck§6Æ0òîqc‹�±Ü:±-�Z9ƒ>Ùeö‰¡8•>óŸöÃ¹M©¦2¼—‘j\d,ºÓQejÈ;²L’~–‰á²slÂbe¦«±þ¿©¼Ã¦Ómú>§›nyhfÿ¾íI¥SüiÓ•‰)ç©i$¦Ák¨°sÅØa~3ƒOf­Î¹HHr+9
+½>.‘F‰Í¬UYX>�{«ãU-2ã5ŠßIåP~[ÎN»kØ´
+UUµÅe$Í¾†¢¬¡Ív"ÙJÄ{¼mPZœµyCu¹…Ô&sÄÜ¾JªöˆH¶ý�<ñNGÂE\"ù&ëö1…’@[lPqx<ê øˆs
+!nh¬eYÄž‰$æM‚IIQ9¬i(ä�æÎ—±õWpûP-¾…pß·Ó¾økTEË‘]¢)ßÆ¥âœ	´�sòÌ§¹ä=>´ˆ¬q¢D+0<"ñuÞ ƒ¥I³³¯j—½å{)–ìøE¸çú¼õ[Þ™ñŽ±’ o�šÜmëFù­¯ÞäÎÚˆÕÑ 9>¡‰1çæiPŽcd¥Æq0Væ©ÅÓ­æ†MREÎ¤¥Ž¢X°nV\*—<ýÌs¼óoË y¤
+mzRbD5¦D§HbÖ¢,úd\'Š¥$ÝØC}’o·´vXÚöhÖqÁvÌ<W¦*vm:û|ØÈÞ£s¿&·“{`¸[×i:hÒKöc4›>Óã-®Ó¶¸ÑÀ*›ZÄOmB¦ ·Í[OŒJ›V!Û¬:wk×{Ë
+-E¤Lª‡.oÍn™ó±Çíý	ãn<¦Áh+ç&Cwgd-2�<9gïÙÔeÒæ²L¯>2-0€f#<$<bª>T²–Ne`h�ý\ò{)b“@$Æ¤7ÛsÁçí¥CîÝV‰mÙž=+,õ�u™?¯š¼²,Ñ¬H|ýÒ)áø6…äÁK¹•t-f!UY4Ø¢Òa59t…³‹înÓg5¢‹t\ƒ±H†ù„­iÖ@�ß]×ëO3A4
+x,\¤Y=K½z’å¥�Bq/þ��³~á7¨\ÍQ¸Æå¿±KˆDê—>…«Ÿãòå«Øæ¸#T=P�†Œ¼ÁñRåc
+–ÙXdDË‚/�ãæKP\á¾ë÷��SŠª1D¢9žxú%Žc‰³‚P×‰6ë=uˆ¬£±1ÇJ�“h¬Ö"lböñÍF”Ã{Lí¯˜çÇƒ¾\ÆmŒ †‹I
+ôÜó7xÇ·¼µ·Òñ.i’Ê²¤ióæäÀ»’`Š+ª<¯Äe¿¯Üö'VF0¢KöØÆªaânm²Kw6“GºÙï3›òQHmNÞ—ÑTÒ,Îs‰žm9e6†@3¦v¦©LÛO£ 1lš6eŒ�ë’ñ{aÒ«›ˆ0Ç•Èl­!+­Ê dÔ°?Úd”ÐÜÜ’S\zçKxK:²Úß�;þ¹Ûrô~ÏVÆ¿ßz’v•H¾_óÂÌÍyìÐŒ¦ âd~ÿæ\s(B“’ÍeÐ®+_:k…žò<Ê¨úJ\²â–!«QK¢ïíº4ÙÍZX,‰âÒE«ªE¯D,6Ç\Í“fÀ'µ„Þ3}·3#ì˜6ù²o~XÍuÁ .ñaï
+œ.ñíeDQ¡ ˆŽÊÀ™ö¤Óˆ¤
+ÄB`é„BZ*Y³ºó8Ën‚=ÈâÁï'^ù«„ú7±ê],ï}!
+.:¹ýr‚ßìcâ‘âk÷Ò,@ó& ¹Å�Cð˜t ²›dÖâ‚*÷Ýs/—._N
+ðaÄÇTC¤p¬[ÅŠ%Ç›ˆGðÞB@Öm`¥ŽÚŒÚŒ�‹l¢¥âd2¿Ù„¼9hÖ¤LØï©Ái†÷M¸ñâÍü¼:ªj‘YÙÎ¤¬¨Ä¥s7TÓýHØ	Æ1¬›€åc¼q·[-³0a;†8íš¯d§á†²»l=Øªd&]ûœbY,e†u¸HŸ
+Ø°�ç€*ù:vsç{æVL&Ì§¡
+lMºFÙ|Â“nÇ¸u—* ¡Í§ù»‰ˆÅ&“ÇjøN·c£¡Ifƒ]çy6a6uø‚ÒSÀmFØ¶J?�if\kNå•‰®ÃvˆÓï�Yc§ì#¿_í~‡N’‰îšº\y˜c!³Ø�´UÓ^Õv2'¸À!^vª#ûQ¸Î¦b£¼@Úòô¶Ø$ßûz¤ÊÅ{OQ–hŒ¸*=¾(pn�FÃJ“[Uyœ¡æ‡M˜‡v¬¨!c71DGô
+øˆ³4÷C¬íù.,Â’Š=ÌJ$.A®P´�BT¼Ò–=iÕiÚ UÒd½çb\S�çžþ×Þù<ÞîGÊ‰ÅUÚ
+\}äÛYì½4 v¯·(¥%(«¦kœß#š€	<í7£,5]Lý±×¸¶˜?Ù©…(6PoíÛ4�€ËI
+¸™›•¥‘Ò•¼õ‘·ã}IÉž„Þ2fØ½6êXkrõUqÉ?Ë'ÇßÃÕŠ¦X²1á¤mYÇÈÆ`~"5Jè\—¨ÝÒõÍ…(Ž˜�Ž»l´Û4—ÀC“4¹(
+êº&jd±XB (�ºizÄb@œËV=Ú·maÐ7Mt"3Q Lfy�56£dîrÇs=˜Í1ïÛ5Æ˜G<qXå4­ÈÐÖ¾ó‚©ô›N'ÖNH©³')ò³0×è§ŒŠls'UW7TmþžÌM´!b#ühä¹7÷é”!KeÆÌ’‘žC†´ß¹¼	Ë€'ttÂ±¡åÄ¾]G•Ho¦iSÇƒnL¬³iëq<þ{TéÈXG2š‘2¹:Î;w„ü†¦Õ�NÅ„“·I™Ô%aÎc¶Û¿ÙRÉ@Ñ„�"§ý­®µÒQŠïKØÞ°+‘ÒªI€xnY¥àq’ŒæÌÀ;Mqˆ”e™¼±Š2
+ìiZŠ²L®§ÎSx�ßPøÛDp&¸XAgë‘OJ5âcH•Ll{:¯QàâÁ±^œ°ÙWG’G™z`Ù57(ƒ¥ÍÆ­ˆEIS:œíQè1¸c‚¿ÌB]®Ì6xõ¨+Ù”É>e/VD]ÐK„ÀåøEŽŸû×z�ün|õIº÷8w
+NnÿV/|ž=/˜;¡5€+GÈ³Þ—€�æ	až˜54bà2U ÑPA]|M]{½ÊÌ²¿ƒÂ•ÞMFî’�A!àñ”NÙs%÷hÆ~±äþ{H?Ûç<€�D�f %!B¸üÍþƒœ¡�
+Újrô�‘Z*8VÏIµ‘#"w¬å¥-‹¶ž"æˆy#mqÔâØsEòO³ü,I.æc“Ú�Îs¸nY­|áX,÷X¯×àRP*«Š#QSâ`yÜª+Š^©-Ùâ˜Y?YoB'õ‘Í˜)·ç*m¶)¡cµÂ¤�Õ;ÅkÉ&tÐ­à!2
+6“MVF=û¼©8²QiÞl­s"î
+/EUp>W+.‘ðç”ä¾_`ÓêjØìsUb23n”C&üæ®zØÃ	íÆ²Êh³îAzURÙ®?ÍüÑÔ¢ÍoSmjÙß%¶Æ(xd¬Èl,:”<)R×Ÿ·ìÔœ¨M]
+¶½­Æ*ÉÕ#j2®Õ\yô6+ì¨BòûV^/ 4éÝBˆncçÅIúQlê¶#ýÃ.’MîŠ<nÖ÷å®_s©”B»öe»AhS4÷ç=MÛöFhi†Ù²=]Ìn
+aQ¦l?¬n£q�ø€Q0šù–7²ô@©ZªDúSr�x£)ˆgaË¼ ‹á&”‡¬÷ðå!"55‘Má)¢àc
+®áØEöÛü{•´yö%‚·ÀžŽæð³ðP_ ÷|'mõË‡¾Zƒb�ÞùU
+½ƒøLuíð•|e»ó°Q6`QÛ¯uõFtq oú‹C3ND&³F|êû‹Ë¶&.1œ|…CÔá()JaoàÄï0O�Q¹öÀC\ä­Ô!°
+.mÌÁ,9ýF’hÑ µTqDHsXdŒ<O¤å…a¶h;=iH™wiC Z,éŸÉ6p.1Ã€+töâ­F|N¢¢jïèlsø�éŒÛ¡�6æãkç ê®JÄØ6Ú¡{Ø9*ŽmÛ^³9¶ÿ©Î%¯3—–\®Àºl¸ÃSý—å@b©cÑ37w©­eÔŽî@ÿ©?˜Œ­_lºËÖÿg„ƒ>ˆHo‹2ñ÷Ê¡¸ìäÝÛÃë°Kv¦[
+~ú½ôuÝÏÁR•Ú‡ÂœéÏ‹ûû<fu�q˜.¸è¨‚ˆ:`Ñt”äÏª›‚ý]EÙEþm;ÌÎu³“¦¬��&L~hw1ËÂeçR�ËÙD·ø�¤Í»+¡b¶}p@Y–€QUe_¥­ß{G¹Xôì–ÍfÅb¹‡¨£\–Ä\M,«›ÍAÊ]¦õXÒ’¤>C7b425†R«Ê«ÇY‰±‡v™5ˆ~ÃÑ"â
+¥TMZ	˜KÆ€Æ%¹Œºjj^')ëö(.¿g†3e!‡„ÛŸ¥½ó8å}ïcïò£”lhÛëT…bëgX=ÿëì•-¦åÝ[I]	ß'21/›X>Ø©[Æ+	ý¸ÿZ¤E‡CÅç)ÈÉ²ÃÈ,#q˜K^SÑ¹ü‚w˜KÇþ¥ÅŒóîFExz&Fc]×Xy…¦Mè¼šÑFK)æhBdBº“yXÕŒ¾2òweŠ§¨‡U[Ç9ÇÑñ	eQ¤¡`!¤Åš[.1fï._¤ñÌÎ4¦à“gžHÆ˜Í–™«Â§AdðfbµiLœÐÆvë2†]˜6Íìå=²G÷ßeLëœžW·YÅl£Y?e¾£ÖŽ1Ùª¬lÔFœ�Gà·¤–î�ŒXL£ÂÉdjß"£@áú
+%]0/SÖi×^Ñ¾J½ª<œËŸ§çØ,±D{[ÊGúöz�ÃJj…ÛÈ&„¾­:¥ðÚŒŠ;ÙøÉ“8Mû@‘öä´Ç]ÄÆjzí
+A;&n—Ð;ïYÈtH"G„�1­PÓÜÃëJž˜22<Þun²�@-ƒì]9èÁ'Õy›g$h…§•äiU-÷Ë%äJÃ9�!4M2"iã^îíQ”«ö„¥{ïg»bÅ3˜Þ}}Ì¡Æ^ÓÆ¢.m<©
+_§ìÙ.Qs³%Eœ”Z#j”±B©¨¬JFm£ê¦g|åaU©ç¯xËn»w^@åypïÄÊk<øÞÇð~|Ëê¹ßÀÝ¹ÅÞ¢¸ë Á�j)ƒ°œ¹è¨ÜîV·�k�N71dÑ®¿®ys$¦õy8Wâœ‘�íR'©
+PBQ‹ÙÆÖ£³
+«¶¥•*a"¦SK ‰J©¶­U©£ÒÐ�ºu»¢ïl¦Í)s!F,'ŽÐ¶Ü9<â¡½ë	ãèp;)AuÛöe´¤icÀK$&ãF©}üCl†žÊØ.�‰`Lgì²£˜
+Ôd¾ñÊl{~ÓTÇ-.p-8zJLZ�Òw‚4³µ:Vd¾¾–*Q×ƒëÓ "Ó`;²\ûo¥„r^uÌÕìn"m›T!�å{¦ÑJÎª{Lª£k—•'æGW/8qXÔ¼4ÿÍNJ©#“˜ìÚ;4ô=’ŒQ8M=?=ÍÐ›é9,�®ÊÐþïô-©qEbýŒí[W=^bƒñ­Éš.øºþúwXÌÔ(Ô(DE³j8‹ñÒº'*ÄhÄ­¡Añ{•Œ}øÜÒÊîy¢žªòÙ×ÊÚÃ(ª‚¨�A‚á]AUUÙœNYTÎˆÄ6ÉÂ=¦‡.õ““þCÈX‡u€ºÍìuF™úÜêêW(±Ø	"×À½µ·¡õÓ”Zá¢£´¤…Xà–nƒÓ[c™Íöb$�‹bl.s¹,8zê_°xàÃld±‡Qbááög¸lÒzLô®ËVlÄt32Ó-o,NÒéo{®¾J]ðæû¤¢p¯Íåm›ËØH¡–ñ*ê)LX8G#FåW:¢	'J˜dÙ2³À�ºni¢²¥YÕ¸bI´4¬Q¡U£ÑH48ÕŽä=s«˜¹ÙÙ;æ0‘R	uÍáá�<ò âA•Âh©N±’ð™Nó4LìzÉ£–Lm@�SæpÃdHÔ¼­a3æÔ7é|~`CE"ç;œ™Î‘™î«†ÊH/—6@1–´§–&º½f†›â/£ß-6«¬l›“ÅÈ!š]×Æ$‚ÑuëF$¤�á-Q¿Ý¸ ©ÇFnfY.�ÑâŒyt˜FÖ«e:¬©ŒQö>ˆÅœŒwÕ2½¹óÊ£k—éÈè³ =î¡ƒD»‚@S’•§fš);zoúZ‡›y—&�Šv3è3Á sLÐ1ù;½ÇBƒ¦9’6d‡²(‹ÂÄ424mch£xŒÂ§às–Ùé¸�±X,)|IÅ²Â0ÚÐâJW¤Ù×ùÉŽhÛ6á"&TRƒ6ý…H· Í?'W!=Û¥kŸ�BÍXÎ<"
+æOpR`ÏžÆßs�K‹÷òöý>ûÇ,
+Z\ñÅ>•¦Ê2ß˜ñ$Aƒ&¬Ã-‰!âbI¡pòÐ þjòY¢¤9|šÍ�Ÿãr±óÄsÌ:ïÌø¦u“ËrAR8Ê"^“ÒzJqi¶J!D
+ -UU´NLSÚXQ²`YÑ„6mÛ°ÄÓjHY`³%M³N­Ã˜à÷¢”ÌBm¢)­BpBcŽÐÄ¾ôŽN¨‰Õ
+uU
+¡i“"ï
+n‡…Å¬—ïÜN!é–2»;FNNV8—æ™”E�lš„ëyï¨Û&!mª©m•½ßÌ´×ŽO&»�tóae[	ÐÿØÂBl¢¥™tåºIš¹ÍÜÆÆL~Š`DÆú÷í0b%÷¨
+•É4b.;¸æ.…¬-bÇ<Km>Éx™8Íš1×·ýf’‡áú1ž˜×ýÝ¶lïç3áçÁMú‘Ù�–ºå¸ñ\–€·|.…9M:ë‚W¶BÑ¦u´ýânËÈ«ªûN±$pž»¾âÔLN°>Áé«�ëˆ©]•ÆgÛ™˜4Òç¹Bì«D£Î;,_•ëJÕœˆö¦/šÝ&0£X�Dp‚/Reá-ÛUÞ'ßý˜ ]—'~¤~¡YjIYŒxï(¼§#r5uÍb±Hc(-Ò45¾HÜy§
+ná�¡(©75—¯\M}»‘Ð Ípš5¢	Ÿ°Ž¶3˜g©X*³UBâÔáUP	”^°“´/ü&þÚÃX¸Ì¥¾ÿíŽ¾ú›&Ðî=CãÖ¸¸�h ò0ÖƒÜCHSöÔ
+¬¼ŒÆ€óçïO¾ÀúùÏ±÷Ž&R"ÑXèó\ªžAu…°7²£8G.˜ÛÞÓjdSD*Šr�Æ5Þ¿v1ÄYÇU÷É’¦ªpEª cn]ªh²´%!&õéJœ)•wì—žM“Æú–-ßÎp1¢‚»~¥©ÆìØmPBáXò�±H#k®rÜ¦ùç­	x‡wAm·ïÓyv6dÒ¦ÆÑÑq„%4mKÔØÏ·O®Ñi”ª3é�AcŒÞ'ÝFÓôò¦èÆXH?2v—À¶mÀÇ33èzëLXÇôÏÄÌËYv§ßÿl{/É è;CÁ/3¡c·™ã\ßêìuJrÏÖÎý$khœËI Ë¬®­ '“Ñê©…6˜c™XÊÞG.àÓJ”-æ�Ø0`Kth÷tyÙõ>ÒLAd¨Dz/¯~&{ŠJ"“´éš†A'×%zãjD&Äü	ÑAa2c¤&jÉùZM	–Aµ´ºj8é—† cú¨1
+IC»ß’HS�PÓE‡sJŒßi¨ÜH¾a�Æ(ŽVë´19¡*„e	•‡Æ’È	TNÁƒÏ%M"u“TÓ®òI}šùßâÓ&eeb¬Vë<u°D|…©Ð„†Â,ööiÛ–Åb‘úÊaES±(cÚÄÔPŸË-	ƒ˜�”ñíÐ‰ºÍÊò´u\–šõ“?GyUðüm¬X<ô#,ï»�ÁÞ³9¹’ÖAßMcBÙy)HEóX¹$4K6MÃ¢¼BSŸP¹]±yáçØ{Ëwâä:ð"Í3?‡5wà’'Ô-Îç«&í¡nE¹‡·Š6xb,k²ñµA@Ì'UxY.«h‚�[âÊD(8nªŽ`W¨]…%‘môøEA\L„¢ô˜óÔw6Þ"J9Íþ3Â©šðŽØ*ëÐfÃšÀêÐÒj 6ØXFq™>åGó­Çì´óã=Ý¢ƒêèè(gZÉº�8�EšÐæ–UšLèœBÄ‹§iCßK¶žp2Æ4†ÍÖ²ñç.z§»ì­1>’÷¹ô{{€v[¹>Õ•0sÃe:švÖfÀ…Qîïr¶š-DlB7Ö¾Õ’*—ª_à}Þ”%+Ø»äJF^Wùªé¿—l£2šŸ²Ã9—iŽÙ›vø‹ÙpÏÌÍŒ.ûª@fÓ ³8Ôù‘ÂÛe{¥œô:I€¹ÆLÊUê.™:Sÿ­¾uÅxDòÀôêƒˆæÀÐ§ËAcLÉyŒ
+és�™iišØƒùw{�è.ºl5"0ÔFQ7›dú§PŽv‘â6©ª
+ï|ßCm5ÐÆ4Sº�š« äSd�ÚB«lË%�¦·Ð¶�Eµ †)ÒŒòŒér±Äû‹Jˆk°6´]Am–Ýwså‘!AwŠ¢Ô×D——B\"ñ*^©k,~•?÷×¬fï-?\†FÁ]wOêÕë½I3â.—åcÔ[1|!h£{{T‹
+§ŽEuîáª¿É*üK�Ÿ‚â>8ùuâÑ/áõ2M'd¸�¹µ‰�Ìqr¶SV{É*
+—ö/ƒá+¥]ÝÎÎ¸¯X:Ø¢´—
+Ú¸¡¬.Qú«)@h…¹}\)ˆ•¨B=Kê¦ÀV†+KªÂ�6rppHŒpï½÷&]PØ ~9ñ¥ë—£%ÎvS#~AÝ4‰e%Fk©¢­@”D!íiÝ`ì­mUÎqæ’cÄiÌÃ¯Öts&ºÀÝe|E6PÔ\¡t3PJ/¹•E;[­Ó™ùõ­,Y“HÏú‘�$
+¶z[Þ-ãÊ®ÂÉ`Æ¯¦öÛ?³·°èÓÑLtî¢+ÙÖ§ŒÌVGß×]ã¨#pÚ9œj>ì>¯7ëÁù!Ž
+›~
+P#Ûv±m@ý´êiÄÐËÞ_"©
+Ò,€”q)7"Ø›¡:3-î‡JvB?PÄÌõ¸¥d‹±‘­ŒÙDž7„fÉú
+™Pu»œGšEÓ=‹]0Ñ‘¾.]	!C
+šMt“‘«ËÔ!båý¦Àûd’98(t`ºv…G²x¦ÔAò,�H[ªª¥*Š4u­�4!½	ÓˆwBY””…§*|o$WúÌsÖ–›¦Åù�¶©Yì]M*ïåb/Y]4-,–‹dƒ ©e0PÉÈâ/ë•çr*†�L®_�©I�+"UuƒÒ�pã‰¿NûÜg¸gÿ]Ü[½
+žvyq%Ò^Á«|dùÐ�âö ŠB5P\ÆWøÊ3%7nnø{?ûž}ÁxàÞ‚G®ßÿÝïfñàŠææßã-�¼ÈÅ/âšªòêpBáÚx>æ­hfÂ9Ô^ÓâYÅKüÌ/¯øŸþÖçø×ÿµoãû¾óa\ý"b);ëZC%â27YzDT|öÿRÄD"=â–m(û]á¹ç*~ý7¾Ä'eÅ³/Hø$4šÊzí²\'¨b„ºŽ|øƒoá~à£,<\Ï�ƒ—¸óÒ!×¾‡(©ÄNždÙˆP”O}…ý·=�Ë9£ÑR@cJ#žÖŒulÌhÔ2ûj\�Úˆ­6ÊÚ9ió±�š-:,äÅ”ºNV2ÞyÖõ&7d’Æ©«2T•ºm²ã´DŽç!Ä<djè¹wßºMzlk1ô™µ‡vµ·ÆXD�ÏŽLý, Ågê>crõí³-¶ØÄ„vV(MM‡¼ÔÆVG.Éczo×>±,Vv¹ýä»,ß=÷^ŸÝcÌ3Jo�ñŒ[Ag{„�q%éÍG"CM­œ#�c!½Â`2¾xð™íÚ³Y+£’íÅŠÃ7ŒÌ³û±Iz­‰ôÆˆjä@ahf'¦©™)0÷ÿf]õ‘ZV!Fb„Ñ�‚‡æéšNŸŸA—äÊ)S30
+DÍÚ'7·©È-uq†Ï¥\ÔT–KpIðC¹¢*!G3‹‘ªpT•QVŽ²¬¨Š²"1K~A–ÎMð–U…w)k3\BibE�E¥ðŽ–‹1±¡\$Ò@,@}²y·³Äúr:l´ê2NTêÀæ×„ò6ÄËP¡<¤Ç2|™+'OR=Çn?Í&·5e["ª´¥ò¢?Üó�,—P8ö®ßóž|Þñ—þÚ“üëÔÑ8¦„¢UDÁÿ•—²®ü—ùö·\ç'~øüØG÷ø�Ç®piXà¥¸k¯>)�5ä’¦lØk•ªr|ê³
+?ùç?	ÀÿøÙÏñwÿÒóÝ�¼ˆÖêâ
+…
+eLîÂ±ˆ¸vIJÔ­iÊH�tŸÂšö)–û‘h÷õaö¯>Èÿò‹
+ÿŸ¿ñïžD‰ÆBRG'ËÛÂO<”À¯ýÖó<ùÜøßú>J½ÉÉ‹Ž[Ïpýá”½DÙ x©zg€åúíæ˜[²äN¹OiGH8b%{êm×*Ñ¹Tkw‹PbÎú†ö„³„…u½$gBaP˜Q˜¥j#¶XlÓÀ²,‹ôB^`’MÛÞª$ÍpÚ¨Š’:ÿ[TM8`dvão³ªwÐY
+¬:iœMý†Ä¦Ä$�»	ÛòÏ’éü¬�‹Í
+'£ì|$.ÛÝU
+Îã@Ò1×läEÚìúÛ†PŒZGNb“Ì/�#›	éO­BFVÂÉúˆ^m-#Zí8ˆØ�ô:n=e�ô»~ðiÏºQ×·³&¶"5ÁeO-Ñ$àÓ\JºÁÍÀ$Oµa¤tŒ:T!}ðˆyÏNøb_}ä2ÊuêøÌ(è”í‹^5+2G0DÊBµkÖ¦7U±0øÝ´™¹bÍ5d]éð.•î®\PŽ¢ôYWV¢‰ÍïMÝdÖÎ‚Ð®XT{È¦Á\4,–K\Q$_(ÒÌótW-³®â�¹�t‘Q\–J/&òÑ#¶À«£°Ë”â(ÜM¨nQK‹I¤ˆió£Œ„½cZ{©žFä½x÷ V~˜ÿûÿë7øoÿñøÊK'T~A\–‚µ(%fB(Úôþƒð¹ç~ã/ÿ<ÿýÿ ¼ý‘Küÿ—GùñGïEŽÎá§:Ø`L¨‹Ù&#Kyxñè„_þÕ/óÝ¿¯ÂšÕ0«e²µHŸ‘wýw§	WZì]¦	k¬¼ÎÍ;�ðGþ£_àŸýêóÜi–øêAÔbõ	^Ž%P6Thò¼’¤/Ë‚eµ�Åj�'¾ð8ˆýEÅÃ÷_æðÖ­#˜pû;`Ù.]]òÜæ˜[-8=FâŠ�(Ÿ*¨Âf>[¾Ìx±£étóQ óß7´;4mVNRðwŽÒP°Æ˜o�f­ˆärÚ3ý1%X›û�Î•!{*É\„!SŠjÊÈ;Ð}W)2qÍfPtÙi÷*ÇX_2ýÝãY“Œ9²8¶û�iv?õ0žM¡“*È¦™ùìõ½ø
+MºˆÑk‹øOxÈxÄDwFÎ„ØY.ÙÔþdÞÊ:]‘?&Næ‚ÃÌyVfBÏ™ÈÏØs+cw[�DN“n«�tÙ‹0sŸ-ñ²Ìì2IÖê*Ùi:ä1“:ºÄ>„˜ƒHÌU‰fbJÂ>B2.¢#mMJ…ÔuJ¿Õ§à¡b~&³3¯‰F»T¡ˆ1öWÞe[çÐD‘Â»�×,NÑ¨ÙƒU	¨ÞÚdï`Š_–xW!EÁº©	«eQr¼:áê¥+4±EÚ×xË%ëMM¹X²nj®U19I’fŸ§»�lÏw†Mt‘ Éž+ñqö˜.IðWJ‰–Ä¢Í­Î’hK¢«"ë¦Àª{ñE¶ pðßüõ'øåS4"”W.ÓmˆÞ½LtÏ•n®ŽÚî=Vi¾HQò|¬yþ‰Cþwÿþ¯ówþ“ÇøÞw{B­¼ú£ÄˆwiÖ¼ªÏ×lXÆÁ+æRÂà5âhðõÚaûoçVó0ÿáþ3ü�_x!	¼G›H¹ÿò‚e¼E‚7¢/¨ZÁ[b¤áÀ—à‹€¶K´hù±ïÿöDˆ!²¨”çŸù
+ÄO¤u´¥BšØPUŠµ‡D
+jK>uHÄ›âiV
+Ê¯‘Ëmg³#3¡ÅÈ6·ö´§†Ž}‡:ëkïÓX�ÎÉµÍ€cˆ‘Cú{¾ÅuÓd^¿ö©nŽZ^|Æö„tófS�íëÆ±§"•RGó'¦µ£·ÊÌÜ¦
+÷9œ!c‘Ì¥’ÑP¡©œ~"*³žÞ9”a7Í!ßwÍÍŒØñfí‹N¶+Ç]É¸Gë-IlªÛXáÎN”Qæœ„“lb�ß�Þ9�dÒÊ2�ZÍŒ“=UîÒŠe£uƒxÝ„¸–;_]»y–Lh:'F’ª�¨–ŸÏ8à1cô8èQƒåþ LO4… 6z&©ÎxÔí�Ñbß§$—C¡y!‰ïì\òÍýkƒeL%h©ÛDên¹$DÅ—&ŽÐ´Ù¹6°¿Ü§ª
+UIU.ðNX”uÛc'sÎcÎâàp®¬}ÓÓ^E+Ð=°*U3î¤Îl‹€‹IA-Rƒ¬6µ'ê[¸ïú÷QÊ{ÀÁÏü‹_ä/ü—?CËUl¡´ÇkzàÿÖïú6þà�½�ëûÐ�§^|‘¿ý÷?ÇI{…Ï=~“_øÜ	Er®Ç9¸usÍã_:âãßZ@Ý¼6´[�å^…e}Bá‹\eÚ@DG	.&°0'…ÕDõˆ»Jqù]üÿÙgøk?û{‹Ëlê‹
+ûÈCüÄ\å÷ýÈ£\a4«;´å1qý/'Ö”´º Þx`�fsÂþÒá6¥D´4Bý"õê�Å•dç�g¨¹Z÷/„[›šêòUêÐP8Ï(	xÓÞÜ0§C¿¿÷ë>=PÚ“vµ`rIßiŽŠ²B bÈN»é;Ê¢`Ó$–a×cr™Éâs%¯Ù
+Ãi§ê·-e^‡=¨¨¢.+ûS«l*®3™f÷;HFÃ°ŸÞAuf¡¶
+LëT€a—‘Æ‰½»3IŒ)�¸cšé¸xêg¦wº�˜6.•^K�®cßåîhöÌìÄ/uz
+77Q‘Ø%|Üaw�Íëôñ°­­—m�y%61`D
+ž•<c1ÑÑûr#ýR¶UÂPì[‹ÉìQÁiîFšýÇ¬«.�¨Æ^4˜ŒSëGÕfÀ~x¸tÅ¡#Aj‡uvî!4Ù�—DñÊe”÷iôhˆ]?,}Þ´Š£tP‰£]Ú²Æ¡´ÙVkQUˆ	±mð‹jAÛFš¦å$ŠË{8ï)Ä!±eQ¡±ÆQô¦%–mÛ“";óÎQ�tfŠ.Së4—�RlˆÕ†µAcîAtIë›’Óà\ÍF¯pùžoçò#?î­Ä6ðçÿãÿ'
+ï(Ûcûð5þoÿÁïä;Þ{·¿À^tXëxÏ»à‡ÿOo�½=¾òÄƒ|í¹·ò÷ÿá—ù—ŸzŠ�Àßý0?öñ‡i×O¾FþU)Y¯d±Dï Õ~Òei§ÔOYKrí
+ó8KˆEOuåa~æ“kþ¿ÿkW°hOxçÕ%¿óßËüç¾�7àðIhJp†–´Å1›òˆ`—Ø´
+5ëº¤Y\AõíBQkPßP·Ž½òëxƒ;/~‰‡.8¥£‚
+«ƒcÞvuÉ[Þýv^ü•¯q\ï�x
+ƒR©ÒrÉI+˜Òf³EóƒéãÈ–5;60ƒ)¥*ãnð™$±áro9CNaÓÖyq&åyá|&”h¿¡4¡í3uç\ßþ–ÙN?5¦ÌY6¦´,N4¶ú½Å…ÎÇ–Ú jî\%Æ>YƒHm0Ì¶Æ£vŒ8ÉžÒO¢ë~öMÚ”6ÕH¿1&õ¹ŒÀáÄê´�Î§HpÃ›ÏµØˆZk#k 2r“Qu×«Ç1ÄîŽ®Û.jKÎ;†/lkî¸ì†u¹I.`�—�üê­g|e“P7jB˜Ï@»Wˆ.ã.™ZdFP¥
+ãªMÀyföx t.Cƒ–v¤›œtöc�z5é
+ÉQK
+Õ€†ì��¨Ã�jø\Î`Fl�¶h4|é°h´mdÝ@é
+óWlš�D|âY�œ-¢âhÛ–òÒ>›uqÍr©ìW¡>a¿º–œy­³FÈS3HÚee]õ3¶¨˜oÃN+¼:¼:Dæ�U‹zÇÊ]&Vï¢|ðÃ¸ò-…_ãÝ$
+Ú·{¸úÀ÷â÷?¿ü«¿È§~í3P@ùñ\â/ÿÅæZùÍÍÏS¸5¦×pzN*¨&-ï¾ìxÏ‡Ÿå{?¸GÔoM³VíóXûÊâÇ`Š6]
+…Ë>étƒ~ÜÀGG§í?+’ |Q°	ž_ýÌs¼x´†â
+Žø£¿ç1þ½?þŠúSptaìrÎHøh,d�hÒL8+Ù£�Ôþôâic‹1©(ÊÀÁígxêñOóÐ»?‚¨Ï{H>S$Ó­ù¾�|?÷KŸ§Ò{ˆÕ	
+k)¬EÅ§I€b4hfV%°ZÅú
+#ï®‰™^çÉÔÏ"Iþo¦iÆf\½rr@Ðl ˜ÖžëšÐrû7Æ�Æä¹1+};J­Èi ®L2úÔºÐžæmf+ß1HGvÞÛvà²5±oL¹�Î6Ÿ÷ïm‚�ô‚È‰ë4ÝVÊã`2Åz²úÜ;¤Ót37²²Ú›�pÃŠNÄ<ÆC†!wN�,£ -]íñÂa”®pJ_Ëvð§Ç\óQm^qL’öY)2ö›´Qð“1ÖûLÉð÷®¢vã‰ˆ|¶‚ñéÎ§Ñ=Æ”� Ú‹`-WTN†9ç#'ýä¬Ÿi6fÔåîšœŽ‚	P¸üÎ"çWä‚?BJ¼OSI_,KÇ¢H
+ÀM“ðñJá× Æf³Á;OÛ4i(UÎˆë&Ð6� ‚¯–DUÊEEÓl¸|õ>„*Í×îé'ƒåñ¹÷[ÝÏy‹ZÌÑ²¡å6ú0×úiïüið÷äF
+�#„%AKÔÜKü?ÿÒ_„FÀï± åÿžoáºÜ„ƒçñËH°’Èe´h¡\a’æ´+ÀÚ'GcsxÎi{¾å«Ã@R'Ù�V¬ö™v¡§ùÑ4ÓÛÄˆ¢[ðwþçÏ'¶a<xï‚û±iÃSHs;]}_ÅœÝ>°�×†"®3ýÕcZ"Vá­ÂY	,ˆ– ÷&såÒ‚gŸú-tsYÜŸ“ƒa»ÂyüfÃ‡¸Æ¼÷!þÉn¢—„‚†eÜ€(�sìI‹C(H-/B«-­ø~¦·N&ÀÙÄrH@¦ƒwD„ÅbÁ•+Wz_+ç.$<ÄPš¬8O’yZÑ;Ç^'2š‘At1¨fîýÜí.½ë<´ºÖÖ,CžÌw�5HFÖî�(nB×qyÍ&V!6S�L|‚­£ÓŽh³€Ü&Öæ6Û¨»YÞê<Îkr™ˆ~‘2b5õÄäýŒO®ýmÆ³ØSB—I":²‚»ŸnR`Ûò!Õ
+ã@,sÁß„Lµ5J¥£38›ÀSƒ¼KÆäfºÛŒ7íÜp-;,¯È³o¢"!"½=Ô`ÉœoÒÖ8éÀp—žkf£•gm¹ìµ’,~$�ô\ö<jŠ
+¥uÉ+¯aT“}vŒÃ
+RUÚ6=REé¨*ÁF´m¡�Fá:a×
+)*6mÌ÷«õ1ÕÞ%êÐP%�F6±Á·æ„Ë—¯¢!P,ikˆ™Ç§�½ È¹L*%€ËÓéÒ@Z#›þ-»/1Q�KS»vƒÛbÊèÃó>ÿ7¹ùøo¦
+ÓUxmøŽ�¼67@ÐKgÀåD½ó
+æ„±
+‰ûöÓ
+©ÁmòÃýZZ ²ƒc4_ Š£[$`f«5Á•¯¥µÕ\àï~ÔÑnnà‹	{˜wlÜšèh��—pºó
+^/%Þ’/–àúk¾,ç6ØÂóÌÍçyîé§xë{ïOý]Ñž;ÔXDîYÂ�ô]üËßüç˜^¢°†ÒÖD)iq,-R˜Q"’†EÕfx"Ÿp:uƒo™Œuæv9ûíª[3Ã{û{8çÒdÂ¦I,Ê<ç£t‰âÄá�gÓ¤Y7)ÓX<šg†K,}+hBJ«ÖeíA2·Ë.,_ŸéŽ6Í­‚£�…‘ý¼Ø„ŸV61m4¦ÕÌ°ß	;°ó�J~5Û™Ð�íuS5Ñ™(ÒÛn$'IÌÀÉô=ÃQ¤™"yDvï'ƒ-¾db¹0¢š3ïN÷³íå";„œL�umV²Ã¼‘Üfë¦ŠNÌ-gï¡¿–sÆWÈºÂx—ªxŸÏâ]Ú'�€w'½3’,ªÜhÄpw�Ì¦¿lŸÒU`Ip(#BE:™¢t.Ïf€ÐÍ1È�¸®T1Kªs1¡*Ë…§ªñ	ÄD
+—'ÏBCYT#¥sx36Mƒˆ£nŠª¢X.pUAeT,Y¯W\¹r_íQVX¨Kâ¢ûä<eˆúcZIÕº�÷PàqÒÒÚ×¨_ú‡H< ¸%Rm@/ç‡æÔSlîEŸÿ÷Ïxgqlˆ¡áá·+yJƒ°¤q‘ÖÕsñ ‹¶¬J¬/[â´Ì©^7ÇÄ�ËëåÅ9;(‰f
+ìÕ*e)6MKá»
+ÀðÞh›;Aqñ^î¡Uþ/Ç”VR„•%�3Lb¯&J.³Cqk±DEñ²¡Z^â…§Ÿâ­ïy,ßË!€DWÒÒ�Gßýï|ø*OSx£ ¦OôŽÊ–¤ ’l¶;'iEÛµÞ;¯+`4U±o‰v´õ²(Ùß¿Dˆ3£
+!	ÞÄ1šPçö\ nZª²Èâ°¼ˆQÚûŒ¼ÏL¬3üì’²�Ÿ;euNv¢£w€¥›1Þ¬™¶§†Yâ3ñÛÈR^eÚÚ³‘UˆÙ|³œ6Ê©tØÑ{Ò)¨>‡_º�‡L	íÛ(¶fÉê]'ï)ÏêŸG²ËdxÖ$@ŒÛDc�ÛóX¶ÚÂgz¨	SÍøL<¸³•5btMúí¤”OÚÓój W½Ë`êè|ÑS@Nóƒ]�3áÓÈ4×<=ÿ¾»ö"#9‡e‹Á²:½sô�V'¸œÌ›UKáË"Ñ=ÁEMâ*Íã8‹aØI)P,ö*ÏÞÒ³¬\V�ƒ…ˆä¡<”F7”Ë½<Ö¶IjÇl=Ñ6-q?²�*Ï9V«
+W¯\!Cý%l!È¦ÁY™yâBt‰©ál”"Hî1ÏÆ¾™kRö)ðˆî!æð~Å^y‡ÍÍBsãQ1œ[ãi�Xå2}�„}|û0¥Õ”÷}�¥®SUR)Ïß„uQ«´‚xÐçE›D™ÄËƒ—°�GºßfUïû s,ò™ºÉùls"YMmÉüÏDhÂh*Cöýª¸‡khq	tÍÂ	>
+>*h¤õkÌ×©M˜Á]ç"ÎU41Uw¦¬¥Ä¸g)¾ôqÝâöÊ´±ezYdÅ«µ<xy�øè»xîÿ*‹½eöJb¬R#Îbn#¥�`ž‚B<-FkŽ6c‰m–´K’'ö"9£béÞU‹‚Ë—öñâXÇ:c
+éþmš†óïGYødõnÊ¢*hÚrå¥£B»æQÌü{çl°·È-Íô,¦#©@Õ,ðµÞú>“ƒgÞ_ô–ØXH7Ÿ³mAs½†�g¯ÛCÞiy3šgžg€èxÏ±Ý©¿ŒzðÒz×ØØ³'ó…J›cžMáœM4Ìè²6•´%Ü(¬ö’Œù ¬]Áck†üØéW¶Ôç:cÆMð&™^
+7VØO^›éä£ª`+q�>kJFþhùÄÍI¶`*2m:]Ÿ§itlf¸GÁBb7jL„›nÆ}ÏFS:unOAs‰Îê¨r_LÛ¬b”ì3åÓ(¼g¯,¸RU,*OUfKö@¬�ÉeS¦P‰†ë\‰_^bÝF6­àË
+‡£
+�+û—i›š«Wî¡®[öööQ¹ÌÚ±¨qu�X@X‹
+Þµ¸�ÚfÉ(Î'"§øl —«'ÝÃEŸü´Ü1Zâ5Ô.cª,TØ“cúYT#‰þ
+CÜ�4‘±x€ÛÒ¸6eZ«Í½´{Ú[Í>…îËÄ¼qÔ)ÑÇDî`=­�X¦�®I8Ékx—ÔØ*ŠJÌ›Œda�«h�×PrŒ×’¨%¡›¢&®IC¬Ò°$NpnAë�ˆËe0|»�¹†fÑà£°$P‹Gµ@´àRµ$Ô�R@µ¤,®rR¸äô¬¾åñ'¿À‹O•‡Þÿ­D’ã§'Pµ+\k É/ë§¾÷ƒ<ÿå¯òk_z†°�Ê¨F
+Ûà‰",ÕÎSã©¥bCAMAëÓ,Í£4)bÀ…€Ó”ˆˆvsoòÈ�4›Àþ¥=‚F|6ÊS3ÖM=�-S#ÎTzOÞ'Ÿ¬ž¥Ã¬iÍÕsï}eò ™ê™'wJ'Š¤€#£9Ù½�¹ô8H··iFü4o jÚNñ�!¯Ö¹ ¤KÎ˜Ê6ší>Tk‡Ac�™Ø”Õ”­R:°Ø²o£`“åû Aˆ‚LD€Œ¤²kÉAÙm0¸œÑù”JÛŽ“Ð~Bgªh}à7ºYs;“!ŒëV,•	7ÐÉm68jN!îf#
+ÕÐ@�±aÍ;—Çe¤ª¸ðó—´¨BÄbLø7ä¡�2(ãÕFíµÄôÂ	’&©�E
+EiS:*oâ·y¾Aå=Eé(¥("_°(|™2«|*BÄ;£(–DÝ€¸²o\Y\fŸ
+_í¡YT…K}ääV)DSBPÄU´aðŒI•¯
+sÑÇÒ;Šã9âÚÛn.÷ìÎtœ»í¨Z#Šá‚ãCü?{‰°¡æ¿ùï¾Êþâøð˜=…ÞL*ZÉ`¶–‰**1"µÄ¢Îý„‚×zŠàÙƒ¤‡Ñ‡¶Ñuô,Kê(°Jêñ{-€"MxG!�B
+uÚo�ªÍæ'eUPÇcœ[à%™.6±ao¹áË_ú$¾ï�ˆø4«>'UÞ•=€x}Ïñ?ü=üÖ—þÄvƒcEI…ÅK?¥z¤Vˆ	{‘4=Æ$)›+SJ”"{¨ÉLkTøD±Y…
+‹å‚6¶mX”%«zCUø/8ÙÔé¹%íPJ„h¹Õ•ÞWŸ¬á&R4KÃí†
+&«ö¢HïÕåGXFÔü›ô6®ÛÔL'jêðÕ¾@çä:ŸéšØV;ÌÆÕJþ·ž	æF?¿Ïàÿÿäýy´mY^×‰~~³Ykï}úsû{£ÉˆÈŒÌŒlÈ–&!i,@PÁ†FA¥e©£ª|¥ØT½ç«ñÊaYõÞpøìÖSEET@:I û.23"£�ÛßÓîn­5»÷Çœkí}nd"eÑä(Ï‘yâÆ9ûœ½÷œ¿æûý|×¾FJÃÏ´¯Í*€ñ>4diz—sÎð)§D‰K.‡U?²écgEåÜYe‡È€äg@Ò«I\X¾2!ëWè>Î\$ë3¹´Fæ=;¼ßŸsæý4,úW2^u¿©q-çü,5àìÈ°ŽŠkÙç±$&EéJtÞÓ…6£uYœç÷‘¨3KÄã¥ß–ôªÜ¢^‹k]t,…�"'±ŠÂÄä	$œ´Ë€o#1‚/äLmò—ÕM¤.�ê¼�1bPzM†fA#J¨ì„˜v´*¿}•ÒÔ£
+m-®ëˆ12ªk–Ë9ã�
+–Ë%MÓ1ª/àƒÍ	„Éç1Ð™xÏµ±ÿZÅôëp"ãÛ†ßùÛÞÎ_ý;âètÌH]ä§~é.ÿã_ýßûm±±qŒŸ:Äi‚ñ$ëQQ£‹");²QuÝ•CË4Ÿ«ŠŒ9é1ª˜”ÄäŒòT¡c•%˜åØ‹ÊÐ8¡oâ–K¢ŠhÛ`›€N#P›{ûž—n¾Ÿ;·ÞÊ¥+oÈL²—CôZŽðÚG/ò•ïþBþÍÏ¿£N*’ª²g@d@�ô©@JEWZ¨Ä(ªÐTrùõ3?áI!äE5k4­o3�º@èB‘D¶ÎauÎK1RiMŒ=�Vs@�:“Û�†Êº'û–˜WÝëòûCCRíýËi!¡¢ÎÞ€�¹Ua)euLÉÄ0èø/ö·ÈÚ|]Ö|‰õÌ¼Þ-.åÊL}M9‡†ø—ÎÈXÅá~)ò0‰y¥§Ä‡°Ú]¨²ôÕ-º,ßÓ0Êê93ÕîQ2ù°|yÈÙ±\â¬$G>ÓØ÷lq–Îd�È
+Árß%rÿ%$C–I^SÄâ™Ì©UVù}"‡ûNÿºéÃ¥2á8œyMõbe4Æšü—Ñƒò*§æË#(Ÿ£DðE|1ŒåÈÉ£ÃK§WM¦>°,bzLuðÙöÞú�w	Bè|‘ËA4‚K�àbyqÖTV”ÃŠ™ßyÁè”‘!Z�èÊá”Ú¤®+´²4‹9£ñ8ÏèRtLÆr7±AÅPÒÊÂ+ªùu=Hóû*²W¿Ì7~ù%þÚ�¾Ì8nsw6æ/ýÍçù¥÷Îù3ôQÞòøUìxAHwña†
+UÎI’)j"ª Z„Ïå�Þ©®
+:Ÿ¤Ja`‰±ÂÇ„—
+?~€ ›™Óƒ'HB¥šegA4¸î.ãJšŒI¡#©Û5çöKŸàò•7 ¢dS”Ïh®q¢_õî·ðìóÏñä§ŸÇŽ¶ñvÄ–4¼|Àô&S•ÀHÀ ²/#€�;ThQ�äHÑùv6ZiÉÑÍ¯\ÀÇP\åùÈ¬¬’û*¹íZÅ¥ŽðtÁaµÍc‚ØWÖÅï�uìùP.†­L_•¬n8àÒ06è“åXÃ’ètvt$e¿C,ýN/g·qÀ�SÞô—JÁÖG{9 ²±Qå‹±¼†¼E‘²ä~V™á@«•¬öl|bñ™ô¹.RæñqsÐK~½'SFä«÷þ�ðxÿp¦û9«ÌJk—qº¿y—Ïº9ƒ%¼.ýEzß2}=¯~=Ï'{¨†•Îé�Ö6å«Ë#}FÅÛú(kHìÿ*ˆuD¡Œ*—‡ÅVcJónI2LÚçKE—ýˆR¬˜Š$>‹£$#bQº­5F‰A‹GWä‘’.¾—ÉÞb—ˆ&±.ym‡QeA*™¨›‘
+m5fcDˆž´l1õ8»C@‚"ø*æUFÀOON˜LÆŒÇùAiû01NL1)¸)®Ü§gD†¯ÄoþÚ¥)±‘øÓäqîj~ðç_ÀpŽÄ~âC|ü�ðæ×_à»¿ó	>ÿ-çÙ�Ë=È²d2hRP9sÄ	°$ÃÃ>‡;�²Ù°5Ji’×ˆª‘ä9:Õü÷å}\?ÈŠ¨(Y6+:+‰|ãù®o~Œ¯ýÊMd¹Ì¼ÒX+(uÊ¤ŠÜ}ùIš×2ÚÙÇ‡€6¶$®‘>D®îÕ|ó×½‹¿ý÷®s8;*$çQ>D¬Å9�V&�Û
+$ Ñù‘¡£ÃD‡Žu“òžK2u¹œsõêƒaÕÏÈV4]›/‰†y½ÑRfö‰”òûÂ–
+}D++Y;å|™¤]žJõÄÓ’3¢K(·rN>då^�QbÌ[ˆi‘´*F¿|¨©²&­ø"gÕV™ŠK‰hêUiÞ™!3ETZ	«ü3¢ÖF-=1žé@"Ù§�÷;ªTâi�±$“¿öø
+ 0b
+=6™Lè+èaè�Ö¤kß³GµÇty¿±ïþº¿#Š¯Pµ­Ã:‡V/ïM÷«ºÖ–ö½ì©°Ñ�œ•qÝ'¥½ßÜ¸nŒCæÇ
+U’EY| táZ‹¶™ïÖ£^’Å““÷%JiD¹,\è4"9I1(ŸÃ§B( Æ¸–ÙÆZKeVç
+~ã…e®ßF\çP8F•”n#;ÖÛ®cQn--B·lp]‡¶–�Ñ.mÛQ�,ƒsžH õ©í¨äpÜ£ªb\�¨mM¥ÍÉ”xå2>m€^-å:ûRŠµÏn–mýNã~ùÙ¯Å5ÒÜáÚÎ’ÿå/|óïOüØ{^&¢Q·šÈíÞåß~ð§ù–/˜ÿæ{ÞÄ#WGDîÐÅŒÌÑÊ!AALÙ<¥"Ÿó²^•®~¥!EF[#þåÝà‡ÞóR®BÖ¬˜ë‡ÿâoÎùªw)£4ÅêÈÒw$ñhå˜˜Ž;wžåÆ‹ŸàÑ7}1¢!”ÑgÞTº¨FÞüê‡øÖoø­üãþQŽ|K3ö#¸¼†W•Z�Â’d,{9ø4+…Så=BÈy1;zcpX�˜Ï¦\<ÐZ£üÊ¼¥$Ç6§Ak”ªX´-Þjk‡‚Öfà
+
+»�^ÒÙ«ˆRV›yŸˆ>¡D#&aD¯ª¿”÷t©t÷Qå²HSŸB¿ŒÃ¬D÷yãeºÕÉà!X9ÑËoãpÒ©¤2þ.é¦,X!Q™=F�Ç)ÀªÕ$ž9dÏž)Ç»Ê:þ£°–Ê˜ªG‹ÇRh¹(µöl@RÌÃQkKñ5¼É*}QŠœ{m(+°¬qDÎÀ-÷õ&÷Í‘úíL÷ï“¯™Ø9»èïÕMiÈ[Ig¿oú–Ît_ç“úÌ�UÛGÅBöÕùQÅù¯´Fk3x@„DŠ%ÒË�OO‘Ëº4Ø)—}J!äÝHñ<Å”01†aG¤F•ÁCÙÌ5ô‰VEŒ’¼q\ÆáÅ¢ˆòËlºAû„1)ãÜƒÆêŠe³@ª‹eKãçT¶&øˆÙÙe¹ðTJaÆc‚ó(¹ÈÆä~ñ‰aQ˜ÒZÔåoäG	WiîÎØ¾øIþßy—ß÷ÑGøý•�ðñ§Žò’Tm¢ô˜úÓ/ò¾÷Þà­¯ßá{¿ëyÛ›/àº—IÝ*Ý"a�6Q#BRŸ³wG,˜(9Â8‘Á1VbÓ�ñÀÕ,è‹µg v
+Ò%„ºJ-à•Ó�RD'ÍH4»ãÈóÿ9^õÚ7R™ÞT˜^¹À,¦/zç›˜ÍNøÇÿògA’©¡%‰É#ÉêcY\öz•Õ¥¨J\21gÐ(Õ†k\Å9—= ÁbÂ¿‚}
+Cu*þ…¦k™Œê¬èS¹S¡?x×G­ƒD·TàRÈ_Ãy0ªŒŠLS•…p,¼­¨|ö“ä}KÌŠ˜¤£‹!¡µÊÏMHtQ!‘$–}Àªô–u§vOîÇÒ'1öJ°úexkô®ùÈPýÌŽáyTýê¥x]Š.­ä„+ÉÕ¯ê»¨pÁeÙµÑ+yŒgÇ;i%…=³/¹’4|ß4(ÓVæ>ðpÈüè³VÖðëëñ	ÑË¬)×zêÁ}NôûÏþtÖtyÀŠ¬¹KÒg26ÊZ—Õ/Úã*=¥@,i­™`Š)ZòïVéÒ‘¬ÒeQªÄ9ôÏ¹_/µF)�(Wþ¿"xÎçË#äàÁDÄ´‹Þj–:ÏÆ´ê0z„’|›…P&QYCm+¨jbt(2¥È]JøÎÑž3×loŽq!Ñ:XŽî�±ˆ8F£	;Û;Äà3öšD³˜³ñÎ×T›	3·ÒÒGA°ð«t£ÿÚ^"†ªÞ¢s·Ùâ„¯{Ë&ïþk_ÎßþûOó?þ·�f¹ÈHv¸½ôüÈûîòï>ð/ø–oz#à÷¼–‡Ïï`ªSÒâ6GŒJ�ÒçâG"û{I¨�0FpÍœq½Åòèˆßú×øË~Ÿ¿ñw>�
+†6EVqó¨ÁwB¢FX¢”GÅ„˜.¿ÁB…Ä[6TÇ­ÃOrxëã½ŸgÜë�cË^¤D_ù¥ïbîÿüÇ
+mG8ïsŠ]éRIìÁ‰iík¥bœ+K›7#Díq]ËÆdÂC>€5†ÖuÙ ¨"]Šˆèa¡Þè‰¬¼2ZÑúlœ�¾€+Ë›µ¶5M2ä…kYUƒ1E||ˆTR:)›Ë’.7„ë–H_)ÙØ*%Ä—A”–œ4sš¥±	Iº„[)µš‰h­Ö–Ï=96¿ÇBñÇ¤˜Î$[É@ î3Êc_­Æ2ChsêÍå‚è»‰~ìÕãQTž*´mÃr±Ì<¼©¬%ÕõªÕˆ‰¡—¯¢(k»á>Õñ�}“zKŸwËãS¬6{þØªûX]…q¸hÏ^ë’[9ã$ïCZ†Ÿ{(BVP,‘5§Égäš­!q†ïÏÄÜöÝoìÇ¿ëÐ­AR)CáŠœ¯òc*ûºþ"W¢ð’/Ñq}‡¢Á{P�<J"f>o°µÍ³ë”W¶æË%]ç!äd<²lŒj*““Qš ¹+qQðš®Å,»w›Û»(epmƒóß6cÙoÑ5-*DÆ“
+FuÍhTá]‡÷ì&1¶ÄÄ�d†í7úI•Çù%Úij7ÁÌ<WÕöîòÇÿð»ø'?yÄ_þ;æ“//Y$ƒopÐ-ùkÿôcüãõ$¿ëkãÃ#¼ù‘M’;@X¾b¾ú¹ôÑSdúƒ,ŠÊÆW�HnI¥…¾ëkG|ë—9¦ÛdId±sŽßþíÿ„§ž?A£³�ÀÌË¤ÀçY>	›$Ùž4¼ðì‡Ùºú®õì·áÔ�){#bŒÅ_÷UïBYÃÿ«Ÿ@°£p’åØï8kÖìÇq�»–7NÊÝããSv':—‚B†&cX4Íä£•°ì:ŒÉ‡}èßÔ!åHÛ…ŽŠ±¨§ÔªÆìåú…Y(àRQh%h¥ó8IEŒ$‚†PPÝYB¹ÊUÏ¾ÔIåñ²ax¼±ÇÅH*HõÕ2Ü”ÝQ6(k&¶’½)c¶ÞñŸÒ�²HZóf¬�Žú+ÜÇ|hërˆe¡„ÏV�”qI±t$Š<i–‹Üy¤D=3I«Kfè‚ÒZÖI’³†ÂûõÃ˜(�YL$µŠ½º,%gªýÁË±~YÈÊÒ«×!’gŒ‡ÝxõÒ¿®×iÂ÷…«É+¤¦gP#¬»Öc‰·-cD•ô¼Šœ©Ê¬(e+-J†Š¨ÞKRö#º\"ÁCÈÝ¡™Ï;*©F–º²m1FãbGçœóH2ø¤iCË¢é0ZaµF›•.°œw4­•ò<79DmÐ.—H‚ÅrF×:Æ›ÔÕ(G‰Öu]el¼s¤‘Í™ÔnÉHŸ£K›x}œå¤~’¥�ÚÅMïeHgÖZC[ûku6Dç±z„tžqÌaL¸$Í™(Ï·|í_ò…_ÆŸÿëÏòþ�ðéçOJÅVsâëŸ=ÍÏüÔóüÉïxßú
+O Ó3hŽÐP1‚UT†0ªHY\þæ\0yÊ¬ñ¢PÐÉà}>À±*Ë^cCíî²-w@oÑÖ³d"	XÐ±héPx4
+Cæd…ò>ö¾Å(Ëí>�‹ç±ZÊÅº&&•¬oG•
++	Ö¾æK?Ÿ½Ý~ðŸÿ;®Qï\¤ˆbÚæÂFŠM
+ƒÎ™ò1ûAbÉ¾í:‡±šzc5]Ó®-ósºR*çIÇ|x¥èBÇ¨Êù7Yv[¢CSac•ùž.oÎõ§³ŸaS_@�:@¥r‘­Ô(¯h"x‹L¸²‹�Bµš¹8ïW~‰ƒgJ$Çûä¦C•ñ¦¹%Sy4Wªç3*?Æ„‘üü÷‰–±?Ë^!ßjp‚ç)M¿pU+§t¯.‹™ŸçKG¢D°uM=a¬¡Y¶ywB‰zí÷H«Q�”ƒül¦‰:Oì)QV¾›¾•!¸)£÷EòÒ$•e·œ;ç”¬-¹ûÙ<›‘~¿Z4ÉYUVïÅµ"?öðÇ¡ÌXË€_Ç©ôj«ÿÒ#`Ö1úq
+ŽÙ_Xr_jçJPP._�c/ú9m*/–4`S48�h�x�”Å½Ù£`¬•Ñ§:×à|GŒBe
+ZBÊ¬yç<Krl«�‘¶
+,ž¶Ís�í¥æâÞã:š&‹B}¢ª*ºfNe5.¢ËÒhÚ”P§Ö²¿ûzNÍã´êg¨“Cùk¤hˆœJ!)‹¤uòrf{ýZ.Ò«¤‘Ö‚š€jIæ„¨Iò<POOxdìø;ö2‡ÍCüÀ?¹Ç_û»Ÿà…iKð#´…OŸ:þØÿö^>ú‚ãÏÿ©×a»)#’oÜ$Rá�#©ŽŠ„ucBøMX•Ø*¼ÒíÑaŒD›³=pˆªPÉ‘BMt ‹
+ãî{×AdÎ•r"¤DM#3âH3ïÑèÅŒ?ú3(¿Ô=I>ù\�÷T�_¥©¾ì-¯åâÆ?ò¯’'_¼‡)B=a*#¢­Ñ4HJ©ˆA1òë…*9Gg.DH[MxÓß„�>¿K'¼ìZ$I>”=E×µ«i�c2š”9r íò(Ê;	>ã‹•Š&
+£œþ	$\h_v
+Zç‘“(¬Q9b49\ëz4ÊèR¹'{«%í´Õs”ÊÁé<±Ð„cÈ¿Ë#ZiL‘qæÃK•QgÇ&¢Älæ+1Ã~C¦t n¾tI=ÝÕ§ìYpÃü>hJ[¬�Ô£Zm^N³6“Ü…
+&Â´Úa¬ê± 6Vz©ì›)æÂbðì�‡ù^ƒW¤ß?e]ÁZêáš›>­#{ŸÍ NèÇ\k}È}l°þ½j*­2Lú¯Ó#êãZ|ÿ}Vc«8\æ1¤UìrPeDÊž&/ÙEdÃ%«®^™¥UZÆ$éSuõ¬-Ñ1&K«SÄ\½v™äº<r
+Žå2çY·Î}èä²¦<ÊnÄ…@ãóŸ]t�ÙÂÓ¹Àbar—“,“-|ôÌ-Öj´ÎÆjl9™±tcË†íí]‚3CÄët}žf	•N¤8Gé�û2	þc´_›g—ˆYL{?ÿ6Å(h0Ñ€h�Ø6ßó»¯òÕ_ò:þ×¿û,¿ðäó|ò…†Ê
+uó·ÿù‡xðÚ˜?ò{Î£”Cµ3D%:Igë†Ïû7Í
+’Ö^ýN®Ž³gmQÚg4Ü­ªJ½'%ÿZ§0ÒDYRŒL*Ë‹/ÝÆw
+¡°¦²TtH¼è/"Dyýk®²·ÿ;ùg?ùK¼÷©—™ÏÙØT4Áe¼KRŸ˜C,�YµÛ»y3Ezv2åu¯}<ï9B -a<=…wÙ9¬5±¯�Òù )Æ?k-‚Cañ²Y1ÄUŠ[o`“ÌGV¢‡ƒÀÇ@ãò›Þë”ÝÃÒä!Cïb–èj2FÉ*Ô!7iÍŒ¹~È%\ÌÔ2­òR&ÆH	]ÄZ!ê0|½^ý•B1ø¥Xä¶¹ËÈäí<Š	¥Ô}€W‰àó¡÷°äç?¤,Hp±xPt©±ƒ"ù:ÇÏ¦SïPUÖ667©G5É`JW‘±âªŸA¬e‘0ˆX9¨¤ÈªR_ÜkÂVQºgö­²ì”†�K¿ûYÏ¤Oñ~÷x:“íÞwa…H¦÷4ÿ~Œ˜âªóAÊeR”yÃYWª¬B!(tðÄX�ÈJjÝïzÔú˜,­!`zVYÉeÒÉ�zóŠ($d•1¨1›Dgr|g+øÆ½PI…e¼¶’©òb%élÐj[�÷	VKï 8YxªiËé¬e4Ù`1oÙÙÞ`wg'ï:|Çh<�(t!°t©U˜¦AW5[û×˜½¼‰È)"ËÜR­'ª‘Öòyý>:ãp: ¢Ê’Ñ˜ÿÒI!I£¢·¾�XÎ®óªýcþê_xŸ¼ýõï½—üg/²HQ5åÿû‹ü¶ßò;x`{ÊD:´)FÉ^…”t´øMÜ¤Ëê¯ÿ—ö+ü¼ªÀ‡\{ÞdF×4Ë´ÏBà”
+b¦8àSé&ïã©¦Ò`*£èÏ¥ý
+¾ó›¿‚7~êe~ð_ÿ,O]†Ñx‹S=Fê­b8Ëm:®8çƒ 1«•ŒŠŒ*ÃÕËçIø,)‡OÛ¹ì8·š”²áP+…XS^÷H—²[:„’>§ iEŠû±‘ËÐ~-Ûp]®(ûƒ7�×¢”ZÍåã
+©R	Uªüò/Is‰}6øæ=F(3ò^Lì—ýàñè’ebD•8]0Š¿Ìí
+B¥h…‹)3”€"Aõ¹©œ
+­û9{/ð™`QvPyw ‘�ÕBÁ{æ''œ¦„­*vv÷ÙØÞÄ&[º·|yV€XÃ®C­í„W¤
+œAÌ¨5x|Ž‹•3£°Aø;x5}zÉº
++ÞgB\Ï…OÅ˜; e�“%ä@-Yy\z4MJ}líªkË€Ï´ÖE¬ŒœÙ`Ú›^W�hùfË�»ß'³–Þ8ŒÓR–V§”_ÃJER‰/À{$F”Ö¹øšÜÍ²C¥°:±UÔhDR9¾:ð-Áä¯(‚hæøEd¶hèÚ€ ©�BÆ­Ñyæó9û{{xHMÛ±Xh´Žlíì€wÄMëqÁ³·ÙÝÛA´b>›s~ïQN^Ü¥ósÆ²Èò1mÖîßô²%ˆ¢Š“XeŽUR=éò(žÐ‚©k&,ðjÆüðyüÜùÏ¼åáýè
+¼XBâÿ¡çøþÿúabÓB3'j))�kDÂoj²’,Èý"_>[>è+² Äƒ¸âÑåíšŠILH¡CM#¹”ÖÊäåô*ùzøŠ¡Ì‚�@U+|×`�á]¯€+ç¿žŸú¥ð£ÿþ=x{çags�è#>ú8KÅšß(ÓãCyàUe™7m©¾ÛJ)LqÈ‹ªÊ2ƒ!&Oh%´)"ÑŽàX¸W}u¬å>K�dòqŽÊMÃ˜®çAIò¹Z,$UÝÿó°G)#°>»ì­µØ*–Mƒs‘�|	©\áüŠ˜Bî |(¹)ygSi�Ñ9¬Ë¨,NècQS9¬JN]ô«<y�<)!@ë#UY¢k«¨Tt1�9{GHRY¶[om°wñ³é”Ùé<Î;‚¹Šª˜$Éü±þžˆ%·àïS\ÏY¥¬‡ae"@6iÆ�ŸÖr\Vç>ëe‹+T¼ëYD«®#*ÖL¹«¥¾Ä¢tLùµ‹ã¿ÿ~½i/PZ{€¤3)„1äÇmûqfìeç!ÿìEŒÒ“¸b*—g¿ÏIk“Uú»�•�I	Ië¼L9ŸÝ\ùÁgðÝÞÎ„½�Šq¥�HJ‘dÉ},èH�lV9ž&ÚÎ3o•1ŒLÅÎ¦¥RÂöxkµMØÑ„Î×tíQ‚oxÑZ3ÙØÅKë=1´¤ijkI—"Uâº#F²$¦~*sãòÒÒ`Ð¡´¾)f7¹4ÝäxXµ‰w¹ï×)2ŽX´Xü¾¯{
+?ð£/¢­Âµð3ï}†ï¸u•Wme™#R²U~3š�”Îˆ¤(mHÑçVZË}&ÃÈgOXXû£Âàüfà”œ(©éBÂ9ÇCîqéâÄ®°Óìgìw™5%ÉCh��jÁ9:¿Å·~í—ò–·¼�õ©»üû<G»ôØÚr‚REe•^n1ãÍ¯ÿBÌ|+«uV^Å€‰‘­ðÁåwJ(2Ô/ÆlJìÚfµw(ÿBþ=®TþÂZmYpô ”îÛ‚¢bêÑyÙBÊ»¥’ÛžÖv«ç#ûO„HŒÙ„();ùÛÖ“G[
+&{t©<µRC¦OðùR"Pƒèì`VCÂaYüG ˆ
+b¹2­pÓb‰ZIX�=EZt6ªDôBH�ÁÇh4õdÂ¹‹è\Çäø„Ñx‚®*B¤Ä=äK"A	&Ê0VŒe§{_[ÊÊ6¥úqP*#ÁìJÿ"Åk¦ÖòÇSß•)|j
+?šVT[(1¯k™(g„„}¾øê€Nju‘õ}LˆqmO’Ö²AúLA—¬�¹£ôø‘ˆžv¹Ä{OU×XS
+æB"¢*dº:”Š„$™S¦†Ùtq²³’;¯å¸Ð¤Ó
+Ãbî-	]Ëx¤©4lŽ5µ�qˆh‚2ÄTáT~�’J<[ ËÁ:Î#J16`k˜XÍÖFÅæ¤ÂXËb¹`³ªÁTà—T•f{’½&!Ì°ªfsw�j¼År1¥2–¶u8ÙGo½šööóÔiŽÑYƒ/"kc€˜[ù_iŽòv©,íU‘|Îº�ÒòmKMžè‚QÞD:O�6¡k	qÎë/=Ä›®îòÑÛÇàCÏÍ¹~;ðØy�j„Ê˜üæ“Dø
+B�DÓ5"Œ5†”çBVÉšs7>ë/ù¾"{hÏCÊ(”%E"¸ é|žïVÖÂ‚»·¯sáÚ£ïÐ¦zEWÓÏ·•äÐ±>“ÉçqÓ›¸ÀtïÏÜ…O>ù•ÑÄbŒS!”ÿ^eY¹DÞö–7ÑvÝ¨ë³¬1D™·K¬6¤˜ß pÁ
+ª¡`L´REÙ“†Ju8Lzyo™³+£ÑZ#Þ
+ºKµ–AÞÇäÆË¡©V?»Z!AúE·–Hç#¤HÍ²¡ëº"k.‘¦J$çÉc�¢ê‰Å|éC>dr–M.&´*[ç!¿#»Æû¥®ÉdæØ‘’< Fƒµ¹›sŽ!OEKÄ©¶ÒåBÓ
+Œ!¦lXî¬£iZ–�G™€.Ã¦P¤|Qƒ1yÁžQJå¢.‡¥è•ƒ<«±âJX0¼þû]Švz’²°A”.j72MB‹©?­<4EuÓýþu9“N˜úº\C*gsÙYåÙÇ!Í†.õé~¯-ˆÑHçÍ¼Ét„ª¦
+E!"âs‘e$w³)®m}-Åz§’†sBTV4ª‰:¦ió-k#´]àdéˆÚ0ÁèüéB`Ùyš¦%†­mpÌ;Gçcž‘¦˜_<*�QˆÕˆ2ù6ÔšJib·d´¹CçÚ¶ÁVIi”±tn‰��ýsWhš%)	Íro®Ã>QãBGÒkIlòëâ½ïÃ§[�ŽžXibÛ`Ìˆ„%EKJ†(
+QK¢
+Dª<óö›Y6Ê’öÇ|Õ—¼�üàOaEÐ)W1Z$�¡&EMT¹©�Ê!¿nuï=Æè3‚Áól=Æˆµ¸û¯‹_Ý
+=`.D“”!$ƒO
+K­W8oè¼¦ió~avr‡Ÿÿ¹Ÿà¾ù÷#ŸÁl™8Ê“8ç#IYÄ
+�óüôG^ä'Ÿ�spoJ]�‰¾#©ŒbI¾eÃ‚kZRrìnM¸öÀU|(„Z:Ÿ“D\èÐJ˜.æ„!bŒÎÝ‡.¥kyÉ¼fL$æ²šS¯˜Mù*½²ôÎæÃÌœR%ô"©|¸û˜p'�ä±™6RDùÐ±&_
+�ïñ~µ –l£—ƒ–±Kd]ÚçtDÀE]Jk¹ÊUW$•ÔF%yt%J
+Š&Ç®ªr¹VÙSP\êRÆqR¶Ï:eŒ‹¨œ9á—KŽïÞãÆ/¢�!t[�©l…6vHœLE?ûesžÇÿeÙO)ÎúDúã5ÙqVœõÄÙü³ö]y’ÞB(½÷®¼/ã ¤.Õ¯1{Œ¾œ‰…MgŽeµŠÈÌ^™ò{dÄë¨})¯•$$•ÍH†XÕ¸É˜ñrŒkÝÊTXÆ´1äÎ-Æ,WýL�‚ü)“éThÁy’¾Š!�¢tUQ¯ÍŒCÌ�ÃSêJ!fÄÁÜqæl6°»=fR+TÊ�ÄÎw´MCç;‰eLŽ¶
+¸6û£0J±”@bIkªÑi6·¶2éT�XÍé<‚ŠHÛ°¿¿"Ìç3RT„(/¸xñ�Ü|ñ=táµNC"}8ÏoÀG#ç1Ûû,ç§„å;1Ðu¹¡K&Ç×Šº|�Hî"´N:0‘e·àú­[Å¨—p)¿é\3Ã†€��Q‘¤19túõw«c†i¿uÉ˜qƒ±±uÚ¨‹Z\Ò=
+ð?æh�Yà“ÁEC4­7´:gpÉÐCãzË‚gž~’'?òÞø¶wß7&+F©ÒJçÓ¡¨‚jC›`î=?÷þgyß'o7.Q©Q�Z¦ÂŒJT•¡™Ÿb”ÐÌNy÷¾5‡©_ÃÚá	!{/:—e‹K—ÿÌñ|É¨2Ô£
+	‰ÚØUb\bðW¬»½¾>¿†‰y\”ß¡|>Ã³ú¥Çºç�DJ9`Êù/-¹Z×Ò/Þ×TŠ"á,ù&;(uèˆàCÙ}ô™½B¨ø:|ZUÁ::"	uYêç`–Žæñ®ê!~¢†ÃVãŸQ™É}ö}Ä¸b–e‹‡*‚‰½‘;àÅ¼¡m´±³žÍíêºB´Ê�JÊ‡vï/‰Ò›O¾¥ î×)ºNlºBY³f#]oˆ9;–ŠÜ”Ã399¢¡R²FÞ=c:Lim¿¹BšHê©`	_ðóF)èE1e|«Ç­D²5#©Á‡Swcm†ž"Îlr•’/Ð�(™8*‹.úÇ9£òJ’á¤ù…‘˜.•Œ`nNÙÜ¬¨6‹©§;ŠŒOöç6'šJJÆGòHêð±cî³.0Ÿ;‚óP´îÝÜ±L5LÍ£[j“E#˜Þçà)5ÞbÞvˆ¶Lgs&#FË%›“	‹Ù”ÝýKÔuMç2¹ÆxëÂÉ³Ä¸$’©œ½tï×—èžoÛÎ¼Žÿåï¿È…ÍÄ7~ÍãX9 ÅCbhQ´Y‰%Ý/…M ¨@Ðs¬Y êÀ³/Üâß¾çIÐŠ¶…ªZR[
+Ë²pÓ:?©eFœ’ù,uÿgLT>ã~½ÏÛúÙMƒZã›€/Ëàþ«‡àIÁ
+írŠq0s}–UùgkA)“
+º t^høhè¼¢	‰ÖAHŠDyb|à¿Ìãoü<lµQ–ïií)/è50³Rðì‡¼÷S÷8é4vû*±SUARø�è$ :×b5ŒjËÏÞâK¾ø{H$š’:è\†é¼CIvžÇ´¶hr[Ó5T�gsR#“ºd.¥�s„Ôåå{_‘®ÆbÊ.ïÐk÷¥€å²x…YåC×ƒŸR2øR¾�òh¢�W•ï©§Y§§TÖdÓ ]Þ+Ü¸ÿ}ëþëøˆ+q¦RÔ^Ä,û5F^Z ùˆ•��å>s!› »Î—÷¬"$¡ë"MWŒ„Åj"èjƒÝóWØ½0ãøð°øÎ':—ÐC®Ifš
+8²~†@ð9ð(&Uvd„L*£Ÿ4d’’ÖÔó²Ê’\÷´£©þâHIp1!HyËÅx_Ö|Jg�©_”Çx&È+J^X“zÓfqyÅ•(•é	J¡•ÉûïÞ{¦''Ü½ƒR[UlîlÓó9û¥|L)¯¤§¬îµU<ËJ¢´2ÔæÑj”á“CªŒ—Œk8ž-I	:ç™ws:_1Þ¨.ÛÄ¸2Ô’°µ¢IÂé¼c¾ô„.�BŽõT!³°:fÍ¨Ò¤8ÅVc’ïˆã1DÁv-šÅ¢eT�é¼cÙ4TÚbíˆù|ÎbÙ�í�1Û_ÃééGHq�V>·ý€ÄÚ°W¾%å¶úy-€í‡3ý”?«ËþãNÌdƒÿõÿóaþŸ?ð$;À_ÿ‡Oñ_~÷[øÊ/¸Ê¥½SºÓ›Ô:—-Š-ˆ5*ÌˆÒ vD"“Ík<ù¼âÔ‘u‘Éó[Þþ(¯yd—åòµÖ7àË\:oº¢À¢1ˆxê`PÉƒYfæäÜ÷$�j’
+‰Ú×ˆ8‚n
+$U�1eK6–EÒÒ±7>ÿ�Û<ó³:Ÿ|î?ú#Ïðßú8‹Û/RkAÒRW˜–�š%B@‹�³‰ Ò "�²h_á½¡†&šX±ðš¹K,;èŸgâÑµX=æøð€�|àƒ¼ã¿|mŽœ«Â0–÷(ý”ï…[ž~v†6çŽ-MœºŽà=ÛÖ ÚŽØ6¨èPÓé	×.]àòµk4�Ã…ì$o|‡£5.Dš¦A+ƒÝÊÛ+Â²shm˜-ZD ®,U•U:>§uˆýÒ#WŒJe„üº[º¨¸úùýºw`ðqõMXSl))]ã�µž¥=)®ÙÁÄ�±!*ª0v•/‡ÃrÁ©@˜ŠB‡²7¡x
+â€Ï�”¨L…ˆÅ‡È²qï1Ja´ö3"Ð6ž®u¥P„¤è|ÄyY9³¥÷ÃŒm]dÿR‡²›Œ'c´ÝÊ£Ï–a4˜Êï`…‘b�‚ï;³œK4d®Håê<£i¢-ðJÉ‚óWñ©Œ½úSÖqEý>®\F¤œØ�ÖSe
+×ÞËØãª3"
+�X—ò~ÁôŠ°~ÏDDb…ö†ÉÂ5Ó’èÚ–éÑ1>ªÊ²áÆJ	TÃKn@ªÄ”.)
+´ZÁ6×ƒ« ã~zÁ†ˆ¢¶k+ÌÄv\Øße6ï˜wm]Ùá¥—N™,çö61ÙÕ{xÒpz;1Þ² ya\Õš(ž@x=:E|
+œ,æ,ËØfvRJÂÖÆ6uUãJ6ue'4Í$s´´#‰Üj“8:šsáÚ¼üü{…œ¢Béµ”#©– Ë”2Ö¨X£â¨<QyÙI(ÿ_¹ÕÿW]¹P~eU—hÃË×�ËRà½/�òíîgyû›.ñíßðßú[ßéã}ËŠf¹D×‰ÈŒ¦Ú{ÿôßtü7ÿÓÏ“×¼žKá;¿é5ˆ[õ&M8¢VKT1%ÆTå7°n!L�hÐr—q{Ž¤¦¤zJ4zƒ5!ŒéÌ”Z@7øú˜åè˜ÈÛ�C§•"ƒÓŠ„g£˜�xÊ·~íüÃŸ½EE#ïŸão;¯xŸ%.óåU¦¦�
+%s6‘Ts´)DÝÃ*tJ,Ò6´´¡bá+f¾fjNºÈ¢�tM®Nñ
+qy�}p÷ˆù/þ5ïø‚ß²·ëí¸-))–ZhÑÜ>lyêéCŒ™0±-KCË�ª8ŽÔÎ©}¤jçHÊ™Å½{wùÒ/|'õxD·X`´¡sŽÊV¤ÔÑ¹Œ`IQè¢R•UÌ–-F	‹¦¡²ª(}ÉIÏ��9d7Cü2¢F“Ç?J²ú*¤,�ÕJÍ/g²ÎWp¼Â(*• QŠJõŠ­UE=˜	cÙ¯ÉJ]{AŒe4’ÿž!ŠjXGµò‰d¥–Ñ:û/bÂ!FÙ˜¨”Âh›„oF�±	ôjÄ²\BÛöðÄ~iß/påLl¬gbÄ9‡n5Ë¦¥mý�ºxüÛ›ÜÔê"ˆ±ü.¢ ãJÙ–ÿ¶Â»(Éˆ‘Üö©.‡³ÒiíÒ#íû\¢>y²Œð æÑP	ÜJg©ˆgŸSU"‰WiSy«×Ò'{ìKOgÈÛš~Û]öL‚µ–�Í-Î]:Ï|:åäø4w¬ÕØºÄl§rÁ®çŠø”<
+*­òe+½-DÁƒ)¡-A2µ Y*­0?âüµKÜúØËÌO|Ÿ[5Ý^
+Æ²½»ÁéaG—'�£ãŽqãhÚÄ….\²xï¹{3á$pnÛbk�l
+÷b×Âòwv±!1ª,è
+T
+èÊrçÞ66+”êX6ž¦Klïì1ÙÚ&I¦…væ<õÞ«hn>ÇØ®ÐŠ
+)ù¡ÍŒ„!$ç³�X~õs¯èo{ÃCüÐÏß$%¨mû¼ÿ£·ùØGùGÿð<ß÷Þñ6�\ô|þÛ¡“c‚ºÊ/}è”'Ÿ÷ü¥ÿùg8
+ëšØ¶¼óíWxÇ+R\æ1@Òe‡¢Y	äú,÷œ«ž$–ÃÛÓ˜”&%40âWôZYóm)eÿRÌ9ÙŒñ‘4?á­o~5_öæóüÛ�Üca„Ÿ¹yÌ×ÿ·ÿ€?ô{ßÁÛ_­x÷Û^Çˆ<£¤HÉâÌ6)h¤ÝA‹e2›>x,°�£&ÐtÑÒ9Å²K,Úü<·.à‚&�gã¢	TÌ—ŽO}êyþØŸüï×£¨LxŠ>E’Ñ¼|÷„O}ê6V6ÊÐâ“£qžùbN»œ±_[´_Ý=’"ÞµDßñ•_ñeL—–]Ç²iPJ˜-çxŸw¾,ÌIBRÙ-®µ0©N'šÎ!Jò¸µŒ"š(y‹3ÚÇ>æê\Z—ç&ä¹·J!Ø
+“ª—÷‹×^yeuf`�¬¢2ƒ{H-©ä»§„59m®w“S"w½/—@>Á1e‘e¬ÅY
+6<€BgÿSL¹ó‚÷×DÚ¦!FEÛ’¥¹!
+ÚæÅº�‘e—hýY,|,ØUÒmcÂu-Óãî^¥…”<ÖÖè5ÚÔe'”‰áJ•*;ÏßòåòãŽ’«h­õ	`5ÖU"—Vjª,nÉ�K©T‚EòJ‚TŒ¦%ËzäJ*,iåV_ÇÂË}ƒè")^%
+¬ÂäƒïeÓYB\B%ûH—2\››œ¿t×9ªÉ£É]DKITƒ$dÈ’I:*QHzÍ4)ùç�¡gÒ©3ªÁJg�Ñ•ðïêiŒL]NZvîž2Û©YÍñAÇÁÁ1sÐ&b«HHŠý+†vÑpçå–ñnäÊÃûTb¨l"‰c~ÒÒD�yä5ùú¯x‚æî˜£Ã)Û»›>û<·îq¯u�G,ºÀù‹çi—|Êæîu‘@úÎ²wé
+¼tã—‰é¤Ì#Mò‘Ò$aÄç±Î¯ÉDá—¾ãÛ®qþá·ñ·þÁ3üÌ'N¹…ÂáxÏ³7yÏ_ü—<8‚·¿ù6Q×t�ãƒ¿ÁíæSl0ÂVž¶myøÚßÿ§¾ˆ‰�2;=Ak�U¶˜šz¡'‰+c­¢“ˆ	bHi›7È”©	šc,‹¬°HRP ¢)ísp""¹çŽ"8Qˆµc3ãÏþÑ/âSâ'xaÞ0ÚóÂ­9î¯ü;ø¼'®P+AÇ¬J�t&1/@£ÈÓw– 6ñ±¥“Ä‚¾¦s#gh[hš@Ózš.à½FŠ±Ì%Í¢5üÜ/¼�ïøÃßÇùW¬…O–a·(CáàxÎKÏßddkHG¢Qši27�ÅÉ)ªk)�àòR4zTô8×ñš×¼š‡}8ÕB ²–¥ksd®$
+1@ãZ´V9øÊ´ÑÄ°V¡«‹‚-•ñÈ±—Úaåg¶6F}=™Rž}K/ŠZÍÞ×«W-P™l¬�ÆZUŒ}±ßrëSÂûì±%	pp‡‡D¤,ÐCÎ±J3ª*Œ)RÔq>æç$FBÊäÑS�bvØ§ð.GV§²¼&™\1£‘â>)á‡Åj‰JaŠe„·rY Ê ”!xÏìtJUÕìí_`gûÖŽ1…Q�ñWdC¢d™¯óÅÜØK§Ëé+kHú(‚—<ï/0¥$Ó“%¿ÿ”Êc/%Â)¤r¹HöWè¢°“”§0=—XÒ¯è”êG“2Ä›”xð~‡U “R ™=r¤1ÙbE)”Ih�±:®m10;�²µ½EU×ÙY®2þ>¦Œ”µÜ5L<IArAö·Ä~¦²ÉTTÂuóðë¶Qú9^ýê+žL$ö5‹O˜]rP�9½uÌæfàµ�)Bçxö¶cîî4Q*ö¯Ì¸úÀ
+Å²qŒëH¥‘g^¼Îßþ·yÇkãñÇÞÌÅIÇ[^ÿ0ï?=âÚ¹s¤€1„eÇbÑÑµŠƒƒC”$Rè¨Mäêå72Ú~˜nz#RÀÄbXÊÁ×(qDñ$~
+×è	ížæ›¾b—w¼áüýrƒöÏðÉ›]©•­qÁóRçyé—_îŒÀˆ±SÓ±ìæ|í®ñ½ø^wiN3½ÁF­MCÔ5:äE|"g’G’.•wVaD	Ím‘¨18Kj"t3ðùÐÑ±È³ÙMÉz€A�_¼(4O‹–c¾ø
+ð÷ÿòWñîßñüÝ9£*ÏdO–ð³ï»ù«û…iìPt9´a·œ3o,‹Æ°h„Eé\ÊébäJ¢ñRñÔówùúoø=üöoüæ|ÀiuUHá´pû¸áSŸ¾…¤Šª±ì`Ç]ä°�Ü›5´§'lH@\n‰ø‰k57^¸Å·|ãwRYC"b�fÑ¶ÄYº6Ï£ƒ#†€÷k->R(Qt>çjc‡J°?øµÒ%£<‡ýH9àR,4\­²×]´ø		>w
+²–×-+DF�ìÖeìbÄY#äötê±ø±&aK…ŽH!ìúÜá¼Š¨ìóè;š:…"ÙyåÔïŠ[$w*!Æ|Y‰”£G“DbôùG(®eUN©žšAZ1ÅrãU(°Ú`Ç[ì^¼Æl6çäÞmŒ	“Ã²·ì…2ž.¼¬e™‡‡º•ßCT†¬ûIzºD¯ZRÃC�’çè“P‹l»‡Õ¦"tHëû$¹ÏT»Në•UŒ®¬éSÎ°ÅËåC`Íê7ì0”)ï4•ËÅœ{·îà\GŠ‰Éd#*‹TUº�¸R‚©ryõbgU|1ƒI‘\t¨J%m€Áp:çÝ_þÅŒã.âîòñ§^àågîò…ï|�eãIhÂtJ ¢F#N\�•Š'žÓ5ÂáÝ)·nÐ,O˜Mgˆ®	³Ž´½K½½
+uäÜæ6NÕüû�\çå—nñÆ×opãÒüütFw¢øâoüz>ñáŸ¡î¶0J3wìîN˜Ï©÷,Çó%ÛÍûWÞÄ½“�c”GG‡¨²ÔÁ%à•~��‚ŒC"Mïrmó˜¿ð'æ÷ÿÞGùÿýð‹üøO¿À3ÏœrÚ.W›”÷:HË0ãÊÈðÍ_ü0ÿÓûvö6o–Ï±-x�x)ÿ‡1é2#Žk$j’ò$Q$åÁt�"VMèh–l�\Ý¤R*ÏÜióè+YtA‘¦�ÁK�Wfµ
+,	í�éN¾èµø—ÿÛoãoþã§ùßÿùGhY7FÙ³8“ûtai-Íd?Ñi;&zaÞ&æ�ÉKó.Ñ!‘—¯ZTmxéÖ¯yãßþ‡¾—ÉÖî�	ÑC<ûEúË‡
+ùÄmÆõ˜˜"‹¹ÃéŠYLœ´Ž“Æq|:GuK¶*…žÏ [ B‹V‘år†’Èç¿ã­Äp.b—]CJPiƒ��Ê:"ÞåJ;ŸÍŠ˜ü0ª+›“ÞJÎÆÂÐ?‡fcÍÃRüf[Ê3^4ûš˜y[ý¿/c‘èËB©|°»ì©)c+úÌ�^BÚ ­V(“/.f#\ë¬–ÍQõ¦Lˆ>kP:CDûg¹�Ÿ-’P2‘[•hëœÛž°®XrBÔ
+R	-�XÔd2˜Õr‡e«[»ç9w¹ÁØ1UUQO¶À˜aùœ÷†è’a¼Óo¤Tñ½\ZÊ>#‰£âUm"CàSÈ·k¢†$˜þæ‰R^›+ÏFê1êe¥uîÚô
+dûééþ±ºœ5ùêBN¦ÇœH¿³*0Æl¹ÁDÅhT±¹9¡ÕÌg3N™�°sn[W…l�JeQ›ìK_¶ôôÝ~\¦t	=Ù~ S •Y—$0¯ÞsûÉ�q¯Û`Ö€5žsW¯r8‡å¢áö½–‡ÜæÞá’ØD8¿ÇÁñ1§S¨õ0Œ·ksÃòP¸xeÄéhÄ²†££;cCÓÎ¨7FÌBÇ³Ó
+.¶[¼øKOsõ�yùà”§ßÿKœ¸S^u~‹Ô¶ŒuÅâè”�½8<u,â1Û»û<ôÐ;¸÷ü/°XÜAÉŒÛ²èÓCu$}ÕÁJ¾¶¢kþ§]!:ö<˜ŠöÎ1O:¾ÿ�\á¿úöüÔO¿ÄáÑ&ãzŸ§Ÿ9æO¾ÀÁÑ	Û{|Þç½š®mðúZ¾æ·q‡OÂ¼CIbÃfa�ÄN’Î�½…ŠY‚%1ˆ
+$Ýà]ä±‡öù³ßùV~ö—>Ì7}é›øò/y”ÅôãL*KèòNHÇRå–	m•‰Š9,¿wtÁY{jfÄ¦å
+;Sþê}€¯~­p,Wyò…»üä/’e¨òe]mA$)ê@:ZN'Z¯xõ£¯åk¿òãj�aÖ$-tNÓÅ��ÑfŒ¨š—o½ÌéÜóÈ«Ÿ`sgwx3u9i)Ç	DáàdÊGŸ>AÕ[øé‚§žcï8\¶œ0;:f[l×`|ƒtsˆ
+BÇÝÛ7ø²/ù"êº"øœ7QÃd4¡éÚLÃuB‡’”±..d?T×¡DSWÖ(¬­H*Ë[óX"B‰-Þ“XF5^ÞkTé’c¤d¹žQ*cA¹÷)�"yAëCÄ¤„Ñª Ø3›”H¦¸Œ×Êª`K´^K$!­ÊrZçræMgt¾¸¢Böb¥^#�%ŠX`|)_JLe	�ýFçjÖ{_ŒŒ}NÈàº|"}Âá`Ò+¾kT–§€ïHž¦™Óu
+vT•Wá1,×Â+	}+æ«,ö´2ô­ÒwÓZ¬ïÙÅ÷€F	¹*×¦<Ïã’Rsú”ð±˜ïT¿GÉA|ZË°OéÝãCŸ´þ=e•lØ/Ú{)1Ã˜N•¡PJ(•ÖŠñxÄùË™�.0UEU�PÆdh¦_%9®è»iˆ·íUZi0Ê¯_oyä�Qñ)Sªm­2Ûpqô8áàeFûsöbäôå6/ðÚÇ*Þô:á}O2ÚÜæÎÁM>ñô	¿õÝ¯å©——,—-Û›–gŸY’e4Úä½>Ä5‘/yçëiý”�|è×.MØ9ß`ƒÃúSöv"^z=o}Õ]n¶ü³¿Ã\â©Ýáá«Û<øÀ„ÍzDÛ¼Ìîøc½C;o8ÙÙfré-Ü}ú¨Fß-×Ÿ*R²D<Üçàr”ÿSïB…VŽ‘n‰ímsƒ-Ñ|ÛW_€´~nƒÙ´¢Ó3|Õb7ã‰§™'fóC¬64âÖœ²�E-¦×È·yô$IE"aEð-Ú—÷–ü‰ïx„ß÷»wy`s“öøzÉ§è
+~E#Ñ–·O¡|öá?kx
+IjÍ8Õ27÷pú„/û†-’´|�¿È÷ýÁ]tˆTÑ¡Sƒ$O›,)n cþ)–q—iŠ4qR�53f§§ÜšN—šY›h:¡õ ºÎU©X.=Ï½p]Õe)¹VŒIÁŠëü†zéöœŽÜµ…`è¢f‘`Ü89âp¶àøð.›
+ÆÁ¡š´sTlÑäÒzl5ßô;¾ž¦k‡¹xŸXYË¼é²— ö ½lóÉ£´0Wh•	ÖQ)DÇ•rF«2:ÔÏH)P1à}bÙf¥Vísx[®þ³ŠÐ$EÎÑƒIR‘»Ñ‰è³I7‘ñ)õRáÕØ¤}dâ*Â6yón †HòYÄ°l#”qW]Ù¼¨—2V2´Õ"º,üsµ­úÏ¯ecPŒpY1­Xhk¾Õs<Ù2¨^—À.¢§™stç%b[êq�­,õx£³3Û(Á(] iàU©"ÉUk±½ë9ëß3Âê´–Ûÿù˜)ù2NEÁ”!QœýÙg„,VðE$Pö(Fƒ6å")èôÞƒÁ™E†q ƒ+£ÐÔ
+¬èc@›z…2;ª©ÇcêÑkMqÄ…×S¸º„”È™ð©°F,ŽCÃXÄ	$BTÄ˜_æ©»·1F¡»�ÛeáarÌSŸ¼ÅÁ‹šÍ±pí±4ç`s«æäö=~òÇ^àÂšgo:–MÍ£�Ÿçú�Œ4|Þ[/r|»A1ãás#¶w/à›Èí“#fmMç'¼t]sq÷E~yê8¼sBD0³»Ä6²<œ²ýÈeŽ­±ÅŽ"õÈ3ÏòÞ	çz·®?ÇÔMÙ°ŠephU‘
+j=ŠaÈõJi)ÿéC¬ JªL”‡Ž�±ª jÂÑœ˜–yY'ŽMÓ�±x~~BhN°Æâ}"ÄšÄN™Å¦´Ë9‹E’\¯ùâ°¹sP]þ¾±4c³�sK !ªëì×KÒòµ”°¥�TpTEÉ“E…A²!Ï¤�ÁjäíPTC�H@R@ÜC$…”Kl›%~© ×�mvo§„ã&hÝ2óÂñ¦ó)Ë¹eº´ÌšÈ²Íêœ³[6ZÁ˜1Ï¾ð,ÿÅ×~?ôÃÿbMAWw:Cù:Ÿzö6·î-Ñ“1Þ;œ·,ZáÀî¶‘£¥ãæÍ›ß1N	ã–(·Dû›<µ�;÷xç;ÞÆÞ¹=¼÷tÞ‘R®¹¬@Ðùð²Jg°§ïY‹÷¥`\Õt1 DS%ƒK�.¸|°ˆ Åo¿UF¾U6¶]¦;T&�ªB©†•VkÉ~}G“Ÿ;UÐ%B6æAÞmôDÕ>¢Ïêˆý^¦ü�(9¤é`ÑäŠZK$F¡óùÏXíˆÒÈb­.Õo¿ì—)ä±Š–ˆ½BƒÇlàs)W#Èõ|’•�oí¨,ËÛr˜)E2Šª²Ô£a1;åðö-¶÷Î³½»Ï¨å8Þ2š3*w-¬í*¤ô×…É;°¥H« ­3Â¨´–�Ñg…ÈYUcVÏæËTTÉ«¿/Ëg…a—ê¤
+½ÊÁMª(»ú”Ø¼/IkŠõ¬*
+1€a:séÑã\B6¦"Hh
+‡wïq÷ÆMÆlíl³{î£Éˆ!ó}=•�L–èÏžþ¸Œ½§¦ÐU¹l´R(•Fæèø8'­Í£ímê�	“­ËH<×öÎqü<øpâu¯~€O¼¸ÅÑÏ²qñ�mîÝm©­awÌõ—N™�;Çøå)lMPMbvº¤9IÜ¹·àó^wžmsH{º`£¾Â³·G¼tt›.ïs¹ÚáÜÎ>§óËÔ¢Ó~Éæ,ò`µEÐ
+3¹ÊÕGßÌõO<ÍÈ’ùô9Õ!³^Âj®›ú¶•ÿ3;‘ˆ·‡PeÓ‘J
+•,ÄÌú
+Pyq¿ˆeñí3#KðØÊC3ÇÆDU�qKOR†dk¢øòâòy¤”pñ!�d	âIì"ÑœÅŠ!¶	ô©fL¬¦ócETBŠŽZ�_FzåûÄ‚¢SÑc
+HÈ'EÐ†€!J@Ð] Rš°lÑUžýFçðhAÆÙ,§Z‚òÄ�è€&,™ùÈ±×,|ÍÜm1u‰ÆG|TÄ”Ç±”i?ñ3?Íïü]�¯ùÚoâÿÐ��’?SqAöX¼tç„ç_ša77q±Å»Dp‰¥«˜6p{:çîÉŒ¶ëØÐ`š9Ò.�®Á$�!áÚ–ƒ{·ùº¯ýø�ƒ›:çÐJ‘’Ï�‰‘±$Ù<®ébB™|™å
+Ò¢•¥u
+Mˆ½³<Ë!3ŽCaÑ$•GWÆ(l>\×å�ƒóPøOQ«‚ÕXôSZ;xËAeMšV##d£`ZÑfrñ",=,ZÅ|ñ>#FT1†I‚.FÝ€Ó°&ï|¿Ÿé‘'e¬¥µ¢ÒR¨°et}Æ �®¼÷(³{•†Ý‚¬‘f`ŠDYi•ÚF3ÙÜàÜåkÌgs´É�G¯U–VKöåêìÛÐZÂ±.ÎŠ¾CÎ‚´¦%9ƒ8éÑ"+nr/<é�™_@ZéKÂ`*.í3	Tëè+ŠyŸÐ»¾uF’è~¯Æ\J­ÂÇôZ‡bÉQŽ§ÕNÄˆÆŠ@ð,¦S³9[»;œ¿t‘�­Íœå$œùÁ{³è@.ŸëŸ;]ŠšL5Îâc*Œ1 óê‹�0×3t½AÛ,˜�L¹}Ïóª‡wÙÝ°tÓ9[£ÈÓÏ9Ž?ö"W&cž�M{ètŒŸ£wF<~ùVO9=>âµ=Ä‹/Ÿð‘ëwxÕ#ûlïžãåÛœ›4LäU]æ™[SÒñmÞrñ*�î]fGmsî²ÇL"‡'
+õ6Uòì�*šeÇÁâ€I8Ç�w¸úÐ;yé©ŸÁ1Eô2ÓScMÒc’�+jrâ)ÃöVOÎ²HræÕó+¯ÑõŒ¤:$ÖÆ™H©4.8¤’!:2]~ñ™b[¡§IiŒÑ
+Ú«4!ç•Ð(3 :új ‡¿¥>J-é•œ7æWšRVç!¤–ªÚ`ÑìÄâ:·Š6•´–¶Vhå«õj•üÞéóÚ�<ŒÖµ*�QÈ®ï’sîÅ¢rD>)š¨h$²ð–yghÜˆy3æt^áSKë–ÄX‰�v¼Éû>øa^÷ú·ð¿ãqrºÄ‘øÂ¦¹(Žfžg¯/Ñã
+BHè’ÜwÒ)n·‰›‹È�ã9³£S¶ŒÆvÇ¨æq)8”Þ»Ã¾ãmœ?¿OJ‰¦ëh�ÃyOe4VçExAÒÄÐ1©-Úg@UÕ(•ÇFµÅGH
+ïcöÄü{ìÁŠÄì¹Ñ"Xe2–Ãh‚ó¨˜HÑž�,…-‡–îs©ãÚÈ¡Ðms4=¦w“—1“Ñy‡¡µÊ›/—uüÙ/,,ÛDÓä%9*›})Q²MBÎ¦	›LžçGhC^À{RÉ_�()(ýõ3©_Æ’w"*'i•‘m1£Åc¬ç�(­0J£UÈiF£;ûç¸põA´¶@b4ÙF”Y^Š—B
+Nó’VIAÂ¬§÷©!PtˆŒœ†÷Ÿ�O¬íNúøÜ>VVPk�!ûFzOGHŸ�ˆÄ:K†&[p½�Qå}•Ò`LÂ¨”SM¾ cyÿ¦ÂÂ’R÷û²‘­ØÝÝáÚµ«ÌNgÌfóÂeë1í+Ò/g¹Ž÷ë‹éc‚)H|£LÎ™±ÆVù5 f¦<óÜŒ­íÏf�xûwyæ™),ÙÜª™zE=‚O.7Ùž;ÞúÐ.c5ÆnÜÃ-"�ç?v�q½Ãæå}ô$ò¦'.rã¦áÓÏÜ&0cT�¸te�W?¾Íó'Kn�sc|z“ÇÏŸãâÎ%¦MÇ¨mÙ«.Z��ŸÇmX�9G³)ÖlÜ¦K×8õ]Ìo� ˜fÛ
+^'ù �Éæl„X�
+(òø%fMY5„ž"÷Y9SÚoæƒ)ÿ¼¤S*‘|ZÁýbZÓ^z¡˜sŸaWÅàÛæ¶:örß³ºŒT ‘^Ò@èqE'ËB,!ÔD©‰žÜÂw�JêüÂQ~µNM`
+ö>–±CÑW pkùP	_E\YÚªXò¨“&ÈùRí'¤¨HIãCM[æ]Í¼Õ,ZhCH�ÖµyfnòÅeô˜—n°½w�?þ'ÿoìŸ¿ÄÁÉ3Ì]W`3qHGó>òtÃÝ¹¡ªtSLÛáEsh/éÈ-ßptrÊNJlwsT{@Œ'ˆ¯r%®!ÑÑ¹S~ïïý¦<iBÉ_„–Î9¬Éø�Öµ™k…"ø.ÏüCÀC×µŒ*ƒÕ9ƒÜª”£\uîøX–�ÑÍ^ºªŒ2Œ•"CÛvt�G•
+6•eípj§Õ<~x3+PVQYÁê\åÛ¤ÐÚ`­!‘ÇHÑ§Ü¥yÁyEç­Kt]$ù\¶ŒŠ¦ÑéÑâ­"†ˆí‰ÁeÓúâç0ý˜Ô¯Œhjex”ò‰|Ðé¢¢HÌU»�B“#ö»¹�\X*Qe‡{V£EBÈHšf9§i–8?Éù&C@Jü}5×s’J¦Ç°ßè»½t¶X”5ÔÐµôI}½	/�	«ÍH!¯ãñ×¿fúLdºTD‹i…œ÷åûh�–Ê#A¬´~öüˆôX‘ri—ÝÈh<b÷Â9.�^e2�³½ŸX¢Ô=0¸øË­¶>ÕêA�½VZŠAkƒ5cô
+k‚ÆÜ¼sB7Ÿsó(ñº7îa’ð‰§¹üà&Ë…fk2¦öšn¹à±óB5žpn«âÞé“<{£ãè pá�
+Ì–FläâåóœØY2Þ¬ØÝÙäæ�S¸0b¾|ìG¼ã�{Üö'Ü½i6„­ŒG·Ø¹²Ë¼íX¶7‘ñ›[–¶©˜ŒvØ´Š�É&ÇwnòðëßÅSG',ç Bè²<;d3ÝP-ôáyQ�Y¤÷J~UÈt`îGÊý1°Ÿ˜^ù‡•®xYûßôÙÿ{ùLß6}ÿ½¼âÑÉšà@
+’SúùmJ¬3:SŠ+:lº qÞ°ìmkiEÓEÚ®Ëns
+²B!b¸qó6Ÿ~æeþÌ÷ÿEÞðÆÏË—¥óHôX¥)¸V¨O?ÊÁét•«;3§8ˆÂ	§§
+÷nÝ¡Ž6tˆkÁg‚pŠž¡®àÖ�¼ûKÞÅÕk×Xt-Z©òø2¢dÑu,Ú–a˜ÝÇ¼P.oî.8j#´Ý’ÊØ¼;Ie´Y
+ˆy<óèDtñS¡D�‘•Ú;¦|¨Z]ä¡I9NìcKÓ*ó[«<ê©mž÷ç\‡l®Œh‚‹$—�Ø�ËŽf�Ï—‡óy¬S™ìf·¶àT
+<Ð…­²ü´NËÎó|)Å¾”O9¨(”ÇŸz4ÇŠCJj¯ëÕ<”Ÿ)ÄÜ¡)%øTŠ¬¢ˆ
+lè}ÇbzÌÑ�ë,ç3šÅ”zT3Ùš ¬)b)Y'i€¬Æ�M“ƒ�°<‡Ã…Þ¿$­)®^a_]Þ=>ÉÊ¥!ko’´ög×w,ëfÂt¿-=q6P†B®˜ý‰AV‡¸ê»ÑìmQªd¡˜\�ô4çfÙ2ŸÏY.–Œ·rNÍpö¥ûN�^ò�ú=[~¾zÂñª:(&Óâ�ê±>æÂnM8mxãç_b©&ŸÎða�Š£›ž½Ç¼ý¼1å¡×m±³[óáçÄ¹&¸1¢áæs3¾ò‹ßAµ­yáî‹hùÔGNÙÙ¯8wiƒÉî×¯Ÿ0¿{Ê«¯nãŽkÞþ¶«üÌû�xá™%Ç§÷h_Wñ¨:áêÞe’µh›˜¿<#í:³äêî£Ìg‘Ñhƒä;:ÙáÊC_Ê3:ÄLî`ä�
+0l@´¹R+¸Eæê³$V¢*3ÛÏDµý�ÉýÜýóXM¥5´_Jk±ìTødhCÍ²±ljÃl™X·yë<!iFãMfÇx\q÷Þ!ßöm¿�ßòÕ¿•<ZDç6¶Q.ä–Áf.ñÜÍÛx™ *±\6h1ÜKÂ½7�Ž¸wp€YÎ™¤@åçÐ-H�ŸùFÚ
+§'Ç,çs~Ç7~#I„Ö9šB×ÍŽè¼\m\7TŽË¶tM}1VŒ>mY•qÄ!6/BìC™âªzëÇæŠ€O!÷¿©pÅ;¡µ•ò¡UæV…¬²éeÝº Ñ­Î>Ki#.DBçrzdˆ9*5)œ�¸�™SÞ'\È’1‚²Šd4I«,@Ñ™ûVU
+[t!öö‹ÜÂÐÅØÏÉË˜MIY¶÷è•ì™Qý YkL˜tžÖE\‘Oë‚‡GéüõRþ¹CR¥4U]£•Â5NïrrxŽÝ1õ£ZeG¦Ç2tqxNÎŽÙ¤d’”T§Ö™Ö—Õë#ìÒUõ«’µ˜ó¡pÌy-¬u¯¬óÒšá•N�R~øš)¿†œ+RlUÌ¨D´Jh#¨±ÂX5Äòú�ß''‡á½c÷üÛ»;Øº‚ÈzùYßiõyƒFiŒÍcÁPòiTy^¼wˆï-9ºÃ<øêË0®OoÑÎ6˜Ov¬yöùÈµs¿àýÏœòºk–³À‹÷î±¸Ûðè¯áCÇbæÛó|èú/ò*÷ZÜ~€Ÿa²;B›-$
+óÃCÜ†YU1ÞQë+¨ÓM^ÿ(¸4cÔmòÞ§oâºsœµ¼þ¡WÑ,çÄÑ˜E3&Ê&Ï_ÿ$—v®ü6Õdƒ7nòª«_Äø™g™w¿ÈÄÜÌà°�`rkÊ¹ÌY"›»�TªÅ"Ž¢‰øOLú¿ê‡J²âÿ§¡ž,æ4Á'…K
+—4m°,\Å¢±XŒ˜/¤\ƒ‘Hh[3oã�~á=ïåKÞýUüÁïúîáÜ�;£6bY†ÈøðÓ4¢‘Ú2›-Hm@WwSÍÍ¦áÖÑ	íé	{61jæ˜nŠt3¤ ¼•ˆž£Ã»|Ëïù�ìíïá£ä‘­ËˆV¦ddÄœÑâCÎUˆ�ÆµØÊ”âUp>âCBÓau~©�ÃFAf¯bW‰¡„ø”?#Ÿós¤_ó¦ˆPßý¨$pb.ìµ¤¬z1ù°F­º’àËeGÛ&ˆBm,F«|ÉÇ|‰ÄÞ÷ 1Š¤ŽµÜ’MÄ0–¤4!
+„�‘ï±ä�(S®…’W‘TDôfCYUµC×5Tàç]ò.Kg¯‡]*ßüx|Èj5AO&œ¿r
+×uTãqîT•ÉÂ¿R§¥„–ÊØ0ÒgÒ§"è[BÃ^F¯�Û†ìú¸v¸ª÷ÛçÀK�GJÉ:¡‡T–‹*®!ä¾½‚¬ßbk—Gœ”Ïd-pýY6BþœÁVy_¢MQv‰0ªGìîì±»»ÏìtF×´,g‹¼
+	Œ¼"#GÈõaÙ£õwk¦vgã¨¬åò„Îc^º³àè^C\¹z� ·^¾Å¾uÂt˜-„ms�ÑäAîrq?°e–ìÕ–ãiþ»s…/Þ{#{þ€?y‹ý-Ï¢›Ðº)Ù9^÷È\Øöœv¼tü<Í�âÚköxÃã—øÉ�É†ewcƒ‡¯]æ=×_à±ÇÄ7‰¤[ä¨!v»‘hîrõr…ñš;Ó—ÿ2žýø§1ê:çHÌÊ¢~™£%E�ÝÞÑNR”Z™otöIýÏûÉ¸|YÃŸPFVŠ�!æð«e¨XtóÆ2m,ÓF³h5>äD¿TÂ�|Ôh;áÃý.]ãÛ¿ó»1uMðU¼Ö¶76KFÜ8<åÖiC##¢oñ"(k¹{ºànÚâÆñœfÞ°-‘‰k0í	&4D·,Ç­M;cgkÄ×|ÍWÑ¸–Ö;|p%\ÉÐv~È;É Å¦HPsîÌÈVDÉ•ò¢i²ê*Ä,¡M‰¤Ó béÓýÒúï-Æ‚�å ê«kç¸‰Î÷Ùyì£E°:Ó	¼OkèY9×1ø2ªêòai«#ŠPRQ’“ô†ìïóÑ/„³ßÅEEë…ä#¶Œ¯BÈQ­ÆZ´µ¹3ó¾ mˆ%Gc5¬Êé—ŠK¾Ÿ'Kù+/~‹’©°ªÝ*�¡¨G#öÏ_ÄÚší½ó,fsDç¸\ï:¬1%¦ï$ÕšêIVE!‡˜'Ê¤ò8e-[&_@ªž*,’4ü»Ud®R«‘ågR\­�¨úÝµôŒ+äìòZ~e}'Ág¼*c8WLŠ’"Ö(Fõ˜—/Ñ4-ÊZÚ®ÍÏYÌ~£S,H±�&@Q/¸)ƒþ<€B:(b)‰–æèåS|ø2'§wéf'Ô:òþ�ÞäÊµótIHñˆCçØˆ»Üxñˆ�=ÅÑÑŸŽ˜-6¨jÏ{ž½…w—4‡ÓÀÎxARÂé²ãn0,ÃmBØ`ËîŽe¹©qQsxó€íjÌC×¶øÀ378$Poh>øégyèÊ®íž#…cNË‹Ï?ÇÎî>Ÿøäs\<·K¥#�¾ú	.œ¾“Ï=Ï^]¡’ÁÇœ¨Ö:M�ŠF,)¹‹*ÿRŠEUÒJþ—Î\$ñWpú¿îkØùžðQh£ÆEƒ‹­×,ý„Yg™u–i«˜wÂ¼�t|YìúÐ‘¬åÆ­C\Ð|ÿ_ø¿så¡GË�mWÉˆÖ°¹¹IÔ–øÈÓwèUMÍÒy�ã¨‹ÜYžrrtÄÄulë„šž@;%¸e®ÔË!äÝ’—^|š?ÿgÿ4¦Öˆe$ÔyGë<ÆäwEe4‹&2²6Gs €Ñ—<Fk¼�XQxÊþÐ+ÞPªUUF["¥ßUYC/ZHZg
+®ÎØ×ÆEš¦„-!­J6vI„‚	Ï�k%çìºÈ²�¸.3Š*›i-¹cÑ}F…èB3è³ ú¬Šân–ÕR9„HÓ|Š™ý,ùBô)/‰u1(
+
+ŸÈ]¦+{1µ"¹örØT²Ró._j•†¨r€šêw^!@aˆõÆ7$Wû£Q�RûØjÄôä„Óãcæ'GÄà�¸‡ÞØD«jPü°ÄZzéjÒøÃˆq-E°7ÞöÀÅõb`àT•ýTÞa·Ã÷„0i¹º¿»He‡’XSƒÉ[æÚP91½�DJ€ŒÆ¡í#j‚ µ Œ`ôˆ�­m¶v¶IÓi&¸Íˆz5ìYÖÃ¼ba™KŒ¥#éj•£’)å"'Y…™ŸœðÔ'^óÆKìOy>Ì¨6+t%œŸrùâ.‚áp~Šøozüó­Ä³¿ÍéÁœs6¹tÁòâ§Ü<¸ËþÞ“ñmÒ8ÀØí§Ôv*Ï½Yä4%v¢¿ƒøËt<
+¸t¹f6?!ŠæäºævÛÐ.n±½;bb,õ&[†.l°Wï3ísr÷WÿR®¿ø–íË@G2ªx
+]²Dª¢ºê²Y‰Š(n�´Š¤!)ùÏ»ûäåCøLÁsKE Â1¦�–ÆkfÝ˜Y£™6‰i˜·‰6jZŸéuËeÇdk“£%Ü¸}�ïþîïåÑ×¼±´óÙ 8DEI"j¡ÍÇž¾Çic3Æu�6:–CäæbÉáá	Ö-ØˆÆ-01''.}ƒ¶×6êšë×oòŸÿžxãkiºŽ=•±4]Gç.f,·w~�È†�pÑQ‹÷£QM(‡°ÅÈ”ÃÐw”ÑUŸD·�Z)c[PØ=¼Éh…¶ëJbˆX�ƒØ¬–\ù�.ÒXKÆH8—÷1m›¥ºÆXÆc
+1 cÌo~(�–*¬H¾Tø±àJ�*ÏS(Õ¥Áë‚�º– ±Œ92³J’ SF¯‹P>$|éÊúÅ¬ÒcÒJUæs9:6{U²RJ
+¯°€	´1Tu�QÂòô€£ƒ»ØÑ˜îÊpù›Û{Å¿¦Àê1÷)e�ˆÎrê¡ó�¬ÔL=Êr�«%+LŠN,ÈB·½OÑ%ëy%ý«\„Wƒ|–$­¸f9è*•—4|>¢p~õ¸D:$º6Ñ,Ç‡ÇÜ»KÓ4T£Q‘àªB^©Ðbd\††RÊ¸®wôÇ�1–;0e,æÁ7Ž¹~£Co_Ä±Ááò”Çv6pÆ±hOÙÞÛfßì1é&
+c5§s†Éö&T‰£Eb‹…oˆé‘-l«¨ê	W_÷&yâ"GúI®Ÿ6œ»¸ÏÜeŸBhËæˆ£ã9ÿ$,–¾ðÍ—xý#{¸-Ø8·…�	›Œõ.•å4ÇGsÌþŒ´|œ0Ú8Ïãoüfžzï`ê›8¢sLjë
+1Tv(CI,L�*	€´–úT7^ùJøÏéòHZ-+­RVÉ¸hè|ÍÂY�fÚUœ6ÂlÙ1o:ZŸŸ÷¦i©Æ›t^xÿ?Æ·|ëwðÛ¿á›Ë×We‰¹Fk×½¹Á")>õü]š´�÷yÁº\6,µåÀ%ž=<B'ì¥Àfl°Ë9©kè\ƒ©,.&µáèà.14ü±ÿò{1Ú`t`ÞÌ3‚$åÐªº6x³¼8äV>¦Œ:÷)0×¨csgcŒiƒzGÖFL+RÄ
+WQ$–J)´Éã—äýÊ‹£2Æ$xž©•Uy!� t6.ä•6Ò¹œäèÜ*ÿÛèrI%0Å��$ób1×¥Xº™5ÇqìE’G!+^î°|ÈKôcþÝXCe«a£Z¾àRéÜRaRÅ²é™_Ã9ÛëxKàÓ«WÁ
+f?ÕK %‘®™qxûe|tËY¾\F£,ë-áKýcë7H*ãÁÕx6“|e]D5XXW	‚œñ—ô­Œ½_Kö[�º™uí®œí>Î¨8å3È¿d(j27
+˜£5œpîºÊÏBþeÅh	AÓ,·9=™R�Flíì°¹9¡ÇÙ)aå‡ëûÅ¢í_ÇJ	¢BF©¼\R’ô:EÌþ¹×qnkJ¨Ÿ|ê.U]q¡só©SŽNZ.¼z�k�˜Ý9â?ñ<cF¼õ‰=.îdSÉÞ¾áÙ[S\rìïîr´¸ÀÉôq�oò=—Îóþ/ò¯>ø8²<ôš1w—¨Åœó›[|Ñ»D¬âà@˜Å
+nßNìíŒHÓ†ÝÝ	KÂÍù	çvÎá»šÉös¿ÄÍ­æøà6—z�OïqïÖ?aá\Æ
+X‹˜
+eJ¤kU£5˜XQiK…§—<gVq\c6÷/îX¤¾ê?“ëC"éR ¦¥™B…	5J��Pá“Ó$
+b<–ˆŒ1zŒÕhexß/€¯ûºßÉ÷|Ï[-éÕºŠ%¿€'›ÈhL¨ÇŒvÎ3ŸT´ß“áhÑòâéŒ„KÊ1é–Tm‹n›\¥E“JË¶áSO’ÿñø“Ùýï;æ‹†ñd‡é|Š?Å¬m1ªB¡˜û9I„ù¢c{cTÖ„KYãï|‡Ñ†ÆåÝˆÄþ bŸWú\$g‰«žÑQF=�)õã¨˜ÙO+a)¸˜
+:;›E‚�ÚD×zº&f¿I\m„.�­j�ÕÅ�V–ò�U†JEÂž²/"{WÊŽƒ~‰š/ S¼-1dãk‰.ù<A1c*´ÉÐDãÊC ó×
+!”s^ô7m u±\Ökëä”’]#K÷v…nŒf<™°³³ÏÑæ6ÇGÌ§§Ì§Çtí%êñ¥W}‘£+êbÿuSiS¢Jkˆ�58o_HZ[ˆËJÚJ
+‡>@êWuË+EøòY„;Rf€ÃkFztÊ*Å1•xÜ^RŸ0(eÙØ<ÇþùkÜ;¢i9gÉe³k™LÛ¯7G)ÅêÞg�ä�±H
+¬ÈÊA£bÀ4ª¡�ÂüÅ#¦SOs�¸|e‡´#¼ãÍ×8¹;å£?ÿ=¼Éç¿ã!š0b2:O×ÞâégŽùôó-W¯VT–’âúí-îyBt<{gÎS§Žööø-¯O|àÅü±§xðÑÇØ¼°D�nSj.l¿ŠÇ^«xùÞ	Ÿ¼«xÃ¥ŠÍ-X:‡ÝÜ£ZÚ§Ge%‡5[Îæ…;÷>Ìü`Á“8,¹ÛŠ�}ú[GR·À¨„˜Q—X	ˆÒy‰.ý¼5™[^Ô>å?‹dÐ‚B¤8ì‰Ö{Z·déÚÌ¶r§¸�ÕL9#’2Ä¤ÑzÌ|Ö0m,W¯<ÊÏÿüÀ»¬I>'Ä�F5õhÄ¨®¹{p�Kçv¹°=â…'ßO´ç8:]Ð…–ÓfÊ³7oqãÆ{<Ä…m…éNˆ®Ã…vÉ²(¬ŠÜ¾}�oüm_ÅCW¯qpp�k^ÀGG­"a¼É�»0¥…i7Ë‡m‚Óå5J˜JXv>û#š†Z�òHG	JW(µÍY&ÎGlÊI‘�P"W³›>ãÄB[ëÂ¶R„ð1|Xªáõ¢Ç-�Ë´\²§£é‹E`¹t.äÎ"I1ºåÃ,3Æô�Ô'ÆRÕÇ’cnûƒHebC9³D—Ä*�
+’äø[O¢-ˆRB«RX(…ÒRððVë"õ
+ƒkšD&óúÂŽ*½^A•
+ƒù0-ÙlèCÈ˜ö‚�%Œ&Û\~ðŒ©¸sûfC*Kç<]ç°U‘÷V7½ŠBŽq•:˜÷áapÌŸAâöÜ†õè×>P`À#­þ9ö?S)Ýå3\
+g¢¥Ò}@÷Ï26Ï±¶«?/Jrj¥¬ÌŠýî‰²S•PÊ2ÞØfÿÂ.œœ2›O©'ûÄXÑ4ùËÀãêÇY½¯7jQƒ"+�Pcdu[HszpŠ²ÂÝEÃ•÷Iqrx‚GŽgšÊÇ‹îTqQ:~ùS/b´Ð&G½9fss‹O?{„Kê
+0~ÉÖh�“9¼pý?òŠK;û¤‘Á\‰|óµ7po|•¸ã¸yú,3n3i^âö�#¶v/±»­yî¹Ñ¯}aÁÞAÍîÖ&$Ç¸^•â}ïŽ¿ÿ�~­mY´�ˆ	~ù—ß‹Ñ–JiþÑ�½—ü1O­BId+…âwEk}&ônERþŒÊÞuÙJ÷ÎÙvõsø#Ý'”Ï0…UœÍV°%´¤
+™gdk‹* %£ÏsÐ‘FÄÒºH (�R†ŸûŽïCR$&OH~ø>—Îïpþâöö.°µµÅ¥Ëû|âôiÝˆy´Ü<=åp~ÄÝ»·8½yîÌ¸øÎ/âü—¾“i·$%hÅ¡TÌ€K‰Ü|æ.ïMx÷½�ë/¼À§>õ)>ïíoã5oz�®�„ÍfÄ­»óB¿M(mpÒ²½5¦õ§ÍœJ,$‡Òyážpè¤±v�*M×Bë#Ñ(b'X¯©¬A´Ç¹¾òÏ]‰ô(U“´¡CE��+”ÉdÓZkºèiš–V2�J'Mð0o‹e¤í²Œ8Ëf³'•÷Ö¨’ñ±F\í�¡Ò�-ãerçãRÎ:·•’o+y±�ÖÈÍ1åt>DÞã¤Ë^�ž«Ê¸,ä´C‘”ã€U¯hÕg•d9³�cw�Ök
+®üØt¹ø¼ÏæD¥ó×·õˆs.³±±ÅÖÞŽŽñÁ3;9Ê�ìæ6U]—[Jg“+ç":ºŸ¼§Ï¯iµw\WÎóuy.ý×x{2ÈmëKs8cQLéW°œíIVj¶ê~=<lÕ}„2D•ß¹$bï2- BŠš®S,—Ùph*Á˜„µ ÍÚ˜ŽU—£u.bòh7ëÛBa¡�YøD=û{»Üyî×^u™ÝÇæú‹Ç<ó©Û\=WóùOì±Sž¿ÙptR#¶&¸†óç·¹|m5V„EËc±codyi¤xûëF4�æÎÌ±Ü˜ñbs�½î"W.=Á´V<üÄÛyâ‘{œ^?àoüÀ	¯¿új¼Óµ\¸v‰—®ßãžã‹l�\àáóWØŽ—§<òÀüÏé/2[õˆ/_AdƒŸï/òìsáoüõ¿ÅøÖ¯æÞñ*’;¥Ö­BÁ(D+öUÃ¶,²&œÌö1†¬©ÆçKDâ}­©œY°%d-ky]¹õ9zyÈYJÿVEm4z„£Â»œÝeÄ¢æ˜.ó¹gÖDNÜ³¥`Š4A0 –ÖÃOÿ‡÷ðà#�²·�àR©h‚ËÚù1&ç‹ÄdhÌÎEÞõå_Ïíc‡ípu>ç¨9á¥—?�i;v¨ûÄ²;"v!óºDÎSUŠålÊbqÊ÷ý™?Á§ŸúJåjÿ'~üßpttÈç}Á;¹{÷ˆj;›5'Í’Ê@J��ÊRGÅiWƒî2sVÏiRÂ˜›*:·dûü1$œ¶L¯#R¡Ä1Iv+˜ú†6hF­¦à!¶xWÑµ]Î2™9vÎkF¦b¶<a¼µIå*ŽOæØQE×9´(ºV±hòø'Ä–Íq½s;;ËëJS…&®Íás`S¿T�Å˜uRf0I—§Ò1KFcHe\ÙWÞùµß¹.ÊduY1D†$t./a+k³ARB-i<Fù`Ìy[|yÙ§fæ–KßMŸþ§¨­ÆZC$1_L9¼~ƒ{7Z6w÷9wùAvÏ_d4ž`lFÓ(­
+tp5>ìóCT/Q²V4¦U'±F^]Ùì™HŸÁ˜Îï»”îtÝï
+Iƒÿ§�oEÖ.¥„H8#Á]ãCr<s³\2=9âèÎMf³�ØÜÙc<ÙÂXMêòX1†”¹[¦?J’êÙ`ê0­T	‹%M0'3ÇîDs¡Špu‡ƒÃöudwí„£ÓŽ»Ó-d2ââ©Ž�Öhâ½{ÌÚ)ãG¯qé�¹yt@SÓ™ç¹›°½9xþ˜g:ø’/~-wOïñKïùyv/_dïÖ!«&p2åô0²ùÀ¿tý&Û»ç9Wi>úÑOðÐÅWqmó"W/Ô|rÚñÁn³{4áÁk{œ³ïZ.noSOv8=õL¶æ|Ù»ßÅoÿÆ¯áþÝ¿‡Á3Ò
+ÄFæX<V	•Î4É]™±%§ÙÕ)£FEŒ8Œ„¢™.›u¹¿IŸ;ò¹;£
+k·ˆ¬-÷Örª#´2¡‹­2´zDë'ÐZBWá;Cpmç©èØ¨³¿Æ‡<.QxîÅgùöïú}|Ë·ü~ªÑ¤Ð…)óí<æÉsM ãHî?ÎÿÛ_æ(ì2­,GiÌõXskÞÐŽ.1©[l¦‡‡lt�Z4�k‘ÙÕD¿àæõùÓÿÝŸâÕox-ÑÂ“üm×±¹½MÓ:D³° n6ÙÚÞ¢m#Mp¸eË¸R4�ÆsLU)R;Æ»MÎ�+fí’J>,i*Ð·§¤íG©\ÃH¶©ëˆÖcHBÚZ§¶’fo£Féq~ÝD�RZY:ßÑµFržöéæ§Ì—	kF\½|‘·îaê‹(±8ïIÉ â2j>E|ÈËM+Â¸¶L¬`MB¥¬ÌÂ~1 ’'INæ‹å‚�Rå§(Ã¾¤‘”|+vÝ�€˜¤È=ÉEB1Lê„µ&ç•(�²84¶®Ñ:/f¥àÉ�‹s<«5‡Ñg–£j^òÇa~c*8tE’˜!©
+DgËìä�ƒÛ7©ïNp]‡1UÿéRª‚Ò_Ip{u\Ë›eª}‚àŠQ‘ï5˜S\	R’Wpì†˜¦Ä`Mé³ã‹ÒX‘b=sõ5
+V^ôJs/Ò�’¹âR$t¿‹2†®]2=>b9›’Â%ŒØ|1¥<NÎê®Ü‰d“b.¢}i½zZ™ª!¬ÀìL<÷Ž<Ÿºu�K—·¸xe])lx÷Û¶�jŸƒCËüäeÎíjÞþšó,ŽøÔËs¾ùë�ïÖüëŸúÏ×–/ý‚ËÌ��hÛ'¸wz“j$¼ùMrýÅ97ž9æ�‡÷xðUš§Ÿžrxë6FŒ«-6·*ï-X,Ï?{�d79·eyÃÖ˜7>~�TßåjÓR½z“83øã9rí2Óh8<¸Ë…�¶8ºyÌµ+
+k-ç·æöK
+Ë×í ±Åª€Ò!ãMtEÒ53M•C^*±â©¢ÃJ‹_¢EWØiI÷W¯Ä|N_"IŸñ¶äî©ÈÎ’Š’"ø„Š6Xf­eÚ�8îj¦�aÚ*�'¨š	»±¹Ë²	|àá�G^Íw~çw1™ìãñÌºÆ«üõð:ìàå;§´�ãt>eÆGŽæs‹F±"qvÀH5$×
+iÂZ…oç|ìCïåÛ¾å›xû;ßÊÑÉ”ñö>�½åm<øº×sûöMÌdÄ§_|�ñh‚‘‡s5Çû
+Ÿ:FN¡Õm`æb6fY‡ïfÔbP1"A]Ë�Î°|áy&“1F·´!/Um‚$¥FTµZÍÆî˜˜Z\ªI.â�É½à±v­GcˆÆ°˜/‰qÁ•K†‹—öxùÖ”¥×¸¶AˆlÔ� cN'˜”ùš.PYËÄZ¬6hI)”ªP)à’%´¡(irÅÙù²øÉ3ð@î\8ð’ÑáE™XŒd}"^Á–¤�3ãsO„˜T >0I
+2?�°b$ãU\Èã�˜©Á¶Ü©À3;ŸUg¾‡7vï÷Efª¬e²µÅæÎ.ÓãºfÁôø�Åì”íÝ]Ô¨Â”œöPfÍñ¾LŸ8‹ÇÅš|±õ›Z#U÷†»˜²3?½bkR†W)ýŠväõþ¤Wgõt`0Za�ÎÉŽ©XÏû¦Rë¬¦#Ý†”®-«øBf Æ°µž‹×&¦œè©µÎÂzôIþïSL+°eˆC|@ÔY¬ÑXe�â[<DæÚCö.^uu“�Ëbëð‹%�†ã¹¥ösô†åêx)°8l˜N
+‡‡Š—oµ¼í‰/æm�óïþù/²µy�ßý•oâìã¼ïÉc¾6áêùMNŽ®sçÐó¾.]ÐŒ&=Úçüö„à:~éC‡\ºT¡jËµK—xÍµ«Ü÷hí1÷ŽÇhë9¼³ä�k�.N�–Üî^æ|½Ë†>Ïé©ãdyÀt	ê˜ÇªM›Ü9„;ÇÂ¤±=Q4~ž»	ŸÑNM�`°’©H•QºL·•+¾8‹}Vk°`žæJï¬cT­&Dé>Ù÷š´;­íÎ@ÓgPýýJŸ[û>Ã÷[ó/��ÃÉ*Â²ÇÄçj"ÿ1Äh’‰«
+Â"ifQ8
+�ßqâ„ið,E,T>a’"jM
+šO|â)®^}„ïÿsÿÆãm|ô„$¥r-ãÀŠoBDðÀž¼ÎË÷ft©#ê–éÂs8óÌŽOØ6Û¶Ü)j~<QÞê‘BbÇÏ}šoú_Ã·~ËïaÑ.±Æ©f:oM„�ý=¦‹M×°»·Éñ¡bT[ê4ÁqU	)Œ	éÝ9¦ñ˜T¥ÒµD&²‰Â²S²¡E8¾yD=jmØ­·˜ù)³$E¶ªÈnužÖÜãÆÉ)[õ×‚µcŽÃŒÔ:vºUm±h"•­8hoaƒ¾Pqéü6§÷"]#�fˆÞ&¨�[b”b÷G'7‘˜¸wÚ F–ÊulT‰I�)®!BO8ZvÔõˆ.f^Š‰6æK¥«á4Fè\¢	Ææ®<”#ï·ÊHETÙ«dãaŒùØ2)Ii>ü{?E¦ö®�!–0¤’�uÊ£+—„¶ü÷ýa¯Ö&N]¶ªØ9w�{-£ñ„éÉ1¶ÞÌ—s¤àK^}ñã¨ÒM• ¨Uò Éƒ)­ü<CÆ}ï½PjU•Ïl%ï—ïgM!Ÿá69³ò(º'£ÈÈµbci’N%žbfŒýÒ^$Ã,K‘«´ÑLÆc¶¶w˜ïîƒäœùœðû+¨\v2Pbº’÷,h•÷^*­Ç¯LõåûÇ÷ftMäð¨Ék¿ãÝ1£]Írp÷æØs‚®¯qÚ@”Ôd“ÅôûøOñ“ü»]G7]rï ",,×®í0�‰ãù1§ËÀd{ÄÛÞü.œ¿Êlv—ñ¦áÎËKÒ{Ó«hÇØ*æíŒÑ~ÅödÄÁñm‚®Ø{õq®Ž„{
+R�¸e˜Ï…ÐF’
+Œ77°rÊÖdBJ†6x~äGÿßü{;_û;¾Ž[wŸ£u3|jA>v94tÔè¨0Q°	LLØ±t™«”š€Ž`BÂÆ„�`cÄÄ˜?&ågÊ_ëÿü™>÷û÷ÿG¿Îìsýÿ¯RÊ¹Ú1a¢ T0èh§2Ñ�iüˆY[qÒ¦­fá²:©ó$ ½�¢¡ª·¹soNdÄý¯ÿ;Ã›Šf%·ájˆìŒÅ”•cˆÛ”h~áC/roxöÎ-¶zˆOæ\?<FÙ!°¹œ2š3v
+:zbñ<	Ü»}�¯œç�ÿñï#*a¶XàCÎxG¡ë˜lT<óÉ§ù‰ñcüì¿ÿYvwv¹pe‡®Í"€.:íiQÌÓœ
+3Ê9á)R™D4±#Æ³:2ÚhNU­èœ#IÂ´
+|G¨7˜Øõ&­ÓµžÍÍÄ¼™bª-–Ë%ãÑ7O§(kÙÙÙ§ÏñÝ{ì�¿ÈÑ­c&û×PÕ#|úãïc™`Ù6T*cì^yw³;w�#v\á\$¨-îN=Çó%:E’ž ô˜7ŽØœÁE¶·4'ØÛßf¹X0ªG <^ç�ê¶éÐv«È¦Ì­Q6‡õW·6sÇòÈÃùDë<mç301´Ä›2P1„8PØ}Ê´à�ÒðÏ¾ŒÖ"}$°”R½éWŠ¹ÓhËh<as{‡­ÝsL6w°¶*Ù7%PjMá%=‰WV6/]*þ,B(ž²úŒbª`çcéˆ^1!–uÉÔ¯b!‚Y¥²¸¡2ªœåE8©8ÞE�¡dôi«±�4)ð›«P$šÙ”;7^æÞ�›xçM6˜ln¡«j€dö|/-
+-«=XÉ�>³oQk²ßž2 ¿ú¿xÛ_¸ssÎõëS*£‰!1Ùœšü&oA�Š“O*Ò¾ùò˜É¸&)ƒW<üøÞù–·°=Ùd:¿G=®8ìŽ™¨)»£eàî©â¹ï°=ö<öØe¢.áuÍÕ÷¸skÎSÏÞD[ÍééŒ.låùæò˜×]4ØÞÄ­Ûsn?ÅCW¶8Çk,ËnAŒÂþÖ«¸uç�¶q]ñOôGxâ‰ÇyÛç}¯zÍkùØ“Î°<cèº.Óx£ƒÎCZ½ ú$bŠì²—Ù©”·L}|©ˆB%U4÷z0
+ín¿_\¬ùsý¹ÿœÜ÷9~µŸK«ï3|?éÑó+ÄBÿnUä¶ogRÒ¥±¤X½ÅyC×ž§[îÓ,',æÌf5Í¢&45©ÑèNc¼FëšˆádÚññO=Ïú#ÿÿÖþ;X²<MÏÃžŸ96íõ÷–¯jß=ÓãMÏì˜ÅîbØ]¤@V0Á…@ØHF
+ˆ�Pe"@„d�%R#RT€ˆåîbÌÚñ¦§gÚTwùëÓûsúãä­®™ BQq"oåÍÌ{+*ó|çû¾÷}Þø¡ß²Ë=¡ô’ß�8Ñ‘\ßx8ãK¯3­=¯¡w/sgRP:¤iU’”ª58'°BBKª³ó¶7züå¿ü³%°ÎÒ¸ë=Ri‚t¸*Šù/ÿ/—7^{�ÕtÊ—~åÜ{pŸ[/ß<±Ì …Hö°´´�êFQQ×UjÈtŒŠÆÄTµ%ë¥äYÌbQ1�}½Á Kç¡ûýdL¹Z0È±3Dq`¼)À–”.Pƒ­,;£
+â^œçáù}BåPX¾ñæ
+W­(½ÄzG”!8‚•H¥Ùè¥ì÷<œN1¦d´™ÒM®rDÜdÄÊ[Š²ìðõ™b§Dù�¢�^dÈû›TË
+¥Lˆâ˜ÒV•D&žÑ0fU9
+mh4Rh+Z#hZG,^
+š¦Å˜®ƒèõb%H“�&Ø.w$Y‡úµ¡ï‚«ÖýŽ~ÜÍþ/d¼�Íuk‰©\a#¥IÒŒ4ÏÑQŒiÓSÓSÚzÕ�è¤^g¦«5�ü=�X»½Õ:böñ§G¼‡ò¸x_Œ¿ü¿rú}^ŽïSU}ÿ}EF®wq¤ˆUç¦wÎv>šÞË,¿�|úµ/ãBZ½6n^(§”ìLšÕjÁñ£{?¼G±ZÅ1ƒñIÞC(õøwtÅ«Sß­‘õAâÝE±�#š¥x¯|„àQŸøøK¯6Îã¬ààÚ%úÃ’ùä˜X
+hJ˜ŸMfÉ¸Ÿ!EB+�ß²¹9Àù–â¬äúî>Ãñ%Žgž¦:çê>EÑH¾ó.ÃAÊûƒ×¸4Ò|õ+‡ÔN3è6 ,9=>&înŒ8e<uk—ÝÝ¦<§¶?ðãôÎ�¤jˆì&iOÓObŽÄh²ÑHÅ½G3†yÄþ¨‡©^xþEö÷v>æ©§ÞÏ;o=ÀÔŽH%VyZÑ`µÅ)‹“
+N·XÕâ´Ái‡Õ«Œ¬°Òá”Ã)ƒÓ'»çùõaU‹Ñ-V¬4ÝíÅ×j}üÿó¾'Î÷ß>y(ƒU]ì®W«,F6ÑbT ÁÓ
+�Ê{j›SÅªµ,jÇªv”�ÁšŽF'½E‹‘’§|÷íwù¡ûqþ�?ôÓ!±ŽNg.ßk±Å÷í?L4~á×o3«5§Ë–wÞy—ÞÆEkè'	Y[’-§dÍ
+áZ)h” •†éù!óÉ	¯þ�ÿ
+yA¬º‘U”álÅd¾¤5ŽÖ¶˜ºf¾\09:!„@Y–|ë«_çÖsO1¾´OSxÝGR’©:Žˆtƒm#Fá1ÒÒKú$”LpÎ£ÂÛx’ØÐOc*Óàld	A*VµBzIªcŒ””"eR
+êÖ{GÒ²@3)¸ôÒûh…oÐs¼ùÀâ’8ô@¥È¨ÄèKÏfÚ§ªkJ?aV:z;;Ý.¢u¸°B³A]/qÆ“è1Ûq£Ü‚Í(¥1‘L‰lK?“Ä©F�È%6´Ø¶Y-ê†w¾û€Š´—âu	Dª¥6–kÃœ:Àda¸4Ž@Àp´‹T¶sñ—
+JGlngŸcZ®"Êôã$F!%JCI’H]èÈßãÏBt©…¢[ú«õòx=cCªŽùU,ß—Ã»o3=;îöMqJ’fDZwX“Ç
+¶'Æ½É€�¯õk‹×?ç½âáO¸;ÄoŠDøÍÒñÞµäã9twBV¢ãŸÅQ×­{çpÖuí'eV�—Aþ=EÜEI¬�ˆ\H �¥©+ª¢ÀK’åŒ¶vÈC´ÖÈ‹4E±öÿ\ˆ!Ö‰Œ~m:ôn
+
+¸ñÿ8uRéäÊ«“™¡¿™BèN®R
+<(8=�±9ê³³Ó‡D‘Ú²ˆp²¢µår²*åxrÂ&.Mñº ˜ÌøÔKàóýêRð/^»O;Ûâ³Ÿú×®?Ã¿z—K[O‘Æ¥+ö®mrçíÇÇK²,ål)ˆ¥£V°™xyg‡BncbÏ í!êŒSqŽ´9Æij÷(Š.JvsøàžeóÊ6J
+b¡Ù;¸NEœ= ¸ŠH:‚"ª3Ï¹'2“;”!toôŽû£‘A#BÔµxN®ãf#dP	TÈõë)Öø¹ïýz}°¾þíwñX¾ÿ¾ð}�ï½æ“·2(dH D„Ðu]>H<)Þ&X—àlBkbfAqî-“Ö0µž™ó¬,4¡ë„�)ñQÄï¼Ë•ë7ø3?û—ˆ³^—j§»ll!<R<NÕ¸@Ýè>øß¹wÆ¿q
+xtxÎá×¾ÂÕK;ÄúÔDóCÆõ9ývŽò5­rˆ<f~rŸÐüo_ý+\ÝÃxO]j[¡UÄ¼,°ÞÑ%N)Œ\yúýñwÞ|›Û{—Ù¿yÀÿ0M¹"Óí ÒŽ~Ä|	Ö6(åÙHŒk¹}4ïDÂÑ ðjJåZ¦çž�­«
+yã}
+•$MN­hUƒ e„P¦3
+ºÒ±4%Oím3›”¼ù�·©ÏKnŽD9I.q”8È£œƒÝ=®æ‚²<!9x†½á‚éƒ%/Ý¸ÊþxÌPÆÌý�
+´UKš›î] <5#†û—©Š%^*cÚV“jË¢‰˜VKæ3GÕ´{2²Hqõ¥—¹ÿ á¹k»(¿äöaÉÎ~BÒ³œ?*HbƒWrâD#5ž.¸	r,GgŽ—Þ÷ˆ#N�[’ž¦¶Ž\Á¥
+M§ÄQ ŠbÆý�ƒ—ÔM³†ÿy´¤ZIÝå¦\,ò}X[»¦mkÎ�rúèóéÖZ²þ€~D’¦ë,ønÜsózI¼à@=¾í¼~Lô]óá|x²ˆÇ”ÞÇå#|_›ñÄ8ìB¬ÖR]½^˜«5óÊ?Þÿˆï
+‡{rç"¾·§�	•Ø…J¡tŒŒbd”�÷F76Éó^ß¼Žï½ Sw²kÝ©º.D6áºxE¼-®õÌÏ¿:¦\¹¶A?Oxçí'gŽÍ�”A‘Æ	Zô¹ó`Š¡@¤¡3öÆš¦:¢ÅÓ×{TÅW-FŠÝíË4ñ˜§o8®3ugøBóöÝ	eTðìµ1²^÷sÞ]¬øÖëö7=»£œU[!û0cnìnÓß3èm£¼¥”=ÊÍé)ož?Â©‚þ0c®,ç§ºö×7GXoHóm*³ì”¡[º^~úi†ý˜·Þy“Vx±Hq­¯Ñ$x«!¼Æ‡åc”O>E#Ñà%2(TPH¯A#‚B†éãî6D!C‡å^#½î¾ï»×•>Bù:’°bý<å#ÔºhÉ Q~}\Üç5*Dë×ènŸüú7Ý†á#„—àÁ'—â\ëú´6§lÎ]Ä¬Õ,ÁªÑT&¢¶ÖiÐiGfM2Þºûˆª…¿ø—þ
+W®Ü¢µ­4ªyuñôj½8klw·Œýù¯¾ÍwÎ[Î\ÌÉÙŠÙk¿Áó/ÜD´%º]WsÒv…ö5BZ¢Tqrò�jrÌø7ÿ*W®^¢±
+ÎL°xã°ÎT@‹ˆÚµHÆLkxúégxå·übÐçÚÏñÔSOseO)…-:JñÆ0mkJ³"V
+)"ú½;xŠÉƒ‡Núƒ!‹ô=R�Š�ÞÓ
+ú±"¦%ÎB@?‹ˆD‚mµ‹C)Icº¬’˜îý‘�w™N>(9+5·ÏÎÙØa�'M4Æd8,RõºXÜ,æÎ;'X#ˆEàÁQÅÍ[TuC_ÂÛ÷Ï‰#I0î‘"¡qž
+_bI!Ð6K”L	J‘ö¬Š–išªeÅö(Ç!˜/d‘ ]žÒW’¥@Ä£G‰NPBqiwHo˜Ch˜�O÷ø$'d´‹	û{›œÏZ¦“sÐš�T*Qr@k=·®¦œÖh™síÊ.ÓÙ‚ªi�D˜º¢ŸH”µ¢˜¢®°Bt£žÐáR.NºRwŒr1§\-Aj†ÛlïÅéÅ©±‹�}Œam´ìºyÁjâ	ÑJ' ¸€Qþf±øMËòï•é®—BtØ™5`3Žtç—y˜Â{ã5ñýœ¬5f^<¡üz’
+ã× Ì°Í³¦¥m„TdYN’¦ÄZ¯÷JÝø.RªëJÖ„d©ºáÅxO¬Ã¬ì:æb.§~ô'_y5O«Ó‡4•¡6Bàù÷íqóê€8ZRÊ)ÃÍ1Á(æ“‚¶©ÙÜèsrç„QÜç}¯|‚{Gòý«|òŸÿØ5Î¿ûU¾ö/¿ÀÝ×Žùù//è,ƒa`¶*(æ%“ªäáì®ï¤|x;áÒø}þ*/?µGP5ƒ].aþpÉ·_ÿ&oL™Ýåøì!¿öè[;WX,#nß-øú—îrùÚeæ“Y§qÖ‚83lê-„ö¨,£m`:›péæsèÑwŽç4M‰3]¾€Ý‚ØKÕ)´ð´!àd·ö¡ÃW;ðÂ„!ÂdçTêb¡rmF]eá"zfMFÝ}ëïyù½_#=A¸µJÅÿÞ‹×ü×AœèFp»†v4Ï†˜R$,œfÒÂ¼ŠYŠªØ:Â5ÂÅ"¬qDiÄ£“cN§Ž¿ðÿ&þð'	A¬‹G7^èv-ë®Ètæ4£Ößó‚³EË?yí!o¸ˆ»KÏ£ûg´�¾Ã­n!�ÁÕ+‚ir½/!ptïiÌ_ýË?ËÞÕª¦Æ;EckŠ¶E
+�W�CÓÖxo¨Œ%‘:êcœcY�ÑÄLæKÞ�³3îC›Ä+Ó•§5†jZ�¤ÃÒö�6‚å¬b0H™BK”G4A‹ÎÙ=]ÔÔN²ª5	ÆUE"8=§0Ž`!R�³Ô�qv•»�Þ¦7Îˆã:îB³‹&A3ªó9½žâQSÑ”%yž²²
+uH¹z ¾D6ØàðdN;¬Î°�!×Ê§x<³³SvöÇôdAÚß%6+b%Q¤+�‘íxÒ±¨$ÉjÁæö‘D,ëŠ²4È6œ¥±ŠÍH³t3æ“CÙ’eeSlë@ÄôÏa#‚`ûÒ˜¦*9;;§R�+²0,]Iëàþ£†­LC
+£$CÈ–é² ×O1\Þ¹J¢6{=ÂbÊ½ÉŠÁ`›ÆVèXã� O4JK¢<gc¼Ãö¥Ë¨¸Ï`´Ãx{Ÿ8J0e‰ÒŠDudÚ÷beÕFFñØ,Ö£¶ð˜XËcÃßc·ú“JÉõóy’÷…@	ˆD²ë~”ê27´–�çc½÷
+ïáö…x¢©‘�Ýóþ1Öä‰4ÆuGÕT%““CNÝg5Ÿ"¤yN’¤(­óeÖ®÷uL­\#j„êèÑÝ^e­0õtAe®ëS{ßû_=ŸžcdŠòçìŽöÙÜÛäèð”ï¾9ãü$,Œ¶2š: ‚ i,s7`VI"$¿ã•ðÁŸæäÞŠ¯ñ‹|é;_DD’‡3~ýî1$Ž�á6›ýqäéç’O{vÈÁæ&‘v,´êÐ…%¤Ž{³sfeËî(¡Y
++(*ÏÎ¨Ïb9¥Z–T•aU5œ<œàG–�7ø(æõ7O9œÌ™/V¨Db5¬VÁY®_{†ÁxÀ½Û·‘öBYr�rï”#ÝÑ±ïÅ:Ù‹‹åujÙ:`F„5€ð	Ÿˆx¬\àÂã‹\)ÂZÜ©D‚|$-.\°çþïµ4=>Bÿf$ô÷]	¹‹|ßið�S7ÌÆ”&fYKV5¬jEY¯3´Û.“Â¯z>Œu|÷»oó{~êñ;çïîâN˜Ö µþÍ?Ü	D$ðÂv)ùÎÑ‚ÿö+˜Ê˜édÎXx†‰a”k¼­±u�t|·0?;9$Öð×þÚ¿ÏîÁ.¦1œL–Ï'Ñ”Ë’éªÂ·æ9ù,›
+�¥õ¡#Ò¨O]žóµ/~™|Øg´‘²u5â|"Q£ŒX+bÏJ4-Û}�ö
+68ú[=œîÔV1#Œ+	A±r–U8Ÿ-©ƒåd± ¬*JÖUZ	aDPSu±Ú *JÊEÌîÖ6�Þ�©Œ ,‹Ã3LH¸~ó2ƒí1ƒ<Ð˜ng±¬Zæ¶EÖ‚\@a
+Ëå’÷nóìs�xö†Ž‹ç‹
+·D‰ ‘ÐS
+5¾±FH…ml�²$×Vœ	Te‰ÑŠÁælŒA ²‘GÔ™Æµ…iØ�ØÙÜÂG2Z°uÁæPãTÊå‘çð|ÎìÝGÄƒ['|ðå>¡UŒ²Ï\¾ÄjU²ª=“£SD:DÐRÙÎô[˜
+ésÒ,#+Ôè2UmI’G�õ‚,x§©«�&Ëdƒ„Í¸ÇöÍ§9=:åö·¿¢¡¿}€ö‚4•ô�šH% %R9|ÛÇBêNâJ‡ÿrm¦óþYýGJ<–Ñ‹':’GßÁ-c%ˆµ Rë¼˜¬ü÷øBÖÉ†\Ä‘ËõIýBLÀm±6ÿ®úÞ?ÞÞt§'OÛÔ,ÏÏ8;|ÀbrJž|0 ë‰¢ø‰p©÷äÌjýs…”kÑ�Àãp~=.ôÀÚ€úÔ�üð«Ûã+ôú=öo<OæÜÜqõiÅjÞP´™ôÉ{Š³Ù
+#4»;<º÷ˆbå8]6|í­üÁ?ùÙö™ß=åÓ;¼Ê½œKƒˆ—®ï#´¤±º+Þz5§¯S¶7ö1Ú2/[fõ’Ò�vJ§8žÌ	Vm
+i*ÃbÖ€èF'G5�fÔUÅÖNŸÍÍ>õ„ˆÙÌ#’ÌSËÖÎ>J¥Ô‹o*”ŽY{»—¹rp•GŽX•JkŒk‘²ãËº‡�éÀ&]"_@¾§¤b½ïš°6é…àßS‹„ðÍ3¼—}ðØftÁJò]Aù¾ÆájÔ¿Ó¾6M/±NbœÆø”Úe”mÌªVuwõ\µ]¡pAàäÇÔÆó­o½ÁOüÄïá�üÑ„Â­ÑO^%=yµÔýK;”Œó+5ÿÏ/¼Ë×N
+'UKÇ�¬¸2Œðå…'Â£|CDË¯}�—^¸Éßø›•¤Ÿ°¨V »¼ðºµ,K¼„$�hë–¦²4ŠzE°Ž€£¬,!ÔÈ±²3þþßþ»üÒ?úïøÒ?û%¾ø/~�Ï|ú%û×YÌVàkdyÄþfÆ·°µ¢õ‚¦²€A&]¦I@Ó†–Ía‚r);¨b¤SÎW–ÓóŠ­a‚D2Y:tÞ åÞµxyª˜®V«†ƒ[ïçäÑ·hœEø˜|cÈÍ½6ëÑÖ+â4CK�
+�K›=¶·$G“9JõifK&­evÞpíJ�aD��¬7À»i�kƒÞyžaÊÂ¢°Âé8CœIBP,«ÒIÆc
+4¬ŠšAœ°(æ®®¹´=âà`‡E)é÷2lšâ4mE”ŽRÓCðÖÙo
+Ñp“^–³j¦‡3lÈÑƒm“»ìmoclÀÅÍKRv¡¶•\ßØæ™k{_~ó3«0¡!Ž¦ÅŠH)‚ˆ:üIÜ¡ZLpD>A'	|ùE¾ðOÿk~ãÿ{¾ûÕ/òÚ¿À³|…$ïSTé<Nt#-"3[®Èó„àuÓ…‹ÅúB†žXŸ?X%~³K„·½$Ök¥—�»ÖD€‹M¾a�¹–Íª‹Â!¿w:ö8ä=eö'B´ºÅ�Ã¶
+mÛ¢ã˜áF'wÖQüØ›#×…J?.jOŒÄ¼§µ–ÚXZç;Ì�_G;ô3ïÕ'+’¾ÇC˜Îßå/ï’ÙîÂz°£¡–œ<\ ‚g´5â|E-™¯V¿àµ/ßeUÄñ9·Ë£sG/šÞpŸa[£z	&	×¦šãC„�Ù8xš|+bZX¦³¶;Ñ¦@h™
+ÓÉ„«›IÒë‘R"™pçþ’�Í>W.�ÙÝÚdUÔ”m´3�Wœœ>â`o—<M(WÊbÆý5Bx”
+¯o_æêÕ[Ü~ç]Šª McZSw°K§pVBŒÝÉÃµÎ™^Ë{½êÒAãœ\+#º¥±XSQ½_ÓRCx¯H|_¥ï­¬Öî×õlSü«»�õño(1â„&ð^a�Â¸˜Ög”mÆª�YÕšU)YÕŠº�f�YáƒGh�Š7ß¸Ã¥ËOñgÿü_&¿7K}-ßº$o�ÁáDÄ×­ø¯¿ô�{MÌbU°#+¶Í9ªœ"mƒo+\[ BË½ÛoðŸþá/üª¶¦µTg€¬ª†¶6]xˆòˆÕ²f¶¨h�e(ªŠ4ÊñÊ0_,H¢Œá áþçÿ%uYÑ¶-Ëù‚_ü~•�|âŒ¶7i+Çé´`:­yj‡dÐ£©j"W#Å £Ñºß*,‚ÆƒŠÆ´Ô¤¹$’ÓœTD:FHO,‡*’D”£iálRc­ãåëCNN
+œ5(mG9£~CXaMŠ¬§D‘GEŠÖ@yRÓ‹Q’@/£Ÿèåžb¡”Ç†À '¸Æp+E´]äyQD¦ OÞA�)Þ7�9M÷ñ˜z¶ ¶–³ÓšTxâDãCKÒKÐ­`s;e5_P‰šfºâj/åêÎ6¯?<e^–x$KW³˜×Üº¼�ˆn¿y•ŒyùÅ„Âô0ÎQÕ323›NØÛsX6T³7X,M;§lkVGÛö'§4ÞU85Àj�
+Ž¦îT_ÎZb�ÒÔ5J+B¦(òÂ/ó…öß³ZÌ)–s¾ùåÁGô÷SÔ%º×'r-m[ÓGA–bTËbêg’8îã•¡qÐT­Ä{R`B¯C´*ùÒúaÄ‘&Z�‚<¢Û%¬—ö¬Ñýˆ.—¦5v?»Ž^«±£Õ×EÊ³v“_0Ï$èuØ—Rj¥�k7¾�š¼?d¼µCo0ìæ…cíRkÃäEüòEsk�q×-øýúœ¦þÎÏþ…W·—8½÷€ùÉ×o]çê­ë|í›9š[ÞÿÜSdÑˆ¯|õ->öÉ„8á­ï.ˆ¥¤¨Vd²¦ï?ý‡~/Aõ¸s²àÑé”ÑN‰]M‘n‹·\L¶4Üì±uëe^ëÖvv÷Iå1yS‰”F	ôÐÓ8Í(‰ÙÜÛâ|Qóp2§j“ã’»ïÞGË‹7žgg°É·Þ¼ÇÎþ˜ývÎæ¨ÏÞ•ž¾þÓ² ,‚O¹ûpÎû?xÀ²X‘f9ÓÙ‚eQÒoðá�~’éôœïu±¥Æ­=1¦•8¡ié
+‡[:…–
+ç; àEKD„’€z<˜b­­™0òIþÍ{)V"Èï-
+ÿš"þ'�‹NÀ…€ó]Î¶	1�K¨\º.ËJPÔPÙˆŽU(0Î ãEŸÌ�ºÏÏþÅ¿Æ¥ë7ÞS•ˆ÷fÅRÊß<:O¸meÄÏ}ëþ»o1·šƒQ�Íö”¬x@ÔVè`‰eàäðï¾ÍŸøã˜?ü‡~?&XªÖ±*jTp”e…’Ê´]>‡´®E‹œóùÛÂæ`—¢®1V‘¦‚$êºƒ²-ùÑÿÝ¼ý­×9:|@]×Œ·xås?€P›q‚Ò1s�2ÞÜÄ
+‰¯zJU¥#d(qF"ULÛ@ô{=¼¤qÆª,°6PWý„ÍÑ•™¢’%b’:gu¾ ìw'!mÆÒT�a<ÌXÎ$aû)R{„Öž:ŒÖG¤&G›W6iëšóGGlíÑÏÁuÈü„–�JêJ0�5äiGÑ^¬–X?`¸s€_�‡
+›ì¢¨9Ø8çhÚ ¼Dê@”wƒ¶%‘KîÜ›�÷r|3Üq4�Ó'0?<fÒv6ûDÑˆÂ.YK._ÝäÚÍ®^²¼öNÀ:è÷RÊéŒ$	8©(Š’dº ÉÆ,î³½¿Ï|zD&­lxx>§¨
+i”²³{W–]8œn¨*KâS*ãˆ’cZò<&�q
+ÛÙ6?ô?Á½Ãœ<¼Ïóý<Û7‰ã„Õd…Ž^Hæ„õÄÑ€³ÅŠ�‚o™%JE´­Gi¹Žïý^‘ÕÅET]áð2åq2ÇZƒm-Ñú£í]è‚…B'
+%[ªUÓ2ÓèÂ¼¬sc×Ü«Žz,„ÂXwQY:9°T]²."@Û4,¦3ŠÕ©ýáˆ,ï¡u´öÓtŒukÝcƒ¡{"�Ò8‡1kÝ{yJ·§¯Ú6áïÿøsâ©qN¾¬ççüý_ý*÷OOyå¹k¼ðÜËÜ;5d®¤YRYøÀÕ+|ôÙk¼üâ6··øGÿäWøÅ_üW¯<Ë½³9·ÆØhŽnæÐ9š¶<8ŸÐKÜyxÂtVsóÆ
+¼I	¢Ïö°Ç¥Ý1ÓvFc»¥MÔ,9ŸìŒö©
+Ëjexð`Áõë»lï	ÆÇöØ°jàÚ­B]ð�wÎ(Š)R8ŒuTEE§¤½„fyÎÑ£)£ñ«UÁä|Fž§¼ïý¦,WÜ½ÿ­S¼�±N‚Li½Ã®sÁ­ïÆ]ö‚Æ†näD´Ny“¸c½ìŒSB­‰Â#qAà…XÓƒºûº-‰Z_ª?Q$Ö¡ïí$Äã%Ý÷,Ö¾çq‘¦¶^~…‹xÚ ñÄØ�P»˜Ê$ízÿQ	ªšr[G.ÀáÑ”Ûï<âÏþ¹ÿ€~ô“ï¥Å}ÿïö}ˆlè„äAÆœøG_¹ËëÇKÆý!y9eT“5çÄ®A8Ëƒ»oãš‚¿þ×þ>ö©�P×–Ù¢Âxƒ”’ª1eU1è�XŠò!'Ós†ý„A/¡h&,—�éü”4 e�ª1´•cY—¼ð±WøÐ+!ïg¼ø‰WØ¿õuá
+Çœ-çŒñ<ûÌ5f�"6•‹ÑÃ]Êò)Gì]òä^pe{“G‹s)Î6hÑø)Þiæó†­ABO%ìm ƒ Z5ètÀ¢44U„’žþhŸñHQØšzU3ˆZj’´G],;tŽVøÐÝ•¢S•÷¼õÖ’�í>ƒÁ6g“c6¶·HÄ¼¥ò=¶G#œµL¦KŽNk½”HuôÖåâ”ï¾»ÄkÅæ°àìN–1ÒEàW�<6ôña‰FjZcI’ï-V¶ø*eó’â×¾ùˆ¸ñ‰^Eip«’\mP„š‡wJ‹’é²`oÐ§×ÛæÚ¥
++78<='Š !¥¿·CS-èíl�÷F4å¢‘†YäèËŒ™-9~ð•hÒž¦©VìlçL‹
+­:‚Ž¦…qObeÂ¹¯h¼ã?ø;øìÿì§	"£*–ôûy¿‡�XDÔQ—ûiJ[ŽŽ+ž{¾GeRLÓ©¡‘‹cÖáñ((„€þqjZ$‰„<í©Ûv¬´ºi!_¯9`Î#”¤ª=�u¤BPOk*¬µT…Á…@¤4‘Ö]àÁ[ì:Æ¸áu‚ ¡¢u÷â(3Þ}ëuŽî¿KY.ÈÒŒ|0$M3"­kZÝ:ŒëF¾�Öi¬Ã¹nÿa�Ãºn×òØÑõ¾ùü«ß}ø&RÍù‘Ï}€/ë‹üÊë·1êŸÿü�@2à¼ipJp|xÂH$ü®O|ˆÝ—žådö€ÕÂ £¾ûöWyýÛopc?ã¯þ¥ò…_û÷Þ-yñÙ§˜LîaÃŠ\6DrI$[}ÇÖ0�D�íÁœ�‘"‰¨æ$Ë!}j6ªØé÷yûö”³é–\ÛÎ¹ys—jÕrÿ¤FÇ–×Þ™p4sŒz9>‚,�¨ŠŠº–´«9^Bšˆâ@Ö‹‘RãC‡GžL§¼ÿŸd<sÿþ!EÙ%Öƒñ
+ÖÛÇÞ‰€Äy‰õã­¯h}WdLÐØÐ9o-ë;ê¬Gã‰:Âº›	(‚Wë–D>áPçq>ô“þ_]8€|�¸ pAÓ¸®€&¦4š¢•T­ 6Ó�€º(S/	"áµo¿Ãø_þ4?ù»~ÿã4Rñoùã½¯	„Ò¼»,ø;ÿŸ_&Êûôš’ífÊÐL‘nÅjzÊÝ·ßà…çnñ·þ÷ƒÞx„ž6XŒk	–EMm‘Š©C F)�N$ói‹PŠÑ8cÙ4ÄRcMCÇ4¦†Ð«¨K¨Ô¶/móéßúC$y·XL³ˆÞ@‘÷7)”¦8¿ÃÁæ…—ˆöˆ0ØA…uA¹Ð8<…”d±`#…²‰¨}�2‹Gº†¤—0Üˆ¨ŒÃ„ÐeÅ«U	•éb–C;c =ÃaÆááZk"¡‰rEº¹ƒöAh"iÞ«å[lHìlí°j*Ã!«Z±?ÚäèÞCÍœ4dºO¤3¤+ˆ	ImúôÝÕ1Š¶’4¡Ä˜Á™jÊÒQ/¦Œ†C	veèõc‚¸”ö´®!Ò’~<d˜9y¾M+2V¶$HOyF}Íraœålvkc¢FðÂ/õ–4M�i5�3Ë†[7%'g
+Y3Ô+’þˆ£óSzIÄÞÿ4³Ó‰Ð4ZÐ®b”‚$úy�DCQ58áZO‚ÀM"æ«!DTuEÞ1ÞÒ4-$šH&�´Õ'WSyÁëß<åàê.Â9œÐ(çèëÌ‘uÀ“´xÙ.I‰dƒ/®±diB±,PiB»(ˆóGÇæQJª4mð4UMê-mÎGÝX¬µ‚(‘à$Ãa�ªXÇ‚D)¤XcègMw{!gZîÝ~“ûï¼Ñå¦ÏÁµ§È²ŒHuX“ºé‚Ê¼shÝe¯<^ÎñxDç×‹ú¶™úÈ‹Ï¾š�¶(LàË_¸ÍîÖužûø�ðÃ?õû9<ý&w¿ù:_úg¿AºñÜÕ«ô‡1«’³ûs>ñô/_*ØÝªÙÌ%—w$ãþ€²0ouðD.ÁT
+Kß"Õ&9bU?DƒJ$>Ìš†GË§«Œ:LÅ9…7 6ˆõ‹bÂåË£aBž)lEU·<¸·â»o,iËŠHd\ÙN»y¡7¼ðTÊ»wæô¢„ëÛ‹…gY.ú€âîý{ÄI·8Ô‘ ß2[,ÙÜ¿Éû_|™ÃÃ#Îç‚o.Ðc:²g„“8Ö™¢Cš[/1!Æ…%êNØ^¬;Ýu%áÂÄ§D]‚[ü{¨ä xŒ+ø7ÿšzñ¸¸0&d×AyEã4•‹©ZMÙ*ŠFR™d×tVä.3êñÚk·ùÌg„?öÇÿ×H­iƒPâ7�«þu«{�Aˆ'ÿ×ÿñ|õî9£\³SO/ŽQåœ£É«É?ñÛ~˜?þ'ÿ�ë$ÏJk¬õ,ËŠ¢*Èb�(
+fuCåœÍæ!¨­C„–º^²¬Þ•Ìç†(Òô¢œ´Q¢™Ï+¦Ó’a¿GžõˆÈxøîmŽïÞæïÿ'ÿ·_ÿqÚ#ÊzBÄ�§vˆâ3F#O+F RŽÞ&–)B-qnˆi2ŠHGÄÊ1�–Dgôz›ôz}²T“‹>iPØ¤…V1“5ÁÇ4F Äoû!Ù»´Í[÷ßeV;v/ï£CKpÑÌP¡Á˜cNðØþ%´J¸|ÍóèÁ	J5„ºÂs.?;bzÌ­˜-È¸åÊÎ¦ª�:#SâÈ‘¦è,ÆùŠXö‘IŽ�=pM Kcˆ2†¹âÁƒ[Ã“Ù”,ÍèÇ#Ê`ð­cV4¼sXÒ×
+Ú¶6+Þzý„d;§®[r26·%«¶!×}ªùŠ^~m[vw™,,FZ†qÎæ@ZÏÉ¢"�6°Ö17gÜ¾ÿbEµ˜ÑOZÑ�w¬+¢S¶¡!R‚à:±E¿S{ƒ»ÃÀ¯áŸóóÿïòèÞ}Þ÷±�ãhlKUVcB¢#I¾±ÝOp"Æ‡÷I†Q÷®“øš.åO±ÞTXDÃqc*Ò :!ChÑ±BE9‹Ù9y–£’œf>gs¿O¬TG*Îâ¶%�P‘dÜëÅŠ~ÓßÞa~~Šô�–Àp£�pŽD'TÕ’ƒƒëLçSD‘£ÍóÙŠï|—áxÄÓ/¾�~:¤?±(kZÛñÊ´÷k/È©X¼wžYÇwÂ±5þå£ùÐ«ÏmhÅÄ´QÅÕ—žçAåùÏþÏÿùî%~èÇGßýB—|þsáék›|íW~�hæ8=ËùyÌîv7sLÓ>Å‰`#oÙ,‰Š�Í�Ó¯D{L¬£L!�²ž*‚x¨!L°+Gh6ˆzg¸\QgÐÔç®eC.]Þf´=àz?c5¸(Ðë+²AB¹8dcÜ'Ïcî·LæKn=u‰·îMiŒå`'g÷óbIk£qŸ­áïºT[”Ìç+Òþ˜�}ò‚¯xû�ïbÛ±ïÖz¬í¤­:ü´]º¡¸‹1—c}¬:Tu§¡î‚z¼ï­ïå¼'îˆÉa�MxwA}/Ô&<Åü¯åò¬�­¡ûÝŒS¯i}De»Î£4’²…ÚšÖ¢£ˆªiÐQÎ·¾ù&»»×øËåG6\ƒim³V›É‹õKƒ÷’’ÿÇ/¼É\*R¿dsvÈV9çµo}
+Ñëñ·þÆ_æc¯¼BÝâDQ™¦‹5
+![”Ž¨½eÀù–Ö<
+i¢˜ÏÎ�ªGo4¤u†4îSW-Æ9tZ#]Ž‚,Þ —HÊº$�NwÞ�óÿõ¿Îôä„£{÷øõ_ü%ž¹ñ4M>äð°¢ZiV'Ú6F‡š�á*ë®Òlc�YL’
+Ì|�F»˜8Í0aI¦R�Î¦ÉQÚQ“±š*´X Üfç²‚þ�—hç6û9��™­†igæó!A)OÛ¦h<©˜s~tÄÉqÛu6¥0
+•ih#¢þ€ÍÝ}ÎË	1Œo˜ú»»¬æç¤™A#Bƒ…�XQKÒÌˆe‚¥&ŽuÓâÊ‚¦²<}0$“-Û£˜¾Šhê–ëýŒ8XzI ÕŽÓÛ'DÃ=\ÿ:O=Uñîýš<’è,¦)#ú¢ÂyO?Ï8úÎ†¹F”GèÁUœNxñFÂ£IC”Å &+�“5©ìq^®ˆ"I?êw»'oéå9•©�Q@¸„,i1Þ£"‰hq’²½¿ÍÙñá°…åÚ­gø¿ýþ
+çÇ�8¼ó]Þøúùà§„(‘¤yÒ=Wz¤ia¾lI¢„²ªÑÑZý„Au€Öqô¤¹œí4±1²Ë—7d�k@e’bá‰zf5Ã´�<ÑÈd›ùrÂÖµ›¨<'ƒ-ådÆ`”c�#ñ�É´`VTì\&U9ÍrN…ÄØÀÓ7®s69âÑÑ)ËYK:ˆ‘RpíÖU®¾ø)v.?ÏpkƒË[”¶`´±ƒ¥"ŠZg˜Ðtç$¡J"¥[3$ÖrâÇÄa�ú±ßú»_]®j´[AHÍ€£{gÜyã6õâŠówÐYÂó/ý0‘ÌXÞ½M(
+·W{š[•Ïxã°æk÷K¾qTp®
+Î«–e•PÖ1z+Á“bŠš6LIEÓÛ îçÄ~ÁÃÛgœž9VEƒ¢"EdÍÊŒò”§v58Iºê3ÛŒã!aCÑ¶·{ì
+ôGCZ/™LòÔ³ZÍˆÒ!WöÇTËCÉbiˆÓ”²>§8_QÔ5‡'Î§Kò^BÞS�±*k«š§žy‘+W¯1ŸÍ™œ/�:Ó�¹Ðk¯%nÖzüºHX×�¶Œ—8ß)¸Z§°>¦5ëº.Ày�óQ×­ø‹ý„Â!±¡[Â»Ð}}±/ñkSãÒßec?v�\8IÔ:3ûbäÖu]gÔaKZ—Qµ	¥‰Yµš¦”�í2ÎG÷8=[%CþÔ¿÷³\¾y³sÊŽÕƒè2ü÷Q©;M¹@‡§!Ð1¨˜þ­»üÜ¯¿�Ö5æŒðè;¿ù
+~üwþöÏÿ)6ÇVeEc<žeQá¬§¶
+E¨Ë©®mé�û,+œw4Öa]DmiS›Šùt…uÝâ<‰û,–3zID
+bÇŠ¢l1µ¥ßS<|÷'>.z_ü•/ð‘O}‚÷¿tƒKƒ1i.ÈãB­Us�¤nm¨; fP <UqÏÑOWÓ#HM¬VöºÿÓPQÖÏ&Mu‚u
+ýbÓ6glôcî=¤mK„ÏÉú1m5e¹’¨°dr":ÄN” Ò!Óé
+¥-V§Ä‘D“0_U<:9¤lvÓ!{—;ð ’	å¼de4oß^!¢ˆA.ˆ©Á+TÖ'„ï*Ò8#ˆ¸3œ6ŽaÀrU’h…ô1*¤¤yD]-»e²Ý%èm'¤ã1ïðÍï,di?"“c®5—®=Ítî8:zÀ‹ï»FosþÖ7ñ2ptgÆsÏo±¨gÜ?òÌÝ§ß‹™,KR™à]Ù½ß"ƒI7Vn:¯q)s‚¨T!Œ`8è±Û‘Æ5nXú˜ÑæßúÒ¯â½c9›Ð–5·>ðQŠ…ÅPAv….³,W4µ'NT—c¿Þ]:ÂÚYþä%“ê¼^RpiÔ1Ú<n]�B¦TeK"=ñ`Œ·5yžb�¤Xœ³µw…º)ñ“#²ñ˜ ‰99:çêÎ'$�©èg	OOñÅŒ|{‡½4es±œÎY¶qPì\ÞGˆ
+™˜<ºÏ_ÿ
+eÕråæsÌkƒq)U»$’ÑÚï>cU5ä}�obmzÍ´ÆÙ@”tç	Ô¿ÿgÿô«ªßç7¾õ.ï¾»bkc@¢-¨	õ<â'ô3<ûÜÓüÂ—žýÑæ¹­[ÜûÂ×ùÇ_>äöù!u¤¨íÓÜ3
+«Ö’E�¤8ï‘}O	Š»u˜¢t…’Y–PÏf„bŽ	‰¿ŒKKÑP”�§Go><æõûÇÔAS¯2¶Ò>J¬¨êS–¦‡b>§ç³Ä’9E¿QSñàîŠ7¶É³”É¤"M<iºÅÝG§KBc¸öü%”RTUK¢%£Ì+KšÇÄ:%àÑ±"Š·øØ'>Gc%o¾ý€Æ¢$ïKÖáœíð¶ë$Z#h½ÀzMc%ÆE4.ÆØ˜Ú%Ô6¡
+]PûCŒ#¡±­Ó8"Œ�h­Æ†˜ÖE¯1!Â²�…‹´.<^=MYa½Æ:½.Zªû{ˆ¨]JësJ“Rµ‹2¦¬SV4NQ·¤FÉ>Ë¥á­·ïó'~æÏðÑO†uÜÉ{šq©§Û­¯·Þƒüxð8Œ/»B—á…à­óßüæël©’;¿ñOyjKóç~öÏòÊ~Ž$ÖLç\°ÔÆtÅÃÛóm-è¡uQ£UL±˜ã„¢(ºxØa/&N»(Ô¦ôLNK´vÔÎ0*”ŽP2ãÞƒsÊrÂ`ÐÝ‰!„V|ðŸa¾˜qÿömn=÷/}èe¶o^¡®+FYÌª´ôÐ‘ÃU%²Éï_ïˆ¦"Ž#dlp¦ã6i«e½œ½ƒ=jS³,fl�Çh«${ôÝŸo�%¾SËÔ%õªè²ª¥' =h�¢CBéj¬/ZÆ8z£A7Fó�HöHDK¬²,&xOSfS…Ì®oì`ƒ$N:7y[vvvÎbƒ&ñ5R,=RY“F1�-‘QBÕ6¬j'­cÒW¢E†PhÚ Í5!ÒhÕ'ŠjŒZÃÆ¢btí
+÷ß}Èdµ Òàë£4ÛW.³±�3WšÉ¢ šÕ¤ýv6*ç8™ÍñNâD…r’þX³(*²(e:34!0ŸÌ�RV«©,©á±óc6†¶QÌe ò5×nòÂÇ?…à<û‘ÏðÔÓÏw\µÖt¤_áñ¢¡×ï“&UÕ egÈUdÑt”·|EÔÑ'B@ú”  Î5³¥¡iìt…Ñ
+¡!I¶l‘Q‚Ô‚4�ªZa�Å;(g+’aÆPy;{Ì'sãqŒ–'ì I5ƒ8§m$¤Ý(M�11.­i›*�ùÿçÿ1¿ö‹ÿ„·¿õë4ÅŠøÑßÂÃ»gÈòÐÔÖ0iã¨©’Ý’Ý{‹u†§v˜™‚ dç¨ÿÈKÏ¿úKÿòéõçŒ¡ÂMYßáþ�§pÑŠóÅ#ªÙMnIÅtrÈÏ¿ù.·žÝâ£W^âJ¼ÉYuLZ23r;D>"r%¢¶ä"0Œ
+i°¹¢q)¼$­%�%6NIÃ&ÛqÂÞØ#"‰—
+9PxQðÎ›oCÏ°u}ƒ�í=Òž¥YÍ 4d²Ç¶ß§Ôš‡“Gä™àù›—™/áÝ÷È³˜ñ`›Ú–¨Øcƒ#pus€cY¿ÏÃÃ97.�XÎk„ôzÏÙÙ‚é¼äÙgŸãý/¿ÌéÉ	ggçqu™ÑÖáQ˜u÷á¬ÀÙŽc
+ÝaŸü^À80Fb¬¤1�’ËÚµ¹Ï*ZÑ0NâBÔí-ŒÄáéŠDë­×´^wEÇG´.¦uŠÖGkŸ‡¦±šÖE”VSÚ˜U#)kÍª’¬ê@Q9Zh�Ç9Á²ð|íoòS¿ïñ£?ù»wÝÄm§Ôj½0,�9‚†Âk„[ã1L¬pÁðK¿ü«|÷õ×(Ïñû~ûñGú�°µ
+k‹b…e�òP¶†é¢ƒ#hZ‡'¥­è²qukñU ®%½^Bc†yÎx?f³Ÿ“¦6XLc¨]ËÞnÂ ŸËa'ñ5
+umØÞNyÿG?ÁÇ~ø‡xé£âÃŸùÏ¼ÿ}4EÍÃ“9“Ê²ãY¼ÄÍ9*QÈ4@3!Ë·¨j�	aJwE¾ZødL"4®.	E`U99:ßc¹8ÇmÝBKSµlfŠz))šé=©‰t‡Ô‘äàKL<ÆŠ@ÕÔX<o½þ�A¹¤1–8U›Ç†$’ÄÂ#‚D¥Ó$œÎ�Þ½‹)lÐÛq>9ãdfˆ5™aI¤�!œ Á€Qô‡’ÖIî­õ
+I†$Ç„Žå¼\Ud‰ ë¥ÔECjcÆ[9"2?9%M78Y¸lD¿)ùÖkoâÇ}ô e69Å©Àý·O‘±ÂÎOí�ñMÃ—_{È¿ó“¯p2�E‚,ópZbÉ(’è8F«š¶òìlj²h“Q?ê²Û­Å[ƒ!§+¿DjX¹@e¤OømŸÿ®¿üL´õœþp“Å¬!tÝk½ÖJžMæô’ ÐRî±yð"²7É³ÎK&Ò	Œµ¤‘Â«@d-*ßÀë_ƒH%ÁFìll¡SM÷h›†Ò;šFÐKÀÉ-9ƒ¤eQZ¼«ØÝ°¨v—¥ÐÛãÎí7ˆR�B¤Ç†Œ…+‰dJ¢-EYóÌ³ã—î<¼ó&Ï}è³ô·"²(a¾<FD)Må8:]røÐ"[A>8¯)—¢ÍX4"H’~7mPÿÕÿý¯½ú/_¥\jö÷®ù„K›·øð‡>Èi¥¸÷zÍ/ý“ûxîñ�{w©MÍÕ§w¸~c—9fö”aRÒWŽ6n°Ê›>š­º´HÅô¼%õ§b’e@…šFô¶O<ª˜Ú)«ªÄ8O- téh‰	¤ª"U{äbS8œUÔfÁ©´[v‡=2YÒÖ-©Û¡8DIALN±ªh¨ÙÞÛ¢X4Ð–ôFc¾qûœ£“EÛÔ\¹µ�u�zÕR”
+I¦˜�-¢sÝ.W%*Jøø'>ÍÖö6wïÞe2�¡£�¤T�Ç»Äè½ê®”ÖÃX�u¢+ŒÔVÐEk»Â`\´.šÆÆ´.¥¶‚ÆKjŸÐÚ˜Êi£¨¬¦6�‹h\Bcc*S?>’.ÓÜ%�ÚÊÄ”V³lcŠV³,%«Fw®ó
+ªÖá|Šs¾üµ7ùìþ?óïý9¤Šº„²Ç^vK·¶3Ýˆ¢qÖÁCÙœíšå ¼ËâüMN��Q~ögþ|éE¤Ð,Ë‚ÚÖ¬ŠŠ²î
+ññd�qc-Î¶œN'Ýž«.°ÖP5ã=±ŒéÇ9:uôz	çÅ¬ÛÉ8Í|Úr6[Ð´–²uœ�”4XúÉ�8òœM¬æs¶73ò<cUZ†½œºl(šš´×ÇZ‡ˆ<¶¶]‡g¦Tóc¦­`^¶DQB?êsÿäio€5a=�›s>kØÙÙ 3š8ÇÌvFšFÄÊ°<	ô3‡˜½ÍÊz–«ÉÆ³¤Û9‹ÓcÆýœÊZ°AJ�Mx�hº§8ºÎ³7vèåCZ[�·Þ=d<VØÆ ‚Æ‘ ¥Ç¶)Æ×$ãˆ­Í=BPØº`ÔKÈ|K?—T¬ÔÝŠiimƒRL±@£9'¨<Åª¯
+m]ÑË�1ôsE�0µ@«†ñx‹T	B5acó"SÔÅŒÕÙ}ªåúµ}råI]@ëM[òáÏ~†7ß~ƒq¿ÏL§X®îç¼þÍ7¹º…­­œÊ®ïÇL—-“ÊÑ¯æ^{ÃPöY'‰Ñ£?Jèm\§'=^²áËé9"V`�qø|‹¨>ã×ÿå/pçíwIÒˆ½«DMKÀbšÀì¼!�ºL!ÂšJ-:4�©%�óîq­ÐŠTµ”uË ‹qqW•í	^¡¼'ímrº,ñuÁhÔCoìsúà!z¼ÍåQLm-³ÕŠ²jèå9š‚atÀ;Ç%Qæ‰ûÎo¿ÎIáhª’~Ü#"æ­Ù)QQqåÖs¸Úàƒ%Nr~÷ïÿÃ|ý+_f¸±Å>ð"2Þ'ß�$ƒŒ`%BÂØµÔJ0�ÖÄ*ëðU«
+ç*d§9G÷¦äýµœ¯~êS×ùÐûžáçþuÞ÷�–�Áœ£ã34q¢¹9Ø`zj8�o>œqçõsÞy8Ã©"R©ˆåyª‰KÏåÔfŽA!£œ¶‰hO05±,Û]‚
+ôÔ
+)Ái…ö-Ql¦Ò°OžYâD²šÄ$ÛC*é)ìœXLX,Î‰SKš(ªm'$z&g2™!åŠ­AJ/Öì$Â¢êCËö†fg³}y—£ã;£
+v74Õ‚élŠó–~>`¹(ØßÍÉò”óóEQ³jZŒ1Æ{|ü“¯°·wÀíwîqr:%N{=öZ¸Àz¡.º”5pãh4j­•ÔFÐ:Mc$u+¨ZEmµ…¢…²‘”FSÛ¨“Ü6ŠÊDTíZEe:bne*£©Ö…¢lc*³l$‹J²l«V3/e«)¹îb$�ñ´Ær>]°wé)þøÏüiã
+Œu´¶#È^,íßÄEë�­µž×KB4R‡uo3;üç,~“_þÅÿ‘K×ßÏý–Ÿ K4ÖºµDÚQÔ5�±H!	ÎÐ¸š²ô,�ïhDåªBhMš'ç�ÞãeËáé‚8I1T$:%‰«ª¢j[Ò\i…Šá0¦X¶ci�BÊˆí­>:õ,o%uµàK¿üËüêÏý‡wï2ÞÚàù—ž!Ž`œæä*Cf�Hr=`YÖ¸Ø³p-ÅÊrõ@pz>a0Ú£¿±ËülJo0æpúçýx€–ªî³(-f1%J®RËjyÌs·nðàáÝÎóaAÐÑ…½îÄ&Ôd*ÇÔ’«W¬\KcÖABñˆÝþˆù¢$íA†Ä©é(Ð‰ÁÖ‚8HŸ¢#M,Îtô‰8�<Â)R© ´ %±¶ÔË†«£
+v/]á`{À8ë!Gcröcz{7è
+Fô’ƒ‘$–š“ª¡žx°Ëªž@±¢ßßåòµ]|i¨­¤†<I"`ê†·Þx�Êj¢4¦Z44¾ÀÝ;b4H¹w|ÎöþSô“»»’zãqœ´žý�Œ‡ç�TŸ–È¨‡÷ukHL�ÓŠ¶nY-
+Ðž¦î>kãlHcWœ®æüÃ¿ó·xôÎ·ùú¯ü<ã�1;WŸf3K°ÁqeÜg<Î9¯ÅÂÒK£µ1Ø¡×@F+$8P¢K-¾sðã6Œ°å9B¼	ŒúºáØ
+-Ö[T4 U%¶mQQ„“’$Í‘zÈh`8Ÿ´l�#æeÅöÞ%jsFê—x¶�MÁÁÁ�88½7cû™
+¦Ç¬—$:iÐôyéÓ¿�­kÏòé�}˜ª©Àj,5ÞJâ^Œ%¦,[¢HÒ4
+Ù K(üÈ³#¬KðiCŒ¦ßõû~ßïxõÞý{Àqv�£‡3ðŠv19k8/UóÒÎ³<œ¯8s+fó’Û�V\Û=àæÁ€Ð”TÉŠÅ"B…HV»$˜2„Ÿ¢°x'©|`5Zl+Q>P—5Òo�’Óú‘�yprNãÑU^ûÚÛ”óg“šÛ“–‡GçDBòôAÆ¥Ü19K9mÎPYAO¤Ò‹2Þ¦©£a`2��°�å"F¹9{W4¦EÍhx@Q¯0­AÉÜ}÷„Á8G)M]WŒ·z,«e�u’Áx›øìg‘"âîƒGTu½
+”ëÐ™ŽÍ81®S3ÔÖbB‡"h,4ë q�Æ@³^À×VPIc5µÕ´6¦±š¦ÕT­¢he­Xµ’¢yâh¥Ñëb#Y5’¢–,×Ï©AÕv º
+‰ÒÁÃÇ_ù4yå³„à×R]ùxA.„ 8…@ƒ‘‰!\Ð€HC�³“osöè+¤ýÀÃ7ßáÿå·øÔ�ÿB«®3ó�Ùj�µÝxßÐË²´Ôuƒ†8êŒb!8–ÕÚ$IåªAhI¯a¬#•0YÖDQLÓ´¤qŒwÝüÛ4ŽÅ¢A+:'n?AÅ’G”µ£ßSln
+ùö×ßä¿ø�þ�ßÀý·ßæ»_û—®]á}WŸc<0Ó†¨÷ûiJ_—ì3z@®+ÒÔàKÁÙ¬äÒ†BÆÛäyÍé|A:¼„¥çó†ºZ‘ˆrg‡U±À6Iäxt:£/e'M$RÄZö°~…ðyhš‚“…ek¸ÃxÃ‚ˆ°¦¡‘–¢n8>)ÉÓ@ÖË2€THa	tã5„ãäí;xæÅ1eUáuŠ÷ÃÔbEz@*qÄ*åîì”ÕªÀ/*†ãÙ8”^!6®2�[šrB]·TE�ÍF„h“û_úÏìöyøÎ)—65w‹MiY-–\½“÷†Ü9,"%î’T¢â„EÑ�õ5²ô¯ìS- FR–K.]ÒT%ìîn]ÎØèY¾ývÍp¨ég1iá‚EF!2&Ë‚rvÊ0O»E01ÞY²X2­¦ÒÍ£;o3=yÀ›ßø?ðC¿“YaèÆ<œŸãªš,WœNjâH£•F
+tŽX‹Tâqp L"gè
+šzE¦Zo0R |Lc
+Ïxû[›¡)X,*6†eKÚÏ¨*	í£<¢­kÆ�Y™2LU³¬Ç4¦d8öé
+ZêZ“afûTŠj†!IGÕÎùoÿ‹¿ÍÝ7¾Éå÷½ÂPKŽÎN‰ü¹šqºrÔË¯à`w—,…(K©ê†VFèÔÓ1QÞ�ÏÔŸÿƒŸxõä|È›÷-?ø¹š´�ûj½�«¦\Íc¤Žùâñg@x¶nõïizÎ°-smÃ¤lÀgTeÆJTô¢�¤¶1*êN¨A(ìfJ:tDJÓ´cz©Ç‰’&ÐŸQfK&ó’ÅI�
+�<Â«ˆ¤?àÑƒÇÏÖvÂv¶Më68—f¾bZ&ó–Û÷ÎieGßM³m\á6
+”Þ¦š:²¾Ç™>½¾bY�±Z”4Õ!¥I1Á2%,V-“yIY®²ÁÇ|²âìxAÖë¨�ËUÉÃÃsžñ%>ùÊ§on0_L99=ÁJë£î.ø.#z½E0Îc¬]w&žÖ{Œ]#| 1ŽÚ„Î›a­Têæ½®¥1’Ú**+©¬¤¶’ÚHj£(
+”
+¬ê@Ùˆî1­ n»E×ý€skgè¸]R+�2_œ±³³C–
+;òè:½­Ë
+ˆõm¾CÏSQÕÇœž|çŽQ¢bc÷M‘òOÿñ¯ò�Ïý/¸|ã9Ûb¼¡®
+Æ8œk©šµiiêš½�Ç“ÛT(ÐQAÐ4¦6LÎi®¨–-*Sˆ*"Ê=ÎBY5ˆ”dY•Ô…Áãˆ“n¤8EH,UÑ°µ3èÔs^Ò”%"ŠøÆ¯þ*åªèð&eÅ¯ýÂ¿àS¿÷·±;Ši\Ìêô!ç4¢Ïta©„¡.Stmíc¤çÞIÅ;ï¼Å`|•2BÛ�%�ç�T«Œ`ZT/¦Yu|£YsÂ‹Ï|€E}D+RZaÑQ õ	½a‚¯VDbLc<MâÙ1»û[œóÓ»¬êBÁÖö˜ùÂv�MQJ–LW ×ÀGïp-œ9ÇÎFŠ)+Î
+ÉW¿}Ìp`Ñ2¥vcC—s£$&X,Ë¦ádº`öèµµÃý£Šï~÷m”Xâ\NÓ*Œmˆ’„G÷ßbeÏŒ˜)¸{wJ~)'ñ†Ñè*³6¥™žqmÿ
+§eÅ ×ðà–Ë‚¼7¤.e{ÎáYÅy³â#ècLÌÙy‹Mö9:“Œ‡ŽJ\æ…USµE—›KÒ4¡l,Û¹ —¤T¦eá!‚ãÉ”|(ÈeDåð’OüðÒ¶�£{ï°så)ž}ñn¼x•ÙÙ”½Ñ…7ÈXâš.ˆ+Kb|ˆð™($àZ�Š¶6]±oD×¶èá‹¦Ë×pà«Y‡ô·žÞ(Fô·Çšzµ$Q-Ã­
+Î's¢(fY”ìmosv6}‚'TÌªm9[N9:­%;—zÔé&u¹ÀÇ�åé1[×8:½ÏóŸüŸ8}ð¿ösÿ/>ô¹Ï“¨>�7D½ËEÅX*8™ÔlíŽÈEƒU1.XëI²ÐÅ[‹º{È«R9ö¶÷øö·—ÌkA1?f2»O4dE�³*pZ7ô7cöw†Ä"!Ê†$iÀšyÖÇ,[Vè¼ÆÔ†VÆx©A-PÚ±‘o3ˆÇˆ DŽzei‚!î[öšm¬´,ô‚–�äô¬åä¨ ¸�õÈú
+©<ÃX“H‡Ô&VT5¤Ã†Æ·<¸;åÎ›sf§%Ãƒ
+î/¦Ü;9$ÚLXœ9Vóš¢Z¡bG#V¨ÆáÌŠe»Âˆœ4õÔ•`>]±¹•S¹‚²X²8‹õYšÒZËôlŠð°±9äèèˆÉ|ÅåKWøàG>ÊîÞ>ÇÇ'Ÿ ¤ÂxOš÷Ö(dÑí|çðRam)³‡µë1Œ´ÆÓOÓzŒ¥[x·�ÖvoÎÚ:ZÖ�o­cºÛfý:Æv,"ï×!9á{`òZÜ—;ïÜæÆ�ëäýQwßš®ñçç=¥,ßáøômšÆ2Þ$K®÷¯âVÞüÆù•/ßãÇ~ê§AŒñTuT´Um@jZë8›.Y¶5‹iAƒŒ%uÛvÏk’$B'š,×¬Š†Í�”éQI4”Ìç-J«.QÚ¦AYI ¥Šá8ekQW†à m=^·$RãmÁ`°Cš)>ðÉàþ»w(–K¼÷Üxîi^þØGPYï²�§ø´ß±‹ú›Häœáp€4Q„¨=Z4
+¹ð¸ �ž®S_
+)kE1UiQ± m%Ï?}“¸—ÓÎJêrB¬ºŠºd%zDZ¢ã‡Ã¬
+úÛ#Ê¥åVÔRFŠXK\�²*K‚²—3ö¡�VˆÎøæ
+ÚV¡f«ŸsV{Ž�ÏÈ7Gô¥a{c“HK–a‰—5ËÊ²ò
+‘P¸Ê ±½!‹Ó	»cÝ)Åú#"%ÈU„Î¾ªÈ{û4
+NšÀµ½Y¶�‚yXœñôåZñàá›¼xë9¤mQª¦'z”gSöˆƒ$'°··Á[oÏ�sDã�‹)ãË{,«ÃcÊfÉÖNŽ'DB¼grj¦Ž²ih¥#Šb2±,—ô‡ÃŽ_f;âC�×h>ôÊñÜ'~+;×Ÿco{Äx4èÄ1HïÐFBˆÀƒNR¼s{PHœ³ˆ.p­xW =Æ8BÈû#B½Âq¢" »hBê²¦¬âþ‹ÓÉ:ë¦¦-,mhr‹Ý[;´NQ,ÎÑñ˜8•ó/¿_qÿ~„®tSÎ
+ý~�³é=ªª�6ö1¦"ÎûLÏ9ºwk÷Þzƒ?ð3š£ãSê²D+IšæFœƒ¦¦ŸæDË#bœå:³AÐ¨?ðS¿óÕíÑ††BœBL8¤—)Ž]ÍªuXï
+<±3Sã”as³SÙDYpùÚ>¤Ô®d#‘„ÓIˆècØMcD¬)Ñìo^'uÂ¬Ð½ˆ\oS9Ù™×
+O*5Y&Q‘frn‘ž¾ºÉþniÆ£k<ÇçKLNhËÛ·—Üy2A%�º	à;-¸dÁ°Ÿrr²àxVcc�AñÆ›gÜ°b¸1b8Ú¤nZš²Â¶à|M+ªEIÕZzƒ˜DIT¨›‚8Š)—KFý˜“³­óUEQÔôF{|ú³?È?ø1’4çðá	çgs
+!„…4J^bZßÁÑœx‚~¹Æ®¯YýÖûµ�Ñ?œ]gÆ{Œ¿08>Qˆ\÷ZÖw¦E»&i¾·Å¼—`òÞß”°ÄZÒ6-÷Þ}‹Ñ ec»O-¨ßžÓ”™Í^gµ<AÊ½Þ
+†½(zø ¨&ªÅïüžýèoåæsÏR7†EÑ0[,;3–38ç0¦d1¯ ’4e'4m‹�8‹Y”
+:öECÙ:‚·äÑˆeY‘�râ(¡¨­3„àqÆ“kM”FXUiHÅle©K‡ó†ñ ãlÚ€3,J�N,Þâ,ãòÍ[ÜzÿK\{îE~ÛïùŸ³¹3$
+šU1çììg5ƒ…*ï£lù.£˜žŸ¢<ì]¾E
+MkðA‘HA®F„ (� mÖOÈ“|JeK67öðfÁdzD?É±Î"éuPN‘ ­!M¦nY(Áòd�ÑžÆ¤T¶ ßï³š·ä#‰_z±'ÕTK„ej‚OðR“åŽU-¹yé
+±«¹yó*“ã¯ÕÊ b�°¬FÅŽÖ�7�D)¢~ÄlRa›–$�²ÁGkj#\„Òóàh†g=RµÔmJS¤¾dc´KU<Ä¶Š4IIG�wìDc¦˜²³·Kkf“’ñp„÷0ÞÚAD)£dÉ|åhmŸ^ÚçÎ½	v¹äý{C&F‘iÏ@ç�$W5IK…
+UÈ“eUuKñ¶B'žã�hÉ¸viˆo:<Ñp�S•%Åv.ÐiÍÔB°(¥ÐRâ¤@‰•DÄ¶!î÷ñ€³v'XÛíL¼G"A¼$îEäÙ˜âøD 1¡ã]é@äW]^{$©'+®Ý¼�!`|I±LºßŒgç`ƒÃé+f+M0–LŽÏ¦h•ðìG?ÄæÎU¬uìßxž=û>j"6Fà„¤ö ‚Ã[É¾vD—71�Çû’,Ë°NPš Qô‡àÕÃ“G´¶`{�1®Ü;]òÅû'¼þú¥$Ã,`›ïØ6Âµ’ù¬B7	ÒæDzH]NÆ¿A3h¸©öˆKÅÄ£74•©¡&J
+&§K"1(Ãm&mŸÒ:´ñ¤ÀëÇçœÍÍÜ°¿Ùg¸“Ò“ž�T?\0™••,*Ãxœ°Ÿ÷˜Ì-§Ë†(¤:P.kÎÏJFÛ)›šzå¸úÌ.[;–jYrpp€³ŽéÂ°¨3š²áÞ½c"aÚ–é¢AXCÜc�
+©JÏ²œkÏ ˜vJÜO™œÕèÃ!£�-â^Ÿ´—#T„HrnÜzŽ�|ìS\½rƒéù‚UÑ`›Î+P—-I”Ç)ÂwäÌn×Ð-¬/ fÞù5‹Æw¨yß¹Ö;7»ï"=×;ºÈI÷»|q¸u@ÕEê™ŒA¹ˆ^îFŒ œ!ÐËS´ô<zp›<nÉâšÃûß ^Ü¦]’d7�Ÿ'Ž¶2E*�užjU1Ÿó�o|‘¯}ýÛüøïý_áƒ`²Z«.ëºu†¶1´ÀbYaê–­íAˆ$ËUÃ|RS–†¢p]Õ´TÔ®¢n-£^Š
+
+Þ¶Ä"ê²ëQ´VPV5ƒ^„VP7–¶ò”UÁöÎ&RÃrÒ ´D(Ép0$JRÚÖ¢³”Þ`Dœ¦\½¼Oo¸IÕ4ô}*V8céå—hdŸÓ;÷qR²{ãE.ð•o~—³ã‡Ü¸v�éyA/écE�pM£˜•�Â;òh¯!ŽbšºfZŸ dÎùtºŽýØºIîq„3
+Å‡§ì]9ÀyÁS7Ó™£-Jzƒœ³²Â9IQ7<½; n#5:�¨
+×ùƒLI�’È;´ÏÙ÷©›’wïœ’íäœ-f¨¤ÇþHb¬Å )—Sâ8!Í:¹)!ëT}‘mˆu�¶šámŸ$õØvEÙt{ˆqÒ£ðLë$[Œ²¶ËÕ‘9•‰H#IíD¤ÐÎðÒóÏðÆí{|æs?À´­ØÜÜg>¯™,JêÆÐ%¬ÎïáÛ†Æ(ÆCE¨´‚ƒý”Û�^º4¤@²pš²ª‰ð°lÂâ8™•ØªEÇ�4MÀK–³~Â?ýoþS~íøû|å7¾Jÿò�±çáá9çÖóðxÅ¯}ç„ÖÀkïœðÖ©gQUcp¡‹2!K…v‚ÁFF]8"ç™6-qÜÅE£pÚuÈw�ÖPWJÇÝ„ìL¹ÎZÒÞyœ2Ÿ•´Ö°˜7È~ÌÙtJOk†I�þP³r°jÀ›†U+™­¤‚QS‘l29›ÓÏú\{ê²·Ëõ§npç¼âSíóÎýe=§s‡³’W3NÈ´£Ea|C\Ûè¡Øf(4ê�>{ùÕó ùê½’ï~ó„k=F[9äží¬`1]p÷°àþiÍ¥ËWèé1ÇÇsÎç-»iÊnhì„¬w�“zA$$›n““õ'(/X,<*êáj‹¬$cÝG›ŒAv€ìiX=â´8áLÌY…@ÒKxtwÉñá’»�î0Þè‘GÕ¼`ÐwLç–qßÑ–y°$4¥g¾¬‘2Pš€Ê""å¨ç
+IªiZÉ|2£?q÷xÆ½Û3†ÏªZ‚×D:á`?£?ê"§ç
+:ŽÐ±CkƒlÎLŽ7˜œL‘B£zý­F{·G´Œ¤q„±-MÛÒ´†¢1ä£ýÄ+|ècŸàæÍgˆTÊédÎlYq:™R6'x±&ö"	B „BHÝ!OÖîw:^f�Û™ö|EX¯ì;§ºï`‘Ø.¼FŠê|—®ˆ\§®­ƒ²¤ê€ŽH¸ûà„É¬â›¯½Á£Ã#´´,Îï±³›²qýQò,Á�²ËƒoÇd~ÎÙùîÜ{“¯}õ+¼ü‰Ï±uå&ESá‚¥u-‹YE’)¬
+Ì‹zíšdý”UÕÐ4†Ó£9xÈzŠ<UlŒRjuY0Ž1Þ`ë–HäDBãEK°]Þ¨J5Ò{fó’¦)I}b)âŽ’ƒ30Üˆ1´dyÊæÎßøÂ¯ð_ýíÿ”ðwþ¯}ñ7nl±·3æ¥Ë[Ä2ÅD‚<¢„F‹9Û£”+O]áêå+ètÄÖxÀÍ«ûì\¾Æª5x‚	-2l`eF�)’¬D5-�Q”†yŸœ†i¹ÄyMOjºÜ‘FÔ†ZBS2õQ­bk8`zâ¯2¬‹ˆ‚Á6–hÐãíûSú©EG;ÌæF¹ Í"RÑýûtÏ¨GQ4|ðÚ%î½s„/JªjÅÙù\J;+ÙØíT ª<¦±Ù+-Î$52Mi›[}â<Æ{G¬R1 Ø«ºâÆÓï'T3LÛÒ:GÖ‹±¾%‰ŠªÅ‹”Ö”Î8º{Ì­žâäþ!ƒÞˆÊÖÔm‰ŠYQ1HzŒ,&'¤JÔçRòå¯Ýål"øðsW8µ[-	
+NMÙß; Í*Æã>2d«å,W…|û­cÞ8[P‡‚/ýã¿‡³†Åä˜Ûßú‹K¯ð•Ûs}n×”¶ai­ŠX”+N¦-ïÎ,·OkMkœL9š­˜Ö
+¡.¤Cj%è÷‰×´X)	Fum8B6BÒáŒDE>“‚ÆYÎO²µ{™Xi|³k¹vý§ßy›Š“)äAÄ¤ZÐz¸y%EIMiz\@ÜÏPR‘F=¼¬yxçmÏ?÷ÓùŠyc‘Þ±wiL@0=+lf8QOst¼Àæ1ÚUh•£~÷OýáW+;ap}¾rû„¢)H•acw‹Ñö/<mS�[ööròÐçÎ£cZwÄ•±gsÐcâf4*pXNYT%^îQ�
+-¡àâºßCš%™¤=Ú¶Â.
+Î³–³r…µCÆ£ÝÎ�f’(ç•W>È@wÏÂfuK*§sÁ¤sCÁõ§6¹º?¤­rØ½2âæS9›}CU
+D³¨V´‹ƒhÌß~À ‹¹¶›òèÁ‚UÕâŒEHÉr^"¼£—–…¥ZVeÍ•§÷qJÓ¿t‰­Ë×Ù:¸‚Žs„„¦2XÓ™·JÛÒ¶c,•iA@YŠÚ`C 7ÞààÆS|üÓŸã™—ÞÏ`c'‹ªæx2…(ÆIY¶Ë‡BGBjdœ¬3Ü»'.’t¿//d�éÜÉt^)‚Š*Æ¯ÁŠEÙ2_”X#hÚÀ½û�¸tŠ×}¢Þ>×n}�ûÉßË§?ÿÛì<…cÄÉý×PÔè4ADM)˜N§§KNNï1™Þãøäo½}—Ïÿößƒ�
+ç,Uc"�$‚¢¶Ý®¢44¶EEŠóó9UÕP
+ã~Lå*ÆÛ=Œ-	AÓºŽ¿emA”EÄQ„	®ÓqÑxƒ'PW
+i"‰âS¶TMàü|ŠÎ%„„baÐ€ôšb¾b<êñ¿ôÏùÿäç(W+ÞüÆ7È76yöýÏ‘(Ç¢pà>x¤K˜Ö-gÇg¬fšeÉÃGÇ¤rÅÑqEkvF—XV´�"PL+TbQ^#ã\Ì`hZÁÇ_ù$¯½û6QZ‚j‡ØÈW1RTx+6 C 0–ÝÝmL#H“
+Ù
+œˆ°¾pP¢%–=è!ôSA¹ª‘*€Ky8[áOO8xîcÄÆÇ#à…ëCz—"l³qiÀªõ´¶¤—	œ‰ÉˆBF�Èºè`ÖB�|£GQXŽKV…ÅT-ý<!Ž,�ð¤¶!Ö1ÓjÁ£³–Ó³}Ù@2DË‰�àZRUƒrzö £ÌŽ9¸zƒGwÆ»›oÎèåž«=–&çôø>ã�A—u²h&Q2bQ5„ÖsåjŸé²`µj¹Z0™×ÜŸ­¸»\ðÍwîŸ®8³’eYqúì\eòÎ7	ÞÑVK>÷ã¿•éR¡Wsú{9Rjb¡ˆS¨+Ož*ë$Sï)­`Z9ÍwŽJîŸòöaÉ²5•MÑtª¼¸chEZw¡V¼ó%^"UÀXI,9 i&4…%ÞÈ0¶ó¨©ínß?Â"ØÌ2êå”lëÞ/Ð"Bç)Õ|Ng,¼¡¯"2™qzçmþÞßýùÊþ1Gw�¹ñ¡Ï�Ž=±Š:Ò—…ÑvY¦¨ë@kV…'Q–JÔŸüÿî«FZ²žf÷ú-¾óÚ»´EÌ‹Ï½�&Lh…e0L¸zµ�)VZ
+¿¤5-Om_c”_AæcNMÁÊ[†YŽ•†ÊÎ±Þ eàÚ¸�t+T3¥ŸHJÑ’‘¡â1‹¶„¸`å ªq¤ùê¯O
+Æ|øågÉÔˆ÷î1™Ì©K‡nk’Ø2å¡•§˜×dýÀ¥kÃ1×/§˜UÅ£G–ãSÇùYÍñƒ%ã<c<Úâ­{K†ƒ@Ù@ÝÆ<s«G4&æl¶"Òæìt‚HczÛ[<õì-â­mÆ[{è<&Êbª¢ÁÙŠ¶±xáHÓŽ‡$ñXÓ³h%ðÞ‘§Ý(¥¨JŠ¦¦5-6‚N¸~óiž{ßûùèÇ?ÉG>úqnÞz–$ÉikOUvHçºuœ�ÎyðàˆÓ³EÙâ|‡³pVc¬ìì­¤µc$Ö*šÊÒ±*œðèÑ9§§fóš¢´œŸ/ñNÓlróÖs|þó?Ê�ýÄïáÓŸý!>ýÙÏóÂË/2ÚÚ ‰c’<¦ßßÅÈ]ÞüúW9>}ˆžÅ¼äôlÊÙùÎ§(Ês¾ò¥¯ðÂû>ÉÕ[7)ë¡ºùÙùdEk<J9VU'µ,ËÛ:²<Â…™H´Ž¤#ZÓtPÄ¶$K’õ?¬™“ž,K‘ªrÁrá‘FGka0hR¢4FkK¤Sú½”­QB–iÎNœ1ŒÆ9MeÈ†[Ü»ý6ÓÓóÇHãGï¾Ãù3ŠG§ˆH0)‚wàúy„Íq¬–%«Æp:miïƒ,V¼y:A&Šy1'
+Ë2¡l*2=BH^ãmDµša|D¹ZÑs‡@¸šHjšè©G‹i ‰%µ“]¸‘’ŒäŠ(óXŸù-<IoŸÄ4å)½¼úÿ2õgAš¥ù}ö¼ËY¿=÷ÊÚ«º{º§gz0˜`à¢¸I¶D¯’-Yºð…ïáÇ8|í°"ìšÙ´‚ÅPP¤¸S$H�Xà¬˜îž^ª»Ö¬Ü¿í¬ïê‹“€]uQYQ‘_Ö—yÞsþÿßïy4Ä/*ñjiÐÕ–d6åhšSo·lêŽW'g\\VÜ;*ÍFœ=9åñ½’Åâ6>Ÿ“ù†è<­Ìr.e>žP•Œ$
+•JÊ2£±�ëªç‹?ÿm¤ï¸<yMž´Ü¾u�ƒ�Ó$e>/˜jK”Š×«×L“‰‘é|ŒŠžƒ{oòìÅ3¼HèÌ’,ße4‚Ï^×,×Ž�½1½ï©¯6¨2r}¨×nRäŽëjÅOž\ñì|ÃçkËùUËU;Âë”¾¾ByÁîñÆJâ] ÇüöC&¿Æ†9z~Ÿ½ƒ/¡‹ŒZää²c[C´Žr² «[„(Òáç_
+B€T%$"	m¨ÐSÌg¼zUñtÕóâªáÕiÅÅ¦Çtý�Óbˆ{qµ©`Ûy‚7ˆ¤$ž~khª!ÍÇ”IÀ…Àf%˜Œ0MÇt6¥ï#Æv 5ãrU0Ú?$�pûÖ!ÿìïý×cxöùÇØú„_ø•¿Fqy¹&k^>Y2�%L õx9u…šN¹úüâ§ßÿ?Äïýô>Î:¾ñNFµ½ÍgŸüŸ~ö!�¿C¾ÓcUCÓYºUF#Vö|ú“kç<<˜s¹˜q�“�¤Põ¶%“žÅ(£¦Ò`+Ep	ËýÈ!G„„s}Á6ö¬úŽ>nxþdÍ7æËäe‹Kž|^±oŸ‘ß"ûÀÓkG6Í¹×f…â	‘óËŽºÓ”ÃÃ‚¦	¸ª'XGšgœ®,õªaR¦ìïI„
+Œ³)·(Öµäû¿wÉþ±æðVÉõY¤«#�Þ™rïÑ»Lo0ž.†»Î€VGXÉd2'Qá†MŠ´5ˆZ&¤¹€Ñ*e”¥´mB“¦)Þ9”T¤IBg
+Eša�!K´Öïi«š¶«©7kV«%MSÑ4[ªí–®m‡8¬ó7ØöÁ`¦Ô�«@
+ã,ËÐYN–çL§Sv÷O&ÌÊrB’%˜`Ð*¡³žDê!M�q‘“qAðžËë×<ÿø_bú-{‹7ˆŒYnÖx:NOOxúôŒ¿øWþ3ò2§3–4—ô~@BlÖòqÎÅe…R’<—X+†äŠ€«uÃd–’¥Š¯d,šqðš‚q©°Ñ¢´FúKÄ{K*BrµêIË”ýùœuÛ²®:ÆyBV€µ‘<Oxþä�Jî=Øa½ê©6[þÎ_ÿ/ùÉw¿K^üÂŸûóüÏþ“ÿ1J%èXâ…ÇùŽLÎhlË­[·X¯*ÆÚ`CMgRR—ò3o,øüå3¾÷âš¯}õ«œ¶æ²®ÑŒ0~CŒSDLJ‰qž¶_1J¬‹ôÎâ‚$*�–‘‘ôxvˆIÍÉÚrÿhÆùù†˜hv4Œ
+A¡Õ:Ã«H¢
+ª˜pruF³éyóþ–›!üÒ[‹iE{ÍÏí$>áã‹5¹5üËç5ßúÚÛ$1!ãC>øQE‘*ŽF$éˆ×W5£ƒlŠ¤sòBÐ[C[oIÔ'#}SsÝGºF¥`×v�ïs½>ã­Çorúù'ÈqÆYã¨—çÜ{ëçØW5£bÌ¶«ùìä5}Õsp´‹t�³í5Z�Zs~~Í\x²QŠ(KâÊs=ÁÃƒÛ÷yãÁ–>¸âõUd´P\½hxôæœßúàŒóå†ósÁÞ‘ÂQ¢¢åáMè÷yþâœ½yÂ?[2èÂ¢” Ï>þéKšíóÉ”wß}›ÍÖ’¥’umpÎ0	*s#’)r ¿�1‘ý Ñ!3²~ÃxgŠ7�]R÷‚y!ˆ:¥Zo™¤’;‡%_~ë˜Äp�ªéPIÒ“‰Hçu½aº» 7�Ý‘¢	¾q¼û¥ôþ)¹Êñ.�ïÍqÍ
+ÇwîðòÙ%³2cg—ë¾%“=ÿéÿâ? ^žòö×~�ÿë_ýÏù7ï¿FËHÓ{’T1ß™‚ëÆ2‰‘q	‰(ÿÇÿäß‹ÿóÿÍ_¦ØyÈ‹ˆoB³µ
+Ož?cYmY^­8;_“N¼´uO–H&eBo†;äù�#„v`�”~³¤�»ãJSÆ‚4žÓuk"%½Ü’êH>rœn$[+IŠÈHD:_àŒâåëk5æøV›
+—'Œvä>§‰†ºª)ç#^]ôLrÅ­½	­qœ�WLF‚·MiûÈïÿð�¦ôÖ¢"|åSf»ûX—q±~ÅùÉ†ÝÝ[ÌæìÎÙ6šb>çáƒƒa¯"Þ
+t"H•Ä…�ÈZdÉ’ë*Ú¾ƒ˜�g’,É°>Òõ�TkŠR=x†“$£ëÝpË¼wiŠ7JL"Z+bgfã’#ZëÁy,.¸aé+ä€m¿q,ï±>¢ÕÀªJ’tXÌ*9 åc é;ˆ�¦)ÖŠDÑ»�ÀŠˆ4�!Õ)�5H$YžŒª¦æ`¶ƒõŽu³æÕ¿Åë/)';èL³­×œ¼>gÿø¾ú‹¿B×:Bp¨d¸ø÷�C(��‚¾vÄ ™.J®·+\ï@D–›žD&lúÀÝƒO‘å¤ÉonŒA"ÈÒœD^Ÿ­˜Œv@÷Ìc|ëmM’¤$z $K‘Q‘ºí9¿hÉFš¾ñìí”˜Œ4‰šòêú”`
+EžsyqÅÑ|Êþá>¦…$É‰‰%MRˆ%I>\H\,’	+³¢·ðÆlŸ£Ý”?ùŒuïIÒ>Û²?+˜$36}…V�vÙòå/¾É•ëxñôUB*FÈ¾Å	ƒw‚I–ÐyËËuÏÜŠy�ÑzÀÅÈHß(l°Ü=˜’8ƒ Ý˜·buµâáÃ‡¬*G¶ŒtB‘IêMÏvÙóÕ‡‡ô—Wä;Ž´àŸ¾Ü09¸Í‹ÏOxü(c}¾¡ïðÍ£	-+>|vJ©`Ù5Ü¿»C¢0aÅd’Ð·
+QkºÚ:Ëx<gÓuJ 7Þ}pŒ)^>J%&ÄLq¸{À›{Ç¬Ú3bäyÉjSñòtÉh”ÑvŽÃÛ§g-k·Ä­&‹CzØnVìíìp½ÞÐo;~îK÷Hæ�~rÉ‹Ë5=»¦3cŽÆ”YÁ‹«S´U™ ÷š.Hš—¯¹ûå»¼x±dg:åÙÙÓ6Ü}<Çv5gïÿ!«³âô.ÞùÆ:ZëYŒsF#‰¢À8‡� Eô’è,‚�@‘$’Þ™$$m‰d6JÉg{Ä¤äêå	Å¸DÆ
+‘”ïÉÉáî1¬XŒ#e’`¬Fh‡Œ‘¬ÐtQ XŒÆ|øÙ9GIP’ùáÕë»Y³	;‰ã¼�ŒF%½»f<;`>Û#mkÆ|ðäCBß°8xÌ£…áÅ¶#K%!
+„H%HR�u™§lO¶ÜÙ¡~ó¿üÏ¿3Ï,¿ýƒ�ùkÿÕ'¬LËÛ_’¼õ@ EÎ'ŸŸñÝŸ~ÆË³ß¦£‚zëøÑGWŒG	;ó+äð�)".öØI{ZAèÙn_ Òk²²g:
+ä£Û”RÒÙ†+S’¦�¢´µåÅ…AŠMÓ ƒA&=Ueñ¾£5¥aÙjä¨Äæšï‚/¼¹ÇÁnAßv¯xûñ”óõŠ'Ï6ŒÕˆW-åL°·_ b º5!i‘)h9gzÿ6·Ýç_ú
+‡w²Ø+É2O[Lçhû@ÓbˆhQ2zðKCo
+‚A%¹©;¤x?,Ñ“D¡¥&
+AïÞGúÎd¤izº®'Õ
+ë=‰Vô¦Çû/ô¶gèï
+×M]cý°ŒîŒÅXGçÆ9ÛÓ‹óÃ:½µ–Öœ÷Ô]Ë¦ª‘D¬µ4­¡ë
+Æ”ŒT};t4ú4MGÛ
+ŸÛ9Oçœu(¥ðaˆäº`qp�jÛñìÉ“¡¿Ò÷œ_®øÖŸþó˜0Tr�éñÒ£�4m‡T%#Z'¤™¦ªk¬3diÊf]1�äè¬äPxbtnpb.D6ë5“²ÀIG´�³ÓšÉÈcM¤n†Ö8K1.²­‡}RHú­eg^°·›a�b]®Î_óòÉ.ON©·Å(#-KêÞÐCL="'ŽšÖ¶Xi’Pµ
+Ï®Oå%Z[®š†ó
+ò¢$Í"^Œ)‹ÍÚ�%�%ÞJ&óz:¢TŠÓ“k';$Ê B‚
+‘Bg'Ð©¦Zo‘ã9G»sÆ™'ˆ¬"&-%+)�&Ã	Gía½vL&•kÑB#hÀ	ÍsN6[l9ÆFËµñøÎPu-óÅ·6ìßš±zý
+Sî"‹‚ºÝ’+xp÷T
+±C«µ©ˆ2e‚"KJ&é˜(ZR¥È´¢ç|ðá+Žfsîß;æÄIæ‰æêê‚ÉXQÎ4"ÎÉÕ†6N÷«õç–lÖ+{Be)wŽ¸8='K"³ý1«õšÉtL1ƒßýþ+ÖMÆe×ñ‡o1B�ë‚ç¯j|ÍÑÁ„@‚NTdY�œçœ~~Æ·îOž]1ÊSÒ‘¢Y÷(�ðôïþ_°—Oð'?DÊÀèÖÛh)H”d§”¸,Çt!!8yKï�(\¤I:t¥4¿. ³Œd`sÐmP[.¶¶3ÙˆÙÎ×´�ŽYn¯93	þôË­aZ@*42DQ²3™@*R1-f¤…äó“
+¥,pYFP‚QêP±àñ\v-£¢dg<§ï¯xqºÂ¬7ôËS¾û›ÿÛ]áô-îÏ‰¢Ç9ÈG%%QÄ
+@5(É³ó
+õþÝÿíw^¾ÿ].?ø€ë‹ŠúÙ3~ÿ‹˜Ýã�»üò›o3W»œõÏˆmÃ´8àÎ½‡ˆØòÎ%;S¨Î·ìgÃE-xÁîx‡b¶GP‚ëíŠO^m˜Š1E9æZj’ÒÑ™g!rˆu=•ò¼^
+N?¯Èó”¢,Y®<¯_l‰`<šp¼_°:¯ˆ‰¡L<¡øÂí»TÛšÓå†g'[Î/kŽvï1�L¨¼Ã%š¦iÑ1§¸Xyî¼û€ÝãÇ,î³s|‹Ã;	NsuUQm¬±Œ‹€éuãÑ: hi;w“˜€¦i±½�à1ÁâƒG (�5-ÛMOÝ
+¥>B�÷u½!U÷ÆXOªOk»AV³wÁƒˆ´}�w¬ÛBdÛ{c.Zš¾Å�µŽåª¾ixw8Ûâ¼§é¸@Ó·ØÐ#eÄZ7Ä�qTí@¤µÆnŠOÛ¦EH0ÎÒ4I¢iZCßÜ„ì£^0ÝŸ’¥Sžþ”årÃüè�Þü"�­XWÖ9²ÖÛžmíQBÓ‡±US£´¤k->Úm7H­b6ôWè˜OFŒ²)­é†}Gß“+‹uã³ñk((‹„ÕªÇ8G™j”Ø~ÀlïðÖ¡¤¤ÌóÅ½‹8q}àÿ7ÿ¿ù÷þ{~ø;¿Ë§?ù	i™óÖ;_f11ßÉ)G	1Z‚‹D‘ µ$XIôóÍ!iªš�QA‚¿ÿI6}`Yo©–’|w†P	M}Ep‘´œ²»;'„Sú*�©l@˜„€‹)(‹.Á;)Æ&3EÐc¦»ÈM�½a2)¸®]hYLÇL” MÇ	!*‚³H5Æv/ ž‰HÙYìqzu…+×ò³_ü2bQ²?k™Î2�®Ñº¥íUÅù²e’&èdFšÔ8˜‡	mU}‰�
+£up+˜�
+LèhuF“Zfûû|öÓ�yqQñüÙFzÄéÕ9Ž†«õ–‹ë-ï|ùKøðš»{ÎV@oy|wÁ¶�œ½ºäáÝCÆãŒë«†>9á{Ï[Þÿð%{»‡LÆ=×žÎ;Æ¥À]v/(õJŠB¡¤b³ÞP÷‘³ë�s·W(t:£êjÒ2gûúvózVœ~ÊäÑWIò	RFæSM¦]!XDhåžýÝ¾¯8š,¸n¶ƒÀÍ:2-nLŸ„ÂXÈÏdº@XËÎb�l2¢:;£œ”Œf·°í†Ð�3ßyŒ+K>|½e½Z“JÅÞAAïÍz‹m[Œs˜ÊðÞ¿Äç?ý¡óñ”jS±s8Æ4-Sh;Æã1)¶½&;Øeýâ	ÿèoÿ|üƒïòêÓïóÕ?õ— $‰H%ÚŽñ"`[A"­E}ó¿ñ�Ÿ½ÀíäüÚŸý3üé_úE>üÁøí?ü¿öË¿L2}A¶[àúwxcžsü¸DÌ"Iæø£ï�qÝâÔ±9_R2ø(z³fgT�‘³ó5?z¿âáÎc¾ñè.·f+îUØÐrua�a‹éæèDátÅË[vöÇŒ(Ed¢4Ÿ=;c:³7:fºyöbMškîŒøôêŒËMÇ¢©yk1atp—Ïž}Ærµ¤[mÐ­åèÞ/R²é_ûöW9<¾Ï|ïcu@ÉëktIµ¤ªI*1>°¹î:£i{l¯ØnÜPžËÖ&b¬«5õÚ Õ@µõnÓãÐzÀ\¯«†Þ8|Xknœì�D	¶M…±†®s4M�u–¦ii[ƒàC n;ªªöV%‡Îƒ³žTëÁnˆ@é#Ætt&ÐOg«m…Ö‚Þ›ø[¤ë
+ÎYªº£é
+Ñ�µŽ$Uð&Òu›º§3†4Q¬Ö�°l·žù^Éd²Ëë—§¼ó�ŸÇˆÁ±�§‚ºíðÆE†3ï{ú®g[[²RRW
+R¼ó8-è{Çºn0¦§("žj³&‘‚ëuG$r½lIË‚"-xu¶D+ErCGuQ’Èµ 2žmÝ<8oØ?,‘*b¬Z`ÇõÕ–b4áwþÑ?âäù3Bð´MÍ'?þ#vvvùÖ/ÿ")rš¦Ê–¤
+¨${YC€�IŠµàµÆ&
+å=¥Èè*E—xîì’	‡ó]Ú0¤¢“C^zI’KVôH›àìvèFKÇ¬U�î=›¶åx±C[¤ŽÈ Ð{{LÆsb´\¯{JeXdcÆ	¨|D¢=ã�²(|’S×ºŒŒ´"ÉR¶ÍŠÝlLÝ5äeÆÎþUôF¢’õæ’uÛ³j ‘PLv)RËÞnJß¯¸<Y3AR7+šuƒVš´Ìp'KÇXë¸¬V•�¾åöâ�§<!FÅx¬ùõÿBBË¦¾dyY³?M¨mÂb6f&2^TÚZWaLÆ[�±7Op*ðüÙ'ë–~V“ŽA'¼÷ŽÄõtÂ‹Ó-¶‡ãÃ“Ñ˜ÕyÅ÷Ÿ]óî[¦3Í$“Ñ˜å²f2ÛE®7dce!¦Ì¾ð•ÁåsúSÈv�;�É÷0]O1Û¡ÞT¨T!¯×ìß¿�é5Ul˜MJ2×ó…·Þå�’{G>|zA™é› d‚T�Î	””j‚�CÄ™†b’#°4MÍz]s÷Áœzm™Lçç5¯––Ÿ_PÇÁbŒóÐ÷ ƒÅ‰žµµäÉˆM»Dë=1ZNŸ?çÎã=ÚªAˆ™ÏÈzÉ¯ÿ…/óßþ�¿ƒéj¶ë%—ç[¾ü­o¡ý©IÑûÕŸhgÓ„®®QÿñŸ»ÿ�ÇÞCë#>?¿ ^Üfu¾Å½|ÂþÝþþ?zÊ‹§=¿ôío1•cÆ”˜`xúê§¤ãu?b²»�ËwH‘ï(ZY®%­›Ð
+‹mZÎ·+Œöx9áÕ«;(öÈ¦šÊµÈ©å¬nñµãñ½1B&,PÑóüÕŠÙ4%‘
+{{WïpïÞ°Ì¬�ìO
+]ÑE�±9édÂÕ²&)ïÜ¿M´Ùþ}¾ðÍ¯óà�‡ væÁ8tHµCªy¢�Ñ^p¦ïI�JSº¦#¸¡qš(AÓ÷Ô•E%bÄOµi‡b�ÞvXãé;CƒÍ+e�#Yéš-Z)|$Zb½#zKÀÒ4†®vXk�†;]cM×¯3OØ¶-‘H×õt½%ÄHcZR%QJbúŽmS<ÔM"¢¸`H6U!6EÓÒ;CÕy"Ð¶-ÖYŒ±tv‹ˆšuU¡µdTf7QÚï=Ý¦£5-Æxò²dqë6!Ñ$ZÒC¼A[WKŒÃ×Qu“Y†q%"Æ8:Ûã�‡É2Ip‚¾�$R‘*IÓÔHéH³”Öõ”iJß¤ˆyB9N•
+<QHœóLr…WYš�
+o#‚”¼J•Ûe22�¥´­çþÞäòÕ3®Î/�¼˜�S¾ýç•Õy�ïz¼“è$ …Æ�s‰`QÎyöÙs&;;”i¤WårÉØ±lVd6ag±‹·à„c”/°Í†ìð¢ï89…Öž4ñ¨|ÆU0”ÁÉ‰¶FíŒ±è"P é¶-uuIØö$;sDL‰mÍý7“ûsz“nf6DŒŒ…G¤9Í¶f2KXž^ðàÁ|ôzEç[æé˜Tƒu+dÛ±\.9Y^‘'SF’ÑŒ±öììÞAKÃ8¿Å£{¡g,Ï.™ÏfÜ=8b:ßãá{;\Ÿ¶¬¶�dH8çˆÙ„åóf‹j’óÏÿ‡ßàé“S¤¤EÊý£G¼~þ„®î)Š1³‚£ÃCÞøÊ·9yú/_�Óv|�ðÁÙ%?üðœñ4ZÞ�åz¥yã‘bGpv�RU†“ó!íØ�ïqwšñôyG‘W¨4a>ÙEÈžét„’I– bÁbwŽ²	zÿ
+ÂÃ_%î¿CÐ%ãL�‚†^x—ìp„ˆž(*L—ãLd÷ð€Ó�?¦Ü¹G½i¹}|D[7¸Ú¡”ÇøHªUkÑ™§œå¡°­ÀÛHÛµD—“JÏëg×Ü¹w‹í¦F	°v,}zæøñÉ)�Y*ÙàÙ›Ž©[‹JÆ“„$8¼ÈØypŒÝvDé#WÕ§‚¿ô?ýñòôŒv[ñÎ×¾�Êv8º�Sµ-¯ž_S”%Ó)ëÆ"�")T9?þÎë~Åtÿ6ªÉùÉ¿øÇÜ:>æÞÛ?Ëë³-Ÿ_V|ôÙS®ùò7ó£ÔSÜIÁq2åë�ræiE/Ÿ¿ªxq¾áÖ£Öoñ&’Çëõ­w|üjÃzÓóË¿ðÆ1'n×Lg=Û3Mg+j·Áµ9ÍªæãO.Ü§cçhB:�pùj�P2¤iFµŒlmMµÑˆ[[óùËíÉÇ)zoÊƒ¯¾Í�7âbNßíè½Ãû€³‚$-@%BBTÈ3ÐJbŒ¥Ð	RÅÁl'ÛÍ!$ÖdŒˆ(¸¸\‚ ËS¢·T�ÁyèºŽq™�¤’¦7„‘Âá‘„«¡±CóXªhˆt7O'Æ›�;åý€øpc-ø€wküŸŒ£¬5˜¾Ã˜kzŽ¦mél¶
+Âõ4½£3k
+]ghš†mkˆ""å›‡bš)–×)‡ƒ/D°¾ÇôÕ¦èZ�b§«u�ÔŠI™Óu-1Z¬¬«-Î¬ë�jH¦ÉdJ)Ö:zãÈuB@Ðõ-Iš§È$Rš$I6X1zòLÑuž(Aë€”–fÛâ½@ë”Ú
+¢óƒ9RËžQ™à­ "q1y‘�¥	Y‘sÿí7‘Z3_ÌùÙo|�¿ô¿ü_¡¥¦,,�¯Ñ*¢³[ŽvK./¶'©­a4-ùÁ…-ƒG¶‚¼¨ÙT­Š{Ÿ¦9Øs¬uÜ?ÌX­6Ìó‚­´¦Ãu´Ø>@ZPÙ©ÍfEYÌq®Cë¯Rš‹OðNQÄ-Òuƒ©%I±VÓZ�•‘÷¨,`ûžÎ
+¦‰d¶˜PU)‡’ûwv1'›{¶kÏ¤Øåžêyÿé
+ßoùÒƒ#®.V4ù˜ã[šæbÃfµa÷NÆåµáèîˆ·o²íŸ¾<GÚŒËªår[1_H%©žðÎW¿ÁªÙài™–SlïØ»=¥ë,A•ÔK/xÝ®i¶–`Ù|Ÿçßÿ}ÐžI©è¥â^\óìud’ÈÿTeÓ°·;çôuäÖ‘à³e:Èžv´ô´.€481G…–ˆåÎ�CÎÏ^òèá}Ö—ç¼¹SÒÛ”Þ­¸XUh³bsöœ($Y9C%šÌ™!¸œJDˆY®»EN’•äEÁÝ·ÞâÇø}öG4b‡[ÍËË’¨‘Y‚öžô†¸Yv”YF–Øy„·DÜpÐd%½3Ü¾»CKÒ4RU–"
+(¥¹¨Ÿv˜Ö0Î$;³#zêf=¨ŠG)±oq�èâò2E‰Èh²C™
+¶}ä‹_û¾ýçþl�¤YNÛä¤dYBô™94žëeÃþnŽúÿÓÿ;«SI™_ñ³ïErÙqkÿ÷ÞxÈG?áÏ=ºÍ,ÕüÆO^ðøÑ÷oQ7-ÊŸ`«‚N¦T¢åÞ?ãùË
+uËÖq8ËBr¹é†¿äåŒuëX_~ÊÑáfH³¬ìíA#=-€ƒr6aï ß!%Û/è£äÅÉšB�QRpŒÓÈÅË
+›m �ä¤"RLvØ½÷�[�ß")g„ÞC�sŽôF­çÜ�V2ÖÑ4|`…UÕb{OßXºÎ ¥dRH¢5øÞ�’eŠDFr5À[ãˆÁ±Y·c‘DzçHSÁ8Í�‚B÷8k°ÁàãpÁŽÁÓ»ž<Á;º¾"¹Ñã­‡0Pz{c†8qo‘RÒõ–ºééúž¬8ç0ÎÒõŽMmq~áH)±¶'Æ€ñ�à<ã4£µŽíð9ŒÅÇ�,¤dµ©IIÕ"cZš¶Ç…€�ë<]g©ëžQ‘ü,ë˜Ïw(eÂ¦ÙÔð”“Ê@‚õºFJIšfô¶…hé­àârÃd”Ð;O]õ˜Þ£¤ M3”\ˆ½	Ä“¼¤izêÖƒ@+�ˆ�jÙ3žå¤­%¤šªi™ä)›MGRXæåÑ|ÛÑùžÑxÂÕÙ’?øW¿Íoþ½¿Ç“>`4�ð¥Ÿÿo¿÷o½ýÜ;bÙ­yþ|�&e:£Œ[q°‡³“(<©ÈÉµÄgšRk¤
+94#²®¶¯PÓ9!HÒèÁ±gY€S\�^²7Ñ„Èy½ÆÇHe6ô6½g½é8ØÉÑ!gœJå /5.�!Íéù5ó„ÖÔÌæ‘M½eo_a*…wŠ»w3\m™ïÏ¨E¢-ã$a½lÏ#—¯-'›šóå+æ‡ùÚÃ]~üú‚‰ÈÙÆ‚Y±ÁXEçÔÑñ?½€å–ãû%'ÛÅ÷ç¬jAm=ÎTôµAÄœÆ6Ð7Ñb:‹™”¬N¯ø¹¯¼ÉÎþŒ«§Ì÷ç´Q‘gš­Ó¼~õ9ù(gÝX>øð*Kùî<#-"I
+³q�Õžf›ñ…/=oXÕš|špyÝ „¤ñž®VL³É Ž’ªµT}ÇúÊñàþ>Ÿüè.�fÕVdcEÓ;.––åïÿuú§¿‡¿ú=¿ùŒ  ÌÞEÆã®–fI$ê„¶Ùðèø˜åò„ÛwwyöÉ	{ó„ÖJJw�\ÜçêÅ)i©ÈÓ€ñ”|´V19˜`{ƒÌr‚”HgQEÁzyJ³^“F
+	X7ü,fZêŽó.òéÉ5›Õ_þÙwY¯®�Jl+éR‰‰=Ê�	þŠè‡I…Q=UãÈ„çbÙ±»—±Ùlù7ÿâòá~‹½ÃGÌæsd*Aac`–çƒê_½ÿ�Û‰%i*j®8¼¿ËåjÉé«†û×¾Åíé'<ØŸ’»üµ¿õ;üÆwŸqÿ®æçÙ0Ög3®M†“-‡³”iž²i
+Ò²`¡é«ž×W-mÛ±3.h{�pSŽ�ïÐ¦�ÓOV¸F£ô„Ý¹d}}Êé‹+š^±jäM2RŽI!©”Q–’– 5oÙÖ	Åþ=î>~Èƒ·2™ç¸®¥w-ä ª
+::¬°XaPÂ¢œ&úŽ2Ïsš¦‚ˆ6 D¤s†zk‡¼~g	!`\�ñëBJÖÛ)@ÈHˆ�ÞXšºÇyO>á#‰“(1$´”Tx¯ˆdâÅ½iÇº”t½Ã�ŒcÆôgqÎÑõ„Ð9‡ó�¾wCRª·DJ¼,gÍ�øb(Ý	9`¨­µá©ûzxÝˆê­�ž¶iÑBðXÓcz;ØÛ,x×üP\2ý`­kÛ~€=ºÀÕúš¦Z…Â…’©ôEªs¶]M’zºÎa‚¥©[Š4c±3B'°Þ�$IÈMÓÁï<©Žxï°Ñ�ç
+�H‘2W¸:•{Sª¶ãÖx—ª­YÌ|¯ðÒ�¥9ó±dR(:4ŸüàGü7ÿ�¿ÊÙ‹g¼üì	ýðGLgSvŽÙ?œPKšä(·e¶˜’¦9‹‰ ïJÒdÊbgAÝVH9Ä¹•3p’í�€R#¢Ë0ÑâÃŠ6ß'.h²É!£4áåë§”Ó”»÷fdê€¢´$IB´	Ñ$×� ›H¶Ö¢„"WTÆHú>²w¸`»n)KK½²¼ñ–¦mçÜ¹
+¯¯,¾Ùoß:„´d‘œ¯k~úâ5­‡gO7ä™"ŽÅ|Ÿªí){ˆÌSäf‹c‚˜1IÖ�å¾je;,»-ÂOÁ3›l‰ºâÅëkvçGl/×ŒÆc.S%¯¯Î¹~qÁ­[sÚ®eç à�ÇcÜyMá�wK–6£Ùœ¯ITŽÎ5+Ç'¯j.Œàé2¡Ð=?û•÷X]-1xr¡('’ë‹s�¢0|ö¬#XCžKœ¦
+©4ÌÇ#œ­SS“Ï%;ØÛÛ§³ŽÓ³W`gLÊ„[woñé¿øøv
+ý–öéï³xüG·£UGÓK¦ãÀõª¦Zv|áÞ”�ãc>ûø§$ÓB¿%Ù»Í?yÊáñ!atÈ,Œ›uŠŠ�ÉdëzŒ™âš5‹ã7X¯.I�#Ê!½9ŸŽIòm[ÑuŠ<Jk:c	R“êÁýR©]ôì–�Ä5D2„4lÛ•[3œhÑiDD‰ñ†Æ8f¹æêºA&š¿õÿ?qþâS¾ÿ;ÿ”·¿ò3ŒÊ=\4ŒÊÖõŒ¨÷­ŸûÎF.eàý§
+¿÷ý×7§ö-ÿè÷Ÿ­Ì©µf²s‡o¾YP­¯yz‘òÆý¯sçÍ5o¿7âhçm~øùGœUŒ'	ûŠ©òdY$E..jÊqÉÎnÊ«—×Ì“†ãÑ¤&[’‡‚;£;LGcú$²ò�¶uä£„~kÈ¬'K%Æ*SÑÆ
+'5!8¤š°st›£‡9~ó1»G;©ë0ý€oŒ§®
+ÅDÓ{	Ñ#‰dº (2]R5-ëíŠ¬Hé]‡t�!ðXŠ,!KMÛ‘gïÜMË»¥L%Mg±Á!¥Ä¹~hŒÀÏdœÔ\ë	Ás½ªé»€TàcKo{boÖYT®	Ñá] w†è=
+0fÀ¤´MKß[Œ3@D’dèY%›¦¥n-Ö;žMep>Òt=Uã	1RŽ4‰Ò„0 Zœ7¶¦³h%è:ƒ÷©%ÈÈvÛS7Ãá1.ÆÔM…Š,¹º®ñ!0ž(Zçpmd>Û[Vëf˜ƒOô‘mÕ#Ó¡’$’ÎFNÏ„úlœÓ±%ômï˜�()Ð*E(0ÆQ×ŽDC´=6fc…'ryÑ0KÖ};Œ„"¸e”.¨Ú@m
+	‘$Õü›ßú]ú›È²5†�~øGüÊ_ü·™Îæ(0¡§2�Rz:"ÇXBª¶ìÝY`ºŒzùšTŒÐAßÜÝz‚ÓhéÉ£Ãõ=› ØŸ°í$Ù°¤Žõ†.™î”,Þø*^F2“à] Ð%{£†{wGKÞx8á�·Jò|côÝš�ïX6
+išPd�rl)Æ’ÇÓ„ç‚f»FŠ‚±4\­VTuG‚¡{}Ê‡gWìï.¸ºXñh¦8¼ŸÒ›œLD’²àäõ†O_}BpžÃ;_äÃü€ƒ÷©¶‚²±uð³¿ô
+ßÙg]÷hÙVžõ&cV¼~ö)·�gUpw<%Á¬ÈÉ‰lS’YÆúÊÑ¹}ÆlH­áw>^±®§tu†ˆ‚ª»âÃós>¿HÑÂ,¨‘âÕÚs<ÕÏì–S‚ñ´$(5åÉË„„¶ïMÁgÈ<’zÏîD!,ØÄ±í:”´«Àª–|ù½ŸáéÏ0ÍjZ¯9»xEqï«lž½O05BjT1'NïÐÛ¡l'QÜ>\@¢0!ÃUž˜8Å>So<Œ\žVLUž®ÂˆÙ8r¹±ô¾%Õç4HK@¢Í*Óø>¢”@ˆ@]·ÛC‚iÆºÄR ”£„d²Ï®6tÃùò9ÿæ…åö­€D*¶Ë
+{…ÀJMJj./*²|¸ÙÛ-æŒövX]�òò³OðÖò“?ü=þòøSÕQ´ômCê@ýùÿèÛß1Jóâ¬cµ­IÆç-IgÉ„aÝD>}qÉg¯~J,%_~tD#ÿðw^³7½Åí[kÊÉ3¾ñÅ9JÀÇ?½æ‡¿Åé™àüºE¦ŠÇwóüEËó“-‡SEÚnÙ™%Ì�æÄàÙ6=J®IØ°l'WWøÆskvÈü0R;É§Ÿ/99Y±­1ÏˆQ L%·î?âèîC‹9:á<‰ŠØè¹Þ:ºÞ½Çz
+ú¦Ç‹7N
+×SW
+¶³„0ìr¥p~àÉÄyoìà›À²\
+i©TG²4BpàâMñ/bz‡s!<mkISÇÃû�Yº~¸ó<_®°MÃ¤HqÎ¥„›˜°35šáB½ m
+«UMo,Z+„p:œuô�ÒVÞ@t]Gô¥†�IôCÒ«7k
+y:ì4ú¦§wÞÛŒ» x¸aç‚E*�3�®íQ*‚p”¥¦wÁê¦C+x¬wô}Öâ‚£5ŽóË5“T0OÇøÐÒô
+Z8Û£DIMDƒtdÂ|œR5UÓ‘È
+m×Q7–¦vô]Ï¸Ì�j˜ç¹¤ï —	^y|?Ì–…RH$�ƒªkq¡§í{š�'ªÈd:áÑ»_âåçŸ³]­Bpxç˜»o|‘Ýƒ‡Ôm…è%óÙÊŒÄšÚqÕtÔÆSo=ÂÚÁE¢[9A%èÂ¢‰*u§@LÙ´�¦Sô¼@�šJ):Ûspp›<*TÛs½ýœ¦Ë1~E½L¸z¥ØV‘Í:²¾\]*Ê"ðø d4S”éÇÆdÒ°¼LÈs�`ÌéuÏ$ìíÜâôäŠUåïÓøìºåÙvÃÎ|ÄúìŠ/Üž¢o‘ËUEZÌ²ev°ƒW‚ªô­#ôyšsöê9BnIò”ÑlÄêòŒÑþ#’$Á{�ëËKR¥Ø{ð€ËmÇ$“äÓ†jH¼¦²[ÆEFè%Ç÷¯~ò��öY‰-—ëÀíI‰VÈ$®óTÛÀï=»$O#1T¸ Ð6%†-—MÅ«uäÙÅ	JKR­iˆT›
+ã*»åðZS…r“%\nkb¢qÎÐuà¸¼Þ0Ý=¤i:òÉ‚‡	‘û÷îñÑ“—ì¼ûm*£`tH~ÿ«LÆr¥†÷Þ6•¡ÌYîÙú”qnùôékVçÐ;Î–9Â_p½²ßž“Ž.”Î
+.–[z+IAˆ4�‡�qA1ŸÒ,·ØRt6Â�–Šm½A"ÐyN‘dÃ×	#’D²­{f{;üÑ§gH­ÙOÞxø×Í{óû$‰äú¼eoV€R4.D†ÖžŸý…?Åd¾GU5Ì÷o“î~‰;ÇšÊÑä"A½ûÍ_øÎåé	Ö¶Î5ögJ¾òåostü�£ô‚»G‡dÂ0ñ[¾òö»LäŒ‡;ð¥÷6ü“ß}Å|Ï#£ãö-É¦:$Q�ø¥¯¾Í»ïÜ%É³ÏN88Ê¹+TµÁ–:
+îïq�—X­]#¥'S’Ì�yå­îHüŠ~8åÌJIc6dzÄîÎˆÝ£9‹ýfwÞ–ZZ`zCS÷Ô­ÁÚ@QÌÿè#]–J¼±7Þ7Œväà½pÞßXÁO–i`½9H�¢sCË~åDÒ\‘$š¶íðD´7…;A�Ê!+‘”ùg“É°8/²^X|çÀ	|ßc­g½éñÖá¼£jú›ô×€_×Ù ��!¢Ä°qÞ#£¢ë:º¶Æ:;¤ÀLO) xK¹,GÛô$r(
+ø�sC²7vXòû¡ßb¬CðÇOUv ¦Š¥5ë¦Â?ŒÎnLŒ«M‹ç=Ë­§	5Y&0]�u��5ÕªÅõ¥z+B‘¦šËË
+­-�”µÃ×ž“f)2qdÙ€†Y]×Œ&
+Û;Fe‚H5¶×uƒ¬ËzH«H'±¦g6N‰rp¢(×“�F”ã1{Çwxðö8~ð˜¯þÂ7yçÝ/‚2™Qä‘R<A¡@&Ùp×W7Ï¦Û³wôÙ5ŒË³Ó–ÅbÁîHcÅˆÓËòtJ[ŸRŠŽr\³ÞDÆ£5AtdÊ°:;åã—¯¹¾èQ¾ÆÇœQÚS�„“¸è±6âG9›«†ÇÇ®V	y¬è�ÆI’8–]EÛ:Ó
+!‹ÔãMG¨-û£@&#Þiêë
+¡SŽÂœ2.RËOO®¹?Ó×5“IÁxšpp ¨¼¤#ÐÔõÉkF;·ùÉoýÏ_>åÙÉ%š6X×öŒ$EÂËÓ%kÆ*ç‹_ú"×Ûšj³ÁÚ”ÃwßåâüœÅdÂÙéšÙîˆo¼Áô)ÓÁ‰OIåœU{‰ÛÆÓBB’HJ™ãTB&"j<áþ}Ë�?¾¦sŽÅ~I6D¢ñèq‚Ž,…Öx¬’H¥0&’c^¼>ã�‡��Ð"²^®X­^ñüå†Dç„ù}úù›”™™‘â‘2e44�å`gÄ¶ñœ¼¼¦,½ýe®¯ÏYJ1ULDJ–Mi›'…”_²((‰±�›ˆ;eäÕiKŽbºÈÙÕŠ<Ä �Î] D‹‚4Fc‰•C"#MlÙ=ØC%cò$ãåå–'WVÕ	çÇä.–K¦ó”zSóèÑ˜ët4Ü¹÷¯^¿à+_ü9Þ|ïç>àüéœŸmyãwI“1u…ú¹/ó;#®øÂÑ‚/¿ñ%$‡œ<¿àógç¼Ú^Q]¯	&ð|mØlÆü«ÿ˜×¯ÏùËï~‹D�ø¯ÿÉK¾÷~Í/«àþñ-&úŽïì±s¿äó³yõÙkö�wØâ¹<YqqÝ0ÝÉ™îòðxFw
+½-ˆŠtRÓù-­é˜�&çØ°!IrR¿ÏÉõ5Ç·îðÆ›_$?< OH“ïB@Û
+Mì¡m
+¶ä…ZÁ`d¹ ghÐ½¡ëÐÂ£üð†DÈ’¡ô3Ìß
+}ï‡‘Ž´$i6} iÌTô-*:Öx¤ôŽÁVæÛmGµ­Yo6´UG‘D*Ûá¢§ï;ÚÎÐõ=�q\ ‰l²Î‘^"bF�¶oð> ð7…C�í-Ât„Þ€–D	Æ…ºñ�Îq�Œ`œEÆBˆ¨(†¥ztqÆÜ#‰ÒXop6múD…$ÏMeÐêÖ@�ô¦£j]iŒLæûä¢Å¸¡õ¬„ÇE�ðž¾ótÞ¢eF–y´Š´õÐO©‡·£<0e¤™	ÆX„N�BâBÇx¾Ã¬ˆÃþÀçè¤%Õ	³<cmýf
+:RNfl¶I™�HÐIÆþÝcf‹]ö÷wXìÓÚYL(tä�o%q‘I6B¥ŽÛD>g+r®—çØ$çx×²³ÈéZ‰7]}‰ßfèñ}Ž?þè’b¼Ãán`®Ç<;_s~vÉôà!U¨)¢Bë&%q8ôT—0Î[tpÈÅ1gççLÇ5ÅH²ºŽ|ôê3Vk;øð\À‹€vxrÍ$†HS„JébOR–ìN8»t¨Ñ‚	Ð—·8\Ì(p¼¬[Þº¥)vï±¬"›ó#Qpgo©Kªíå3îÞºÃÅÕ	2@"�ŽÐªæ³³–óë¡t{ï¨`Zî1=¸ÅGÏ>A9�‰Š
+–Ð·xQòþË×L'Šl
+Õìç|�½;ùüê~ûNiZÃbzD¢¬s¯	ÎñàVN(¤)0NÓÙHé`k<>„�£O?¿`wVà¢G¥„$"HSÉx–Ò-mðëKö�o±©¶„0áìrCcþê)Í�þ[\×pïÝwèL$K:äø¨Pi‡–’¬g¹Zr;Ox|tÀ}òjP€&0�ÌyãvÂÇïÂÕòŠ·Þ*hÂ!Ç£–egèŒA£¨;É×ÞŠ<;÷ø®æÖ�9ædƒ.�áQ
+‚cÅf¹DÈ®]ú›äMO‘xVë1SlÍûgW(WóÅ{÷yyu…ÐŠªkh|àðø¬|…Š×gOØ9<äoþßþÏüä÷þ?úíÀÏÿÒ¯á®ÖX¡PéÛ_üÎÁ¤`VÌ©ÍÓ³Süú’”-j²Ã÷N*Î–+ÞÜ™P¯/˜/îQÌvHó‚_ýwßâ/üÚ
+Ù=áéë)Gû–IyÎå‰áoþ¿ÿyøS¿ø˜_¿÷&�ÞûÓÌßå+~ýg�Øg¼x­È£àº•!Èå%Qišj2<Þûç
+FÉ�IÊ�‚÷¾ù%vÜ¢Ø[`[¨ª…%K"¶Lò	ZY|ØÎCo,}Øn{’4¡YwÄÎ’%š®5)1aˆ±êLAoØlz6•AÈ€é†‘ŽVb ïãà7÷ÃHÈy3<±D;,’…B�–Ãã("’
+A°c,›ª§n{žme‡E¹µCŸÃ‚ó¬6fàéh‰Ñ7º!Ò;H£,�ï¯zh‰ê´TŒJ@DªnXÈ‡'{g{‚ëçHv&!ªÆ`ÛmF�´
+o-Æõxã¸\Ö$bˆÃÊ H�w–Õª¡ëzÆEFï:d¢ÁuÝ
+xïQBÝ´D!Hed<“œ_wè,²m™õÌ‹Á¬Ñö¯âàŽVzHÂ‹”¥óqJ³lYm>J´’DI–¡‰Ã“¢÷è$c´s�B’r†¯<Qõ¯Ù›¦Œó]ö÷&üþ¿þþÎÿç¿á¿ý«ÿO>üþ÷/v88<BË’¦ïQÊ’1Q#ã€_éòZõô2ÒÙÈlqÌóÕŠŸ=§‚Ý�‚2‘$»÷0Ë-›¶§ÜÝ'$·ˆ¢ Ú5Ÿž\sï8'K*BrÈÉÙZ…i·ÎTmCZ.HJEôÐ?Ò”Ú2Ó)ØV5£Ñ&ÍƒÛ÷ØŸ-8½Úàu$ñc|
+©S’§Ãxñzm°•£ô
+}&0íWt6F5/�þ‚tq—ÝÃ\\X¼[¡ú†Ÿ_ñ¥¯~‘ltÁëuÆ«çO	1E'Ž�ƒ;¤¥`zëãQó»Ì¼ ‹Žªî©V†Ç�Jv³Èbq‡Nú„¾r´W¼9Ê¸ýè÷ßãóWŽÏü»Ìó‚þÃOhû¡×ç
+²0¤jÀ�È<½`Ó`=«êœõ¦¥é
+³®åðÖQ[Fª ï*¼±	I–Ñv 4­£ÞvŒF%^¶”dÂ3Ù}“\D&whÍ–�M¸þÍÿœ¸zŽ¿ü„Õçï³ûÖÏ±³“Q[‡–%wˆÕkæåÆ»·øþ§Ÿr8)Ù=¾ÇöÕs6Ý@2Xv–r´Ï|2ær=¢³-ã/ÏX5-:):òì2Ey�óÓ;Ô"â·y^Ò‹ˆš <ÆDö%uÝ£ü–¨3Ê)ôUƒô
+­ÕÌv
+–kÏf[“+Å‹eàjsÆ4Ï8ÍXä2QlúkÌÇOÁ9f{)’ÈÏ|ý›üî?ÿô]Ëïü³À[¿øëH‘ ¾ò?ó�h{â6Ånµl9�t<ãîî‚‡ù.ól†‘�7¿ùëüÌ—Þá0J>ú­ßF?úSä»_…Ë%?ù´äw¿[Ò®—Ë3¼õ.w'‡¼w÷?¹4üƒßø=>úèd ‰®5?øøŒºûœ7¶öÓdÌÄpÂY\±µžQ!^ÓC¾¿ËÞãÇÌöoaZÍõÕšÑB‘JØ^w4µ'Uàu7ìZGïzæcMì œLl×"¢á°ÁÐYGÝ)‘¡Ð†Gj‰ÃÝIôŽ®ãZG¤ðôÖÑOt¥4ÁmnÓ‡–h}o4M�Øtø®'089¢wd¹ êŒíñ!ÐÙˆ¡%UgðÎ!Å°XÎ!ob¸�sÃÞ$8dT(¡†.ˆ±t}O�¾·ô&|ÀÛžTIPÛ·C|ï¦Wâ­AJ�5Ž"­kp.žvE&q€†¦ÆZ‡‹Ã¨ëê±Î$¦3$®¬uØÞ’ez˜)gŠ¦uØn*¬i9½nÙV5»SÊrD[Õ¤É}´¶ÐØB"•@g!ÒL¡ASO„‰RôM‡q�J ú†‘64z�¬ú=ß§ô5µ•ô6 DÇl1âïþ�¿É‡?úÉ�ÿ£æ³÷ßg±·Ï{_ÿ
+©€^9Tb�J ôz±b–�ÑrŒ
+C)²Ù4ìîÑ(%I’/Æ�¥Ó]4ŽØ6T¦ é{Ê´dwwJ”°9»F‡ŠËëÓIFå
+«ºŸ¢E¦
+BÝ 3ID£U�±Ÿì#Êž4•ô¦ÀTk®Ö:j4§•ÄÖ€ªé:¨šŠñ4b{�!§È4;»|ê�^�j�2e™´C…Ù4(ïÙ9š±=Mçh.–=ºÅïþ›×èlÃ|gBæ-FˆfK©øÓ§´�¥m×ôí†ÃÃ);;SfÖ^³±
+[­¹¾\£´Z÷eÁt2ã{¾`³Q,Æüì{_ä‡'5Ï¯7Ø�!)Ø»3cùú’�é%…ÏhŒ'¼ý¦£Ú$Ôm�³‘ñî˜ÕfÉ$±n6¨T³é%‰:Wy&èÃ(qumPÚ`ëò…ƒfƒÎ4c™3ž®–C¬×œ}00Þš¾^±ûî/cMOt‚ *bëyA/¹»Äg§×<ûÑq¸¿GïÓrDÛµ¨¸b>Ùçjµfµ	èþ	{�¿Äíý[lë
+M×‘§‚è{Þz¬8=éH¼#)ÆLööh¯®°ï)Ò‚ÆôÅ”,“ô½ 0šç¬_[zÛX—T¢'HHá}àãó
+EÆÞdD1Éh–+ÜdŒÌ@ªÁ”8*J~ö[¿ÈoýÆ?ÆÃ‹¿Ïÿú?úÏP?ÿµŸù¹@d#ÒbiJöæžª?åó'/yõì)¿öë‘ÿø÷¿gwW±]žÑlWt¡à�>ü	ïøGœ¿nxãë?Ç'Ïù[ÿô©ŒÏt�ç+ÇÓ'ókßÒ<Ü­ùéçÉ­ï—¬/:¬cÇ¨¤™¢UcÓÐ7ÝÍ˜.î3¿s—ò`Ÿ¢˜àÝ a)rEìþQª±HÚjƒ1ZK­èŒÃÑ>�‡€“– Þ+Â�cÜõÃ…X�³�€ øÁËml‡ˆÐ÷)Yªpf ÂŠà!xºÞÓ‹¿!ç&‰@Êˆ”à�#xÜ
+Ä®m{¶ÕpÑkCŒÃÔÓ{‡¸A’"‰–èÒx¢.ÚC’Ë�'XOðo,Þ:êº£éB‡`ßlo8²,AJAÄÃÐNöf 
+Ç8hsEªà¬'ÚpówÃn§é,NÄ¡h"M$Ðô
+9¨sãPÚ“JˆHH=Ä�ÛA¯™�60Í}öPWË+Úª&IsB48]‘@¦<nÓbƒ¥n‡ƒ¶ÌS¼‹T�eTLÇ	îf�˜I(µ©1zÕ¼B	0Áá}Jð#Ž¢ñÓ}Dß·ƒþ#®N^òïüù¿H¹» „†,K°­Ç»ÁsÿNÎX¦\l*¶�&gÍå™à`±`}qŽ'Pf‰% 	²ÄG½^!½'+g\^Y¬Õ(½Kè56›`C…òÓ ÊÝTRè«!E‡›/Ó™`\BÛä”crDè;¦R�°'1-Y¾¾`:.¸wP’J�59By¢°h[S“ëF9„VˆÑ#-O_¯±�go>"Øí
+}Ì)¦2ÉeNÓwaQID”3ìºaÛ{.®^±7�²È4?üô%‡;9›W¯0Œy÷½7vCt�oÉ&“9û·�‰!Ð�Ø´ŒÍ+&‡oPŸU|rùÉ“3 JAg;hy9Fø†­õLÊœLiÞ²âjÓqçà˜¶ÝRæ˜ˆŒŠG�83ÅÇ–DdHÃœ|lpX´�X«†iD×ñò2°{œcFGh¹Ãíý†Ï'd;G˜ê¢`ñÖ×Iwß¢­*P’½¼äJDºª£Ès¢M98ÞƒÉ˜¶Qv5É´¯íì±Z^pïÞ#–çO¹n¡ÔãÅîî(®65Îõ rNÏ�xu¶!Évö¹Z]Q’“ŸE‘ahè‚&)53ÉºÍ¸\=G¦)f³F�
+šÚ’täÑ2§ rÚÃûOO8ší0)Z-èº†àº�)è
+†”·¾ü
+¾÷[ÿÕvÃ�ø]Ô{ßþÚwöwfì‹’©<~|ÄþÄ³—tL2ÁŸý÷pÂóŸœðÿú[ÿí¯ÿ]þè™çËö/rïð.\¾»âzù÷þÌ{|ãñˆåÉ9ï}å÷É%L;”I�Êj¾÷ƒ—$éæó4�à¬÷ï‘J3]’™œ‹¦Åe‘éÑ.ãã²ÉE2<Âˆqè_°Æ#HqÞßÀZ%(umi{?Œ²:‹q/@¨HÛ9p–"½
+8)=,Ê­A	OŒ{Ó·Ö¢¤ÁGp>¢~÷Æ¡8 :œíÁ­Åws08Œó¸núžÞEú¾GÄÑ£ÀÙÁoÐ¶–¶ëQJ3�ÎPJcúc{”L‘B\Gt�$¿éyˆ@’ÈAxAjÈ2E¦†}gø€±C?Åß´Ú¥k†§)®w¸àn:#ŽàÂ{ÿ¿…ºµÃ!á=,Þõô½#D��ÃhL
+a0œY3”�
+�ôà’Œ <Í¶!ÕC·«§”ÖTÝ�êò²LaÛ†�ƒ,˜N
+êÞ²Ù¶¤ZåGkÑ1àlAï¼éIÒ—ÎÑ¾¥1^‚hé£gçö-î>|ÈËçÏ©Vk¦‹¿ð+–Ÿû•_Þû^Óö-¥Ö¤yA™ÍØ,;.ë +$y.È
+A>M˜N-­ÍI’„b:¡mWø˜ƒ³øÖ³YK²4rqzMPžÃL°
+–t”òðØr¹-˜,îÛ%Æu˜è¨;G¦S`I�}ŠQšM?8z.–kêÕk6×={“Yâ0*'‹¾]ácÊèð!;YÁ|\`�eÓ·éÈÒ1Ö1ÆxG‚Íª'eôÀ¦3l£§©KÒ´Å�vIË1I�¤Á"Å€vq±'‰&eÙNÎ—°WPwŽéÎ‡û÷cæ{3æ·¾@µyEÕrŒ3ÔÛ5w�ï³\¯8ízNÏ\d„`Y¯jÚM>ðöÛ<}öŠ¦³¤y�‘Å~ÁÞ"ãüºãrÕ°Ü¶d‰úX½çðÖ#Òƒ#¦eËdÚQo¯/&“”(z‚TÐ¸õé<¡ë—W=2åœûw~ã÷OXUç˜(éê1¾M<ü
+âø+¨éCæ³aù�%‘çŒJÅfÓ ¤g¶'yq½DÆÕ{œ�ìîNè7kvGFEÉ§Ÿü˜ÑbŸE±˜óé³§t­âá½{“„——5EžpÙTä:Á+IuyÅÑÝG¬šk×vtÎ0/$ÞI:ëÉ’ŒfY!cÊ¨Ôè|N×7HY_vÅ^9–Ûš(áÓë+š*r¸³¢Äõ’"K˜ŽÇdiÆ¾ÌñÛ_âþå?äúêõ§ÿÔ—¾ó¯~ó#vßâñ;_Ä¦ç\ÃÓsÅËÓ1û¿û”gÏ_ðêÉG¼ÿƒSÞ}ô5þ�_¾ÃW¾üœÍåŠèœ\Vüƒý;ìÏ
+å¯ü9Þúú¿ÅÝ£Ÿ`Í	õjÂÑÝØZpú²gtk�‹ë%‹ý’ƒ»#>þ„b_óü¢â_÷ÒvÅèöé£7Ù»û˜$•H"1�CëqHyëðÎbíÐ®‚¶³4µ¡H"DZëè¼cB ï,UHµ$x†®„!%]gpÁÐÙˆ)ZG¬ÆH!¶k‡÷‚àÖlæ¸™µHŽVŒç¼G¢$RpEÓÚ\ã<ÎG´b¿Æ:ºÖ‚G*EˆÃ×‚§n:.®—¬«©4R> ¢¸1¡ÊT0ÿ®ªÃpipW÷7»ž\'´¦£ë‡Ïín^CôÃ¸I0ø
+:ÛÑu=â¦”g{ƒ”áEâß:âŠÞ­$ZkŒõH! 8lÓÐ7»›!Îì½%	JàCK´‘¾3´Æ’e’¤Pœ^×o˜äŽhoìƒƒ[‡Dj¬Sœ_\²3ÉØ›ŽÀyÞº}›OÈUF‰A'Š®ªXn7h{…�3BZpqu…7	Z• z\Œ<|ç]¾ùg~…{o½Í/~ó«xo¨\Ïª>gª2Ê¼d»®¹\_£„$Õ�LðÚ`º$£àõE„Äa|Ê'¿àùÙŠ;ó‚Øm8[ôÎ>¾ÙÐÇHjW£tÊ¨˜qõzË^Y“‹ŠÏž]ñhÿ6W¾Ç¨À\§„>C(Ë
+&?¢k¶Dê“Sœ’<<<¦¯k+²©Ãµ›u�H'Üžkz¹¤¾<§,÷ÙÙ½Åö:àñCaÖU(5AMëzbk¯JDtÚ²iFÈúŠz»&M;vnœ�lñ*¢\A‚ ÅH1™h”+8ÜSÙ–ÔDŽîÝáÅÉ%{{	óÝt«
+]»¤1=1”4ÛSöæûì–%¥„óØñOxÁEŽ‰MÌX?âÅOÊh¼`6QŽs”“¬6ž6F�q˜$ìŒy™á�gÛ¬(œ¶‘zíØT†m=|D©Q€O/7ì,Rž¾4ä™b4É°]OÓi‚rô~(áŽvF,?ø=V¿û×ð¯~Dºû�.N™Zƒˆ×´V“9ïvBî<‹2%˜”»ÐöÌÆ�t¶C#É¦ãôr…ÎÆÖCk·´çÙô�;ûN×£pbè.u!¥«/¹ï6Á;b¶k‰¢Ä8ËÞbÂUÕñòâœÙB1�MiÙ"E‚í,·övÙÝË°ªÇ»HZ¤H›�“¦æÙEÍƒyÆî²|�%Ðm×Í’½ÅNõ|þÁû¨_ÿþÊw>ÿä_|kÍ/ü\Â§?]òo>?áj]q {¾ôH1ÊròÅùnÂÁ»oS<äù=aùò‚ç/–˜¼¤ñÔÞ[ôœ-Oi·ŽëÏÇÏá§ïÿ>³ýnß›2ß'ßéùégOØ.�o¢SÁÎbÌ|º‹¸—;�°p@]×­z�ŒÃ]®uvD|hkQìMÕ"ÒHš‹Á=ÆTô$ŠÁí-‹&"{‹u�´ð„ýM¡N‰ˆ’–\‹aà"!ú¶'&Ãž 
+Q{ïðn`X™¾G�âO(½Þ[œõH1ˆ bh=pž„¥J
+DÄ™Œ²¼À˜ƒ’x²®zšM‡5Cì×ú€ó7øpÆ ÂPàC"C
+‹8h[E"ÍÆzDŒHñ~‘Y3Œ¼œ³Ã¹ÖÂÍH'�Já\ÀX�R�T�’ª²8ï@)ŒµÄ›ƒOD?$HˆÓRNr”–ôm?ŒÆRÁjÓ"‚d2ž#t¤í7Œ’�Iœ1<:Úc1/èÂ A~rù
+ç;œwDˆ¦CÏn‘hX5–W§´ëŽÝÝËmÍÅù	½ÿk†>KŽ<ÑS�Ž¯^®˜�&-9¿ØÒˆÀlQ Sp^ ¥"!AhCJB)#9-ùh‚Tž$
+äÑó…wg4òë¶ÔWK,š‘ÒC€ÃÍ¨·
+±³èD°oÎf›²í=×®b’KºµCxO6Êh=ô*Gºb‚!°¸uLèY©È²#2š*a!ÍaggNSW|üùl¹Ã�Å>/Ö8W£AÅ•'Týš<Ë¸³“3^(@éçºH_D>þÁ§ü©_þU¬;¥ësB(F‚E.qAqõº§�æ†»û‡Ô—-]ÓãÂ³mXŸ.ÉvwiÚ5ï¼qÌý/}S·¸Ðrº1tþš‘òTuÏ�/®ùèyK:ÍX_,yçxÊek98ºC9*®ÇºŒË~ÃééŠÅ¢àüúš|^0’ŠBÏñå„ÍëW”‰¦mkªÎTä`žz@B×²·?åä¬c>~¾¬gT$$º`<ËÍpá®«Àæ£B{ú\Kÿü»¤‹[¨É!Y!°&’J…E¡ò–iQR–)J¤Îé;¨�!)ëËK¤.yû[?Ã~ž¢›íq´ãðBsu¹a\Œ•svË”“ÍšT+„–ÌÆŠUÕ³¾ÞPŒJZ<™�Xß!¢'Ø@UmypçRå„¦Ç5•(“‚ÐådEBÛvgID„4ÅúŽ2•ø^óÝ§k>øðwîq½\ò`F9.q,ù¥_ú5~óŸüC” øÎ§þ€¿÷÷ÿ€¿ÿOþ€�>9¡j-÷öøÚí7³Ãáá>V
+NONÉ[ÏölÅO?:å'k6aM°×Ì�f¼±‡G{
+Qýão¿àåÅ�ß8d2Ê˜NnQN#!~Ÿ»;ï¢bÆùùkT¦(Š*Ÿ³w÷1Gw�ÑyA»œi¢ˆQà „ÎJ®®z®®›Ap""î`§|O™å(‘hmPj@}ô½ÄŒb1EïPBc#7Ì¸CŒtý`ë�£®{ú¦GJnúþ¦)î‰D¼sƒýÏ1âí'µÖÁ‹ïíÍ¾e8ƒ5$d%›`ˆ7ì&Bv4B‚m[l×C\ëÅdJ‘¦¬6-—Ë
+RêAàä`ôC¡ÑK1™Ñ4
+¶wQ×Zº®Ç‡¡Xè¬ÿ“§ŸÂphxw‹Ž8k1½%8�ã"Á|ŒoÐ"âCÄOðb¸ËS,8O"Â�Œk¸ð>¤¦ïZ
+‡¤7‡Z�fc¢T]qˆk_o;Ú~HÊ­V¢ÔHï‰¾§·�*Dú¾f{UámÏh>"È@U9¤ðüó¿ýßñ‡¿ñÏøÁoÿÏŸ|Êd¾Ëáñ1B§ÄVðÎ›#¤pÔ5ø M‰V$]F*rz×QäŠ\çäI@ô-"sÑtä:¥¯{îì²Œ·ÈÜ–WÏŸSo�ŠÓ³+Š4A$–¨;´ˆT]ÇæÊ3Ê:qt�¥©&ã’2OÑBá¼d<,v FÉ‹W§¤“_\¤Ü�üà³ž¾Ø~KN$ú†Ó“K¢‹¼ùå¯³'<?yú!Á4t1â7Dh�ŠÔ{Ò$Ãõž2NIT�ugsÔØa„äÖ<çøîéºH”‚Ã½	W×¡uÝÚÁ:Íx"r¶\2
+žwñ[ì�GÈrÄx4â§¿õÛ¸ï²º<§%.‘1ÆŠœm'¹ºlØÛã»”ƒ2¥Ü3)ŒW¤®ã|»e<J1­!+4Æ;vvÇ¨.€ÑdSA4’õº");åŒ¢”ô^Po;’´òDŸÍtœ0OÍ8ž·TF¢EàÁAÁù¦‚��LÙ¾ø	Á»3sùœòK‘R¤„`óÙ„fU‘È£,ÄžuÕ"}Å¸˜�hÏh"ië%f{� åGŸ~N,Y1&�
+9Ÿ°m.Ø.+Æó#vçcÎ//‰A²Ü´¤2r°Sòú|Ãî¨$/2¬$^£%EBë¹�Ä¼£! Óœ¦¯1½eg¾KsQ“ê‚º«Ù-glÒÒvÆ·†€‚ˆ¼y°Ëb^RŽÇ¼|ÞÒ¸÷ðêé“O¾³ÝÖÀÀ zuvÅùõ–Ä´·£ž¾¾âÕÅ3ÖmËboÂhTòìêŠ|žÑGOg#6d$Áã·ŒÍbLÓD\Óñ{ßÿM¤oX	]»¦¬4Ÿ>¹âóëS=:f÷ÎÛÌïfšfË²ZÒ·ŽÝ�’h,ÛM‹P
+ÓµHøã'AðY±÷7¥4Ktk=Î:šÖàâÍ,?zàƒ ­ZÚÖÞì%,ÆBy3Ç„�B<B´ô•Ãçvš¡ÉýÇak#�‚¼Ç˜�(ŠÃ‚;OçÂÐßˆ~€¨ýÿ�®„ˆ ‰Î»†hh�÷�¾ï1ÖÐ®jÚ¦E8C
+‰R$YŽû0ãp„àé¼g6Êè:3´ÅCâ½.ÜÔãÄÍr}x=]k	>üÉÿCôÃ^e8LJ
+·Ö£œƒ�
+D©ëDÀßP�‡÷H½Ak9|,!).†��Å@L–)^D<ï,Î·„8èA½˜sRFÐÃŸS­‰.R·ÃHI�Š�¡ ïhªž¬Ì!°\’$ðÿýßÇ@[×<ûä?~ƒ·ßy@šjŠ,a¾�TkØ[”ZBx›’)É|Wâûk
+¥˜�ZŒ+izË|Rpñò’»·S|RÒõÔuEn;¼\à,ìL¦äªÀG�•€ì^Mè}‚™Gr­IeN’¤ˆÐQ$-ùdFg4§—k\¨Q.0;~“«ªcÛ¯±Þ0›ä\Õ
+BeÌ¦Dª9¿\²©6¤"ÇX�WÃ{¢Ó8Ü5'%Iîé�ÃÙAÏ(õdÅ˜Ðy²DS]­øâ{_cgwÌÙù§§—�âùáàˆúªf>Ÿ‘$iHÙÙÝe–Œyvr6D�µ"˜–¯ÿê¯2*ïÿø	ÑlhYPW5—W¯!xnß	|²žqÿ¸awž‘OÀ+�ˆŽfÓ`„`³nX5³¤¤s†,¸y’è3!‰4¼Õø(I“”Æ´äe‚Šo£?¡îÖ2^ŸWÈ|D–8~æ½OŸ9öËÖléŒüá×±¢ÄGÉäñÏsç÷©/*nÝÚ�@Î’3´4„4"ÉHtD¸=ÖÕštº�»®¹ÿà-.6
+1æ¼õø-Î—çxÙ-çÌrÁº†ÍÆ°;ëI³9‚Ó×ŒÆ9(‰­
+©èº‡{ÅÐ‰2°Æ‘ŽGˆÄrzºe’%”ãÑô¨fåëÎ¡RË(‘gS®®/‘mG)Ö[Œo™æm¹öc6"!®Oøæ×Þd<Ùcq÷µ·7ýNÓ ?þeº!#÷ß8†Ã}šóû?ø€‹ÏÏ)„d2�Pf{<¾s]×t—ò~å�.¹ÅçKÁYõ‚\ïñ+ßXpxç”“ºæùzÉ““s>ÿü„wÞöüì×òÖW…»_ø*:Ï†BYlÑj�¹
+¦ã	}ÓÐwÞô¨Lwù´
+(üàÐ°ŽhIÌ°ÞÒƒ·Š"&8ŒoÉd01­î¦­£`ès´¼�çÁ[„°7-U�žà
+m=€Cð¸nhkªZ�qX`3,tÝÍÜ4MÚ9¼Ì…>D¬½Ù•¸Aõ*Cd—!D Þ(Þ{œä©&/K‚ÓQFªU]Qw-Þôø'¶‘"]oB2+J‚¯	!ÐÛqoÅ1þÉØ,Ä80¶L@JE¢ÇúÁA�hÐ‰öOÎÜ$¶ÞI©‡ò¤¼ñ|€&	áA+$ç"Äá‰-xO'ü ý’m]£oFxÞE"bðŠø@ …¢÷
+Ji’,ÁÙ©5Î•Cô¸èp�aç#JC"Áv-Ø?ÞãäÙÓ?9D‚÷åˆÇ_þ¶uM$ÅØÈ¸Èh»5Nô$¹ÄÐñú´¦ÓŠîÚ`Å8ÅÝû�©–—ÄÑ19Â‡-±«Øet~J"
+«æ™@Ú
+ÔfGJ¡GÌŠš|š1”ˆT|Û#lE>œwà¬¤\L8˜¶¬®KÖMÃjùšãƒ@4’ù¢¤¥Êý­ÕÆÐÛŽmì1Á’J�L"GX'éÜ›*BOÖ)Úîš4yŠŸ¿ÿ>›Æ2ÙÝg1)8?Yò¤›’&#Þ¾gXž’±"T†Å4áüü5¦_¡wwùøÅê¾%O¹¼xÁÙ‹%»£‘!²Œ¦®@§(+ù;ÿòsb·�ö!µ¬Ì1ý¦csÕ²ék¹#Q	¦3voqXöLŠ)ç}ÅæºCÉgs¤®iB¦^µt½¡Þ¶Œ¤¤œ€ë"B:²ñ‚Ö¶´MOª-JNùø'+îß=ââ"à]=ŒÇ½#MF0:¤V(vyûÁ1�7\.>¤øèH2K¬-‰NPIJ½4Œò
+Ç“9;¥áðÞc*“²>ý”‹¶ã“'Ÿ³7QŽÍA2¿Å,^2š�Ùö-%‹½vï<¦Û¬p^uÄ#�‰šê;ûà-¦$Ââ„`[&³1Ò;„Ÿ’(ÏeÛaûŠ¨‡P�îr0½ÅEƒfŠ•ŽÚtÜš¯8}yF»Ý°·³àhùðù	ê_}ã;m¯èºáqLkÍ­Ã’7ß}ÈÁÛ�9ß¾â½7Žø÷¿ýs\o_qvñ’Ú{Ô|Áì–äÍ¯}�/|å×ÈçÒÕ˜¾äîì6¿õ‡ïóâõ–[{ž<ÁòdÉa¦ùò[oò´™3yx‡ÅÝçU ÓcÒ$ÒÞà7FI>¨•ÀM–
+²"¡^
+å:­†æ¸wR<“‚B§xA‚t¢Þc�÷¿7ðª:3Äu•/6€óŽDK„¼"äØ®0"ÁùŸ(Ãà°“	$>àâÆÝÐy£#µ/"ÃÐú0p®¤€8$šœ(éI•$ÑI¸Y8ï±Á¢C‹aBö*Ö°Þl©‹1„Àh…õ­´ÔC¿#8”¤2²Þ#+¥">±Õ¾3Ã¡%†Ö{pCWÃû€º©õýðd¥$(9´�›�ŠT´^bhbpX7Ä{c±1 þ¿\ý×“¥yzß‰}~îuÇåI[¾ºÚ›q�Ì`A‚Ä’Ø]r%­®%†BºRHCÿ{£)bcCäJDh)@tÀ˜ž™öUÕeÒÿºŸÓÅïÍì¡ª¢"»3O¾ùž“™Ïó{ž¯Ó	ü'„¡‰I/CñÁ¯‰@)L©”÷¼Ä…ï[Œ.ÀÛð˜L0™LðÁ!Dú<!ÒG"†×Næ,ë£#åÄptû.·ïPo6ô}Ïkï}�ïüàû¼z2G�
+‹ÕšÉH„Áäc$Æ—/ÉÄ›íøÚá1Y¦ÑFQŒ[çÜ¦[¾íh;�n²DlÙl5!\qÕô	²””ùˆLkv±f>�JöÔjŠ-oÓmO	Rqk<£ÞääYÆÁ	,ž.¹¼ÔˆiC´/3ž}~Î¨,!Àn¹áý÷ße2‚hÙä€ín‡# ”Æ‹4©ç¹!JIŒž(`®\@ê}„nQ:°óž®Ïhw–¶¾àðá»¼8ÆêjA†àö­‚o½Þ3¯Ö<>óàî„îj²eTeŒrÍeSñøùÇLL‰óŽN7¬.wg\õ�uß£ÛGUÉ«{#>:¿Â´+F'ûD?Æ¸	÷ÆŽç§ãƒ	Â6t½À—s¦{#î—sþÓ‡?åly°7á|·`obDl4‘& „$ ™ì).vžÊ©$Ú1®N¿k¹ÂÕ0:P"‡Ç‡|üÅg£ÀÞü5ëUJ!Í%Ök6‹‘‹+ÏáÉ}×Óô™‘2²Ñá ¡†ûÇ·Ð{û ÇüÍÏ~Êv{EŸÞ¼ãò˜ñHòö«·9«îâŽßþ
+VK¤rüìéõæŒ÷ŽæÌ;Ú0§©×É¼5D´!O_â
+ÁÁ­¾|±äøpŸÝºáÉó-³CCìW!XTÈÀ(ÑaŽ&tuÉhœñÚÉ-òÉ!ËÅ’¶ñ¬CÇH²ê.«|N}±¡�]Õ¨ÿËÿñ0MyõÎ«¼rï÷òÍ¯ÿßzçkÌ3M·ÒüÍÏ>âqÝòÖ¯ý.�î¼ÇÌX&“W�yüé‡<»\cÅ+<zãW±æÃŸý_¾Xq¹jñn~ÌëwÞæÖÑ+4T·²\�Èú€ä’J÷,Ï7|ñôÅ`gÜËeƒp¼kÞá¼ `‰À»Ù¶D‘
+²tIOá]ÒfxçX»-›º#:0F³ivJˆ”‰1¨Ô%Ißx|�t�Çöõp=—XW]�&�®O´ß>F2I²NýÎù¤³ðƒ‘¡CÞ†TíaXU…”™=R:¬O^Ök¬‰]9„dVX·-½µä&1&º¾#†H¡³”%
+u³KaO.ÐÔÉ²îmZ	nðc²g{BHØHp=>$å¹³i=wÍºœóÃú0­ÓŸae“¡cðàCš„$ÉÃËÚôúDbúCÂMbLØI[÷˜"M0í¶EˆÔ8Û]ƒ‹bZ½Iþ£
+Tšd¢C éZ�wÐ;ÇhTâíŽ«Íšr”ÓØ€ð�Q¡PRsçõ7ùößúM¾þ:ãùN	Ú®£ÌsVë†<i“±V´×"]dDäÕ¯ñôÙ36Ë±ª8¿zÎÑÞŒËå]’‰p•õ¬¶)5¯nZ²)=¹H¾b¢Q„ý#ün‰”]?GÇ^å±!£2*5¦éÎ7H7£w-yî™ïÍ©]ÏºµDW“å;êî�§//9šÏøÉÇŸs4-h�¥m"ù8§užºNñ{ÕŒààèÃ†½I•|ÔÔ¥%Êd„õ–×ß¼Çùâ‚q©¨û†zghêC^,—O³9»à­÷¿Ç®œ®.vÔ–½ƒ#¶]¢³+!‘*Gé‚€DDÇ®ïØnwŒå »‹V†B9ò‰âñÙ¹7c{yÎôØñù“wÆ3NfSÖ«çÌF†îê‚ƒ[w8_n˜–.‚ì#¡×ÉÎßIbÑ¤C_ð:…µÉž~-(ªA�o#³²ä8›«’§gÜ:ž"œ —ÈØldÕetŸýúÿÏ4Ÿþ1}8xð&¶·Ü=±í#.f… lò½ŒÍÊ³«·¼<{J65lv¨¦GLGJÀÏ?]pùÙg=d·º€Í‚¶ÙòÍoÜá‹O)ŽsŽ¿Æl,ùè³g()“÷žôEŽ†Ð4|í½·yþø¯<:àd6ÆˆQúÉ&ä£ŒuÛòøéŠ»¯sõì”åê‚ùè�ù¨bZ8Ì¤¤ïV(1cVN�Îs~ñ9?}yÉß|zÊƒýõÛÿð}ðÝßü
+ŽŽîóÍ·_çß}•“üˆgÏO9]Á·¿ñ››ñúÇü»ý‡ó�ïümf'·`r‡b4ç$3Øg[^y°ãènÁOÿü%ºˆ¬VVÛÞýÖkè£C˜ï1žï3Û«ÈŠŒO_òüÜ2¿{HQJÖ§kŽ§†,—UPèŒÞ6¬6;¶µcRf:C+ƒí#]×b¤&ÁÆvt}C×õ(íÉF‚ËuCÝÙ˜GG–•DŸ
+]Äcûv(¤I¯\:;—è¦!$I�í|2/$"!Ó3!	¾§í½(èºp#ÎK,+è:‹� "1¢O…â@"K�Ok°Ô|ÂÀ¢"
+‚‹¥1e…”k{$ùë�]Ûâc kjÜ0™9ïZ¿ê‡Æä†›0‘<1ÊÁDÄà“%¥@ˆx#B¼&ÓýGH+ÃÎ]³|‰>­ô\Hà¼)+%5²ÔL¬M~\>DB$Ñ¶XÁÆÔÀ¥ÂZOY™0­¤át =�mÓó"Ònm×"„AK0Y 
+“47mŠÕí,<ÿô)?ÿ«?ç?ÿ›?áÉ'ŸàmÏ£×^M'³\²ZÔHå�Éï5½äFQ((*C#ëÆRÜ¾bÃ�ƒÖs^ï˜²“ôH�‹+DVÑ­w 4—ëŽƒI…VYr’8Ê…±�Uˆn…ÇPå™Tì6‘|v‡¦Û£ _îðÑ£LAç�mQA!½BO&dÆ³Xh.—gT#Én±b4É‰FrñrÅx”³ºØQŽ4J¶u`¹h™L½óR±—ï‘W.—kšn{ÊƒGorµ¾ÀèŒË«%Úæä•b³yÉ(/xxë˜wÞ;áËÅŠO>þSH¶»¤F.×´B³Yum‡›ôs'"YV‘™
+ãyåxÌù6ÏÏÐyA×BÝuØíUòôÙÂYÊNX6ÖÐ˜=N?âùÙ3Ba(¼#šä:á	„Ø#´Ç)…Ê4Áõ8'ˆ*¹ô–F"MZÝŠ®cïÎ¹èùÅ§—Ü>‚¾•¸Ì#HUÒžþ‚æåÏ–öò#|ßòàýÿŠgÏŸóÚñ„¡q–r¤	½¢õàÔd†ôI
+>?,Ùm6Tw9}ú1ÅxL^•ìß�1ÏèeÇ£G÷èô=”Ü Æ¯ò“¿þ{S^}åþŒ"Ï°M"idBQ÷–f³âàÖ6‹-E)ð�G™Š–
+~'èz‰õâš²œ1ŸÌY·Ïè‘¨ ðjÂqá1™c~û«ÍÎGòrŽ·’_<¿@ý£ÿíÿæƒo½^òìêsþìÇ?¤o6„v�·‚OÏ·üå_ýþÓ_þ?üÉÏyqzÅ�?ü	ÏN?å¸Ì8©ö™œ®^š%ÏŸÄ'Ÿ=Fñ�b/2:*(Š9ç|3›rvÕ2Î÷0!g²?çö£{œ_�±x¾covÄñÑŒ¢šñäé%Ÿ~þ%Ú(zß£…aZN)*�°
+¡}Û'À·µlëŽàIxÆ¦f»Z³7IìI¤P‘®M…ÏöÖy”Tˆ˜(ªm×!}¢¯vÖœ'S�>�Ö."cJ1€ºkÇÚHR
+?äJøTœ‡¿Á§¼ï¤xŽè�p
+ë|j"2F—
+±DŒ¶â€ÄJªw;lß±Ù6tŽÓÛ”_Þ÷ý`Ÿ¾‘¡DH� Ä§‰ Ð·)bR9‡ô¹iÓ”ŽH7Œ)Ó:KP"Ýgî1xKa`¬‰�Ùå«÷Ô”ŒiªŠƒ›°i’‰1ieœGª€ˆŠ¦îRÔ°18×#uú\×'¦Q†¶éqáZéž&K)%…)ÉËH	˜w>Ù±h­ˆxª²äùÓ/ø³õoØmÖ¬./yúé§l7^{÷MÎN—ìïPÍ}$1”ˆè<KBi°!²ÙuÉ¯¬ß2?óâ¬a‡ ×%90Í—èèðÅ!6Ò»Àã§Ï!ÏŽ*7t}‡(Òî�ŽˆÀ9�.Ž‘™d»Ùpïn†³=uc	ªÃ”
+×ZP'¡ï[ºÐÑyMÓ7ŒËMç¡’ÈB£ÐØ>DFEEæK�›u»¦š” 
+«®c»\�W�Ì€)JŽgLöOX¼xA^Œ™�s‚,heËzÑ±è·|ñüŠ³«e¢’:ÁÉÞQ…¤±r ‘òà}ÍHj”N¢Ïà¥–üâÅ9ýW¿@š€Û»�" �¥Ê÷X÷t[ÔØuÁ‹íŽ³Ë5"«©(°Ý½ž0ŸÜfÕ¬¸5ÕD“c›HžMÉuÀdéÐTÛH»hÏ2ÖÛ-Ò(T®É”¤ºŽ—«‚Ÿ~rÎkK&ù[¿cy¾brÿMvWøõsºÍ�~óRw-ËeÍÈŠL³Û:–b¯Äu9öbÅøð.wç_ìqk6#JÃt~Lç·ö3Î®Ö<ùô”Û'Åá[ØÅ‚BLÙ·”ãOžœ1žòþ»·h¬bVflÚŽ®oÉÊrÐÁÔœÜæåâ‚ñ4£m,m™”šq)ÀŽ&Ç,ÖK&eŽIHv¡¤àŠ&?ÂÕ-Ÿ>}Î¦­Ù?8b±Þp0QxçP¿óßþWlã]ö²#Þ:ºC)*F·oqrï.y_ñ{¿ÿû<}öŒ8¿¾ïùâñ—üôãÏ8_|AŽ¡Ðž¾|F¯æ”ã9/Ï?ÆÍää¯¿ÿ}¦Ó;äF‘›H^øí–zwÅéù&ºdf¡[Q�Çìê–Éx†ÔŠÓÓ(£U
+ßïx~ºfÕî’•x%t*P"ùN£™8¬2
+]°Zîð>ÒØžÆ{bèéûŽH@xBàúg>Bç}²ß�b(¤)\)„0`iâðÁá¬Ã¹dÙ~}š!š¾³€Cˆˆ÷×Æ‹×Í 5ÓõU14™�&ìPÀA
+hÏ®ï&BL+ àÐMLM)„„±Änþ…Ò&*
+*^O74·$0Là=CË:?ô½ÔahšC²®×er‰eC@ê¤âOÍœë¿šäHút
+@	lRå§žM×µôÎ!%£P"‘ˆá¯É‘ž
+5ÄñÆœJ*èK™ø ÙÔÞò\ •á“?LTa ÆÈùË¼ý+ß`4ßg½Þ…"+^)¼a2£s9²�Èhš–Ùý7Y.zbWs2ŒeO–;‚Ì±Å	AO‘xj*”ÛPZ�¬6ØZb]ŽË$&nÁP·9&4ä#ƒ+&[`ëµË‘¾¢uMŠËuÎfÙã¥¤í{VW5ÛMG½õˆ"Ò{Ïå‹-ÚúV3ž–ŒLÅ,¯Ø›•¿ÅëÈjÕ0¡³ÁZ¥¢P/æä>c\Tè|ŒE2õ–§Ëž/NW(Ëüð„ÑHðò´ÅèÀñÉ4‘9\•X“ã½UÌ�²´öôe¨Þ°YœqR�eS–ªåÙEË‹�G*èÏw´í‚[‡„ãWøñ�~Œí¯Ý!ìßâñÇŸ�€Í¦Á†¶ÎÈJ’»³µ¬}`šMØ¶;¤Èh3‡{Æ£‚ª* ï¬U‚
+ìVŽ{G\¬¶Ø¾§‰‘JGŽoOyv‘,uÇG8ÙàD@|‹ñÃwéEŽºÿ[¹À�—‘óËžb,	œQo™OhvkÞ}tUTÓ’MíâKzF\\>æÂu˜uÏ«_ÿ¢øÍ%OÎžœþœ¯¿qÀÙ™ éJž�ŸsÿxŸ‰Š<Þm¸}x‹õf…r3Ý#v›å%o½~�(Fìš
+YÞ’yOFÌŽFh­9<ÚãgŸ>£ØË™L&¸õ%wî½‰hWÉ¤u$¨ÊHÓHFZóéÓÇìßE}÷�É¡«øä'O)³g|ÿ×36ýˆ ÷Ù›VÛ†Ç�Ÿ¤Â7ü‰¶»†·¾ýr>æìÜqœG~ôáG<½„oÿÊ÷9yåÇ·^%Ï'x£ñfÄ¸(Ø7�ç_~Ét~È7¾õmŒRœ-wôÍ†Õ³K¾|¹ ÆÀáþŒ²¬PAâ£¤�a=yeˆÂSok NþN!a#»mËÅºfÑ4¸ài,ÔÎ¢ŒÀˆˆÑc„Œt}CŒÉÙ‹x£;�*$±›�)Ú&­‰„”ÐÖ'»ŽÓ*D¤NÅ'1¾ë	R!sƒ–#†Hn54ÓÉU5Æ@ž1L!!!ú€Š,Ë‰!Ò¶Íà¶›®çJ®)FW„�~*c¢ÊÆ˜&ˆk�Iz<zÀÍ”ä†¦—Àf�µý`�†Ü‘¬ëÓBð	Ü¶½&n„‘}gQJ'{í�®cÀõI•H¤!ÄÐ`"„ˆ¬â­MÀ}çñ>eœH™t1B�BvB¤ï{¢„,K+<’™¢³ëJI1åÈ™¦8Ñ¡�Û¡HÒÞ|Ì[ßxŸçOŸa»¡óƒÞ|ûUî?¼ƒ·pu•ÄŒ£QAÝJ65¬V[‚Šœ�®Áiî¿ñ
+Vç�Ùµkîï¼ÕtÓ×0~G_ÞÃ´/¡Ç�î¡šslÓ²ª“«ò¬ò¸9¢�˜Ø‘›À¶ÎéBFksBÌPvAYfdÕ„«åÎm)•Béž(<ÍzËLw<ØŸ“eSL)ÉtDkÉd^2gMÛÐö Ë6Ô4M�3‚L”lv%jF{i}9žôÛ„¯Y×L‹m{ÕŽ§?aÝŠR¡ó@¦*'†]˜M<w½Ëú£'Yˆ¢`‚HXÒrÙÑ¬:î�ÑÚ°7‘e"ED»	M¬yºÚ1ö9A{Z—óx½ã?üÉ¹=Q¼w4æ3ëp‹sî�ôl¶ßywÊÅÅ’«zƒ{¹DÍ2
+iXï½·dSÃâ|E³­)å½ïiÂ†2¬ƒ¦KÓyk{^�ïñê]‹f�§Ë%ªpìV=Å¸dµ¨iÚwoSRÒÙš|tLk&xa˜Ïïpg¢(Ê=z»c³
+TUÀK‰Ùo(çÎw†^LŠŠfçÙ¹ýæ3nM÷è¶]r§æ‚Ö�8¾ÕQ¸œ?ûËSÞÿæ=ö÷OP±æÿø/1eÉï|÷]>üÑ�Y…ž`<Š(aùùs&Ó}·eÄQäÕ¢zIÛ-ÉN^CûT+xy~ÅÉôˆ61Ê«ÆŒÏþHc=ŒÅõw÷o}pùì1ÏŸ]pr¢xó=øçôïøø—|öå)½ŠŒ&9Áu8—ÔÛGGîÜ>æÞÉ#Žo³–6¶<zç·Þ¸Ïäî}æûÇLöZµ,ž}‰�]Ìh\ÄI�‹ìŽÍ—Ÿ‹#æãÞvÈÙóã}*³F©£bLa$Ë-«íZ™(I+a[¤J‡ÙÔp u=Ñ[¢·%]�žš.1²¤O`o€’0Ðv—*�(©Îy”°„˜Š¤mm:ÝÓ:lÐ^DR>x‘Ì¤Syï,>&ðÚy‹³!ÙŽAžëä-<®ï°Ö%×U7`á:D*5-¤Ã;�8L‰iÌ¸�<Ä0=ØO)ÓÔ’¦‘@°a ð¦Æq=m^M]c4Î¥ìE@DRÂcÉ81$;ÆüÇ�ë‰#ÝgŒÃZLÈäd+N oîSk�’IrØ÷=ÞGÊ¢H
+È9bˆI³ã¡kzÆ#
+B b]Æ�@z¤Ä(‰6†¼¨0R1žŽÙ6=HÅÛßxŸãw9¸u‹·¿ù5nßa•‡{#¼ìnš¥1‚éxÊn×\äÕG·Ù.Ïp¡å•ù…#ò2º?ÅçGèn�ñ+úì·kRó62CW×8Ù0Õó‰Á	I‡B+�ÆB·£î|TäHDè˜�`„"ZI§ZLVÑô©"{³=n?|ÄÃÑ†ùÁ	…,)©)«çKš]CÓÀÞ,Ç^‚¥,±$z™¡Ûµ1ÅZG‘G¤Ý§í/xÙ´¬ÇÖŠJ°«-e¡ÑfÆv½Æ‹€Ü5¬”ärÕQËé²Æè’«Å#£±FE…5ž'çkÎÏjô(y¥Ññó§=…�LÍÏ=m·áÍ‡¯óÊ+÷ù³�l.Xe°õŽ·^y�¦ÙòôEOt2Iß÷¼ÿµ÷y~qÉgOÏ@G2á)jøÎwïðÅË§”j†‘–Ž÷Þ„Ý9GO¸R—MA�B†4PNG´½¥,OWüÆ·GÔMIÌ<çW=ÓÂ±yö›å³Ãfû%›]OoÁ‡£ÓJ··‚>j¦#�[]ðñécê.°³
+çÛ5ûe�=w¿ó}D{Îü £,wl—{‡3røù³žiyõ•Š¢œ²^Ÿqº–Ü½û“£’£ƒÛl¯.ˆƒ«„Ul·5ÁÞ~Þc£ÃÇŽ¢ÄõuœÑÛ
+^ç¼¸¸dZJ‘ÆmsEÞW”¹¢“%¯ß—\­ê½÷ßøà;�~À·¿ó�G¯JFUÃGÏY?æ{¯½Ë£“wqrÄ­×nñ½_ƒÙlÂw¾ùþ»ÿîrÿõ¯15T}ÍNö¼òþ¯ò«¿ñrå˜kØ7š¬TØZ2-åD±hwî•èšæü’•ËñZaEdAÆÑ(CöëÚRJAÝYº.`ûšåbÅzÕ°[íðmGUœïhûë=¶KVàÉþ#"ÌÂ»ˆu]j.­‰ðž®í†Ý½HÊñÈ°¢JØC´îæ¤î‡éÄû˜Àq’å¹Æ²à“‘ ói…3”w„ü­†iÄÚ‡8èF‚³ø�€îèRÈ=B&»ö8 (151¼õžAxxý±0àa0odXE
+
+mh.!ü2ˆîÝk@Ÿ�–&Œ8\Ó¹0à8CC’é­,dˆÃ[‘t!»²�•v½²JM0}ž¦�toÓà{Àh‰D‹¶CJ@üp”0øa
+—°Ÿ4I"H‰Ò$¬ÇƒQ’¾÷¨\Ñ´Ž<×LÇ½
+ ÇwnQŽÆ(ÉLFï$“¢`ª<º^Ñ™|ðJó¡BâdO1)™c*mP¢Á¹e2Æ¬îÒçûUu�n^mƒ•ûtuË®·”£‚^ztˆì—NdXW`T�§¥G]CÁ>·8.Î{FZ³	…
+”EX¢Ý
+ÛEVgÔ6Ðs€Â£jÏ(ƒQž“…2tò“RÑ®J(ú®%Ÿd8ëA”±8ÙlzÖ}ƒì=6æ³‚å"à…¤È*lë+Dž!|‡,LbLº­%ZgŒ&Š«õUÎO:+©ª-ó|Š” š@³Ù±¶[ÛnM·œžmUš©NÑªÊ¸{âXÖ9»ÓÜ{ø6O¯Îq
+ÖW—<xô�¶”•ãùÅŽé\ÓwŽË�€�1Û;@Ñ§$T3âÉçŸ0=:¦­
+ªXsuÙ°]¯©ëÀ½Û3Zgñ}¢‹ªÈ9}^£däèPÒtŠÅ‡ÿŠíOþÝ“¿`ñìc²[oeÁ®ö([sÿÁ!Ñ9|dRbmÃZHèmc±®¦¬F´›äF°øò%Ê\"c»/flÖ�Ã£$¨þË?ÿeö¹µŸq±]³<?gr8ãî¡"Ú’Ûû3žœ�ƒ€·^{�ÕzI‚¶ó\.kˆB²²jµgœ#jÇãó·÷,qÓâLbmyïÑVóätCõ_ÿ7ïðbwÅÈ¿àáƒ�˜ÒÆ1¦<æh"øÁfœ.®øÙÏ.ùúëßâàÖ1.ôLÇªÖT#Íôõ7Ù;~Èó'Ïùø'?¡kÎÙJ‰Êö��æEèD�ò–°y†Ýu,ÖŽÍU�êZt¥)&%»«—mGï"Ëó5Ÿ~qIÓ6ôÑá(Ð:IìóLQ‘Þ:\ï�@nr.®¶4Mƒ’6±«‚CF�À‘È!…Li�mZ¢ôÈ¬ÀZˆ]“œröUÝ%°6…Ù3&¬A2X}ø8¬«RÑL9âñ¦�ã ûÞw#4Œ=5ðr ÄÆ�€ùÞv8g‡QªÅ©Ù$,F„4¹DâW…÷—þ	ZT„“Có¸¹†‰þ,ÄÍr“ÅîBÒ¼Ä8€ðkPµ¤ž‘ƒä«&2HÉ~Å'¥úuìn~`p
+¡TBÒuÍDûer�ä… F9XÜŠÌ�gjhÈ ¥$
+"Gö6‰7µxŸ€s­Ž"… +RQlëšjZâ[c½?eï9}öœ—_>Cg'wO0té¸;™’õ‘%ÛÔ¡�
+E¥Y\ÔÜšî!¢eGFP24Û�#�¹ªÈUE]ÌÐ›OØ¶u£)b†9BæŒM�¿JÁ%>æk(„�>90TS
+“Œ» dsúb†owô»-Þ—t®£0²qFˆ5Ák¹Z]°5=›V³iwXÙÖI<ëB�–Šå¦fµ±d& [G¾7åùãsæ{™²¢ ¨ÈÝ{·É£fYo™—ŠÉ¸`µî‘Ê¥�Ø¦)R÷d&0ÉrfÙ˜2ˆhèZ‹9ãYÎj×`ÆŠÍ*Ò¬v<ºs@+{:oˆAp¹^²«-�4%Uå©;Ïb×àÚ—WÂ²¥³;Â´d±\r0-˜VÔý‚fWãv‚ƒ“{¾àk_ÿ:_{IàtÑòâtÃíãÎïxûÁBHTúQpˆ" ƒ ¯2êvGß�<E)—kX.wøhØŸ”\^.Y}ü‰f{Esú¯ýæO¥Ó± šLeÕÒt×€9Ëø H¼K¿‹Ñ8Î»Sh­Èu@æúfD9žRU9Ÿ~ö9¯½ù&õÚñÆ½#Ö/Oùë�Î8<ØCg=“é!?ÿñÇô6Ðô5¹ÎñvÅÑô˜ýñRYÊÉ„ìè„y*–È1!Ùœ-yåî˜¾×D—±ë·´QP÷[&óŠv×¡¾ûÍ_ýÀÄ)W»5�O+NÝ;üñïÿ�Ï~ñcÊ™¢œîa�JLØºš`[–OÎ˜ßy‹_ù�GŒ‹ñ?þ?þ€ßû§À¿ü½Îÿ‹ÇïÿÓAÝzÞ|ÿ;ô‹%//.é�Ì÷�É²N�ÙIÃ­Rá;ËËÓs\ìí�Ð¸–zsNÝ®È§{ÌçST¬Ù¬¶ÌJ²Üpµmñ]‡.&L÷Æ”…g·Ûœ@ëÛ[´–a±>±el×I¡JRF–Ë,{¥¦ímZ¹xÃñ. äp’î“oÕu¡#&e¶sySˆ=bXéˆ!õO
+p}bQI‘€hï=Rjò,Cëäc(¶þÆr ù	„×-ƒ„­ü}6PòdL€¹¼6˜7h>†ƒzå…p³žRƒ•h¹ÃÓÇ¤"2X³+�D¥`š¡aÄkÇä›Í™ÄÇx3
+„HÂ6„JÂÌ˜¬PŠ,¹Ã	½u/pÑ¡dH9ë‚¤Ëù%‰”i�¦$)p
+�Pä@N*%B"(K…z+ JT&ÐJR÷´æôé—üû?üc>úÑ�ùÙ_ý5ýä§¼úÎ#²rÌÆ‚�Ž˜*89<dRT8<›M�’�b:!S
+ËË%ù¸ÂeG˜þE £Aø¹Û°ÎÆ…ŽI1%tŠónKF††ØïØXGØlÍ˜I¹Cå†¦�¸8FéžÍn„h—é°’�R •ÛRo[òBÑ9Ï¦kh¬§ï^I"}bµõ#(™ˆlÚ¤'ÉrÍzé1¦g±”Ü?�!²w�§?úŒ÷^½C%ÞÕhÉbÏvã)æ{´�Ã†>6Ì*ÃâjMpšÕÆ³7:d³µh&D[cMF`‡%ãlÄøÄ°mkfEØDÄ)”("G¨ï›ž�H)X~±âá¡áp¦éëŠêîCf£)E™1Ýã�íh¬'bÁwã=²(8*Á	ÉÉ�W¹\¼L¢SyÎæ²åpºGU^»óç/øÆ7�¹<oÙX“bpC¢ÿ’Í	¾AO!5O–„´¹ ž.™ÎJî½þ6çmAóåß$FVcyôý¿ÇÙ³FçÔ�Çû– §XÛ¡Ëë,¸ÀÉÉ(ËŒÝ²!Ï4.z¶ÛA�Î4«H!�Ùc’='+à­7¿ÎÿûŸýÿüÏ¾xÂE×óæñï—D3gùòŒðÿ.—/?ÄöeJ$uåxÌÙâöçsbìXœYre	&°]5LsÉePóW¨ò¶gt¸ÏÕÕ%#*ŒÑy@}ëÛo~pö£KF÷_¡m¹zò×|ë­WùÚk�(EÆã�ÅH0E„#ãoÝ?à·¾ówÙ´k.bÁ_}Öóÿü¿ýß¹<}‘eðÎó³ýˆ§_|Î÷ëo1ß›ðåó\^®Y.ÎÉ}Ï,Ïøòü\Cž�é�a±]°i6ÄÐsk>§R9FY´ÜÐöŠzƒ*ôÜ»}Œï;–«-Bx”Èh»@g‹ÉÛ$ÚëöS×{Bhm02¬®éq}*CÈ$`“J§ü
+ë’úZ§p$AðˆxÃnB€‰æëCj6ÞÅ!?ã+àšñ†“½’*QŠmŸr×]¸Á;ÜðVr�!„ÁF}Ÿ…€kM†ˆ7[¤0L&b0vñ«bý>ˆDn!&BÁÐ`¤ÜÚ‡&æƒäµ¹cš(âõŠì†Y1Ðw}º?kûdVyÝÜ©°«kšq$†¤QA×�þ†` „$’‚¬®	7zÞ&ƒsij1 ¥•ô#²\âºDBâB 4IƒAHluuÉ�ÿó‡Z`³\ñ³¿ú	ï|çWØ?Ø§9_2™� rMç{^žm¹Zî˜©Œ»û‡ø½Wå=xKÈö0n…rx�»ê>Åö	�[ÑV·É³Z×Õ3)@Äk-NFÚ\±®=F8´Ô(¢\Dç%£|‹9„†Âžã3ÃUW&;~Ñ"5ßè{¢ˆ84AG|çècZ{ùv—èÇFP¯%³YÃÌhnd¼vçˆ;÷ïò§^pTÀtTÑ5-Ç�¾Åí½œçO0Ú¥A‹‚u³£È
+´IŒÄ]Ýà]ÏÈ´„N06žµ]´æòl12ª
+ÚM$Ÿ)úUC¯§gWmè=<y¶%Ø	ÈŽùQNQLÙt%“QCÞ½¤—Š­Û±î}"Alä¤Bµ6�åÅb�aÄ“Õ—ÛŸ±áüÌRù-ï~ý]g9}þ‚÷ïó?ýñct5åÁ>ˆ(1F`Ä”¾¾ÄèŒRï¥‰Q€õ=J
+J%éË‚ÏŸm9©JF·n“¿ùß`³ò‡ï³i5yU`œåä•ý.b”¥È
+¶MK!#U‘ã}¤¯ëÍ†éQÉn×¢3I1±kÖtmÏéâ/Î<ït4]ÆtÜñã_\qgdX´ó£}>z…Ðu<^õ4ë†£ÛÇ4«DvÂg_>£È2:!pÍŠ��ÙŸññã/¹w—CS³·?çÙåºY	]Ž™f¼8¿`~«bw¶!ä‘™*Q¿þƒï}ptrcjd«
+LU¤•8¡èúžüÚˆw_|üÃ3^ùú¯s÷µw¨ŠŒ�/Y»š“£cžyÊË/¿Lz‡_ú³\,øÛ¿û»<xxÂêì%—ëŽ×_?äµs2£YÆ
+×¯°í9Ïk‹´©#gªbjrb½#¸@5ž0Uhˆ²gT	®®lw-ëõ–í.•ø®ëiššÜdô]C×´Xhk‡'’‚\'ú©÷žÆZêÞ#”™¢añ)æV+•„o>{ýT)Ã_CÍ)K$•nïÒÔ!ëóà#×[9¬_d:Ú#¤¼ñbò×>]\cC¼Á$@èkÜàZ¼wÝ¨Ä�(<Þø\¥ÒoªüWE¸æµÐ‚AñKÓÏõj)þÒã#€¸yÌ/w�ô¾_ºqýõ6¯‡�rPãƒLÂœKw*b$Ë+FÊ$a¡` òªaºñiªÊ²œHöÊ@�Xß¡M–iA¡²&…Ivõ2¢ô>b­çàø˜¾k9þòæÙ„xóí¯1šïÑØ6
+W‹
+ÛÝ†¢,@(Š2¢BÏd>'ú:²îôÕ]´ßÌÓŸQš9!›àÊ¾¬/7x%ÉÍˆÜX&cƒ0#”Ï>Ñ�ƒ5ô1¢•C†áüøÚµhßásŒí.iúR„”hÐZ1DÇ ‰¡FbÑI] rE–i²BSšïAÏ�9¹õ�ÕùNîÜ§�-»ºæâñÇˆlÎz·æVQÐö‘`R9¼
+Dç¡õ(ßq87”Ó‚¨W[Çd–1ÊsªfÃÇ/Zfó‚Æv(íñ]¤µ>Y»ˆH³ë˜ŒÆüèç/‰e¤ˆ’n·c2™"tNrpÖ<»ª!|ëQZ'{"#‰}rynO1®Øõ3ãU…ÉB²‹#N/Vô]C9.YÁf»åtµåx¢Ð" ôˆÜxZˆì!³×}¤(GÈ¨X6Ë–é¬àÉùŠ7îLÆ3Ö.gÛXØ�2ßŸ²²’[·hêë>¢
+T#Å¶®(œê©ôˆLjT®xùxÍÑ­Iú^—\ ÃŽŸübÅçOœ�% ýÁ»ïPÐ³è#ô&£Œy1âÅÙ—üü'_ðµo¿‡ï,G³-zVë5²˜€ÝqvzÎ½ÛG|øårH'�dª­(bÁt<Ç‹ßD¦®ZÇè`D¡=c‘£~÷¿ýÎùI�Sú­…ú˜è{TÛ�“aeÎÙ&â»µ;ãÝ{·©Žø×¿øªQU€à½÷ß#Ï*^<}F7øjÝ:äÛ¿ñk¼õö›ômK¿[s²WD‹Šw=1³uç{\qÖ!2Édv‚TžívÁÙUÍ‹‹"=¥I‚@cZK¤*hš–à[„L§P“	¬OÖ™RH
+¡w!É3�T]bÿ±®F+œmé»Pi}3¼õ>¹Íú˜V5‰	ä‡ýÀøqñÆäºˆ^cr°ã!`´BI�³ÉbýCˆá¸9ÒnÀã(§b Ä�¥‘JùÍ=Ü4µkL…4©À/ûk¬DÜp²ÅJZÃ„q\7„øUcºiPÃÕ¤°™zwzp	û¹%^wžëÚ@ç¼é¯1žÔW%qÀ~ˆ©'VUš<Â€)%�Én7Ý’T#S“Ês‰�zHGLø‹(Ô¶÷HSà¢E«ŒªR<zó-&ûû„ÉŠ‚7¾þun=<B¡èmÄ’èëÁM9GFO–l›†2´dž8¹Op;|qˆp;P%BI¼9w•L+uÅFŽ©k�è–”EOßkv6'‹ •KF€-ì”Œ§�m+)´ “5®‘Ÿ�½Ä»1z~BÆšõº$…LF|ÞùAÑ¯@$×c�À1ZàÛÀzãˆ.¢d$—Žà$]íp! …£ë®�bŠ’‘Íºã•Wï�‡	]»`’ï!�¥À01šb\ ›Ž;Gs
+Õ#Edg°ŽñÞ!m¯	�¥V‰Rj…‰Ì µBÊ’Ãý9AZÊ2²µ
+Ož¬88> užÌfhµ£kzdnx¶HåØÐù)AH•tB¹ÁàÉ�€èP™Â‡Šz×’™H9)p�e³s¬¯ÖÜ9±Ø:ŠÊ$‹9ÁZ|çq€�=ÂkrÑb(�EI{
+]¢Uò¤ËJÃéEÏý[·@^üÅï±ûÅ¿fóäÇTÓ=Ð{„(™ŒÖ´Ö´»€(KbcÙÍhEÃª©‘^0¥4Q×uí“ËŒ í¦frT"½aob�nËvP›§XsÈÅå²³73E>úâ”W_{�û÷÷X­Ø†åz�ÑY¡èMÁ£»w©û+šÊLfÐÓ·Xq0Qfš]ã˜VÉXQ:ÅÎmQßþÕo~Ðlk2 Ï<R9š&h”ÉøÖ{o2�<¢nGÜ{­âr!xþLròð!�^}Ätš±Ù.É+Í·~õ×øö÷“‡o½Âwûð»ÿ«Äßù�ß@*ÅË‹«¶åöë·0rŠÔ3ôhÌç/ŸRMö��xöì3Æ
+´sômC-º�ôÁ²ÛµD+p\T8]ã xÊ\r°7ãrY³Z·ÄèÛšÂdd:'F™övHb×\Ï¦ö�'šnßQ–£.º¾GA”
+)Zª´_É7êÚÄ(I4R©DÛ½.‚ƒš[ŠÔT¤ÖN1åg$LDü)|Eqå—ÀpÄWôÜ|¿!?Å¯Àïa÷óÕc¢øª½ˆÿrú¸Â¹ð_ŸòÃ`)r=A°R$njr`~}¥�‰©~é†®ÿs˜X¤�Ã}&¶VXSiµ'¾ÂPbD+‰Ò2}Ï³x3i#Óš+„H­†×<Ù£+©F™£0%Jæ <Y®èº€�žLL¡±m wžGo>àøÞ=n?xÈñÝ»ä£óiÅÞ$�b#0Ôµc>Ï0yÊ‘8»Ü²­¥–”¥$†aE2�Ì§TR£ôˆ•™P©ŒÙî9ínA×•4BÑaQ•¢é=Þ§Œø±†ÅzM15ø6Gú3y€±çØÚ`
+�¢§ïãqäåbI&^Ä!;Ä¢JR²XvxÈt¢_›Üà£#“°§$e5Á•@0(,¡“X2\pè�C´Œ§�åÐºŒQÖ0-öÈ‹ÀH9FÞ3ÙON©5Ý6bTAQÍðýBiV¶a<…Ý¦Aæ�Â	Rbqh/Ñ¢Å®�FÏˆ;ÍD7¸Q™p§`¨ÃT¤ûô±'Ï*‚H“½ÌÒë¯eE°/,2ÓfÄrµd:’¬¶–ƒãŠ¶né¼æÎ�ÚÆQ¹U(¬µèØ �!d¶Ù°W��R‘ÅœÉá1…É:k± ÈóÑ˜gç[¶›5�îßáÅÿš‹'¸zÉêó¢ÇG°ÿ
+±o1Õ´.Éz	¢e6«hlòÈs�ÀÙž.–Ë+êÆb‚DU9›¥c‡%—š2bY{É‹ÓŒÊ»Þ€
+|í½7)G
+ø¿üŽ'ô:p|ï-„söäSðž÷Þz›øcÙ;Þcy±c·­¹}<ã‹ó–($M·¥'§U×[´£sP¿öƒ7?Ø±K?üZƒêñ²¡3Îã}ö‹ÅÇ¬ë—<;m¸õà5^yû!Î{þæg_°W�øæ+÷ˆN-÷Þáëï}‹÷Þ~�Wß~“Mùü‹'¼|ñ”Ï?ùŒ?úgÀú·ÊÓÏ§úýûœ_žÑ­Ï¸_–ä¶f>“©×7ÌnÝ'ËJ®Î_ LR×uÊ6î[A9!J|XS–žÜddf”(·DLl“5ÊH´"�ïù„¶
+ôÎE ³`Û×[œH–áR„¤ž¶nÀ5Ü€‹äáäÒd´Ä(…ÆðëÃ=1¦Ý»¼¯ojùW�bø+”JGm0|³Š¯ˆ_áâ«Q`ÀRÓ�2­)Äpª¿þŠ‰•%lã+ j˜fêîW°›ý½¸VRë¨0|P*9¼)UZËÉ4	\ÓvÓÚ*�åBŠ^ä=R(ô°º
+!”Ý¡EþÒk õÍ<—ìcÂ`ù®¯ÕèÉÝX�‘×­JÑuéõÌ´A«,¡¤DÒÒFU�©2&n—P96HeÐ:£È2ªj”Ä¦ÂÓ·–r4eÏà#”…¡m=vç1•FÈžŒ‚yuÀÈdˆb–‰4�qä;”4^ð£�ž"˜¢ƒ¡)„¤¨]D|Ý°Û¤¨`o·H§)ônþE8Å¢°nF¥.Ùöi‡îèßD2•(ßÖzrˆÑ`ƒçbáØ¬;ŽJP¶¡È3v1c×öT…fÓö|ôÑKf†ÚE*!‘1!igëŽéø_/Ðrµ#ÇøØÑ�O�®£”-ÆpûUh/ØYÇvµc’Yt,Ñ"ã ˜3!²éªu€Gj�Œ9}t¨\Ñ6’‹õ–£ƒDÁn·P9.ß±õÐ9KQj\HbG-5mÓPï:Æê�Î×ô¾G©+¢ïp"`Ô‘åØÐ“é!,›«–·'tÔ8[ D†ˆ¯ûi,+lØ’i�ÒÒÖ�e½¢»¸ /é¤¤±� r<Ðn-õÕ_ÿužÿøÏÀµ‰™µ>ã½_ý‡„õWætM‡‘B¤˜çq&¸ZYD4ä¹À‡ŽÆ
+–ç—ŒŠŒ|²�k·¬º€Ö=wbde;:“q¾9e\íQ9�œñÖá˜SyqºæÉ‹÷îMØÕ‘RKlÛñÆëG¨ºaþÚÛ|øóŸQéŒm€'û\¶[J›<|ð:ºi¹ÚíÈh9Eæ‘.ù±}ïû¿òÁ¤šÑËäæ¨£@«ÈÜ”T.ãríÛŠ£émöÝCÝ¾�˜NèBÏËÅ‚—‹ç¼ûæ×©DÏjuI£çtÂ`DO=çWWüÑ?ûçüÉ?ÿ<þøS¾üâ	þèÇüéÿ¤Q¼þÆ[dùmF)é	TûÇTÎòäé^¬¶zr­‘¡@Æœ¼ÈÙn®ˆ2¢Œa½h1Gg�H‘{úàiÛ�ˆÅv–ÞƒÈK‚K~XÎ¹#}ˆD)1Jc*tÉ*=Yˆäå(fïÑZ¤P#©Rº_o‡B®‡2ìÉTÚ¿\æEñæp]¬¥”DŸ„uZiÔðÏh34‡!ìéº!Ä¯&‰¯°�¡�°»ÔàðŽÅõû¾ÚGÅ›ö•ÀOÊÌP¶sCÓˆD4öJR&\GFÒÓ@YBÞhSÖw°>ÙÄ¨ë§’z>$ Q�š�Ö¥$!ŠÔXCbrI%‡®™:ª	GÒ&¹h#pÊB“ë,­ÊÄ€³Òääº î{r£æ— ÈÚ¤0®¾�<ýôcþü_ÿ	Ë«K‚„££vÛ@ž�1Zðò¼f4˜~"¢‹’¨:¦Ó
+“ÍxvÙpÚ5¬ü;§qÝ'
+±?¥«Ùº–vÝÒ	‹Ë"c®kÙ®üÎÒKËË'[¼2AÈ)}È‘Ñ‘›@Ôýè"/³=,"ô4ÖáƒÇÈ”ué3@bU2•,G)ÓVÖñ[_“åó
+Ñ8‚4øÐqLÁ{÷ùø³çä“}vÍ‘Áô¬}Î‹çì�fˆbŒ+gèÕc”�¨Î"ã Ê5l,õ¶Áæ=‚œj2¢È@tHË
+b×!ë†i1¦*@6ˆ˜ƒô(ÝðøjÍnãÃÔäÛ¼$Ä‚õÒÓ5Ž—5{3ƒT�äÑ–åc´¤†Þó– S#
+ôè°¥Û)‚Ù|Ä(ñìbÍÕÚÒøs¦zLŸ^®/p8¶m”t}ÖÑ‰’‹¾F†“k–»†¾ÛP¨–×î•5a¯Ìyíûÿ=^U´m‹yãwXwºbN©’^)F�&¾¬‹hë¨Æ3v¶FçŠ]yóÑ=\Û"ƒdœM)f#FX~úe‹*
+Â®yãÖ{ÏFŒç‡œœÜæéÙŠWJ~ô³OPÊòÞkopxçU®8¾û
+ª{�šìóc¾üé‘ã1yVpöü	÷oß£s–µ�äeàüìœ{w*²ÌàŒâñÏÏ9:,qmDýÖ¯ÿà³=!Ô-”´ä@Æ±s§:¤¢o‘¿ö*.cŠ)'{‡•çxŸ|4g´W!MEØ6ÄÅ§Ÿ|Ê¶nÈF“Kþæ?ÿŸüägÿs'xÏÏ~ô7dEÎ×¾õ:ªØ±óÞFvç�ùìrAkŠÀxVá]G×¦ð+­<ug©ë¤¢Ìú¾§k{DLÑ©FH
+““Þ„4h©ˆÎ¦ó¨H 6!E{j©\ƒº=Ð&GMÛvô}ŸÖ-Þ‚ŠÚ°‚‘B%Ÿ'™˜Q‰,oð
+b$Ï²!G$ÕÀ(ÄÐ<J�I)Þõv0Y¼)÷7ðH
+r$a+RJÔP Ð/†â¿Ï¿XCSŒq¸?™˜SâzÍÆW“… Þ¬ç”7 »òL�$Ë­Õ
+×»04õÕºM&º®œÓP 3�¾fLëA©$ÆèÔX¯u‹JAR¥Tš:ë%ÞF²\�P8ÒD’	„N÷£¤@i…”�”Rè"C É‹4Í¸>PŒ*^|ñ)ÿòŸüÏ\�]ðüñ>üá_£Š’“{�0Ââ%ä…¦’QK”Ò,¯¥„ý™bã;ˆ*ìSe2l}Æ²	Ô»��7�HîÏ!"½$J�2%®¯¨rÃ¨”Ed±jx¶ÜÐGO,y{†Î4AU°7H±æå•EA.U¢YË€�í‰Þ“Ó¾µ7E�òäÞŽ™LMçhcÁ“Ó3^õ.N[j§yy¶c»¶£ h2Ý’‹‚NådªcW'‘ûûÈn›~?'#Z‘§e)mN>6Dé�`ÓölÛ€ªÆŒg%ç««$ÌKÖk‹h*vBòñ—K²É{ùÆw¨›sÊÊPj™ŠºiB+”/‘EÄ&Ž“‰êpãK46´X/É²Œ¢Ôø ¹¸¼¤,
+–ˆ
+Ÿ?]Ñ´5y5FH…^�Eá¡`ZFz,W’uÓ±_jj‘¾àÞí)o¼)ù‹O"Ý³ÇÌN^£½÷·È3AÓZÚÍ%Áü`ŸÞFt¦@ÒGÍüP³ºX1™L‘uÇãÏÏ0“1BZj·áô‹3LY°7òHr¬w4}Ïr×s0—¬O8º÷&ÛÕÆãC½ýˆó/ž‚­)n¿‚é¯xrY0©`Ü®Ù¿uÌzw•0ÙlÊ¦Þ`ÊŒ/—l.v¼ùÎ¹“8,W«Ù¸@2ß¢þÎßþúe.±(°¡"ÛØ²“[f“ãÛøÃc:i×kŒS±ÜtÌòœ£½9›šõfAß4¸]Çé®%æŽããŠ‘™’ç9/¾ü’«³+âÿ§œÍ¹ûúëÌ*‹è§KÇiç20-sÆYNÓî°BR7-m¿¡0�›	E®PìðA“iƒ�1©`½Äz	ÒaLƒ@�4-Ñ1 ½c['³>£’x)ÀÂ£�F)‰Ò	dŒQâ¼ÃÙ”ð§´Á˜"�Šc¢imnL
+‰ d:+!’íûuvÆMAH‘NÎé¤žØ2R¦©4­¤�ùkíÇ€G¤õ’TØbàZ
+¾^*]7Š¯VU7Ì©o
+?¿Œi\ë7nÖcƒbäúZ„’ÉÞEÈ!%0¢µF:)"J*¤J×WRÞ0È”7MÈ‡ˆVLÎ2cr‚¸¡Ç	1á Jª�†«Ò÷D¥fdtjœY–ß¬ö´”(­@hDL„‰Á–¥uZƒEQ$ð6x�Ô‰6'£ÁèŒ¿þOÿù+6aŒ<þÅG¼ý�oq÷•»d&�÷�‡àZiBômÃa®�¦´h2eèåši1B†
+�eT�Ûã=êVsU/¨ûˆQ;>æXåiÝ6å¯«1ë
+8ßâd`³,¶
+Zj¦Æ"ÝE¤¯3.®z\ì(´f,ÂM�áZ#Ð*à}†!£•�O7<ÿ|ÃXòJ±ºÚrr¬0eÁË+ÇE[SC¡$³½·æ#2éqzŒÌ
+*é¸=ž`L$ì–h~„ïvô]ÃÕ¬ï “ø>°mWÔARÉÀÑ¾ä|Û’)M^t^a›´ZjššU½ãå2òå³%›Í–2ë±A óÄ¦+2“Ì"/×äUÆ®Ù²]YÊ<Ñ„Èñl FŒ¶ô”vTÅ²ØêË¥)ó¤£R‚Ñ¸`yµÅ[�T.i`Š1Š‚Úz²´Ñ´.Rl›º¥‹%ÖÍè›
+/[Ír»â�WçìzAûì§,ÿòŸ²þù¿¦]/™œ¼•4B�õ¥`·hÙŸN‘ÒSd’ãÛS:o©·ÛmK^d‰­XŽ˜�Çè\ÓÇ†ÍjÍ­;pîŒØzkÁƒû%ùWŸóøâ‚/Ÿ_�é‚üà·zJ×[îß;àÖýCÖ‹–¶N‘®ñÌfŠL;¦Õ+DRÕ½½)£ù1#_Óx�ú�_ùÕ|²* ¬ –hµÃw=VîÁÝGÄÉ]æ“=n�e6ÃH…‘-AJN7kž_žòt±a¹²ˆ¾é¹d¶7gVŒY­[6½cÿö1“ù”¾­iw5“ÙŒ×ß}�¯¿B@ñôùŽ«eË´ÈÙŸŒ‘"$¦•x«;D”È	Z’i…–e
+ˆP7½µxß§¼î¾Å‡‘
+¥>J<e<½Há2EÎÆ_¢«JY–%Ú£uC?Hnµ�Ò’,OÚŠh“˜Ni‰ÊË;Kf†éDe)_c\(…NÝézÎ%åº‹ç#j°˜¸>�_ã7
+#Š¯°‘_ÂCÔpÊÿ/ºÔÐh¤�7€u$5*q³â7Ÿ'„@5ÞI;¡¤´Ië!…@ªaºð—t�Ô(®±œk�\j‰uýüµB“Ž÷iË³ä¬|ýCL“�VéÞÒý'�^ªÄª’Zß÷qGeÈs34>‰’:O÷¬d:qJ))Š”XçœGE9-ÑªqÎ�WòÅÇŸ`»äÔ›—%÷^¹ÃÃ×Ñt=õÖ#•¤„ˆ()éû€uŽ[{–«Í‡GËÅ¦Y³î<}—„Ç	I�ž¶·„>C:O†$Ë Ë$›-4Ûj%Ë‚³å«EC–&{»ºF‹Œ²Òôæ„~· Wz|ß’g%Q4TÊRfÃ(±Þ‚Bè@®8ˆù„qå)ˆœ_4<9µ<¸3Ã[�6zÚv‡.`™#¤ßâL�É Ê¦» Ÿ>$Oˆ½'�Ž*›Ñ‡O–ŽÑ4ÃGB4ôMÏxjØ4ï"ëDt˜JRwŽ,ï@›œ:6}O×J±JRæ:v­`³«‘Y2À³uÇx\ 3‰Ým*§n,*Saðý©:¬�%
+¿ôyÒ¬¯jªJ2Îö8½X3×3™P·íÆR—‹žýéˆ±*(”§B1�Œ8�Ùu
+å$§µ�åjÃaVðÚ«·rÇÕnÌý½Mhq1²ùé\ÏöôSš³O¸õÞßÃÇ´BÉäÖ§—è*c³^Œa»iÉ2‰
+‘¼0,¯FÓMè0…"7{ó1™Ê˜USj?b~¸Ïùù®ž¿ æYŠ.^¿àÖü˜“÷�G\œmØõ-
+¯¼~ÌÏ?ü‚Qï°FPõ�Ùíûìíoxþr‰£¬"ô‘År…úÕ¿÷kÈ(©´Bš†�:¥
+3™2Ý¿Íá½·(‹ŒÌ™T�ëEÝ­aµëxqqÁ,÷LöŽíÝfT	¶WÎ_,éZÇÑmQPw9�Þ{�ßýG¿Ë¯ÿöoq÷õ7¹uÿ!“ÙguÛ±Zí¸}oÂ;or±ØÒw
+¥5F¦Øw1Yk…V9½³lvŠ¬äj½fµ\�)A•å¸ Ùí}ï‘"%ñÅÓä£*aÒxÐ*H•Dˆn8‡�eÅ ¹�„‹ƒ¹m²xWJ¼Ãõ-DÈŠ*•ÐÁ–=E[þ’>‚˜è¬×ø…ÑrÀÂW«¾¡�ÇÁÁv�|µ>»Á$¾b?Éá}×Íêúq×Ì.¡ÒÊHM ­–Ra•ò—x»7M*Q£Õ0Q‰k·\1c
+�—JßÞ1¦{0Ú¤8^‘VZrh~ #h�VjR‚”i
+˜ešÌ¨ä3&TZÓ©4©%Ü#MZ¨T@HÓ^×'zòdRb´ n]švd:ái‘�¶ïp^$�]¦ïïÕÙ.‘#„f¶Çï¾Ïø ¦ÝyõM¦‡w±®¤·‚¦íˆ^Ò[A»5,.k„2øZÃþÛ4Í†õJáÐÔ6£mJš�«é;Xo›�§(¡Ý
+-&DÒù[°³ß{¿àìiMí-Óé˜°ÝPÌö “4çWî—Øò»Ëì¬#‹#÷q�§56z#(bA+{‚î‘1PŒÆ,/[²ÒÒGÉÕùÅ|†»éÈ²=Š‰‰Ì2CèZBôÔ6c>�0ßÓ¯o0uƒ�Ðì~G0Ö–„2Ã6Žr$	2)³wÛ­<Û.²ÜöLÇcÆÂ#5l¶ž²D—‚×dÈøø³SB.Hv‹žª*Ø¬šäMå®K´í£“1»�¥YwŒG#Bôl–5…)9¿hPÚ"´M?�Þ¡ü¥Æ´®IÞk2Ãö–"7:&Ó#êz�Se(å˜ï�Ù¬:^,®8:*Á Æ>`�¡mvÌö&œ]¾d¾g9¿ô„¾Ánvìd³}v� ;ûEr·Ý-Èî}‡Ét‚ì„ñhÓc&‰t¢”DëÞ*™L2
+5Á”9M³fµ\.;Êå‚7¾þ>•ôùþò¯þMk©ªœ²Ôáešó/ØO1Y¾çó#6ËëËßúîØ5;ÍŽÎä´mÍó/Ï8W¬í†ußBG1š€Ú¢¾õ½oà¥%VK2¶”
+­Ù»÷‡¯½M¥óÄ±Ï+ßÆ:KPa|i{œKþ5u
+>Ö„PÓn#A
+"Ž¦ÔmÁúr‡ßõI1ã½9ÓÃ)G³	!D.®®¸zñ‚øçüþ?ù=þÍý	OÉþÁ„ýù„Ý®¡÷ïzS�°Aš*/
+úÖâ­CúÀrÛ�•{e†oWlê†¦ë	xš¦§µë"ÁK´éS¹OELE2N�”ÎÎöYN‘exïèzP ‡P&“•“˜R”¬P�i�†V[‚ Ò´¡äpŠéc‰ÕÄÍ®_Ò)^«›õÑõä!…¼i©¸^7ù_4—kÝº!R1WJÝ4œTÈ$ešRIæ�rÀC’ŠybQi”R©)
+÷›gòF‡¢†÷!$Ê¤&£µJÍ1LCé¹–Y>¬Å@†,7å5ö!†ŸÆº€ÉTš†�ŒF*K
+vkmï°�E0O¨>…FŠ’èÀEAß	\4äºd×HÖK‹�è’“[·™ÞE‡@†”P–#¢�”ã=dT´>Ð¸@QTœží8k„(qN2š•Hïq�Äb†i*²ÚBï3êÞ’¸Z;¦f‚V=MÐ´Ý†Õ•#×ÇŒoÝ¦¨¦ŒL‹Éõn‹ÊrlÈ‚ÇÙŽM·¢wR´ˆ*­Cê\ÛÑ¨5ÑŒ™…ˆBs¹©ÙÚŽÉd†ˆ»«	*£÷
+ÅÉ+dB1‰ó}ƒ—OÙ45ó2cyvÎÓOãMÎ^)°¡£Þuä"¢ŒD¹‚�my~±Dˆßî�(L¦Øí"«­£¬£¬¤ë=„ˆî$³Ã1ÖB½k‰Ò!Dò¤ûôyÏ|,©æ‚éDÑXÁn Œ�ñ^�s
+¡SF�ë{&£9Ê(vMMp’ÖÂ||HŒ–(+œléº.5!ß£µBgŠHËl’s¶¹d2�³¸Ø13’Ùì€ºÞ°XYöN*>R3ªÆ<?»`Ý8B9£ÛÖlëŽ¼P4½àÉ3‹Ã1ÝÏQJrûø�èÓ»¯ÒLîsüà6[ó
+«X�ÉœroÌÄhŒƒ¨“�¢k>àÚ_	6K�í—ŒÊÑ·Lf%'óŠoüÊ;üÁÿ9÷^í³ºxÎ7¿1§®KžŸŸQXxúäŒo}ã]¾öÎ{üÇŸ|ˆ�ŽÑþm’Ì´LøÏøG¼óÍ_áåó'ä¤If˜y½¥<|À�©¡±
+›—Œªê{ÿí‚ŒD›¼ÃŒFÌÞø:ãƒ‡dù”(,^X¼­‘í
+%%ÎEúF…fc{ÚÐ1)Áºn‹ívtÑBž¥§ÓªyÅÁlÄ®©ÙíÖd2‚÷ìsqzÁ¿ü§ÿ„³gÏqÖ²Yï8}ö‚õåKòq‰5cöJ…GNÈK¤ÖäÆ‘+KŒšÎûd[¢
+ÂÙä*ª4A^$qŒ‘9e5J™.ÅÀ¯Èó
+“å7ùÞJedyN®
+BèÁš"í¿¥$¥éÅtÂ×&ÜTYã É\y(!ÑJ&CAq=HHŒ4H™,ÇÓÚ'�Öƒp$1¸†“zÒQˆ¯ÖFà-¥D™AO!åPÀå
+žp½¶º.ÈR&\!aƒ¦dXwÉÁÿZkr½Ú¨ôÕõì«uWf¢,Å‡˜š’ÒŸš’’¡¸¡áZ†Ó•BkI–¥µ�sy‘%óK©È2EðÛ)b�T£,MWRêy9X¦Hz+	Nà¼!Ø­rFå“GdÌ1&Ð¢Bi.¤{X­,‡“’"Ï0Ja²‚¾÷<ýôç<ûô§tmÍáÁÌˆ¶ëP:)ß}çˆRá¢âprÀÉaž²j|òf
+¢!Ë%m§Ð¶±fµY0.rSFI‹ä,„Ör¾„w)öÇ9ªA^å<{¹¢49ÿ;ßæ£¿þóÃ;ìß{�_|ñ˜õºcÊd©»@nf¨¨)'+¦>`µ¥dzÏ(×H™á6–"�è‘¢Sðå'ŸPE�ÉzºÎã�$à2ÇÒL^Q�ÌyóÕ{|úùsJmÒd/ÃÆÖ´TVêd™âƒÄ¶[T¦ˆA§hÉ¤`³Ý"fÖ6ÃïTF×Z²Bs±hy¹
+´­G	>RŽ5ã‘¸¡k)¨ë†¾uä:cÕDb°T#Ãx\¥¸ìuCP
+E%|Ph	Z{b4iÈ•Ã
+kÎQ‘a[Ëx¢Ð…AKK‘ƒ2é1U<?=çÕ‡3ê6°[-xðæ»	kÙîr±[b{Çá¼B…šùhÆ‹Ë³£Cf¯|›{ï~‹õÙ—«üfËt¶�U++ÍÅËÛÌyMYí“�kV˜¼DÈ€«ÍeÍÝ·ßá�Gü�ßú-6WWlz‰s;›óà¤¦(æœ^®ø­ï½Ã›¿ò}d‘óÍ÷¿Ã_ýÛÿÈúìSN¼ã9ÛÓŽ_—½¹aqQs¶^�X ¹=¯X9ÅÜŒxIÏ¨,Qßy÷ýFL‘¢#›Œ(o1;~Àl<FGcã NDÒWÉé¶¿D{I
+#Ó”×8_aòŠà"¾hU¦4·à©Š�àr±¡©#ãlŒ†|”á}ÍßüÅ©wõ°_]mxúä‚Wßû&ÓI�e^à›ÚG¤ÈxyqÅrµ¥ë-¾wL‹œ¼4t±TÛé—]ø€M
+ir!M3¹NÁT7Öè‰å%°áÉd™Aâ4Däš4«2�4e*ìB¢HÎ°Z&I�\vù
+14!y­]‰g£
+9Ð�¯sÓÓD o¨«r0®b8Áÿr³à+�]þÈ~Í‚Š¿$”jë%®q‹aÚˆ1¢ôõä!oijrÀ4&ÓÉØÐ¨®²ÖmBi´Nôä8P’µÖ…Æ˜t]HöíYQ$@[ª›¯‘I©%Êä4�îÁ ‘ø è�Æö©HI¡É³’Þt¦ñ!53mMéÚ¤:H	Pïld\VLª	G‡Œ«	ãªâñÓ�ø�ðÿââÙ'<ûôgüðÏþ
+GÇ'ì'k¡ˆƒÏ–ÖzL„è;Œ¡ô"B_ÓgàlAfFÓIa{„žÒÇŽÕ6ÐÕž»÷îpw®xrêPU�uŽgç/±ÑSDE£&|ííÛ¸nËãç§LÊ’£*G™)£¢B#ÂÒºë7„(‰(š¸C!°Û8ªª¢uÐ¶ŽB+
+('%‡‡%Ó²¢È,Z7˜¢#3ûôÁ³µ=Ñ:bó‚Ùô·øü¬E�4ùlFžäô>Ú.¨C@…Ì4™š dE`½X�õ¸N/Zöö/¯<ÁÃx\På‘‹«}c©æ9=ëM€ Ù›�ˆ®gÛ|ŸBy¥)¬=AudyHM&*t©°m Ì’
+~�ß§DMbZç‰(ÉDŸ(äFRä’àÜÀÀ
+ÌóÖ[¢î©k‡Ø´Ü>NP-='wo#ˆ¬âá$….ùÞ»w¶#ú
+XfšË–1†rwÎáÝÛì6+.þê÷øò?üOlK?y�Åºââ¢çå'’§Ÿ·,»@9’ä}Kß¬ë`2á“O¾`µ‘hg™œÜ"t-J8JÝ°XÏ¸;)xôú{¼óí_c·Þ¼§oZ¾ùÝïðåeÇâü9{•@ŒŽ)ÇG?ÿ”·ß»Å›îðÉÏ~ŽQ9:NWKÚ¦g¯QÒÊõÝ¼÷Ál*¹}ë˜»_áèÎF£1x�%¦Ép‡ë#®õ�¹E)5ØMŒ¬@z‚è¼Œ¸h	´¦ÇöŽÝ¦¥õ¡Kã‚°´�ÃGÉä`�³/_Pïv_ÑN¥d~0çÑ›ïà”FiÅdRàÉØn×,Ö+¬Ð`=Úu‰a¥Îw`-2-Íð6¤Bg}ïRœªRRh\t´¶¥·gÖ|%Î²\"E¸±-Ï1¬O4Bg	ë¥ô`+îÒjç€ò<±¶â •Ð&Ù–Cb(£†IE&Æ‘°�›‚~�S$;å�'†VŒÒh¥oÖO‰I¦¸¶/”jPÌ{P×˜Æ0
+i¥ðš8Oë)=¬œ””‰á4(ô…HxŽ1éô.¯×rŒIë¤¸a ]On�žŸ1‰u-NRbbgi£è>èM|!±>â� DEðàQIôg4(Mð‚ÑX!Tj1¤Ò(aÐJ�@�T
+�CêëÒZi·öTã}öö+"�ç”™aœüÇûûø�·Èg?û1¯íÛÝy•z»#È”bedd¯Ê(óñà,Ð#B@ØHaJ´Q\íÎ™äc‚±8'ÈuE]»äáuë¨û�Öl^“›€³5¥®)GGUAÈu½åóÇ!ÝŽ`æhÙ£3C×oÙE‹VëbpÎ&{!½×˜,'SzÏ�ûsòÌÑx°vu
+Î‘‡%C–‡ 
+Ý.RP’c©æô«ˆó·æ„üœË3�™¢í6ýøŒ‹Í-5ež‚d·­Z`r…s‰Da´ÀŒ%jYsûè€ã[9mÝ‚Âv�IG¯"*OM7W‚Mã9žk2“(¹½ót�¥«:×Œ¦
+a%]}ƒ
+»ë0¥Ám4å^†hÊ€›‚•Td¨†zÕ#
+d&m.T¦‘bE
+º®¥U\®Ç&â¤fœiFYNôKÚvÄb±"“}H?Ï?ýdÅÁž&/øäó%G†lZbLÎï¼Å‡ÿüÀÛŽæü	¬þîüv¢\æ€t;¸¸”lzÅ|_Sæ’Ëm‡!G’û·
+UuÈ4÷˜rÎ§~Á7~å}b>b¼@³ÝÒöm2²Ü $ôý–§Ÿ~Fh¶ÌFÔÛ§gK6ýˆ»·Žyòò	D“ÖíJ±XmÍé¬EýÎ~ãƒ¢ðÌîÜczð**Û§Ž=_žv\ž·L‹H–%`ÓT9ËÍ†®¯Ñ¹ÁFOO‡2&Ûð ,^økéS#Ð*g2¼QcŒ Ê2í íŽ@äöÝ×¹ýð˜¼Òd¦@gßz‹·¾ùuÊQQ³Þ:vu—´Á¡p8gQJ�†<Ox‚Êªd…î<Ah|„¦±tÖSM
+”I…-3%Òø�:*GYB‚ ë“í9B+*ÈLA–ŒÎ‰˜¤m�›‚·½Mfx11šŒÖdÆ�eQ
+‚L®²jX3ÉÁ2EI1XÁ«¡èJr�òO¤ÔCñeXG‰½†1zh:	GQR¥Óþ°ê’ÃIþšY¥npõV¢ÒÊìcAL¦ÉUÊWÃã¸ÁA1¦Ï¿n RšŠ±R&é@¤ S¡42D¤ÖdYj”J¦¤Àr4¥Êyžc­CÄ¡¡ø$Ú)Vz¸Ï4�éAë‘&­œ‹dºÂd*9d�k”Qh¥èº´o[‡•„hw=Ri²¬$ˆÈéù)}ÛðìlAïZ¾÷ýwøÉ_ÿg“ñ¥Ò†ÙÁ¼‚Öž*ÏˆÖ«Ž¦SN÷è…:¢ìªÇùK¢�äeŽóIÅ|Ä(E™yú¾çh^ñÝ÷+FEÄ¶�éD"*ÇÇ�7LFš *šÕ%^�xþ¼¡w†Ù¼1FUš«¦Gè€µ 08¿Á{OV(d”ˆÖ“Ë0è`J„íøæÃ;”lyñlÁÑ¬ä»ßz‡ºX™Vy‹¶&HÍTwˆ)•Á¨È|_°[Õ|öÙ3nŸ¼ÊÝ‡š¿ø‹Ï¸r€q§Øì:3Ø^Ð¶5å8Bò†Ö™d»q„ ØÖ�Ü(ª"MÕn[3ÙÛÇwa6Â'5}	½£#FK.×=U©©Fˆˆ
+‚à#£‰¡w‘õ2pïö"ytÄ¼`{µ"{zSšM—¦a:—Ð:Ð¡srÓAÔt­f½ké�¥¬²ä|v˜TU¥xòùç4½"Ï �Ëb½¥‰xsïÎœ£ƒŽ§=¾é¹õpÌ³3Ï[·÷)æwxò£?tÈ;¨FPÝÌÀdIÖE}§Xn$óƒŒ™o¨ƒçp:ãäè€¢0tª¢¬&<;½¢Y/xýß¢^-Â�ybYFÁŸþÉÄ»Àþ!Oï²ØµLÆ‚®wt�Ãˆ%"d|ÿ7~•guÇúÙ—˜²$u³aj4êý¿ÿß}à§œÜºÏdï€LåèØ¢ÁZ…Ûnè}¥(%˜\ L†’Ð…´(Æ8+‰Â
+¡ÛÉ(3
+m§—Mâ EçÖŒ(©dF”	Ä>1’;¥áéZÐzÍ;ßx�ßü»¿ÍÉÃûLö)ËQŠ¢�ÜˆÎ&• ê@<ÞÆY2�«m ­;S�%ÇÛ‘)Ø—˜Bn(µr0¸0øè±.MBY¦Iz;‘ÖTZá¬Ãy‡ƒ¥È Ô„ð_a$ÐIgÅ°BÒõl@Iy#â3Z“tŒéC©$n ù�Ýeü®3T^¡VÓÍ$"’‰\¥“¥¶P©¨‡Á¶DIMf²a:IS]*ú_5mdbg…¤å(«¥À»´ž‘æZ_‘&±Èðÿ1­¼tfnÀt543“kLf@¦H/aLÊÅ�LB–Tã	&&§ÜÌ”H¡„�š~Ù –THmp6a3Y–cŠ,±¼´ÆúÈ´šPT#²L"” ·éùU	>e¡Ò†A¬ŽN8¹û€2O›VcB²­;TVPNfßùï¿þ–œ(
+¼ý>o|ýWÉ¤Áwžé^Åùù¢b*%Ó™ È‹ºH6`_V6uR,DëQÖ²h:.íàh ©Š;Ø^'ÿƒ	Ù¶gÏ™írõâ/JŽ4#íÐ3‰³èE…7=ZÏlQ¶Á(É\Í	CRàÎ÷(9g·xÁºí±hÞ¬Wç|úbËnëyíýoq0?¡ºõˆ¸Z°n4}çécƒí
+MnºV±Œ‘‹ÅŽÃ}ÃÉÞÏAìy^&[÷Ãt]ƒ	]Û ô@~�é¹
+©rE×ZT‘ÑzÅÙ¢Å”ž]×¡GßÀ'/6LGóCAì=Û&e”•¤³žåÚãzGQHNö
+ëmOpŽzÝ³7/X¬Nx.–[‡ÇìZËòlËþÁ>­µLË1í®ÅKÓFä(ÇHAž{¼Ê±¥í®‡$VDÊj�³‹-£B6Žn•<¸ÏlrÄ³Ó3F“‚Ü¤Óõ¶G+‰#¦¥â|Ó²~¼¤ªJÊñœ;o}�·^=àÃÅÛì¶
+Æ·àðÈ&ë¡8I‡§Øá­`³<zuJc£ƒ$�Þø«Æ"CÃxRðóŸ‚=}Îý7ÞHv<ýŽn¹äÿóÿý#îMãý[tË61-Xµð7?ý‚ßþÍ=Î^¬™[^>ëØ=¯|û\}ö1a˜îEU þÿ×ÿÓ³ÃCD¹—ÄW*¢•a\p°_aÆY‘ÖË�£m:*9FWI¸'½K4UÑÁœ$Æ1ZŒ0šØÐJû¥m
+¯ïväºCæ°³-*ƒ{·ï0ÎKðžÝfKÓ´)0yA^èaÿ¯˜VŠHt.ô(‡¬(‹)F—‰z«GbÓŒTé“Û¬D<.8Â”	ØU2	³<Oë¥ÒYW‚õ�Þz:ëÑ3i²¬ Ë
+Y–rÅµÉ•’,S�MÈŠ’ºíñ.Pf‰>šçRe˜¼$Ës„t(�’„Œ(%¨&còÑ­5ù0Í„èÑR`Œ™H‘¤·¸N7D’V=Q%—JELê´ÒÒ*Ãs£I>ŒIã"ä�Ý¡
+‰Ü4­æZ=H«(£ÑƒHP«ag) ¸@D“•ÕdÆá¸dVfH•šÞ)ôø`È%¥4„ÔÜÃÐ$“¦'¢uÑ³áu�2KÜy‘Ö‰Dç}’cs‘‘ç“«ÁO+­Ä´Rt²`[{ð–£½i›MKžäEAÑwìí²Ù\Ò¼Üqxû³‡ïrp|b`:�`r‰#T	™±¶nO‘BÒ@[ÂÀæó>„ öÜÑ{”k¨ò1Ë…#å¼ùð˜Õz‡¤ÅÏ¬ÚG–PÔ‚é¤ ÐcZ·âŸ¯Ó÷2ƒBÃ—�Ïùö×�ñ»-.NiLˆDA�¥·=ÅØ£Å"¶­¹{¸Ç"hFó÷ß¸Åg¿øˆŸòÔêÌ&¬7
+G÷ïqñò£f!°B²©1Ö($ç/V<9}ÎhvBÝz‚d*²]~‰-ÉrgÑJPN ]l8¹½OV¤ï“ÒŠË…e·ë™LsÊÊF§0�*ž=_³k¡³ˆZä%ùt‚Öƒ•�‡˜+º¾Ã·,£q†wŽLÀþü×®Ñ£¥Ó²Äº˜0Þ® d‚¢ThÑ±¾¬é¬¡ÝôˆÂÐ7Žª*X],Ð¹&K%eå¨Æ‡|øÉÝÅŠÃ“2o)2Ã“'çÌÇ´M ¶šo¾î¹\Ž¹Z]RŽÆH5¦Ýœ1�hV+ÇÊ�9]=„ãßrP
+,~ÿðÅÿ»/àð×ŸÖ�½ãÖmÍöé9/Ï7<ö%sE‘q0?æ/~üc¾öÍwøËý„û_á?ýé¿¥©_ðæ;÷ØÛ»‹èvlmŠ®¡Ý^¹5ã_ýÉ)Õ<çòjÌ+î3»uÌæågÄ¦fÑ9r-pµCýãÿó?þ`4ž’é•äLH]ÐwÛZpŠ2œ
+Ûãœ£µ=­o‘¡HVÑ¡Il™(Òx*BNŠAjU™ÉhûÈÎuÛSåEuLÌ&#Š½9Ï^^°Z/‘Â²]]à½ Ùµœ>{Æ_ÿûÏÏÿê¯8}ö%}Û³2Eåš¶�ÿ?®þ,ÆÒlMÏÃž5þÓžcÌ9³²ÆSgên²[MRœlR&mY–‹"Ù”ÄA�!ƒ|kø¢|é;ÛHË°-�”DX´h"»Éf7»Ï|jÌÌÊ!2†½cOÿ¼ÖòÅú#êÐ(ÄÉÊS™;bï½¾õ}ßû>/
+K/{ê¾§õ=Ø¸èŽ›G¢2¤'‚
+ˆ^7i�ô’¶
+4}t›=Àú„0Q*êˆ °Ê /RÒ$C ¢GC(‚Hð2�ÁÚ
+²L#üà ’ù„Ô¡)2C–Eàßh4f_–ôm‹I2L:Ž�žŒL-¥¢:KkI–Ú¸`¸ÆJŒ‘h£1‰ÅXoÞJ’ª+e
+JKàÆW!a1	¥0&J—ƒÑ­oS|ðŒ
+;ìCÀ$š$UlQ`µ"KE; £“AñwJ+‚ˆùÍJZFÚâ‚¢õVh�EËŽ®¼ÆÚ­
+Ò¦x%©ê-RK´‰_ßÚø|$VÇÏíEˆJ¶D¤ÁßzQ$]�QN
+¤‰¡oAXAß¶QØi’qïÎ¼{Ìx<eq÷	&ÉIðø`¸wÿ.2²lLztŒM5¾­Ù—{º>ÆóÎæãÁ=/P&°H5RŒ:‹¹Â@Ÿº	ÒZªÖÓTÒx;4;g5\j™÷{„Ž¯]«JçœœÖ|ñÕÚö\®–TnÇÅUÅôÐRdˆøœL¦c^¼vx©@Eƒ‰)¦ó¤YÀ˜&Xpºi	}G“Ü½ó�<3)Æì–×#¦ìÚEC}½äþÝ»lšKÖ"B#µZãûŒ;Ó1wŽ¸sô€Ã¢e<œ—–â`Žk[ê^±/[ÊrGhz&ó	Bš&úqê®E	è:‰’='§‹yÆ~åØû�æÎBñüzKÛyL½çOÿú§¯_±3†z¿ÃU5AYœ‡]ímÏlšSõp°È%Ê¾%„>B$u‡�ú¶@™
+ÑíªE%)¾st»žÙô”,oÙV=¹¶(%ð¦oÙ÷’“¹"¸+-[W‘ï[î}ð˜7Ë×£
+Ä”ªÓ¼¹ØÇÐ3×b¼¢ê7t¢`2™²¸s—n³åÞÉ„ù,ƒíËmËnÓ€L€#ðœ
+£­ú
+¬~îüõµäáÝ–7•`šYªrÍÕò-µV¼ùògü¡_þ€Õu‰µ–7ggLfÌOØí4„—T}FZIMã§TÚ “#Zö|úÅ÷NF¬6-‡cÇïüô-÷ðñGïðÕë·¨ê?ø_ÿGŸh­èúžºn‡Åc\4—UMß÷Æ(’T’¦zCÊ¸L×C�
+æ…B8Ï83Ì9»]EU:œ‡àz]¸½�\×‚³Ëk®/W‰%I“Èdñpøà?ü½Áÿßü®ÎÏÙo¶,ßžóò«Ïñ®eº8BÛdÈ¼$&!µyŒ†
+‚F‹‚ˆ‹:;h8í>`5¼�ÆÄxHÝÄÈFã_–šhJö
+ZJÂÀ½’¬Õ(%è|@	G¦=ÒæèáÏ£FÇì)Z”Ž;Œ®�™ëYf‘Âp½­ØÕ=R
+2�âÚD°!s�’Ä¦yA–ç(mñ¾¿u€{?¨ª„¥ÐI\Ž÷}¤†Bhµ$I$Z%qqí£®,Æ½$MÚ¦�†Žþ=¨¬’$1$yÌ›W*ºý¥’"6D¦ZLòt(pš $}°$Ö�Û'V«ˆ¡éÛøù¤Ášü–Y¬´%•miÝý^Æâ©tÁ…A�g	£Ì¢ŒB…ëo|"B«˜XÉ“Ÿ2’eÇˆ¢@õ5'÷ïsÿô„Ó{)æ˜,E¥šõf‡(¯¸8û1ïoýM.^}ASí9¸{�ÔŽ(KGšiŽæLÒá÷àÁY¤È1xÚhÃŽýeÅtvBYï5
+É(áu©±&°ÙK²±!ÉÇŒ&1XÍ‰Ž·/ÏÙï%“Å	
+‚¢0´M iê=¨°YQVÛ=½ÒÐ·d"C˜ï:2ihêx�é”cc-®l_¿¥[„ßóOûŸsx|Ì£§ïRö{J_òùó%¥ó\­¯è„ qŠm¹�ÊóÑw¿CÕ8òi…Ô#ž¼s�mX®/h*‰ö=ÎT¨ài«žq‘"œ¢ÆcTŽë$ôŠ<K¢Å$–ý¾Å;�U–åzÃ¨�L’eZ¾ºôx
+_¿üœË
+¼s8åh2ãí®Eë8Ï´`Wƒ=‹éˆÕ¦ÕÇ4”nOv:gß{”“H$^6¤ZÐK�p‚®«H²” bpYßyv­G‡R¼ï™M3¼tr6û†~ãùî÷ßÁú†n_rv�Ìg—#CšÇLø£ùŒÅÑ”‹‹-¡Ú¡º}Œè=ˆŒàAwœ½uÃÔÄ�½ÇX›O‡�GK�ÅtD×U¼÷øˆw?8å¹»\\8^¼Yâ·''û«áKŠü!ZÊ­¥¼ºDÁ½àùWvT�=àð`Á/ýÊà·ôã¼O8õ$ù„/¿zÃæâœw>úêßÿ_þ/>qÎÑ
+‹ß(çT´}KÝÔt}ÕPêÆÝ,A
+†6Þõ¿ 5�‚Yç]pìÛ–ëmÅõ¶eSÖÔmKÛöX­PZ±¯*¶Û/ÒÚN#”¤ïû]Ç»�Þáâì’Ïò£[ÿÃ�)îí«·•rúð1ÈHÇ
+:q¾„C¨pË•"î"w*Þ£B+F©Z«ÐZÓu¬P«8Ô_BIjwynIó¸Ì5F¢€$3šÏ©÷®ïÑ:î¶›ßL’#µEÈX��I0:ÎøÛ:†âX£H’”,/�Ú�XIši´1ø�€Ðc¢AlšÒv-Þ‡ètW±ð£ï#Î;uˆUYÃ’~”YtR`“|„Š£ k,æf‡"¢š+K4Òytb°‰‰Ît÷8`@	”
+ÑÝŽ† è:A×f³1©‰ì°`s’l„Ñš½qÙ.$û¦§¬*œŒø‘¦îÑi‚V!&í‰c4&Q-q´Qh‘E(¦Jð^Ç=G¦ñBÑt=© „Ò,FEšJFœÜÈt¤±Zá]…	5Û�£¯6«ÊFÄ»4$é˜'wG<{ñcþóÿø?åúêœõÕ9¯¿ú»Õ[§OHó;Èœ«V‘Ê„©�?õ {¤5gh]@'�¶wä®gzD�4��ã@Õ¢MÆÉá‚õ²¥*KÖ«’¦ó4¡£ñ5ûMÃ¾jÈlÌMï:ÏÕÆã�CØ€•	VŽ‡¶ÑRu
+5ŽÊû˜(Ø:#±J3N5'Oîr½¬Ø·
+­ Ûí¡5Ìñ<98ääî”³¯¾&/îòÑã×òêí–®*Q–›¾üê
+¾\_nxðð._^\’JEcrÑ!½ƒ,'l*2!è¥CY‰
+!£©a»s¬.wä£žÔäx­X^í9ç”¡æíE`>²ÏG\WÐUŽïÓ
+GU×àø¨`uÝQôŽ c´u‘Ðkž¹B
+C1‚}âm:�“!å‡ µš²ð!—×<|2£iZ„†r	Ôu×ñt–#ò3j6×5.)Àµ¤Vr±îBqz2å0Ûq½T4ýšb<çìÕ×LG9bþ€ù|„,¯¹:æ@¯¹ØÆñÒÃì{0~²{0û$	ˆkDXÑ_üŒDW¬®=ßýx‚Ö×«k88�Lí£sl[#MÆæëgù¯‰Ôì»’/?Ûptï„vÉá<§ìÒê-ùôˆüàÇÔÛ+ï<"ñ{~û‡?ãOÿ©?ÁÏçï¡þí¿üï}Òw=}ïâxEEÿ@ï:º®»ÍýŽ¦›@£X@ðÑ"ÂÍÁÓçúÛ�£ª=]½Rz#ØŸnþ"ª”lTÄø¾GG*%‰o8ž$H)ØîëH…Um-i–qt÷„;�°Û¶TeÌÀVÚCPÑ«!£Ì4ÒÄ‡Œj+ï u‘”E‰Ñ ¥’IEac8�çövz5AßÇà
+%%iUG}PXÅd‚Ôš¶ªå]çPÆ’ä9mÛã\,ºZƒµ©,Ö@ž¬‘tn�èö‚®U©ÈÒa~€ÆY:Í¾	ÖX­cwa-ýMŸŒ’ã4K°FÑG0YeÇfP€1Èƒ…�&›F)t”mEõ”Š�Ç¹èü5&ŽÐ�Yì¼Æù„@\Ö7®§ªzŒ4diJÕÆ$Àºëð*EÚZ¼.¨ËŽQåÎF²4CÈ¸ O‹1JdÓ£uC“„Å»Àl¦˜M,„”Óã­-R)r#YLR´1;<áôþ]¬ôœ½|ÉáÃ÷°Ô´®%Y–Ë–g¯ÞòöÍkTð<¸³ kÚØišþé?øïØ¬¯oeæWgoÍOy÷Û¿D½ßSµŽ|–"„Ç	�-Ò%³§n[d’‘9¾ÛQwž¼ÐìêžTJRkÙ5�{w%“4Ðl{t>BåÊëeì¥&‘’\Ú®dš\—�h»†"7hHí”]½ÅiÃ¶ièhir²%�šÂx´éidNq8óÁw>à·~ø…rôt„`XnKdfyp÷.›·¼¾Þòä—‘¤œ½ú9Åt1£¬ZV»ŠºWÜ»÷�j½áW¾û˜ç/Þ�¨.ª·�p[„êkK‘M™X˜$Û8B—!{²YF[9ò‰e·*iêž;Óc$/Î¶,tÊãoÑï¶¬6•[BÙ0'¼¹hÁQä°\o©êž‘UmÙîkòŠ‘Ä$°«ÀXÍòºÁ¸˜2Ù!08¼r´uJ1Ò¬×B7L')Í°x×cC×Ô8�YÊÅuC7šÐøkÎw
+JxîðõËNžGOïóòå%÷<Áé1Vr|² ×c¦vƒ—ŠËJòÎG8l^!�rñv]ëÓ�!}bQ*/þ&Íóÿëç¿ÃÑX±x÷s0÷lËRô\^n˜LNãþÓjtÓJv„º¥ÊF(eÐõ–,5ŒÆ3ºõc{A¹«IÓsrQ�èê-Ûªç�ü±_çüßÿ~úwÿsÔ¿ñÿÂ'n(AÄÂ‡�‹>ˆÁpæ¹¡ÁF™¨r0LGo@„ô	zçã’¹íiºÁ¬'‰–$&ÊR•Œ‰y"„aÔ3 º…$5’Ä*«ÙV
+«²&Ï98>"Í
+’<g~°àþÓwXœœD5“ÑÃ.ÖºÞaŒn—¥#†™.`:OÛ‚‚ÔJÒÜ�	O2`Æ‡\Õxk»‘Î…hRÓÆ�ç
+­b
+ž÷’àãXL©øµÑ9]×¢­Å&Fˆ8‹–ÝY’ ´&-FqÖ·Ñ¨©¼°¸`ÐÆ0{Œ!:á}LÌF`Œ'GÛ9z×Ó…¨ƒÏ’%¾(aI³žb$�’èæˆ¸ÁEÓ 2ç±@ˆ¹"ZEO‡�	RŒóï	:îK|HéãØ.M5ÞÇb¤•R\-	¾%IÛEÍù~Û�ÃÁÁˆ$‘TeI’åÐ5$ŠQ†Rya™Ž«ë–ÅdL1šSäFš¾Åh��ïV)H­a:q°8%KFÌg3NL2âÍÛ5UµåþÃû<8½ËÑñ™Ð,qNŠ#êå×\]nQª 	ž¦Ú¢]�È$›Õ†ó×¯Ø^î`2c6»Ã�{yýõ§¬®®"h1q÷Ñ»¼ÿñ/ÅÜ×ãª†«}Ëh¢bBžôì=(¨ZÏå«
+:É°¹¥«ZªªÂë”™êyp”!d
+¾§¬&ÕÜ_LÙl{ö}ÏÅÅžIžJ¬IÙ9AO�–Ñ“5'‰¤°
+Ÿ¤×r”¥ÔM�T‡YN1Ê1Â“ù”ãiìÛ²e½[Ò	}¹ãäè>A5T~ÏÕX^ñà½w¸¸xÍó³Ý,©Î—dºÇ�‚ÅB°ÜDª­óSHžþï>|D[	ž¾þé[¼ûm<†•«ILÂ®Ü3žÎXíV¼nëŠ@Z$à=I.Y$´B0ËRž]¬¸ª[ö¥¤ê î4m¿#k÷TeÃâdÂúºdß²ÜÒ×ãQFžÂfçX_¬9:�¡…&g\½Y“h‹N,}Pzð½"¸eSú¾¡‚y±`ùæ
+“ª‹+ŽŽ�mGŠ½¯¨»@šx.ß”ÜMRÂÁTI×iÇ‡œ.`³±œý’�>|ö6ðÅïþDj8:ý€öâœ´ß³ÝŠ“#¾óí{|üKOÙì*–/¯¡jÁ^pçÑ]îLÞrõÕÀ÷\½ú”¯¾xÁ›þ˜ÕÕ[žÿãÿ?ú;ÿ)?ýÍÿ’ï}ü« 3èÐ–$›0YÑãØ/÷NéD*c~¸áíÚpöò’LÍ)¦¼úíD½ºâ»ï½Ïïýüs–_ý&çŸþêßøKþ©¢_AH�ç]Ü!Ë"N†0R`„D�e· > ó±5oú>ÒI»H€J�&3=(Œ´”Sü”B›†0	)Yj°&
+uCÄg>.˜°8:fvpD1c’äÖam¬–×�$ñÀ–C&«%�EHÜ�¦­†]Ž2
+•‚T¸ ÑÂ�Kç\\[…6£-Öæql©6d©DHƒïFuôÎQ–;Ú¶$ˆ^!µÀÑÓ´
+Âutõ–<Ë�§ìËš]Ù�”h£R¡ímÒD3›L§clzˆMçXeÈ¬ Í5©éqÂdŽ2¢t!Í¦¨tŠW6Mè:ý*ª¥rk0HZh<%QÉ0š”!&Q$yŠ2)Ò÷t”mk5Ð‚
+ÖfìJðD�‹ÐñR ´FÉÈ:9�1ŸMA)Zç¥#6uƒ±cf£€±u”3ËÂŒÑZâªŽù(EÙ„ GÈ4º8A@�œœæ\Ÿ°Ú^r¹Ù²Ù7lÊMïQô”¥'øœ¼H¨×WŸÐe'ÌÓ–ùH¡’.–—\l–ø*06š,Ù˜bþÓ²¢¦«®Ø¬–<üÖ¯ðoþÅÿ	~ôt~�ûï‡»ïï;ŽH‰é<•Vh©y{Ø–
+BkD—±˜dô¦'„�BÊ–‰ÒŒéÑ³Cê.0*,½ÏITMÙTxµ§ê:‚Ñ8%¯gû†Eß0	ŽëÎÑ´ž|E8rPXêZs�õL3XU	wçßâ¼CË44®cÕÖøP³/×œ/Ï	nLÝ
+è–$"¡S)Ù�§,ÔžO¦4FSÏîðƒßþ‹9m£©\`¿Û‚«Ñ²![|õúŠ¾¬X]ï™Ÿfl¶%"ŸR®*‚bdy{¾Å;Éöºdq<ÆyG’ÚVÒôžåyMZ®·=¾®IJ¦FÔ¢aZÞç	Û–4±,ÏWLgc¬QìÞ^³8:dsõšM—ò«Ý�Ô²++òDá}�-RúRtKnã¥ëUÙ TUCWÕ<¹—±©òé„DdøTã÷5¼sŸª}E%=««CÃìñ®^_A;âÃ÷$…9%M×¬ÏoÖK®/ª/yúí_âéãC¾zyE6)xûóO™Ž
+²ú‚ôñw[Á·>>æOÿé§ä¼ÁæŽïÀã‡-bú˜¶w”gŸ#¤Œ—÷Åw¨{ÅÙoýôÕ†®Ùó;ÿýßäé/ÿI
+¸X_ñ�þŸÿGþößøß`ª-}û—©¼¤¹¾æwÿÛÿŒË×§?b·^ñà£ïñ·þ³ÿ„Ÿÿýÿ¯~òùá�›]˜Sçé6KÔ¿ýWã£#.â&¦4ùobU‡CK~ˆt½£îû†ÔÅrð17<³:f7ˆhü.D2dIAç<]ïðÎÅü£†…ÄØ8wWÆ¢•‰W mÚ¦¦kj!'e—³Œh
+¥ð!Ðvž¶ƒ—è`TB7fºÂ Õ�îîº÷ â×Ë2K>¶„@½ˆ›\îMzF!´@x�2’l”Åî!´Ö¸àèñ£˜Ïã)I0¦£ë­dIÂ(‰úóÑÈ“Xè�b¿‹¤â"¯²:£U"Åu
+m³EK˜O§ä“1^ÄëT—»]K×¶äYÁd\ T Å#µ%hNAEæQ�1ZVF,º@‡r0:'q½Æª@¡�¢ö/
+›¥„ ©Ê†ÄäLF#&™%ÑŠ¦“çÝeT4tAáÉ	}Ï8kÉ3Ïtjh�‚“ÅŒÌfé©ê’ùAÂØä“:1b_6Ô�£m£qµm=Æ(..vt^±8>¤n;Öåžùé	å®#Ëz¶ýˆ�/H• š.´¨"Ç·­û¸ÿÚU¤)¸6%¸”Dõ”gÏiêkž~ëÇwî°iº¦Å9c|CgÒˆòé%…†¦qlw-m¨iÎ/°NÓYMY×lëž$S$­ãàtÁøÁ»´Û·<¸xýõŽ÷>L8?Û3Ÿ±o*D¢°ZÒª”,×`&Khúèsm«qèôÈúÒù„nò!Yß!|�H5ø
+b4'Is^>{Ë½÷>æÄ8æuÍå^S6%ÙòøÁSÖJP»†{#Å¦ïxýìœ,‘”×5âòújKj¤lÒ�X(—kÞx�ª¸Úy¬�‘ÍÈ²Fç•xŒ§RŒ�óuK1Ê¨÷uìÜ]Jœ¤Ún89±Ü9žóå«
+½ß¢µeÓž¿YÂž‡óc&óŒjWrüà‚_—üÚŸøðÑ)ü“ßü)£É‚†ž¾5H•’¦e[ò,£qJ
+™‘Œ§ÐõL4xMßXÎßnJ0ö�»''T›
+]è¨j…mk�¼HØ]¬8�&<¾§¨ÊŠfïX^œ¯ùàdÁËåžl–Ó55›õ–£4¡.÷›òä×ÿ^$YFã¢­I§Güý¿ûßòËßÿ�õv	IÊ¢(ÐzÊ÷þÄ¿EðýËãGï°½øšÑý÷ÙŸ}Žo+’Ÿ¿¾ârt�´ó;óÿÀ«g?áù?àñ÷ÿUþéßú�ùêwÿ.o~þ›|öOÿÉÝïó{¿ÿ|ì¾úgôÛKêÝ5ù½¸ûÁ¯¢þÜ_ý‹Ÿ(P»Ä`@€ƒÂIB„J…‘Ø—Lç=½stýðÑúˆ×`”Ày3Ä”Ó@¤»ºè½Äõê½sCîDdR9?¤õ
+!>·Ix®§ÜnXž_põöœíõŠº,	ÎG`bbîCîö�ÉOØõ
+YVD¶¼ÉÞ�ÑP'T¤ä*­°6zðCî}ÝÙÔ ì°”¬){»'ÐÚ`T”K©0Æ m‚4Ê&à54’|4¢HI–�O¦˜ÄP7Ý�ô'I’‚4É¨ª=UUâ}GÐ
+'$Æ£Hmt
+»¶CöYj0IAðo2Mccñ"àDT�ÅYjcðÒÐ�e�:Á®vc£**„(Ãíºè¢ŸŒ2¬¤YŽI’Ø±b�2�”U%‘(Ò4%+4½kÐÅÁÁfù-Öô>a2¶ÔM ³G,W£ù!Éì§$:-ã9*&y�“‚r_Ò·{:ïi›=Y’Þ>§M˜LrÒÌ ¥ÃX:a¹Ü²ÙlhËo_½@ôŽ»§´]Ëvëpª¡u-ÞYrÛ£LF<FzÂøiš€–lG£_=»¦*K¼kIl /f8ç‘ZPø€´†ñAÆTB³îèÓQ„u¦†Ô¤\,÷(e¸{’Àñ{ˆ®¤ÛïÙn,®­™LSª]EßîÙ4=—¯Kª¶‹¡M.PÕ}ô˜å1ïÁwñu³+kZ™!tÊ<ËÑíŽ7o—x™P$�}½¢ìUÙ#(ÈÆ‚³W/Ùl:&¶àd‘Óë	ó£CvõžMÕ�yx|÷.M×±ÜlhÊ<ü�òœo4#Ñs®›š¾‹d‡^¥ì7
+ëfË\öt�e|�²Ü”8-iú”x³ÞÒô-G)]çFa|�N-M×³˜)òQFY+ÒÔÒÕ‚Ÿ~~ÉÝù”Â·dùS7l„çë³“±a}±Â{ÍáLQ_¯Øn÷�ùÉÏ¿äÉÝ„ªëÙ—ç=Ö(¬�ø�²,1Ùp!ìjW¡uÁv[áCˆNº5ïÜ³”{Ç²®)UÊêê‚ÃÃ)&…â^a)ò”««
+_�åÌ§–Å�¡î=Ùš‹eàÎtDš[®‚æñÂðÃÏ?çâåsäô„\6$Ú Ó‚ó—¯]TdÞ?°^¼*ç#FžòÁûsé¬WŒÃžO¿Ïâé¯‘ÍO8¸û˜ñ;¿ÆuÙòå‹ç%éW¯Ø__ðEÊN�é_ý¸¶äêõŒÞÿƒxHß!cƒTŠ»ï<áÝoÿIÞ}|õ?û�çßß¸Ç£»Úy‡ó>æe¹j Ê*1×Zk>Þ®ƒÃõç>€ó7H�Qq¾~“’ç=ô.Ä®Ãyú˜o‹”·_÷ú'¬xŒlõtMÉåÙ^?ÁÛ7¯Y]]±Ûli›6Â÷Òml|œ.fD„¡DDlˆø—ß€‡l©wv×(ýM¤ëMÎ…¾åˆ(0B‘ƒ4â6ðÛ‡OD<Ø´h!ð¡§ëcü¨Î¶›5Ež“f)�¤¢í;º>Ð;p}õëƒzJ)ƒV†Ð;¬c%By’Ì�Oiá…tÑL)%‹ÉˆÓÃ)6IØµŽ 6Q‘à:d|(›3›�jÀOËÈŽPJÒKCÛFLž)úÞ#´DÙ”0$6“ LÌ•CÖ»5P¤Š¤˜ƒ�ìV{’Ä¢²‚$I(´¤®Œ�atGf
+ãÉˆº,ã2Þfh«©Ö×ŒòŒ¶µìš– :i©·
+^Y¦V“æ)ÊZú "!Ë
+š¶$¤íðš2ì[MG!—*¡×†ëÝ%ÆB¯�2–«=E*±2âëq|G¦K<’¶/4?øg¿Ãoÿý¿Í‹OŸ‹×¯YœÜ#Í¦hãI´‰i–ªÞãµ¤ö
+RË|—ë†¼w¨,ãÑ“9¢«1Í[Ê&ÒŒìX¾iQÅ‚m(¤a–{Ú¦!ämÕ°+v’0™¤$ÚàñŒ‹„Éx†sŽ7W%mSq÷Á#¾xuÁ×go(kÁÉ�Sè6­1fLß\Ò´Š·ë–½’Ø‘Ä‚×ËK\¥¨ÚšõÕ9<¦l-W»%6/Hm ÙžÞ¿CµÜP5žÉ$¥˜ÜÁu„ë¹^Ü9œ±nzd(©½¥ék|·'HI’4ÐµY?
+i¢öåÞá{Í|2a³Û0²š¦qüèÕš�H®/KúÌ
+ëÆ“	'cÍÃÇïðúüšã»	?{¾DÇx6çâbÍ(Q¶ñÂÛvŽ¾Œó„G³wXÙŒÃu:Š<#ô5«u‰Í./ZNðÕç¯ØùŽ´×t: z‡³|J¹ïèdÊ·>˜S÷)&©ç�º4¬Z‰�§íwLDÉ§Ï_òÁé#^�¯Ë×¥	ºÍžÒÁóÿŒ{�ï³«GÔ×ç,O™	‹×\óú¢ååÙ9g¥EÁbTðäWÿøßúY9ÊÁâ`ÎéGßçþÓ�88ÃäCî<yÂôä'�?Æ7[”rÜùÖæÉ‡ßa><~ÿp÷£_åþ·¿ÏûðO¡• lsÔ¿þçÿíO¼¨±!àBLØs.Ü¢ÄeÄ¿T<|ÃbÝEå•w¸›�¥¡€Ü­Zq›,Ç æ"ˆoò¾Ct^Ñç2ªJ¿ÉÊº�§©J.ßžs~ö†ÕÕŠr·£©*ú®EjM>‘Å-ýÄ7Û_€
+û¨˜¤7$ð
+\*mô µUÃÌ`EýJßKX¡†¤x£(¤ˆ4Y¡"ïD*]à*bÍ�ŠÔ^¼#16*¸¼ƒÐ‚‹œ+%RÑuÐ¹€M&3C‹òb©ãs×u9Á+ò<0Êa4ÊÐÂ°Y•1£<I 5x)Ø·]|b¼ ËŠù!Y–�P2*
+’äf÷“à¼f×€†~èJÓÜ"•aµ
+Œs‰¥7Ñ¹BTÊ8IHÓ‚l2a‘Šƒ{ˆ É
+Édœâ|Š—Š"u˜"Ê|÷UCÝŒµ*¬µˆÎÓT×¨lŒÔ‚¶)Q. ½G¥›d˜<'H�w
+™±h›àB	¾­cœ¦Œ¦	y�î>xêªåjyM½+Ñ70�³Î{d>§GÒ4à“Â¤ôù]Âþ¯ãÏÙË¯Ø­¯¸xõŒŸþ�»�ž0?|@PŠÚÇ¤½éø�É|Df;ò4Ð´‚<‚Pa‹OOÉ»ãKvB³¯Ê	¤¬Qã9ÙÁ=újÅálD6�²Y�1_ŒY¯¦Åˆ¾oAÖøÞ‘ŽR„ïð!RvÛ¶%i7Ìïßg‘+2åpbB×öøÞÑl¯YU%uÈ¬%±PwÍ TÜ“d#öÕe4.xV—;î=yHu½‚õ�ÇŸéb¼`1†Ÿú%—•b”52¦“c¦ó9ËfE�Çä–BGÓ²oÆX®®Jº6 µ@A³¯1©�Âƒ] K„¯I\ËÅuK–	ÆcÃgŸ_2šr^5ìk�Ò�i‰
+eGì¶×t¾å‹¯öd…Eá�Î!=\­=“1­¯™’ùQF[„Ž£ó²ê)’JêºÂ+˜e#T¸º¬ašÒ¿ÝóàäˆåjÅûyòàÇO?äéÓwpU…ç<|ÿ;ìÖ—LG†õvÄtR“˜c0	×Ë‹ƒ”íÅž¯¿úš_ý#ßâåÅŠ‡�ß'/F¼<[ÒlÏh�¦Z½ ¹wÀÓùŒ6KÈTJ'{Të˜O)
+…«áÛßþ$=gËÞn×„³×¼zóû½ãx:áûßyD»^3¿û�oÿÚŸâ½_ù³Ì§3ŽFÛ0å;àòëÿÚŸâäÝï� 9¾û£“ÇÏOp2ÅŽs4oG¨ã7þ�O”Ô(­o©­!îC¤ŠGˆèëøg"©6*¶ �~¹{‰0èI!"wÈÄ¾	LÒR`”ò¸c!ÑR�CbV	Ì�¤TÆbã‡bãzGS74eE×6xçBbŒ!+
+¦ó9£ÉcímÐÒ/²£nŠ‡àÂ—L¹�eT4‘CàQr
+�_Å#ãŸM´¾½9¥1J¾Œˆ>×F#‡üð(GŽ«%F*k�BÄ�+Ä4¥±FGÓ`š2+2æ©%I�:>eqHš¾%øØ+z§tã(«AX�
+‚ŽT-,xI?$J×œã~&ùüÅŽm¥(ŠŒÞGäv¢“ˆtV!c7Y7žùxL–ä«é} 5ä–œ'vã¥ó¬·[šõ–Åñ)ij‘*`“è;ñ.6AÛhŽ´I�I2z×B‡U×5ÔMKß5´Ââ„mi}4°:×áÑ%¿Ù0’è�a¶ÈhëžÆA–:hÚØ]w}Ïh”à…ds¾Çê@VL™�&L²CO>;a¯g„ôtŠã¤æËOÀ×ÏŸßÊzËý–<èü?çâüŠL€ÖŠ~M¦5m'ØõŽÝúšÎ®¶[§L1hÛ d‡Mo�}Ë¨˜â]�n¯)Æ)—nLÞyîÝÀ³·oiê=ÛM�k:¤6‘llbÄižJ®®#0ÍSv›5^´ˆ>a¶4]C0�QnIßáÁÁßÀ¶iHè�D´š¶éñ>Ðv±¹âÑ“Ÿ}ú‚ÑÈà¥äÑƒG¬Vž7o_bP,f„ÄF2…Û0	\XqvqÍÓo}ÌÁä”·;ÏòË—üÚ÷>àõrK6¶ô{h…¤.¯£IÖ�Øn÷h#)w
+eéÀ*Š¬`œZL*‹–¯Vma{En³ÑŒ³ëŠ²«i›ŠÓqJZH|cÀtlC ´S6Õž£ùœ¦sl/;ÒÒ,R´tÈÄ“™ŒÍ¦Åä±ÓO“œz„wHQÒ—5ßù•¸wï�ë6�§SÎ~þsîÌwEØÒ´Žßüý¯XÌçLG	�[±^ö\íÎ9>|ˆlïÿÒ¯ðƒ~ÍÓÇw1ó;<ùè;Œ§S¾þâk‚±ôÅ!÷¦’/Î_óâùk¼ÊÈóËåùÈÐ¹9w½‹ô/¨ä˜GO?`ûüsZ§I½çä´5LÍ”ƒ;‡,7‚‰íHœC·-I®èòc>zú„ÃƒCÂè˜Ðk:%$Î1Ï0G÷gõçþÚ_ùDëÈE2:æRß  Ä…¶�(ô0BÃ2<ÞF=!F¿#¦ØÉaDâfÜ#‡¼n5�foö7ù×Ñ´c´$±ÑÜeµü&ã[(ü�¦‘—”ZCšZÒ4#ÍFã1ãÙŒébÁt>'hcok1daÜ<&yûû5þ7!GZÿBÇ€«¸aGY£Hµ&1šDŒ‰Æ:5`B´ÖÞÃÄî$‰ø�›nF�K«Èu2·yàßŒÖÔð÷«I�²i,J[´Í±IF’Y²Ì�%Ib‘!.i�gŠƒÅ‚ùÁ,šµŒ£HFÒÌbe,€R¤t
+ìû¬¥íz4m”€<ÉÈsQBÑ7Ž4±HéÉ´AË•h\¨'ot,¶¢kI� �è„#´;lVÔ”d<GRSw)V'8™âC¼$©áx1&Ï¦4Õžº� B6ø0î$âK¦®��c"q!à‚¦­+DpŒ<ä†a�Ÿ‹¦õÈJâ{H³œ]ÕCˆc)*u�¦Ì'GX�q­
+Žeƒ(_à’jû×íù£æHßwüìG?¾•õÜÿ�ÃƒGË?.XÖmÇ›Ë=&ô¼û8e”ŸTÂ{Oßc^xr½£¯´
+ÔN@–qtPòéWŒ¦Ç(nwM‘:œt¾ç½“&÷£}‡Ò’ U-	åšÞ+„Ê™,SUÄf?é¹x½Gç§zãúÌä5‰lë�{6×=Bœì1"'hÁjY2{0aõå%wf'Ž“t„kl‘²¼.!ÏX•ŽTWtÒ“+‰vc•ájÏã{8:=á‹/^q¶^±÷6×´kG§ Y-yçñ{ìd=F¶çü¼å 5�ŒA{º²æíu… 0�/HôžF¼Ûpr:£ï{”ì·5AJ–û–®Ú0Y‚�ÚRËêÕ5&+8{³Â(‡“’ÝºÇ„”Î8®/[Š¬£Þ·$ùˆf×ÐíöäÙˆi:B¯–|ï[ïqôñÇ\·�ËeÃ—ÏÎ©—oxu¹ÂÇØñ˜^LxuýœòÕž>>âÇŸ�óùëši’1·:5(å¸ÿÑw¡ßðÙÏžÑm·Ôo?gµ¾ä�_ý#Œò‚ï¿û€Ÿþàsž¯ÞRî4U¿gyþœ�?\ð�þñk¾óÝû|õã‚ß7$eCóÙO8xÿ{ÌŒD9�w-ŸþŠÏÎj	ôÏy{±åÕù§%£§1šGw3Ö%ô.Ã7
+}°#
+í’ñäZz*<“¼@ýåÿÕ_ÿ!é{�÷n)ü|¡qq.oô!¿î&,ip8ûX5â+¢ÄW§(ÙÕ(¡‘7E(QàC\À‹àãmÜhÔÍ.b!†Å�R§É²„ÑdÌôà€Ã£c��˜ÄÂ¡t\{ï¿‰|½�‡�ž
+¥ä�ªPF#õp�
+.=do„!ß›áC	1(Ë™µX£ÑZ µø—ÆcJÂ˜¸L76îen<4C‡RKELˆ1Q±&u<ˆµþ¦Û‘BÊ´(·öøhht‚¾mÞ£eì„”Œ E¥ÚxB�ìK�ŠÑÄ`U‚±c”4àÊ$1ÉqxÞÚ °6¥cÈW�(kÂÓõ‚édŒ�Ah´Ð8¡Ióø¼�!U\Ø‹¬`”:æ‹1‡‡äy`»¹b[ÔvÍÁ8GÙaR¶MÃ®ÛPè%6suQ²[¯èÄ(f®¡kJ„’¸ÖÑv§"—Ê˜”‘5ômÇô`JÞxúÄ …"	1©2µ)Z€#bP\ˆH™±qdIŠ±E?2:A¢=2¬	¾G9¨{�·9AXú2°¯þøÿôÏò‡þä¯²îŽyôÁ÷xòÝ_E™„>äBÐ…í+.Rž<y|D[ŒKè6Ü9:ÆesJeY­j&cÅ½»š7o
+6o^cFYvˆ›ß%)ÛºçÎ”MMyÝ’˜�	hv1Ç|t€ÕŽÖ7ø:_S÷>b¼M «JÒ™$ÑŠÄ(2Uà�+·gƒ§óŠ<ß·d#EE"®§ï}.±(Æ#‰Ó%]ñÙTlš©D×°åLï¼ÇêzIívLçwxv}ÁÕnÉÅÛW1Óu¤VÑ†šà‰ïÙg†6(èÓé„ý¦åd:§QžDiººÃ'F‚Œ]åýƒÁµ”&ÁJÁnW1.Øºe5 –Ì˜D;Tëj„’3ÎéÛ=‹<aZX‚sŒN2.¶-»ëšƒ©b³“Ü™æTUË<óèô§wNÙ6%§w�P#Ã�üCFIGÎž¶“œ]^òèá¾þúKVËk>þà>ýg?åÑÇhÞ\qÜ|öú’l:'˜-F|ù£ßæàþM>}ÎÕuË»ßÿW¨7[fjÃÏúŒûOøêGçüñ?þ—«+DzÀ?úçg<|<ÇŽŽYl÷•Q-WtYÇ§_=ã‹‹5§ÇtûŽ3¯×(SòOþÅ9ï}ø1”¬–oyóóÏ8>©9»HÙ�¿aµ]Ñö’½6—8Ñ“çG„ñÕ6¼ùêSÔ_ûëÿÑ'}ßS×5Ma‰Þ{‚qq.ÕÀ�"Y‰~
+ˆ˜-7E!.•cj-Ä,}{ë�;‰X…¼Á@@[1à#>Ä°%?p©âÍ2Žh´¾Q4Y’¼`2›2šŒÑJQU×W+VWKöÛ-mSÉ{zø¸Iº·Ø–˜QaH’¡“�±ÀÄÅû
+©vØ¯#°Z“Xƒ5:îB$·^˜èØVm¢Béˆ`×¥¢ù¦Ò
+)†ŽDHvƒÖ± È!•ï‹ÇMlíÍ4MyåZ‚8]BÆL�Øù©a¤5ìjÌM´®&jªÊ$°RbQÓ	I–ÆB+Á¤&B
+} kš¸ŸšP–hzÒÂb­A‹m}ˆÎa}L{Û»ŒrWºŠ}Ù“ÚŒ£yÎää€e(wmç˜ÍçäEÁ®ÉYž_"Bàøî‚Õõ¥2ŽçêÖÑu:3È. ¼Ç	Æ ä6âîM"ñÚbr‹S
+)
+©„$bi¼ŒíÁB3•šÉÈÒ%ŠI¡9>Ñ7%³ÌS÷i,8‡’sVv¸¾Çt-²?Ã«Œ×—Gwîâ»ž“Ó)GcÃÑã§LòŒçdù”óó
+£¼ vg×kFIF/Fl¯W¬kÏdzB'
+¶í!®¾d1s~µf:¯Ù]ïX–5¡l0ÆóèÑ‚Ã™a³mÙ•–ÉxÌ£{sŽÝ%5ª®Ùljú> d «zFR°¯Ü>Ðx�'¡ë÷1»ÝE,JâôcÛmC¢rtÈºç˜�T›=US‘g$ÍÛ}E¦ÔÒÐ65™i9m#2æk·U]‚ï.˜Îrr«Ð^CÝSõžÜºÐ#Úž¶-Q]CÓ•8ï@æ(×Fß°|³¤ìa:—Î-çgWœo5Á*Ö«%ÂY¬h8�ÅiÂétÂ–’ªn MØ¼]òá½#tR°nöÌÔ.Åµ{|]ó?ºÇG�üWÿßòGÿìŸÅ5;H/^|Æzßrñù—¶ ÏÙWpµYÑn*>ztÌh<âàÎ]–_¿¡ÍgÌÞy�]86=/¾zÅÓ»wæöû¿÷ì’d2åx^0Î®‘ê¿~Áï¿:çgÿô7ùèñœÊ÷œÞ½Ë—o¾ûñ=¾~ÝðþÃS6›kòLƒìWg0½C"Zæ…=zÊGÅ‡’ßÿá�ßKù­]ÃñŒjÓñ«ÿêæíÙsÞ\J¦3Å/?ù.¯^}…ÊÆMFd³æYEßJ‘>®úž¾ua�úKÿá_ý¤°%Î9�y¥Ì­ò'¦”úX\èžF]>Ú:†=ÁMêÜ�ª¢ü—»•pÓé„3DDÌÝF
+„ßØá¸ é�¿�‡•Ã¡+†C[
+ã#B`»Ýpöâk^>Áùë×,/.Ùm¶tm‡2‘e“ä6HIÙÝJG¾”ÕšDÇ¸öBº¡!VI5²1éFÅ…ˆ�5†1iŠ“Ò±p)©†‘š¾Í:rØEøN¤âêX¬õðw¤Œ�ˆD7£¸ØQ1 ?f½Å]NüsQ=6�wÃ0R
+Š€ÆyÇ‰š�1e°©Å¦Ö$6!µ)Ö˜Û ”+%Ž!ë#K£�DÅ,–ÎEFß9²$áäpÎh4#1;ž�¤c•ÐÍñéª}Ëj»åþÃ;Üô“Ü;žq²8åîƒ'äyÊh|@[U”ësî<:b½Û¡Œ¡k{¬6Œò�'(£ÉÒŒ6@’gÑ?³oP*GIK‹'ä)®ìÈóIY2™åÖ ¥d/-‘xÜ÷p2Ÿ¢‹üø¾Ü“HGjR¥lõ)R±ÆŒ§,KÅßþ/þkþáù7øÿè¿aùæ÷»|ðä˜ÓÅ–¦WtÍ“J:Ÿ Í-BX®ê–ƒ"ðà´`·®èú–±Ö[¶û„wÞ—|ö*&Ù=½op• Þ7L&ŽlÜÑõ‚’œ�Õ¬ÎW(8½Å»’ÅAF&F\^UÌ&ETÏµ„`×&³œ¦]º	:hL�˜6°s5‰’$rN2ÊØîw4×ÒÔ�¥‚ ;¼õx1¢QåêŠOQùŒ²ÞaRIðªS€#³-Ëí†>4ž6ì@+\h+ƒ2%�x¡Øy‡
+ÐIÓñ<p¹î¢ÆÅ+ëëGì/×Ôµc”�ÈƒçÕåšíŠÄLlÏÉé]$�²Þq &ŒÆc6Mƒn2•
+Ã¾
+ˆ¦!-hÛ-wïÐ†)ëÒÓÊ”‹ç?£•’7ç¤“Ûë="Ë°©¦u=›ÕžYf�£œ·××˜bÂ$±o÷<ûÉ§¬Ï_óÝ‡ˆõ–äð.Ÿ¾|ËÝ�>B¯¯Øõ’ýúš“Ã9y¡pjÇ6UœLÆèÄ²'…í3öâ¹®q2…«—ÔW[Æ§Šåë–Äµ˜4¡¹¸föÑ/‘Œ30#\µ§sž�î’´	¿r‚q;"Eéñ‰å¿û'¯8Y®Ê5o÷-?ýìrc©ZGÕÀ¾‚ùûßçìÍ9IXêkžW)êÏýÕï“8ºòQ�¤eÌµH2¬²ƒL5ú=¢êJ D„Í!åàép×:ƒW#ÈÉ€9ò nö&�a÷t,\±‚ÝHaEÌ§".{•hM4ðÉo¢`•ô]ËõjÉë/yûò5×WWì6Ê²Ä9G’$Œ¦Óa7òÍhè›=ƒ%M,©•çàax7Kv¡nŠÂ`>þ\Ì'�*­ £‡Dh•¿ þR·J´¸Ð�cA†¼s„ˆˆ‰ÅCÝ4©¸;C”ìÍa»“XlnÆ`BÞ,²Õí8NfÍ¶tNÐCªŸFz7žƒöV‰¦†q–5
+k‰±Ø4%Ë2’$½¥ˆØ‘Ç�.PÞ“Ø„ãã#t^ eÏ4�*«ºŽ�ÉÞÁrµ$O3´T$F£uÂn¿¦ëKz•1Ê3¬é‘JÐûl j
+m0‰Aj‹W‘Õ…„›žØf9}@iÒ‘$Ï3Š$Ù³Ùµ´Ýo6(tŸggR¸8¦ÕdÏêÕ3f…Äªž\hœÓ&3¤™€ë4ûÞàBÉÿùÿð¿c»^á�c»ºäóý'�>âýw¿M[5”UÍ½ÅˆZîñÁbòŽÍå†Ö•l½â|Y£SC[–”åš³ËŽŽÁµŠ¦n¹¾t¤:F&t½ßaU‚ki{‰NSNæ“ŽYÕ9ÒöÛÓLSLGd‰çþ]Ë¯JÆ¾gûjOY
+Î·›zKÝö$IÜéå™ í=½îHÉÅU»ò¾#‘)�nŒß^b“– ×ëŠY»æ½ÓÇ¼ûK1�$Ô>asµÆíwlñ#‘" IP"�“éB9„#¢†DOÛKÖÍ>z]ú�ájÙâ¥ÅXÏjÕÑ{M^v›–Ã»ôæœÚ´NM%e+°ô<<˜ÐÅ—Ÿ½d|úé$N6,W[&£ÏÛm�P=×{AÓ:Êú’Ýù:Ü›LAt4mG¿OHÁõºFh�ktê#”±ÕxØ¯A)Ç¾­hª×æwdíž7›
+ŸŸmÑ¡â�÷žàû%ï<ý?ÿôÖ1M©›×4BóÎ£#¬JØ6–~¿Áç9¯>ûó£GôÒÀnÏøá»$õŽÝÎqüá»øÝsŒœ ß|ÎZÂ^gøtBšBžâÓœÍ~Í—Ï—œœÎ1±�çÍÙélÆýÅ1³YÏõ®â?~Áj[¡U q
+«õÇÙˆµÍÉE�úóõ¯|r³\Vƒœ5¦)VéŠàˆ�óRDDy)B ‚'Dðp¸©]îpCP(á¦&Ä.%v!~ð�„ëc÷Ý äMWO	#°öf1/ÐÃ¡P7
+ûÍŽr·¥­ë¡°Œ1Œ§Sf‡‡ã"š
+�–õšÄD´øÍÇÍM^i{JÉÛýIyE³áÍ.aƒaXø‹›"£„Œò&iP†Ž?/1Üð•’X}È¤3b<ÌãNä&[|ÈQq·d†…½Vq—£´Æf
+)b§×u�º�™>¨!ÙLáo
+¶ŒÿŸö27]‡’òVÎl�Å&IÄ¸[3t>ÃXPêØ±j�M,išb¬Žît­ÑvÀÍ iêšº«±V“d1zx¿ßÒ¶{¼0èbŠ
+5}Û�398"K
+–Ë=¡ë‘R&µ–<eë0Z“d	‰Éh»ž‡o:œ2d#M[5„ÎQŒšN¡„ÁLœ±Ô¤Y¹I�£ozòQA_WŒò“ÄÓÛœ�£úUo9¿¼¦m6lvkŒ–t»s¾üô³á’ån‹1–?ýoþ¾ºbS[’iBu­ÙWK..Rí°V’HÉŒåÅsöÕa4‚Œº(�°Y*tðŒ'	mÙQä-mgÙ­:êJ!ó1§ó’]™¸V�[EÕ
+êßGwï×¬¯-©2ˆlÎ£žÙè‡%7=eÓ³«“©Ä«¨ðëhi‡÷éÁè„}ßR·Vk¬Ê	aKnG(“a³‚—_~_»sÞT#æÓCŠÙŒÏ?Ç!çãFt�'hA'¡Ha
+$
+¼'k”TÛ–à%E’RŒ5}Û!UJ–@Ó�b¤¨öŽãÓcF¢äÜ	ÖW;Š±äâå&y¤Q8EÓn±™Ã¦šÝÖñå³·,´$¤	u_“�
+ûª§ÈRÔ8C¸@P‚ÒyVç
+ã™¤í©âüº&(I–å$fÆ>”Ø4G†–¶ª1£	GË8K)š#*öµgå5s&óvVðéoxÿã�ùðÉ‚¯>ÿœçç[‚ìv€X1žåôaÄ|qÂf¹eýæ3||—¼È]IŸ"ê—üü_Ò4Ši¡ð]‹-gÏ.±'sì4çÍ¾çúê’³//øµ?ö}Î+Ç«·o8žž2�Ø—oI­fÿö’�·Ìf#’@';ªý¡4Ì¬§%a¢ZÔoüµ¿ò‰”*JfÅ”Ñ«#yUà	¾2Îã%/ø˜®FH¼ƒ¤7†Ú
+£+)†Å{ÌË‹7unÇ=q}#à�Æ1Nõ¦8Ü°
+£Å…Øœ(-‡Žá–÷BÝÜ¼5zØi¤YF6*˜ÌgÌ��™�æyTFéHÐÍ¬nØq”¥´EiYOÃÞáÃíÿ¦cð"jÆ=ñW¥ã×¿9à‘|ã!ññp¹ÁÊ‹aI»‰’Q‰fÍ7c2©uÜŸhsÛ�(ÇVöF:¬åÐÝt.êKÓ9G×º¼W‘8&
+º�õ·ê/»2kb`!vúF=¦ÚÜä»ê2QóÚ¦“FU\’‘e)f±2Ãc!vpÆÆÏ—ØˆY�x‡÷=Â·¤IJš�°iÌ?qM‹±)uÕPµç;`È¾ œÇ¨(Lbã~G@’§$Öà� uïz´5Œ²”}+©÷-AùÃŠI1%„žÚ9\Wr'‘�Ž£9eýF®©¹ÞmQºd–¦‡÷À§|ÿ~‡ñ|Î�þÅï¼cº¸Ã/ÿ‘?Ê·¾ûˆÏŸ]sµÙ±)ûr�µD…UšL§ŒçwM&3×‡#Í½Ó»L¦	}Wñä©$Ï=»eÃl.‘|[ FEÉ_¿¥Üì)[Åâ°¢Õ3.¾¾d¤ã­Ø•{»`~ (kåµ>ãø@0?¾ƒ°„Š,	hS*;ßƒŒù2bË
+;BXCÛõ(ÝÒMÕw4e‰7)ÛªDM¹Þ”ìÊsÖ×çt;¾ûë¾øzcœ “-ÓL“Êžº8U³‡Ú!ƒ#Ë5Zy:	ÛeÅd^V«=i"¸^3Ð<©†lšryíI•a×¬X7†BŽ˜�œ úÕylÒ¢T�pí¶P$$LŽsšFÒÔ
+fßr²˜Rµ5Z§ìvNô8h:AUÖŒ)BIî�ùêÕŽ"(Ñ"uO×*�-ÚŽ©^|Í‡¿üÊN)¦Žúò
+{ë²åW¾û¦P,——,¯zòÃ?ýg?Ä'
+›¼8ÛÒU1 ÞíY,<ûeÏé�gOÙl¯øâÅšWo—t]‡€í¹{wŠß,ÉF‡¼¹®Yï6©8:9æÓÎÕª¥ì<G§wøòÙz¥i7+Þ=¹Ï‡ßùe>ÿíP…€ª[Vu�N,—ç;NîÌ©»’eÝÑ·Ž/ß,Q¿ñWþ½OâÒ;¶’Jú_8¸=ÁûUâqý
+²¤£ë{|ð€'ˆ›QTch‹ ‚Ç(A¢ÄàyC¡Ìp"Ê~%ƒbKË¨jº‰PQšñãÃ^bøZBÈ(iÕvHŒdÚñxÌÁÑœƒãf‡ÌŽŽ˜.b<¬Mb�4†ÌDµ�–ñÆ-MŠNR¬MP*&
+@Š(!†õ ìŠj¨(höÄ8X3xGÌm¡ÑRGÀ QX TTY�ÿ~!ÆE·µ±hHmQ:AÙø=ª!jW˜ú'«nc¿8&‹dä@ÓE0ÜÍáš$cb×†îãÓ/£›<Ib~:ÄÒh…2q'Çn±C4VD”»5%Ÿd$6�õA®TUJÉÅÁGTMôØØ8³†<O‡ÂŸØö$Š
+¤F�÷Ž²ÞÓ;‡Ñ³¤u|}˜$‰‹~­AÆU‰ÔD5!›¤´½$H�n;2
+z”:è»“(š¾euY2^dLlÎÁñ]F³1W»-Ífƒt)®u$¶áÁ½÷Ù49‡‡vv—·»œ¿ýKü�þ­?ÇâÁSî=ývrÌr¨„@©„ëë5û²år½‰±¶¢¥jjÊº¤*/Y¾}Åêºáùë+œ0Œ�æÌ‹%oXï5Ëõ5Á	„Í±IG·$i¡§
+†P6ìvÑÀÙU;¼kH“œ’–]è÷žvä‰æðÀ0šVÔ»m�‘g#º¦¥ëjŠ,1é!ÇKç÷(•\ —FöH²H¥–BÇ,™Ð’rUïyøÎ‡¼ùô5ëÖq2ÇÎJŽ ­P!EbhD‹NG6£ÚîVSU
+‰Õh«X.[¶›@–‚Wc¦3‰÷†b¬	¾gV¤Tµ#M‹ñÂ5›�çáÁ”³³+ŒP<zðˆ]}F×÷$Dr@'JªmIas‹ŒÙ�wyùâ%Ê‚ÎSÒtºA§
+:‘lW
+³dA’õ$#Íîm‡ð#6Wkœ,x}µc>h?¥­.	u@Ò‘Ž(¯ö=x—^æ¨{Ñb™Œ9»çÙ§/¸l-õõ[ŽŽ×q÷£ï±8¹ËÓûS|Xóê|Éêºb½Û±k+lþˆ4NN¤ðdvÄl|Œ
+�ÙÁ‚qªèì]|¹£«6Ô­cS¤Fa‹‚_ÿ•'|õÅsòÅ!ç¯ßðøhÄøöûœ÷�Ð>}óšñä€§ïžb”T¸Ú�ž¾ÃëW/¨ú
+Ç‹9ê/üå÷†n�ñßƒ�óoGÌùpô>�Îù¡€„ánñ#Ã…{@’xŒŒD^;HVµ"þ»ºÉóŽq±z0ÝÅñ�FËôÎ:Çí>Ââ-*ÂIb· ëÈ²„Ù|ÂáÁœÙbF>c’¥ô7Þ‹“àÀÂR&!I3Ò<�îç è»�ˆ7lc‡‘Ð�—dØy„ƒj+±2ŒÃán­!µ	‰µXiPƒëÝ˜X „”±Hã£aS
+ÈF¯GdRÙ‘4cK†X|õ7òãXÐ¢^ˆXÐzèœˆËri16!ÍR²,Á&vèhô7�ÑI÷)æÙ¯TŒ•56¹]èGò}¸%1Ë[Ó£T^ÆrC2ã0údHKÔFÝvTIbn»?m’¸KÓAö,Áyº¶¥¬*š¦‰Š=c†V|N¥ˆÛØ‰�‘Ò$‰¹Ý;åYSëT“@š'(1˜>ûÀtž1OS]×›f…Þ½&Iè†üÎ#fÙÞ^œÓw-—çŸ±yó[To¿¦«=ÃfÝ#ì�ê³Â�ª€
+ï†„Q&ÉG)ÁõÐwøºa¦`4ƒ}ÝP»À$¹CRtÔ•drô�·/¾¦ÈÚXvBÐ5�%)…ÎÈÓŒñ<eWK²ñiÖ} H“\ÑêÝ¾fÝvÈÐ²\Ž˜MjÎ_Td™âƒ÷HF§ì¯J\Pxp]CS—œ©‚îè»–^Kú”Hñ´X™#D�,z6KF÷NyttÀz¿åË·]ScŠ«*Z!i‡¤¿}½%˜•€ïH�Q	ÛuKÝz´ÒŒC³T»†<ñhk¹¸¬"“íPqqÑÓ×�ÉH …±š§Og¼ÜmùÑ¾@§‚ñ,eßT¿¡ôPV«R’õå×8È’ã‰ˆÞ6^=oXÌ
+* Â;&#ËÅjÇ®n™(ªJPía:ÊÐjLßîxòpÂõUÅÉ=Åé�¡gÄÅWÿ¥¤eÇâá	avÄùÙ’ÃÙ”'�Ÿp~ùŠÅTr˜TÔõ–ÓßæÉÃ˜OfüìÓç¤É˜¯ß|ÅrsE½­8<¼Ãá¡¥U0Ï×´uÁ¦µ\}ñ3|{„WOi›-ï¼û˜$Ù²¿¼¦î˜šñì”Ÿ|þ|ñìŒåÅ†ÿüsßÉÉ§†Ð:®]Gµ.iN@ñòë¯ùîãGè}`u½Bý…¿òŸÄéü°âŒ€>Ö‘[/F\h‰ƒ>ÜºÌå0¢‘RÊ«øÙœ8o¶VÝ.ñÍ¬µ¾J¡"CbÞHZ’¢"«u�npŠA&nÈ¾Dÿ‰ñIw! ¤$I,E‘‘eEÝ¶ÔU�kÛx`Š&lˆat£•è»Ž¾ë"wp›GoƒtWÝ:è¥$IÌ0±F‡n”úfIJªmL«# U¸o	Á€Í�‡qTƒÅÃZ‹TvÀ•D­BŸä°,—2E}3^‹ª8ç|,¸Ò¢lŽMRÒ4!K’$E	Ä�Gìšâ8Lª›.I¢¤"h“!˜É „ŽYçJÅP0eÂB�U7ÀÌÁÑ¯µ@k=ìÆBšXlt,,Èèk^DÃxËblJ’fh� ‚ xO×µƒR°�ŒÖ$&J©õÐ‰Y›bÓ„ÜFŽ“Q£I’�¥–<Ë(ŠœÂJ¦¹`R@Õ•ß¡|MžzRUa­Cêž~ÿŠ~ÿ¸kT¿Âw_Sžý6»«%¡þ·û|½B±"7gT«š¼8BË«g¿O×;Ú®%äù”}ÙSµ³ñ„Ü&Ô]	º êÖ„¸PRv‚B6ë
+o×;d³‹B“Î£“„Ö[´dù™Ï îèê–¶Ù3šx�Z^|µÅ¦ÇG=gKÉåÙž·——,¯®øÎwçüþïoHÒž$—Ý1{£j¤®0£crjöMMÛkÞœ—,/;æó–>8ÚV �C%
+›{úÎ`„#V[Ò¢ãéã1¯_œñúÍz4&“ŠYQ ´¢ê@É@ã<ÆœøVÒU=i¦$N��ƒiÆùUE¹Ýqt2b4Ñø†ª
+L&m]“Ú”®kI2Ð
+tbI
+ÐÒrTdœm+Ú­#Ï&\¯·äÓœ×/vŒ4Ê;�-kŸ éèE´(j¼ç%''šP&ì›=M	¡õÓ£a]J\#P²‰qº¦(Ú,¨ÝšQq—Åá‚7¯Wl¯×£	Wî½{Àæ¢äç/^óöõä�þ:ÿðoý~ùOÿ’rÍ¦mèkKkÇ¤
+dÒÒlWŒÓ„ë­Ãu5uÇùy‹ë–ã	‰­°fÊéÃû”MÍùåKÞ{ÿˆùxFj:�ó{ÿìw8=™óôÁ”$³üð³-ó‚t¤0»}š3—’ïü¡?Å«—/g’'wî±{É�•”jD±8ÄäõçÿÊ_úd8™oÍrÑ87°¬‚v¬ò6$127ãŒaTs3ï2vÎ£„ÄK]´EhR
+®î9ƒ±PÊ0ÌãÕ`8Œ3úàbp~¸ýÆÙ|\¤äà0‚‚�{-±:v1û]ÉåÛ.ÎÎX]^±ßíhÛdÌo¿õ¨¼ëãaÕ4t}KïÝ­©RÜîˆåÑ•¯UÌäÖæ›E·¸�üâüÍGÞ€}Ü
+]�6cR”Œ&8%ã~J
+?›[W½Œƒ˜‚¶‡ªõô^¡MŽ±Y|nŒ"3k¤Ò8¸´ŠÆÌ4‰_'þ(£’Ì¦)6�R]!ô­Lš8VŠEÍ€ˆø�0 ^„Š¨q‡6øinPüÚÈoCñÄ½PÜa
+#,£sã!DF˜s¨�Z�%–4µÃ>&zW2kc(™&âp4Zô(,UäOµ[è×H¿C‡5:¬Ða…l_šg…k”¸@„K¤Ø�e²ñ&Ù‘�*FÓ5¦hQ¦Æè+Þ<[ò[¿ù›ü“ÿ÷ßæ÷ÿñßå§¿ó��^3;>ÄGUz”õä… $y óñµ‚Dâ‘"�$ã±ââ|…ð–ÐµŒ'	:Utm�p
+®®©Dƒð‚]YQµqÏ¼¥«{êvKU—´Û=Ç‹‚gŽ²÷¼¾lùúMËO~¾¥Ü­x}VQ73ŽŠ×TúˆÉü]³AEçjªÚp:±Ù×\-õ¶c¹RŒÇ’ÄôxÑàCÊj]QmSfãŒt<áptÈöí[¾^×ÌÆ92!1m?DPãnG±®HE.×ËŠq‘¼§'lw%—Ž¦•Læ’ld‘Ú1Ë5ùHÒ!I¥¢í]WQPðøaÊõN‘ŠTg¼¼¸bq<"ôž0+ÂÑV‚«ÕŽãûMYÓ÷+4Ò;œ’ ZD/é�q~¶B†&îùPô®'[šÖ³¼Üa3C¿­Èó9éhÂááœÎ	ªZsxèÐÒñòÜ±¼¼æ[OŽ±yN–;v_½`ôø=šýå5íËŸñ÷~ç3.Ï.p~ËuÙðtªHªŽÑÉ	Ÿÿð£ù˜³]Ïõ¾Çu§LrÇ^äø}Çlv/fxöö
+WV¼ó½_f>MøâÕ’'Róìü’GOr’f¼Y¯5¼ótÊù—?çÞÓ_fS^R:ƒWuÇÛË
+wŽ
+Žï¢þÜ¿ÿï~2XÒ†"ã(?ü~OõÞÓ¹(å½‘yÞ¸ºoF!7ãç|Ôœ?Œ:nFçÁ9‡ë{‚‹i‡qˆoaò–Ž�ç]ï‡Ž&.ßÕàÕŽž�”;,©eLßC
+š¦áüõ_}þÏ¿ø’³—/Y^\°ßíñ>D3bYDÀ{Gß÷q×ã]leCÀ^Ã�®Jp”Kõ�÷Fþ+ïHeó1(›ƒ¨€Á49¥£øàF®«„@K�qU#q–C˜—Š¯óÐyh:èZ‰÷ÃA¬¡`Q­5ŒÎ·Hs³G
+„‰ÑµÆÝ�E)‹ö>‘þ7,ë•ù…G\Ê¯
+�Š/‚‹�£ÖÑe¯t@©€p1jP½I5(ðÔ€{Ñ*8ETú…qÁwÑ<iÆÔ@P8-*TH_"B~~‹è¯¡_"Ýú+Bþ
+Vh¹FË-Fï0zƒÖ;´­H’
+kKLÒ¡“c;¤vÃ¸±
+šˆ
+„Ž¶iøùÊúzGßGÕÄÅ›ç„ yôÞûL¦I¼ôô/Aô
+…ÃGîfDâ2¤ôm‡oØº nwLg‹ñˆŽe-ÍÎÓ…Ž`2Žc€Ôb.)Ë5›²%—š�Û2+&ì®Ûn¥mÕ#€,dÖ ­c½^sx`pM�ÛÆLïéÈ UŠÍ@kCÛ9ö•#K5“Iä×õ­£(Û®éXd}Äÿ7
+RwÔ½Ñqq¶g2…Æ{ê®Cv5*Ëñ]T�ŠAF\Aâ¼gß8´1¨B#º€Ñ"�f†ýuIb2¤‰t^A”>›ÄR7-ûºEHK¡ç×5Õž"ÏØí*F…Åu‘001	Å¬ Ü¶hmÙík*¢¬Ð€Ê4M£±Áu5U¯2AKIY5tMÇô°@y…Sz¤4´uÉjÓ1]œàêk¤hâ¸=LxöÅ|çÑœGßú—/~ÎéñFFÐ?ÿ	¯¿<g4? 
+©ÑüäÕŽ|2æëÏ_1/rþèGOPûã'wÙ¼¾àñ‡9?[rqqÎ“Gwh(Ñ²\½`ThvµFÏh2%‘‚ 6¬¯é,G!øñgçÜ½g¸ÿè!gë=mŸ’Í³ç_’[Í«OŸq|x„”çkÖ×=_=ÿMˆžb{Š¾¿¡–ÄƒÙ\ð4ÎQõ=ÎÇÛubZ­·�jŸà`Ü�8\çhDy©¾ö!‚ïúYCtlDùJá|Iü‘ÞnV¸õŠDS¶|ˆQ¹%Œ&„èÐv½§l:®×;®.®¸<;c¿Ù"”d{½¦ë:L’2šLH²éb$oÄùg€ƒÎß”9•kÂJº�žëBT’á³�#6)|,.!�ÿÇ<7;�0ìšÂà�Rd@j‹‰‡(•¾A¼p}À÷ Pè-«•BÊxøÅ¥±£T’[ÏA �ˆ$RÏm1â‚©p7ŽQˆ(1t?ÃSsWb'(‚zÂ°åúFo'>æÌ¨!€* ‰Šk�=Á•¸ÖÑÑ"¥À{‡ï;DhQ4ÈP|‡ë#–aGp8_B¾Á‡|G ‹�W¢¿†Ä!T‡V\ìe@�Ö~øÞÆ‹ƒM6|C\ˆ]º¼ùÝð¿e÷<}ï�º
+è7›¸àÍ'tmMWÕèi>âïƒèÁ
+{@¥aðc	A¨ž>8B+1‰¢SîÏyö¬æúí’�?^�$1Â¸ª�SôÞsºh¹¸¨)……Ð±,¤HY—%�Ñ¨Þ1N}Ö³­M)€–ÔÇqãïþ ááÉc;´N9=î¸sÏžK–ÝŽÑXÑ4Š¦pÐÄSŒ–”M`_Œ•1‚ý!E¢˜ß•T-hÐÔ¨ÀÑá]À�’Ñ™lÉ¸ÞïÉ|,0¹fµÜád6¥ß×$&ãõ& u•'‘1gEŒ¾­(ŠT±\µYÂ¯>ÕüÖ‹†7›žÙì€6lÁ{œ�ì}…è2%Ñ#ƒÍN�±¯¯©®{²LS•-ÊŠBpö¦ääh„Q€I½ÃË>Ã‰Åwžrçxx_ÑÖ¯	"Z¦³—üÞoï°½Ã÷†ëë
+ùâ„ëõE�=>åžº&íÖlÂW�1mV}ÊwOs¾ûàˆmµ£tå²äôÁ]îÞ{ÄÜ¤|õì‚‹ÕŠýìˆšq–ðæÍ†‡÷ŽÐ:Ð7¥{’lŒQÊæ|û» ìhÝŒ7¯÷ÜI–å’¶—¼©K:QspwÌëõš¾XéxútÂÅ—ê/üÕßøDÜV‹›·¸üµ~Lô´ÎÑÜ¦
+2Œs†1ŒsñðTqX¢(ÁàÒt½§ï]ì>œ§÷ñã¦qœÃþÄÓûØ8?˜Õ…n¾ �
+Ï0²>"°P#Qx¨«–ÍvÃz¹b¿ÝÐ6
+}ßGÎ—µLçf‡$YÝòŠ¾1“ä†û5ðYn·E!Üø;Ä°Ä½qáÛ¤A-ÑÉo¤
+xneÏ1?ÃŽõÁ[ÂÍÍv(BJ¦N…ð’àn åVM ®ug¶RD†“7�ÃhÒ‡¡À‡a¼¤ÂüîEÞ©¾Y¨ß|ï‚A	vkfT¸9Œ ´¾ÁÛÇ1Ä�×E)‰ˆðîk©óà{D¨Á×Wáº®ÝÐVKÚúŠ®YÑ7+úv…ï–w
+~…ð+pW–à.áá/ñ~	a¬�¬Qr‹V%JWhS£UƒÒ-ZwHÕ#µGi�V¡†Nø¦iæ¦ˆ|s±âF,Â`òÄBF1€IFØdB>Z0=¼ÃÉÝw˜‘£(�¸½ÈHB( ¡ÇÝ¾û±…lv{<‚ùbÌÅù–g¯7 *L*HÓŠPÁ›‹šÕ¾E™Œ"á[Xï;¼N°! CƒxU°¼Þ’åŠQn±Z°o:Œ\ï6„ÞSyÉdv—ÔÔÜ¹èËz°JÐuŽ]Õàš
+-¼JèÚŠãc‹ÑzH›á-=5–N
+¼�g�1=ÒçHiŒ'P®GMè%V§”M…÷žn‘9ÂÇ	F'JØï<ùz¡¸|±ÆN3DÛ3žf¼~½âø8á)FïfìêšUXŸï˜‹Í¢–ˆ ‘~'-‹”íÕŽ.HöÛ@2ŠFNcR¡eEž"”ÂùŽ®i™N&ÔMÜŸî.–¼ÿÞd>ãÞÝšÝ»=`&¼}õŒÇ~€o=/>û•*ž¾s�6?äÙ«¯YÓyÇ«³·¼ØôMßÿðc2S’�Fã	ÿÝ�Ÿ³ë[ÞM¹º¬8:]ÐVwï¥¼z±$Q.H&G9Ÿ?;§«Îw¾n9|ò.§öŠ 4nß!&#”È0‹)]Yñ½G‡ìQ|ýê
+|†%`ŒdWöôBáW{O¦¨ßø~ãqûV¿€-‡ }•`p�wƒUCËý‡m­DÜ€ÕŠÔ¨ø"Ñ\§†Q©˜3BÃ(*Ü~¸àÁ\8¤šx0i=ìA†;î�‰-ª¬âîÃ»è]‰óx9À
+#Ò$+
+&‹æÇÇÌI³,ª…†Çà}ü~”üÆm~ÃxŒ¨úóÀÇ’7(°W3êã>øRŒ‰^†Ñ”¾ušG¶5Ìh‡ÎF	IügØ
+ˆhRÄÇ�¾ó4Ô-Ôu nmÁ}£“Z#u‚�ú¶ScåøA�±+âÆ§#AÞ*¬ô0Fãö2!hŸ[£†1ž3A„–òF;ˆ˜ƒ¢ét±;ð¾«é»Š¾ÝÒ·k|·¦o¯é›kúfI×\ÐUtÍ%®»Àc'!VHy�’k´ˆ¿Æ±C«=J–HU¡dƒR
+ÚthãP: •G*‡Ô!=ò:�[­ˆ·`P)¾¹00ŒJãõ›1+ƒ
+Nª¡x&–,›0šž0YÜe4?%Ÿ’�FØ$E+yó¸pßšÝ˜WCðqt7Œk¡Â°5ƒÞ58ß‘XMßÃz]Rîë}Oi5ëÍ–ëÍžÆ÷Øu-éàÉ*	Ôû’$³t�ÀX�Ô0ÎÆ˜Ì¡¥¦j[¦yÂÙùE2çâbÇb4¢)’Q`¹êX¤-wNï“+‰	=�‘®9}0æó+Åä;š`*G"J•JM@{„÷„�±^o�F![G1¬·[¶ÛŽ|”±¯:êuÅáÑ!Jô$fÊ¶Ü3kFÓ”ÔH„d“í=Ö*ÊÍ
+›%$�‘
+ï¡í'“‚ª¬ùú²bžŒÉ�§=JƒJ-Å¨ÀêŒý¶Eš¥`4I¹|¾f|�àBì‹�ÑZ
+ÂS_×ŸÐÑ …¤iRK|¹åƒ÷>¦.{ö»ŽÙ¬ãg?ù	óÙ}L{…YÜav°Æ‰VçkîMsŽî?áü7ÿ€§ßú�«ë–çg|û�÷PRð“¯.¹ÜmÉEÍ½Å1}°\_ï™Þ}À‹WÏpIÎ³¯¾â[÷Þã`bÐ¢¡)�¿6£¿<#·†³×ÏØô‚«Í«&˜¤#O×¤]Áâá¾zñ†.tØ<gµÜpï`ŠëzF<8™Q{Gë%ê/ýÿþ'ñ�!¿y1Ë_hHXV·í<%I•‹QÜJ:Þ”!šõ¬ÏtyôˆØ�á¤–ÔMUœÓ~p«ßÌÆÅ`TByçâvïóf–2v(1DÙÆÇk­f4.˜-fÌ˜0;<d~tÌdq@>‘Øˆ~Gˆ!Å�[3¤”bo�›Ý…ç¶ ŠýÒðó±ƒ™1ÞÄ
+Ö˜AÉ%¢ïd0A=‰Õ$ZÅŸ‹Øás˜›0«—ïúè*oz"cÉÉ˜þHh-0*þ*•ec!ê¶û!Äçi(±@úay˜¤Š»©†ç4þ7-#L2îR"fß‹8¬r!D”‚+Ñ"i¾!øïK¼Ûâ»5]sM×,éš+úz‰k—x?‚¿¿$ø%Á¯a…qG!Å!¢‰O©£k´nÐºEé5tJÅnBª€ÖñCÊóæ
+š-¾6¸é(Äð3¹ÙkÝŠ<Ä­4x˜8Þî§n¼3ßÈ™Å€ÛQ$IJ’NH²9ÂŒ	èÛ×Èÿ¿Ðµ<Âm‘÷7"
+žqŸ;ü›îVÞÒ¥5‰MãÒ=KI’„¶‹aeZ‹øÞ3Œ%$Q–îD”„¡¾§mÁÈ@Yw¬7J÷ã”ªÛ°8<fùõæÇ�Ùï÷äÅOvômÆÅ.�N[Ú:ÒVÒtš'ïd¸Ò0Í¢’ÑªŠ<Ùbóa¹Z­¹Ül˜�
+0†}uÅXŒx%èj‡-,Å(%Õ9')×Ûž‹«
+³M–tØ‘¥.{–ë
+™hBWc´'[¼ôô-ØQB_jÒ< ñ$jBß9îx<¯–W;&0F‡=�±ì®KZZšÚ‘&†])PÖ±8NHHu%�¾%Òj:"{ÍÐ£�§È5ÕÎñèÎ]r-0G‡tû=‰Ù3�Zœ½ÇÉã¡û/N9{ö5üÚ¿Âßû»ÿ5ãÙ‚Ão}‡‹mÍº<ÇzO&
+ïÜ™ð»Ï^sob¸;»ƒh®	ÚóÅ«»íŠÅÉ{|ý“Oyïð€Ÿ<û=¶Ì§	ó;OiW[~øû?ã�î ×ï>|ÀÙ³s^®ö|úâÒÏ!%dõ5¾mÈ…æp:æ�»s¾8?ƒ²æÛ¾Ï?üÝÏH¦9'óõÿÚ_þä7Eà¶�¾½ Å7ÝpÐhùÍá/åðÂ¾¹AÉ›
+|œï[£É“d0¥Å7ˆ’ Å7.õè…'ü0ÜdÂ.òÚaô"¹�×½Ég¿‰à½e…ü‚Û=Ü¾CÌý.rfÓ)‹ƒC¦‹Ål†ÍóH™
+Ãüýf3ü,â’72¯n$Ê··ûa7p2TGVG/H’ØhœãjðNh÷ññ**FÄ”B=-�#¢bI
+c@'hºØm4�Ä¹Xø•Œ_71‚ÔÆR£c‡#”‰‘ ðhØM‡�ÄçFÝ`VTôŠÄïŒŠÅC
+7î¸óñ±uw
+Î58Wáû¡ßÝÄŠ®½Š…¢9§k.pí%®¿Äw—„~5Œ™®‘rƒT;”Ú#å)÷Y¡TƒÒZuÙ#d‡T¥¢jO©(�–ÂGß�c`tE¹±ø¦0Å"’¥o¨ÐÜ¾vº€pOÿÂPtÄ/\VšóÍkBpË8SƒÖ *Š4»]Çj¹f}½¢.w8ç¾!=ÓŠDÊµôÎ*ÆØ]Kä°“·»¹ˆ5(>P­¢GÇyC�Uìp%Jƒ:~ß7¬4ki*"æ=³ÑØª
+Êr
+2¡sà¼e>/iê	ÓÜâB‡»Ø‘†&œÍé¼}ciôž®÷Ñ!|‹@ EGP)�wŽ%ußtKžHÚ^bZMo2…‹¯qpQ8¡Çwº
+HûuËòÒsï�¡­i2ãòª§k£qT¹õ5íX^U$V¡û
+ŸÂØL9™Aa=/.×$3Gh‡ý˜˜`SIç!(ÇêR“&†³«šÄÚºçzë9È%ce�"ãr»£j³œ6P®Ð©%?˜à{A>™ðãþ[\µ÷™Ù+ÒÉ)Mµáþéˆ�ßÌõÿøñGÿµ�·¯—ˆàyôð€Ï>{F2�c0¬Ì�˜ª„‰5ìÌ’íÖ°ÛV|ïý'h¸*÷Ôÿ?Öþ¬I–,9Ä>ÕsÌÜ=–q·Ì›•[U…�hzfš=-Ó¤�C¡ðP(ä)|˜ßÑ?ˆ/á_zD†dgØÃLO£4PKV®w‹ÝÝÍÎQåƒêYÌ#"3‹dBYy—w7³£ªŸ~Ë0cœaˆØ­ŸàæÍ%Öç'ˆz�a³ÁMðöî—ûk<ÿüò—˜¾û¯¿ÿwsF\oðìç_àøÃW¸½¾Àõ�à‹/þÓ*àýíÏ^}„_œ�Bó"š¹xõ0¬³Û!\pÒàp“ÃØNAU×„Ø"U|jÐÔ@¦µØåŒy6ÖG,ÅÃ-MÄÁ©6ñbs„ý,_ö*ÁŽöà›	NƒµÂe„��)Å"1T£&›5Ž�O°99Æpq‰o¿ûo¾‹ýÝÃqv~†ógOq|zêz‰hÔåR£Ü(’�S�G¶€¢bø8˜0+Li®~ØAaKcÍêï%ÙïCœ²‹
+—•ÃkN†%ƒ‚å{)_ølÙ1X×mÝt€†áÁ~¦x”pÎ`"S£ÇÁ	"Ù)Áí —P1{ÕPAÎÉ¬&4Cu†Ê„,{ˆLP5x*ë‰&0M`�LfÌ`N`šh†Ä\¡š2—Ëí±¾~(WkËk³C~èCKƒá3ƒj¥Nr|ÎÞyhYj€ÑÛ}VV{¡H�@þ÷KÕ!ß½UÄ«L3¬PÌˆÃ-3¶W[|÷›·x÷þãê/>ú?ûôðüƒ�±99­iv—fc)›ël……9kUÖW¿Q‡R1‹}Žïc¼ hÙ¥ˆBœ(b¾:ä…8Ø3%	»;Áje{
+¦€™,þx›æÛ�$ìwÇ8:™ 9ál}Œ›—Àv"LiÂ~{ãÒKœ‚ c7+îTh�;Ý!¦KŒ«»½b5n@ÓˆýÝ{G¤8`=ÌH|è’¤nnÛÝÃj…ñ”‘v	G'•^¼3#Ø­LØ¬Ç§#æ”±K‚ÝåO_œâüå€ý]‚²=Ó»é5ž¯ð?úâ(ø‡×Š=.ÀÊ€0Vr‡“õ9Þ]½Å§/€a8Åt¶GNŠaÍà­âÝå
+>þøŸ˜æêêœnñ‹¿ügx20%üêïÿ
+ãÉN�^âÉ‰â£?úçøëó_áý»-t›qz<ã?ÿ_ýçø«¯¾Ç4¯ñ??Æwßý{üìÃÏ±×-®/¿Ó
+Çq'wøë·oñêçŒ¯ÿÃßá"F|}s�|³Ã~ôÿÃ_ÿ;üâ“O‘�Ï±½ü5^;ãÓ»sœ?{†9ïñõo¿ÅÉÉî$bÖxÿÍ?ÅÛï¾Åw¯Ù®·¿Æ¿þï¶ØßNøçÿñçH4ã‹^A8]g„~	½½B,Ïo]—
+’îðt�â�«äÅ£þ5ƒFq£D†¨iArÎ˜ööS²2KŸv_NãfÒHd1·Dì,©‡šˆºµUå¼-…3êN'XÑc
+ ò’Ä„!Ü]]â›_ýo¿ÿ*Š³³3|øñ+|üùgøàÃ�0žž€ÅÝoÉSØÁOÁ;ŒÕÁ°Ãœ‰F[‹)Ùë
+dSœ}.ï83#'ï4•Ál8=y^…¨U
+�}þa`Œ¤PÎÈiÂœ³Ù„P°ï+R|$ŽÈ4ØA“8Ý•ã€0˜
+;»øšA:ƒ�üáÝ’¡˜!H€L˜“Ù]ÌyÅÕ {@g(³M	œCS!ƒHìúùç$*P)y2%&@Ë ê.%¹¬�|àåäPb	üªEÀ	
+¥�ŸîeQÕªmÑúK¶¥RÔ)xTAw¶ÔÂçpO4Û÷„°C·Èó{Ü\~‹·ß\A4âîæ
+ÆúèãÑTc¸yDXÙBê–AÂ\wsu:òx(ÌÈS‚Œ«ÃÀn=ãwX±N)ÈH99:mbÎ!
+f¶F"' DkTà×�À™8bÖŒ«Û=;ÊXÅheÄA‚¤„iVaÀ±¬MÂˆ@„s^aŽšÆPX–—ŽrD'„°…âŠL{#:@‘!X¥	#n„ìw3&ì  Äi†Lw—«uÄíu†#{Ž€‰°Ë+ä�Ùý�ñ‡øðƒ7ø—ÿý5r&Œ9@(áòîÂIÅò4cÊoq´
+˜n>{N¸Ù�àâú6Ççxqò7i‡”	g/W¸¾øãùGxõ”ð·³b÷þ·øùÇ†³sÁßÿ¿þ%mð'ñå¯·øì‹0m¯ñy¸Â»›¯qwû~ýo_ãÙ³?ûèÏðäÓWø›¿û
+_í'üéüú»/ð?üÕ?@â„�žœáù/pù>ãëíYGi‡»Û+ü‡¿½Â?þ‹?Ãë›k¥ˆœnm;Ê KÅ°Vlžþrwg	ƒ$¸½‰øð“Ïñ?û'òx�ù¯Þâ�^]àÿì/ð»_ÿ=¾Ûeœ¿›‘gADF�jm±ßjpZDþ�”‰Y©ÈÆÄ#ná‰ý“E1%#Y�S¶Åt j¨XF™ª(WõÌ
+³‹	#*´tRV˜6Ê"HÎÚk…[{˜¯Õüe IÆÝõ5Þ}û
+¾ýÝï0ï&¼>ÚàòÝ¤ý«aÄñz�qÍËÉ;aQAšT¼“gDú¨8:-72÷,²ï/3ƒÔÌ˜I Ù
+„Ñ¨�ê›)"ç€Y’ƒ‹IÁÑh§óXìH¬ƒT!Šfˆ8ŒÈaÀË('&pVM5¥QÉ)ËÈ€NÆ€Ê[Hž!9AóÐ={û}Ý#å=Ä§
+¢„ŒÇÉ¬XÙMLZ–¬<ïÈBÈ9¹ÖF}Ü	*­Øà6rwæþÐ¯7^�´[¬ÕÉ±x€UÍ„Éð&†Ú«Ô÷^E¸é�^…†]¦uºÞY\«õ„'OÎŸ(.ß7w3vw7¸½½ÄœöFT!Ûo‰[)X½!©÷lÙÂŠj¶=¡»©¥êáÓÚ{7b‡	Ríí‰§ˆ�j°©Y›Õ‹äâò`“¿9;›�!YØX€Yè›1 §Û}‘ÃÙÍPiÞcF!‚�¡Á>©ìzeERû|E	3OˆDÆ€£“#\]&\Þ\à­¡z‡È	!¬°#./¯°G'ŒíN‘'ÂñIÆDÜÜd+AHkÜñ2b‚Ž˜sãj¼ÜŒøŸþñ‡øWóïÞnñäù
+Y,õó-NÏW¸œ	ó”ÀLXgE€çÏž`Nr~¥#Ü\Üà£WGx9mñÛ‹â5^œ<Å_üù/ñ¿þ
+Rºë9>üÅâõûk|õ·‡“áÿòýà'Š_þ£?ÂÛyÄ§cÄ?ú�þ«Í„·—ß|ý×xñòSœÌ‚Ý6#ß½Á«�OñgüŸàßþõ—øòëoæ	ßÿö{<ûôsüûËŒ/^1þ£?ÿo~ó56ç@2.oîÀ›#Ìw/?Xáý›-v·—àõÃzÄ˜WøÙ¿ÄöÍÀ³þ§§	gGWÈwŠ¿ÿ7ÿ-¢LØÝì°>=Ã~�¨ê7Z�â(ö Ör7
+£{^A56��®&CØ%â‘³oKÌ-u3?)@Êö°dñÜñ^r…:¹°ØÃ þó†�0""ÍŠÄ–šå¿W¼û� ¬†ÃhIv)%äë¼gçO±ûü‘Ùl1VÑƒ ì ›CrB€Ad±`âäé‚%?EÕ”Ôd¦ €„ÀjŸi61 $ä)»>¢ØÝ›jÊ)m7@ÊPÆä£¢Ø~c@r¨¶ú\ÙS	Ñ¯Q‘Mš}×$sž‘ÓÈšï€|g�”ì¡²a“í ”²‹é2ˆl²°ÿ] ð=—ÔÃØ
+AXúýÄëŽÊ¡nš#¸`TËA®ê;%hÆ¢–¼èm{-(Tî+êQ_´î5NZT¨åû8\I�…Ç]’&Z*ó£ÿ0)ÖkÂ‡®±ûå3Ã	Þ¼4<Áæä	8•aZ,+æì;)ÁêV\’@ËûÑ6bÕ×
+ò~¤¼0Y“å{™a ¦ÂrÕ+ãÑ¾Œõ“� F¯¦öómÊÈâY¤#R4#c³Šõ½Os²„Ã”œ  cë!cNÖp�ïÓPš/(ÂàlCï<6¼Á¼š0y“6B³"¤„!Ž892væñfeëÍ„¤£ˆõfƒ9eˆÌ Š�Y°ŸŽ7Œ]²©8ð-2?;Šÿå_þõßÝâËï÷WëUÂt' AðþÍ6«
+¶#ÀW{üòç–\9© „£“
+NÖ#~õî·sÓ5Îþøþá}ÂÏ>þ'›oÞf�oqýö=6Ï¿À*Þâýá1>úô÷«7xùòSüíß^àÿå`ó¿8þáú-þú~�³Añ‡¿üS<9›°Ç;üŸþÏÿw¬×„ÌÀtóŸüìc|ðñœ¬�Û)BáOÿñ3¼~{�/¿¾ÀœÖG#(Ü`Gøäãˆ»íÃö;|%¸»¸Â§zŠW¯~‰þÃ—À¼¾¿¾ÆGá£_Aö·ÈÓÞ¿¿EDyP©*º t~kÕjë®E4'~XR³91 Þ´I¬ ˆ·i÷:Ge˜õ<[$›"
+¬¶t¦E¦F™[ìÿF�LÈ³-m"$�Á-…£”fÂf³Á‡¯>ÄÕ¿x÷ú-¦iÂæø«£#ÄÕÊUê+¬FÓR€D G†æÁUé¾LuÌÙðx…êl´KrÏ,2µu,™³¹ ì�)AÄ„uIÈ™«¢bü`Âf‘1€DA¹1Ø”yÞ™ð‘€¤ìÞfX·@Þ²‡j‚Èdöè²‡ê‚MŒ	J3À“APÁt]ó¢Bn�•ÃÇ�iCXŽRíŸÝ‰Ùu×Eu2p3OÁÂ«­iøTQWhÿ¡‹…FiŽ”aÄ ¼¦îÃÆ¾›sZ»¯ýgÉòÑî™)Sácž>ß „5NO¾3âzwŒxü`FJ	²ßÿ�Â.eõç»Dî~F)lph•¨ØÿØoï÷	ÙîC$ë²é7Pp´€@â;ºl?3°Bc™8<-´’h¢·òÝRÅ`ÈÀfm–ED„«5Íâ`¡dÃ`»ÈâÒPØƒJí,P"¤DÎ*´|uw‡}RA1ë#V1bO¡ód*ú ˜÷«Èà“5r$Ø”-Yqsu�O?x»p}‘°�°Â]� ¥-nn36››á)þ³?9Ã¯ž½Ç_}õOðòäûkÁHðÏÌû-¶×3Ö«cìò““ƒv!c=ìðúý/?~Ž‹/ß!_¾ÃÅ­‚v	¼ÞábwŽŸ½
+¸Û�CqƒÍZñïþþüù§ÇXŸ<Ï8:¼N_þýoñ'ÿì3\¼»Àgúg8}ù_}ûß~ý{ÊÈ·ïðñGO‘·„0&Ü­>ÁÉ“¬ŽŸBô{¤¼Åé!ËŽ�Ïñù¼ÂÕ»·Èù¤O1ÝÎ 'DÝáÕéÞ¼ýáùÿÝýÃ?ýOÿ)®ß~�«;BÆ)®ð»ï·àñGÏN0Þ2ÎþwÿÅÿá_(Œ~ÙMìð�Ñ7í¡ó‡WúâQ4sZ:	q¡št!RåH)ý5¬×8ƒ3
+ÎëÏ¨Ûpezµ*)vì´^"¸#HÍn%«ÝÄR:Øòx‹ a½Záäô§gOpúô)ž<}Šç|ˆ?þ¼z…'OÏý¡0?+³!ïè"»Åy0/(
+&È3Ý
+ª¯uÖ,vÐ(Œ—®ZDuâ¯ÑFø4“Û’#Í&©A�äêpcyÇêªÊ„”®1ï/�¦äé=dz�_Cç×@~Íoyè;0Œ*Ë|
+·ˆ|‡¶`Ú‚ƒå'pÈÆv2D„ ˆÁ�ÀÍ—«4ÎZ!…ˆ»
+¸;³–]¨Á-Ô„™Ì\
+'™M©mÔÙÿÛñå÷Èë¦rX©?gN±¶	ÃÍ=›-~¨Óu?«­Q¨Ë§_Ô‘nR7k–Õ1Žk¨®±Û1¶{Ó{ªx£5h
+Õú¦X¼mª©¦ÿ^.öô¢[„¼"¬•„ n’j_–*Y}ê·‚ßóÕI§™Kx1:±_B7^-tùP›­,‚œ
+öb0GêUì.®Õn�J…®îBM¿/²»34hP�®mâÎe¯æÞz…�Qvkö3»Ùàq-ö#j‹å’<Ø››$ã|ñÅkÜÈ-n¯­@È0a…,@È¯>z�IJÉ“�x�9Ïxµ5-ðÅÇ''ø£?x†/__ãOþüŸà×ÿ+ÌÛ„ó³^ù?ÿù9Öù_~{…�Ÿ~ˆádÀí»·øü³Wøö«¿ÁÓŸB‰0°à£W/ñäéS¼ùêKüÅòŸâíûw8?N8®èôŸãòÍ;lÂ€ã“SŒkÁ—¿}�i?�eÀ§pLÃÓ�q´~‚áèò”ðÇô¾¾8¾ùæ-þøÓ\ìG|ôä	Þ_Üà³?ú9^��a8Rüê7_�‡ˆË¼EøßþÿÇ!ZÀ~³9Yžã=AÔ +"
+××¨¤XN)TÇˆX–ˆ±’ºî®ÆÜezñŒ*–é~³ÕÃÓ
+ÉÒ-;ÜE~uJRUµ·×J¥Kd³\8:Záìü	ÎŸ?ÃÙó8þOž=ÃÉÙ¬6óh2n¥é<ÊêÑ¾(æ‚õ�&‡rŠo•W;lUƒ©HËX)KP…S±/ßó^1O¹> ÅAX)›„
+¬Í6+DrºÁ¼‹<½…ˆ©´Iß!à=˜Þ#Þq¸‡;pÜ"Æ©‹gýâåP¥´¶Ãu“åV&~?)Ô“;æRaSÕ‚Ðó›ò‚ÉÕóvŸá·DK‹bF…¢ðR!|{ãS'	·Ÿ7ß®>bØ©Õ½p´BCW4Ðý÷½â�½ÄÑ`Ì)ãÝ›|ùÛ×øæ«oqùî-æi_u#qhöúöc4«Éž‘ªÿ\¡Â÷Lc‡£fîsO$È^<Ê‹%á¨[ûkuˆ)
+˜ªÂwšp›³Ú,ªï©¹Ú´láaÖctƒM³ÜCPò3DªV‰œxbD	é¦Üòž’dLsB–ì0`w'	�“ Ï¦Q*:¨Õhæ¢¢J	¬	ã8 Û±&Ð ˆðâè«A°ŸÔvŠI�0ÍÞ]!†€IF-Ã:lov¸»ŽÏŽñ³N‘‡#|ò³çøwÿå‰�>ûo¯Þ!
+¯ðñGžœOø·ÿõ¯ñé}†<nðßüÕ?àÃó¤‰�xŠ‹‹K¼ó>øôO0o÷xñ|ƒõÿüwøà)áÅ§Šwï·˜ïç/?Åõåw8?†Í‰âh±ÛÆNŽ†ãk|ù—¤8^]€q‚•Î˜tBÒ5Þ_^a“3äär»ÃÙ«+œ¯o^_ãõå[ŒÈx~Êx;ß‚ö‘Ùm¸¨»‹»­_H;+UR”*u–Êm¢]i/ËpÜZÝ�Èn´,)šl©¦bx:ûÄâSŽ(9îÉÕX�`c}�Ý«KÉí>ŠQ 4?#Òî†f€a¸ð`³Áúè›Ó§8½ºÁåû\]\áÝ›7¸z÷G›5ÎŸœâùù9ÎÏN1®¨ï7½BÝ‹¥wTÒ–ë^UÜŽU‹@RjþWLn½bcžs’3ËF°Œup„Òà‡°š’L™!i‹<Ý OfÈ|�!îL`GR÷LÙ™JfLç`SWØ
+oW"°ÒRTZf	ïfË1Qó`Ðù›Õ�w„‰ÕopT;‡©ƒ¹Ê®ò ÌãŒ€<g;Ü¥€\¼d]¬¶9PÝžÓÓ½ÉpÉÚ²F9dµ+§W,ZR€Ñ<³¨N‘	»Ý.ß½Áë¯n�uÀÝõŠÍæãz�ÀC»_ØD‰ƒ»<ÃIàJ
+´ÉÁîi¢Vì¡@NÙŸ=ß7ùgSltì:·ê[r\²4gÒ^•_'¾PJc»ÍY°Ý%�(Ö«h�rëˆ)·<!QAìZÇâ¸­~_TÖ]I7­E,TorxÛ¨äâ{'è¸›wùô“ÕÝ
+’u�3dŸB 6Ò‡»€+,^[@ÁÇÏžàxLøæbk*È“âjRï«uÀœÖÙžéYñôd…ÍhîÖß\Þ‚õ
+öw§HG/0ËWxzþÃpƒß}9�·wøÃöOñýWÿççARÂÛ/¿Â/þOðîÍˆ£Í„Ûy�Ý—ƒù„ñ÷_*>ÿüûí·ý;§œœ&¼<�´þ3ðüÃ@x~~†yºÀåX�!ïžãóOÛíÖhÛ¾“YðÝ´ÁgÏF\}¿Â—4âÕuÂËÏ€÷oÎð¯ÿû¿ÂŸþ£¿}ùwx/Çx÷›¯ñÅ/?ÄõÝ¢¦É;<v/¨lšhUãŠRÅE
+Ÿ5ÖSaƒØïs®s%ÙýÕ—Ýî½äÓªO…®(b,˜!Àýn¬€ÕîÛ…{Eô‰1†à|)ó>L µûIC5L3´#²HØ£Í€œ×—W¸xû_ÿö·¸½¹Á8D<þŸþ9>ÿü3<ùãÑè"2_†ûÔQúp%tÔ[­£7\ÇB¤°¼Ëï¦¬H³ eBÎÉ6‰h!¨ˆ,Œ*c¸¥‘=r¾BÞ_@¦÷@¾@—ˆÃ-Â0!„ì„ëM*ÕÕ^c®ˆ�ïºÃ¤ì ”ÚqY¦¼RpÊYvÜåè,ªk]0•Ð¨³Œ…“r›2µ£�›‚ëæ¤íêÔï•vpW<x¬×†D¼Jv¿]œÊi¦ª}ÿí;j¬/í~-®¸¬`¨r�‚�õFp|œ1Žîn÷Ø^½Ãõå;lww8S”*ò$Èõ8`5Z:£¹.'ˆ$ˆdßK¶©	 Pµ’»bÃív¬�ÚÑŠ>º‰�À¢ÈÌ˜\“ÅZ 0‡ÝQÇö Zm]˜	„ídSájŒ‚eí'Ån¶?—¨„àýƒ­ÈÏ
+f­�7
+s/ÙûÊ¢†Zˆ1ãí³ð”HWÂE9œ¸`ž‹#\ó‹sMŽÀ&9:ˆ<àõÍ„×Øcšl½]RW­©�Aa dMøèåˆ�^¾‡ˆ4Ïàq…Óó-Òc¿{�‹yï¯ðäã/€ù+œ=ÿCì§>>]ã¿üß¿ß`â	ÿïó%>~ùù¹âê»÷xóú×ïñÙÇbÏßá£§àâê
+¾½úOßâÛ9àõ»wˆ7ÿÚ<ÅÑ‹Øí6 R¼bÁ<®Al•±¿ý'ÏG¼ûõ·ø¯¾üôO>ÄæÙÇ8~ù)ÒÍ%¾øùþ›ÿ6àÍå¯03ãÓ³ãÍ
+—o·øðÉ
+áý¿ÿßü‹‚9’mÅìú„rr9L²¼å
+„’{67àS
+b$µ}:˜1Œ+¬V+p0l2‹†EôD\oâ:/ÃrÑc Œƒ1IT­›†è±¨l<|6ˆ-‹éOÊMmN§plM‹5Da©bN3.Þ½ÃoþÃßã7÷wøú7¿Áëo¿Ãå»÷¸»Û"£mÖX¯†ª@7Kmøx…÷Bc±PI?éÔÒŽ=Í)a·�±Ý
+¦=!§Åh	uŠÆŽQËÐˆã€a �¡ó
+Òî=æ»7Hók�¾EŒ—ˆñq˜Àœ{‚v~»ùJß©×n�ÚÔ¦�a`g[ÓNÔÙ�4öw¤	: ¼ºí‡ï·ÚéÑ	‹Ï”¯¯Û®Ú»Yß±p½‡ÊôÁ‹ ç§S7Ý¨C­ígöôòrŒI·Jï>%ïäý¼±h�íK%o8¼éSpöL�œãìÙGxúâ#Ÿž™å>[ñØ¬¹øõäô›£#3
+¥ö#O¸•JÌÄ5°­ùàE˜H«j¾4
+¥9cŸjâº ,”öuvà¶¯"OãžÔïYÊï‹Ó,˜æŒ”üÙwƒPk@áÏRè?Õj6ZvB5üYËŽF�l’lbupµ¦±:ItÓlqÍæà=%Û¨¢ùõŠlTü!XèZœAê?{Î)—}�í‚3²?]#V+K8�æ=¶×—ÈÓŒw—·X1ÆH89{Š4íðúMFŒ»ÝxØ€xÀ0¬ñzJ8?q™VxóÍ·Ø½{‡çOÏñâÓO�v·ÐÍ¼�áÃŸ#n‹yx‚À
+âñ	�&Lß}‰ãÍˆùÝkàìæ½ÅÓ†¨8ÚœawKøøãçøÛoßâÙÑ\¾|úêo/nðí�BÓé8öÀËçg¸É
+¥1%�¢¨¡†JEçf<uß}”üó‚™jUóQ¡@ÕSþˆíôWª�Fá—'Ì9CÅÃ˜BDô‡ŽÅ.A€B|l/Ú
+é<‚XÍ%:ÅTÒe	/àhúö\�yNFô›EK€Ö•Gæª,WÉØïvØïöØïv§ONðÁG/ñòå3D
+–	âŒSz—»S ŒàE9äG²„%3C!×£*„€!š¥I©Vå	i…ýÍ÷˜¶ß#ÍïA¸°©#L`žM‹¢4¾â4ÅÏ«ŸÀÍ²œ
+·‰p_Ç¡�ÝDåoW¦ùA~HsÕf'Ð¿ÕjÑ�ö‡?w¼­Ânâ
+e–é®Â*Ô9�<ô}Ët[˜fwyVïr[Î¤,9¹ä¦¡^Xªã².'4íc%o”¿?Œ§ÏÖ�qv~Œ÷ï	»é†ã—ØlV« ²¥Y®×kl6klŽŽ°>>Ç€i?b{Û ä@¾L!³½®àæ˜bBV©Go]V×bºØíö“ÙêÐâjcÓQ?j›}cˆ)ÃÓëM!DyV$'„0AÍŒu ˆõjpÀ6eÜM¦y®f¨Æ“îúM—«ö½`¡èg¼±ìUÌFüK�&^–yBÆØ,äšbfY>†Ÿ3#ìã¿FJx{U¦+s4òPòÂ©`°Z1¦9c-„»ÛŒ80²ì�8?Û pÂúø!Ž�!â:Íˆ$0®ôÉ	.¯¯®/ñbÍ8{ÎØ^Lˆ/N1Ð„Y×HÛkëS¬�²žþì¼ßÏ�¶8>}�ßýîKüåö?Çîí¯ðÝ»=&
+à0â›«;üá³§øìþg×oñå¯¿Ä/OñþvÆéËg�›oðÛ¿ù5>ù³pñz�ãaFÜ¼@Ì9ÔÌ�ÂV@õ·DC1©.uîw±ÏP»N•ÔêpMjd’„´OÈ¾[)ôá$ƒºÝ74ÛÍŸ|JÑŠ‡Zg§$ÈªØ§!†è€1ÐÂ/¨öÿ5þÕ9ÑrCŠ‹!ÝBÅçã<yòú	®/ßCUpyqeÅ5†ffŸãÁV<ˆÏ�áSO^å¶Ô`‡…d¬´�pUE+,šÈˆaD#"eSyÛŸÀ¼»Ãþö5vwß Ïo@t�8Üamê0å1*�¦œseYIJ¾0F�oäËúFËN‹:–S¡á4-vçïÒåcÐr³¼X@w³F…®àZÔÉ·9–5ˆº©HI›g›OtDmi.kkÅRÚû²’»6î÷û¥%Óì‡¯Ö�a{ÏÒÒúu:3ÖëaˆX¯qö”q}}Œ]bKÜßA˜-ð‰8 8@™mé-ÎB*d
+˜µ9&µ†!"Ž+p°ìuI{?h}"=ðÛ.{«6Ef?°­˜uh�7Šå¾–rp»¸µÀn…Ú›S6�	GG«hâœ¬”eõwÙ^­VˆÃ
+CJ`bÜ˜`{Böæ3ekrs¡ƒû´“ý–Ô µô“ÛíÚ,a4òŒMH5‚Iì\ÈŒÖÕÙQ1¨Ãƒ�z<ZËÀÕÝŒ]ì“MX¢Æ>›çŒívBdÆjdÄq�0âJ 9ArBN�fÑÒ+¬×+€"vPÈ¬N4ðL¢yÂññ
+ÊÀÕí%ÂžAB'ë& ³"Œ	«Õ„µÎÀt:Ú€²ñ¼úwßýÇ›~þÙhV¼{ý[ÜíLÇ+\\}‡'O¿ÀÉÉˆ¯÷÷‡ðýßüÏŸ½ÄÙbR¼½¹‚œaxûÑØìãºa‰Â¥1›uAgŸ@Á—Èðªî‰{5žnng�AÆRµEWa§1Æ>RD“Ÿ
+l‹0X'æì0SI<!›&Rž‘fÅfôä¢COÃs…u1
+ŒÌÐP~¦VKñ®,Äˆ³ó'øô‹ÏÁ‘ñäÙ3¼{ó»Ý„Íæç/>€†ˆí”±šÖÑmèà+_žçT­,Ÿ4ÕHö‡@�³Dk©€\ct#	$ï0mo°¿}�iû-T¾G.ãqHˆn"µsk¬$¢…” Û5h=pÛAY7É]º_ëƒvHC"KÂjÝm�HJ¦Âu�å`ï·G„z…CJmáÚJ’ÛTâB+˜M‡"u�SÿE&_¸’5>(zj»�
+D.^XƒY–š6cÆ2-1að,øÝ6aÞ_àò"#a�ã'{Èóýä‹PÞ#)°›2ÆíÖI*HÉl�RÎ¶c­ˆF‚€1§„ýœ‘’íJl-Ò©[¾ël$õ&+eµäÑìúÂÊ,AkâéÑÇöùˆ›2eïë‘±9Šàh­hJe‡fVÿ¬�ó‚Ë9 åà$KÒ$fÌH˜5UlÃ¹:Z6µÂ(Òˆ…îž‰,ï%P½-¥„’1	@q–£˜nÆïÉõ@ “ˆ!®ñähÄí>ãòn�ëí„}þ3¦ý;VÞ`\öLgAN	ó´ÇNÌC…¹çJ\ÍeCI`Í˜æ˜Í
+JÍ^È‚‘(ï “YD	¯-�n�æãÚlê'¸»�ptbN7W{lÎÄa�gÏžãXG¼üà&Ü^¾ÆÑñ	V«_àìé€O?9Â—ß^à_¼€ž�ãg1à(ž#ï¿A§eJ¡Ò1C™�Á`ñ…p•…qÅ¥EaLˆd0s[¾§+ælÕ½8ˆï�9‚‘ÁN,7Û†dqÓ8s,�T:-Ì±ÃÒô ˜Ýß_%CÇÁ”å1ønÁ9àsBJ	’�}"2gPÎõÉ)0°Z�xþò†õ
+ç¼Àõåno¶˜§Œ.¯nðÛß}…ëë'8?9ÂéÑ
+›Íˆ8˜koU‘»2¸ªÚvêÞNI€ýì&Â”íÁ§0:|1ÄÁu
+’Y¶˜wï±¿ýÓö;¨¼AŒWÃ!ÚR¾Lä‡ºåôá?~)ç•Ô=ê—ÚK�Eaò`±(×ªëm@ha2Å,Dõ(¦þ„wŠvÙS-Œ=©©Í¥‚êS§ï´¨j�š§V»Ñ
+^¿¶Ð¦O¡š^ÐÁŽÜ1ª
+OÔuäºö‚Ù2q•ÆIµ2¾4n.oñÕ—×øê«¯0çS<yþ}¶Ã‡
+d"LYÀ[KeŒLæÍÖ¤lÌ#Íê±ÑŠ`k½ç9!M³Yî”½Ÿ»_{kxp
+z±°‘
+’Øç8—�î:„@YQ-PK¨Ò£$¶›ŒÁÄ¾’á–C�A&«Ãè0Œaf¤Ù^áÊcf%K>,!uäžr¹É„-XÒw&.zl«-²�°~/§Xhƒj“ë×®Pº‹=Sît/«�ãˆã�b?N7ŒË[ÆõnÂ~²F&°bÊ	4Í ý„ÑïSñL#}xê>�y�0ZS‰020AÁ9Crn{él…q26A6g�©`ÎŒ´ÝcF?§W˜&ÁÑÑ
+ãñ1Ò<#û{‚"ágç9þìƒçîý<»ÃÅ|�ÍõŒ››ðÙ›á	¢ôMíè4¹>:ìjuw=EË'oòpê8é1x(Ž”Lìà^<í)� ™@j•˜D@û
+ìªr÷ó!$ƒ&U¤”°Ss×#Vãˆœ3v»-öû	óœÇ-¥Ùº]èÕÔÇ|ÂjµÁÓ8àèÉ	öû=®.®ñöÛ7øî›oñõ—_‚Tñäô~ðŸ|ü!>úè%ÎÎO1„¡ââÒP-g®x7êp\EJÀœIlgÄÑrÃ×«6ë5bˆPä´Cžn0ïÞbÚ~‡4}Ò7ˆÃ5xØ›ùbg|·ÜOÆÙ¢·ïŠH Vé©ýB¸g"ÑÿîS Å¤Ó»Öb¤ÚôÚöîV_´Úá´BÐ”èÝê¥jrÐA�Ý’¦çj-+´(½µIû«B…Êî»¨¥-hfe�.‹U½ö;¥Ð«‡¥ÿ!Áv;áíëK|ûÕ
+¶»ïqüþ)†q
+W˜3„™üÞ· yË^éMÃ ˜ó´Ÿ+
+®Ë€œìZ$Ÿ€ƒ‹ÿ™J²bû\(x°�]›ÐÅQ'$$jÂDQô+%kDçÌH9`0³5Œ9eÌ%ChÞƒ ÁÄ†ãÀ�Ùh°cPóœS€$˜û„q1Í‚€ÜäÚhû*Š9Ù¯Ç`?'†¶$¿XE»B®Œ”âUWÉT…‘ÖkK#e DÂ826#áÉ†q»
+ØM‚¤fÜL	wûö’cô%ß›éòœ­È a…„ˆXèËœ‘H°'Erˆ—`QõVqsJk“;:«Áq“Û•þL4`ÞM 1KÉÊ‚9'{ŸjMÔùÙ1ö{Â~¡’ãˆ7oÞáôh�.ÙT\Iì�éEDµ“U·¦(öÛfã‘%WŠléb%ËÓ€Á/Üœ-g©‹<·‘P³)ªÜj½Í…Šh;’bp€*îÔDŠSJØgØv"˜00K3<´¥{„y’f#5ªB��"hýYŒx`Œc„fÅ›o¾Çëo¾Á—ÿð+lon±Z�xùá¼ÿ£?@NŠ8ŒxGp`Ï Wß‰8KLËÁaÖ
+9+’GÐ9‚b@"Æa…s-ËòÛï1í¾…Ìß#ð[ÄñÚÜEY¦	­f…U¡KNk;.¹éºåveÑAÉ)]…‹xQ¨¨_`—CÔjÍ'G—­sÞËB§ŠlU$û4À•±U
+“t{•jUiÉý¢Õƒ}éã®"nÏÃÕr¥Iíå¾€°‡è\ô&Úœu©°Îüàˆ‘±^GŒ£àîn�Ýí;Ü^~�ííRž1HƒèÊÞ€Å÷y¥Hj�IfÃú+Ó­@�F@Iâû™":~V¿²ø‡û´ÉÈ$‡³Vg[µÏ¢Ô¯rv(iÇÐ²IfŸ,vÙÜ#€!fÉ&,Þ©/Ü3öqÆjˆÆÑöÃ€œ ¹š<š¹©u’““!¨ÂÒ(ÐœCì%{-h�ŠÁ¤ïVJ.Q¨–bº´Q@’¥±–	Æ¹¨àhß#ŽŒUpºe½ÂÍ|wµÃû›=vû¶»®™€V¢;Ä E3¡L‘PlX€ÈÙûwgêzT1R�¸|2„¸ÙlÂàÏI†d�îžf‡ÐÜø4%¤yÆ~Ê˜’5þÃ0šIê@˜æ	Y2$+æ9!ÆÂ@Qu«6èº	%£™¸Xº{†C¥lª�N?VD1¸(¨"XHrµi(¢@&vw§Ýº€‰ÔÚøX°.ùàÀ™ƒ‚"áÖ—è)g$™]8U¬¦)êå,¹0Sj~]ª 
+_#¦àp0ï·¸¾x�Ëwï¡
+\_\@sÆééž¿üÇ'gîŽ«�ò�ëVnqŒyJ„$âhÁÁ.Ë’0§-æí;L·ßaÚ~È„ðÃpƒ0L`.yÙ¼\nø.¦bÞÔü¢j¡9 IéÁiH½°£‡�¨ßU¨¯®¨33\²ªªþFµwÁ:Hßh…Oµ«'ÔþÇá.Äës%l�{IIKfZ¼ßº/�êCUWˆŠq¨íF´B‚ÔMµùÜclúr˜5¦JX­"ž=ßà_œP¼~}‡”GœŸ1Ö+EµUó×Q&5ñ"."B·Ã*öëå2ª¨U=Ÿ¦4®œíù‰þ±Žf/ÀŒí�9…íÏƒ}áž
+ÖQíc~-èK<’zš3vûdI�cÄj°–÷Š)%¤Ì˜“`„<
+VâNÕN‰Þ§P±�”CcåQs?�ÎxÓê´øs×„©¡?¸;
+xqË(1�ÖÜ3HØÅ«	¦£
+1Ø”bÀz5`\m°MÆ’[Âû›=nö3¦”}io×–‰ÀfK¿7«ýJ³ŸeÙ?Ù¡Ð¦§’v·"º%RQê»P¤ÀjÆÑ>«4C“5A¶ÈßÛyaÅ:ÏH)aÚ‰Ñ‰ã†ÑŠH0í#TÍ­;†À.ô J¬,O÷ã<ÙªŸ²O�*+¢	Ï´ŽþLŽ]7«Å¯½Iî›|	JÅ%˜¨åDW†½0bÃg33$Â-Ígì·VeRšÀdùÆÛ6»sBÉ$wï($»!³C"R2©í�1âäì/>x�·ß=Ã<OØo÷H9ãöv‡Ë›[\ßíp¾O 6˜Ìj‡vŒâ	Å˜30gE&cÜ„`<~K$d™0ïo°ß¾Ã|÷Òî[@mß‡;p,Ýâpë%Ÿ©nlSÁ#Çø¥8ßêB0n¢j½¾tO_} ©(§SE{­»Üà‚N\Z×Õž¿E³ÒÂ¤u	’-5u±-h�I‡‚öÃû‘*ëè¡¢D�G)lR%÷ö³›H.„5}	¦&†$*fÔ ¹2,ÆéÙ
+Ÿýü'§..v¸ÛÄáOÎV!#T‰�.IÅ2¨ˆ;UmÊ§žžî?/ÛÁÊì;jžX9ÛB;0aˆ^l×Å\‹³™rºv¢
+îJËY�®ïZ6çhQK­ÉØíç=ŽŒ1æD˜’ ‰Qp$D)+tN.´=+\è${P‘Åàó¼Ê]Dp[Ž—L¡¨A‘-G¬Ê†zOê¢¢—rA¥fge3¢ÌÒ&1uL�CÄjµÂ0dNXa�'#ãý�íH¶“`ŸSjÞiÙ÷dY	œ�UæN9›îD\ý¯^¨ï³‹ÌÂ&KÉyžÍöÇ]8HÙÙMæÜ!nÓ_hÓÙÑ#/—B=ð.bˆÖä¦ˆ¬fq°Ó§–~!Õ‚ Ñ�‹>(w¦hÍÔ¯x1z#ÁÆèbx·PÁÒ	³´‰Èj
+#H-j)sí€W¡ÈyÂ>Y�S	Á†ûGœÅqO2Ý‡
+�R6Uvu�uþþ*âùËgøâO‰ž¾|Ž›Ë[€ÈÄ5ë#Üíg\Ýn¡ÌØ "DWjäÊeO³`¿#Ì{Âœ›<¸dl’'¤ý%v7o°ß~‡<Æ;Äá1î@av(±ëŒŠE£¹ÞÁ³á©¥ÚR–,×Ü®­Yf²,
+Kk©«~¢?Õµ.£{$·Œ(*UÍ@Vè \ÅŒÔíâÐþ|€rQËø¨Ž¿NÏ®"È²Ï#í21\URHoÁÓŽª±YMã¤.–-×«S¨tPž³	=Â€¨éñÅ=ÏŠ#NŸ¬0®Îž®qs£Øíâ[èt
+
+kPXWãÁ¥=J9øÄuTwlT�‚µ66É‡ªÕ(ÇMÎâû%sâåZå‚Ã@Šê˜ e€’˜b¾ FNŸO€¡
+¡Dûª¨0dàn·÷Ó…ÄP<êál†ÕÚ0ü4a?Íî®m$ªÎ®O?<é��(ÙwDÍ;Œ�y¥Ò–“=)�KIpÌþýBÙeút2{sÞ6Ñ Štú©¢¯2¨<ÂÑ1l§cÀÙŠqµ¸›·{ÅÍ>c7	¦9ù”_¬;tØ‰¹MÃâÝ÷€KYŒ0$
+1ZáÏ’0Í	!ÍÜâ%@Œ8À"|uªÂÌ,ÁÏ
++ÞÓœ\¨J¾Ë0ÄÓ”¬¨óB Ô}ž5w£æg¶0›Åˆv“öÿíÜ÷bëÐ›Ë¡‡m%zs$AÅ'íç…º4êéÅE+Ùx“vO½zè¾
+ÄÄ�@!Bçì:Âp3@ÔÔ¶£'§øä³OñäÉ|úÅ¸»½Å4e„8âèäû,x{q�ý´ÃÉfÄ8DŒ«ˆ¸^CÃˆœÛ;Á´SÓº°Y¨Øtd¼ð,ÒtƒÝÝkL·ßBÒ0qà`q<»�ß…Û}¶Å.Û³×›+.JU(Vá¡dD‹‰óS=�ú€öÊ¹NóPà¢Á¨÷�4�e]~SÕqèüµ#Òâh¯jc-ß·P¹›y ³»ºuŠH§©I›Ë)ÂÄvå/híhÍ·LÁeÓÚíŠtáþKþ©z‹ê
+ÝöC†Q1ÏF–¸º¸À43Æ£€“§ŒõÉs«M…tŠ¯<`ro’¤º¤BmÔˆÛî"dø~Â>»¤ŠY2�©deYv�‹Šcg%“%#%­»”R¬2Ô&€ ½ßX£çÌ)án›q|CÄ8Ú\‡€2Ö�´(hUøŽ%}T³f'©¨7MEr`>_…&/EøYb‘µM(Ì†B¾Ó)úT3:5ÓW»Þ
+
+Ö¹‡È®/ñÆ¬�jƒsÙí÷C8Ã~ÖÆ@)ãtEŠ¸›ïog\ÞÍ¸ÙN˜ó
+ÖFÏÉï	qêt—yc=™¹ZSp­™
+rRÌ³¹<ÁŠC)àó<�î,¼ú¢ñ`×�47¼õ"ƒöT‹¶-†<„!�©cî¨OÍø�êh¤Ún„ò¿Êîœ*£¬úhî³E GÝÃfÓÖÅUñ¨â$Õ”Ä�[dãœÃ.ŠšÏNLþs›Ž=¸‚ÁGÙPÄbþß«ÒE;£©t2â�É8Œ§gØlNðüÅ+£I¦„i67Ði?áõÛ·xýí„HÀzprz„Óó3lž<°ÁþN‘2aŒãHÍ1MHóót�iÿóî{ÈüLWñ®S•/íÂQ,ð‹PµU·dÀÐY•„Jo­ðJ™Ða±WîàñkfìU­Úr	Þ¦It&–-Ãc¹Í/-)ª³P¥ávq´-¯†ÓC¹©é�B[\ ]oâ®±]‡T¾¿ô¬¬Þt±b³M;SÅ§}hUe˜5è³_ØëBIß×*knof|ý»+üæ×·¸»{‹Íé>ø$ãÃOOŸE«Ø>“~ê«ˆ®ÁoìÑÕŽÈÙPÌ‚q(Ø(´”û×Øˆ
+Æ´c"w
+%;hææœõ\¦±Êø«.ÈZßû4vf¸8F„ÀªHlw{Ì"�
+È÷Å0F��<ë§8@sÑNÀþ^ˆ¶|NNwÖb¿âçQ±P2›]2úÈá_ÑÚl¨H-A}²rÝˆêp4è]’gŸ¶�°dd‡q±M‚Ud�„ë5c?G$(öY±Ý§:õ›!eO7nnÅ!„
+'5†gÐ}¡Lû	iJ�g\ñà1†$A�F‰µÂ~*6e)ë‚8‘ˆûÓºc£\ö*4¿éô�Qt¯¶ƒ…œRÈõ(;^ª“Š­ø÷Öåˆã]5c´J9•¾ƒš–H�ÜÚŒ©ZV;lbeKeiÐw,ƒ<i®Ì3êÜhC´�q,BAÅœîvwxÿæ¾ó¯¿þÛëk&<yr‚>z…WŸ|ŽÓ³�À|±>àª2o1ïo1ï.0Mo‘çwÐüÌWq&KtsÏÉ.JÍåTÌ€2Fv%¾BÙ¡
+UôV”æÔQw©lJ:Šf/ËkA^ìº‚Rn�Cn¢…Óy	Õï=P4V”6vIÏí¥nO¡zXxÜ</”P¥Î®¥ú«içºê7>ÍBáúkÇÐZš˜¶”îÑ~¿ŸÀª‘¦;‹ÃwÕv¿üÈš—ìÞ´Ïx÷v‡o¾¾Äå…`µÙa7Æñ'G'Ç•ù¢U£•FÃÑÞ“Œ:	My~È(WÃc¢„�”ÄÁÎ®¿v§eÁ+¾þášÆØt"fÕoòÚ;ŸÌE»Xžx¦µvÎŠÛáJ¢&dñ(�ÛmYBvrˆˆÁ¨¯³d·åqCI/šÑI2Àœ¹±•¤ˆ#	‘<Ž»Ë‚?OAÌ˜)wÑÜ%L‹Ý²…\�VîÙ­©Em¯#:9}Øvœ«õ€@’iÆâÓ0!ŒõÊ˜hÉ%oã„í�pÃ®dÆì–�]§�	!r-æF0˜AjÖ.t� 9#ijú`d¢O�¹2ð˜Õ›P#µå�™¼æ¬ÈI IëÅêõzà}D½g–{�J×ÒÚ}Ôð@«óNe@p7Ú·ù»gJÖ‚Ñéz�Èr¢
+BTjŽA±¯(vãìË&.XhÉAyÈ¥e„œån¸P�ÐÂK‰\�$Å^W¸äi�Ë·oñæû×ÈÓŒq=âõëw¸¾NøôóçÏ?ÄjÍÈÉ(•ŠÒt…y÷i÷" p…0Ü‚yPB`­½�®~Æªdùd^`›¹c¡ô-J±Z·¦]ß^'Q¨Ž öŒŒ ¹v¸Ë}².‹„.uatHÍcÉÃÔñ“b!"]OÜÃVäÑ¸DZé±Ú±SÈªêä^à1^*ÐµÛlWÆ“C\ŒÒ�RÿÜøCuÖ+ÝÆ_Ä<¨ÆƒµµÆ+°Mt›£ŽOVX¯#®èûÝn/ß`{ýiÚ-Ä›%Ÿ$Àà"¡ex»þÃà9v=‰iÆÑ2P’i?ƒ’jq@ô’}m×Åp.Ÿ«ÙöIgÄè®Åµ›|qŸ|œ³]ýYŒD’²™Jn¶2!—’ï7`ÓÆ4£FÿÂ»úþu±ïq‘ÚŽîmGÞÔŠkÍr5à,ç•øÎ%	
+j¯�³¨Åqûu>ÑDeï=«-þgLIÌs­GÁÑ†AaÀ02âÜ8œqBŒ#6+‹VßóÜmgÜí&¼�ŒHŠí,&œNö%ªˆ!„åf²Ä&w˜$#Í¹Rs«žNMx*" ¶ÌL^]kƒM JÀ(FŽ	\5ÛÀ!¢ˆÚ¹îööÔS+ôÄ-7ºSk¡pjßñu{jŠeÒn-ÛAýß«4T·¯z³Bí8¢nw®6‹ºÅs�ÚÜÑ·à¤–5"U# …‡¢†fSÈS¿t.î¹eÚ)JU`oÖxrzŠ“ÓÜÝÜâVï0Íï¯±Ú¼Æúø%â¸4!Ï„		�kÌû÷˜÷oAt‰8Ü`{„˜}ê š×Pé·�@[BlÅ¹ŸìÚðÛ©pZS2MDçU‰Û»Ô*-qmxlhO#­ ¦6›ˆâÛ`4,Eââ:íØD½ZšÓ�Í:¸˜K¡MÓçÖ½r¡m¶e4êÔPÓ„üÐJÕ˜{šóbù¾Üm t{u�´Ô¦TXg±g²ƒ~å&‹Ÿÿâ)	ŽŽìvÀÉ)c5f3²f°…»›/ÕÎ»EáZÃÀ.¸5¬>ý…Íëm,iÑpñdQ;´‘§yJ±Ô=J�NCc”É¬˜ÅºÕÑT¸‰#Ü‹ªÂ�Ò&¶ä
+“Á¹5*˜ÌSoÊR_[¹¥öÂHl;ÇLOb÷wª{ …#úÂ9Tã4Ï’FÅ¡‹#ð}“‰'Ù‹)!Aj¢f�3›…»?ªò,‘„äŒK­ìQÁ4Ï&Èäˆ£J§lôä4Õf'eÂÀÀ&(V,8€]Rì²âfŸp»Ï˜“·VÜ‘"ÔXisÎõž0Ñ¨Ù!…"bÍ
+$…°XE†Ò0Û^8"7‘·».£¡6«ˆæ…¥zH“lË1Z@ÿC}WÜ�®-ÓE Í2?š,ø¸d*p§Tî-20ú’]RµR¨êÉWí.DöD6î²¤ë˜ÔP$qcfAŸ]ÊîÇÊ…K>DœãÕ«WHSÂfs‚«‹Kìö{Ep±Ûïpyu�4ß!†„ ;ätÈ%ˆ®0Žwqî¦:ªÙçeQ_ÌTÊ¡<Rë:…–ÌHìi‰ÜöOü½…bYþBkúÚòK¸Ñp‹>Ú´„.]PtÓbÄØPÑ¦C°ŸkÙÜv˜óáä‡"Õ¹Üu÷4-ª0ŸdEF®“l¯�/³¨7¤–‰#Å²ÇÆü‚�«´û³ÀG•À�N¯ýÓ÷nº€h{Šë89ðé§§Øl^}t„››à›S´Çœ&�Ã%Æ–}‰\&»Lì=!F„a8 ‹8kÕlÓcHˆ1AE²VH°Ôì™q7_¦!(sƒuRVPFŸð‰š(9«i+¸Ûkå,Øîfä$†h�´%_¤;—
+È`½™‘†j]b‹um±<rÈh¤õ5JFNbtç�=÷]”²%RR ÓcÂÎ	NTä
+Ä=w�X›ÝÓj±YÑ“1sFÎÙ–Ý¹èÏš_ZÑÀ™ÜÀA�WŒÍ°˜1eàr?ãz›°ÛgÛ*0»ý~‰ÏîgVXUB„ì“bôˆèì{�¬x[ãÁ€T]˜rL
+	æ8„õ0`¤+HJeY.²Kl“ÔÅÐƒVJ]>Bëàõ Ì4HŠtœõ…‚šÊ2ŸzkÁãï¬ÅPUz˜‡¸úªÕ¸O¥ðß
+ËÍFUa9ÿ¹3o”à¹´M)¹?Iðš@UÅf³Â³—Ï†gÏžáêò··w˜g�Ò0áúúÛ›$w@¾ë
+†Õ6Gˆ,s<†"4u,ÛC_
+R‚¼
+ËÈEjD�§—/ÓCˆà+å%NØGr®¹/žBç
+úBZŒC/~¸k‰‘­ñ` Ž*Uò¼E;8Š“J–v)•™¤£ô{®ª�Ñeæ†v~Vâ`�6Ê†@9wB0Z:/|}’’’Ù.�PGÚ@�L†³‘Ü ³Ÿrº,ô~²Wöb,|½ú#ãÉ“V«€ó§+\]O¸ºdÜm¯p}ñ
+î¦ˆÕ©`µ>FÖÎÙ§?·wÑ{S0Á¨Àš£…Q©uõólDñôšCq…™»îE[—üøüsV€² dÍ*bSñ=©CjŒ*¾KÉâ¦÷Éñ!ÚB_|OÁ¤Î�òî·¸�T‰ˆ<ò×¬Ôm/QÜ±ûJµÁC‘
+*’¦Bð`ËzˆÁnÈVÖ«Ï¡Ûõ"¾Ž>=0×Xð8´ /Ë	¾'ÉP�Ö\ˆ@$yð—íœRÊÉžÿîÞ�!`¥ö9­cÀ¼v‡·¢ObSIÊ&äž’`_ ro~¸øR@ší<l;q- ¹‡#.cc
+CÄjŒC€JÄ“UÄÓõ€(]W×¼�Z‡]Ì¡Ôº¯¾}ÈŒ‚:öÉ=v¨vxmÖÜK#<=èŒÚrÔ±yŠ2šŒy#�ÍxY<f 
+‡dw.ð”v6úÂ¢øÇ{¸3£SØlŽÀ±>:ÁÙÓîîö¸»Ûa·Ûc¿ÝYœéõ{LÛ¤ù‘÷8>Ixú”¡g„Ò€0H
+é1¡OÓå„òŒ+
+’(]³¯»=Ô|É
+6
+Õ�¸ì¤pØ%CÔõ0•™åþcÚ›V5ûŒºr–ì^iÅº¤äd{–K±ÎÖ&@íƒ�úÃ�;\sÁÚÇ�j…«Š
+KÉ<·C£óó‡›Ýþ¦MÌº–rŸ…:åi†Š±�êëÀRG¢Ú5E(Ø‰]Åu�ŽÔu)}Ìnq9žFÆJ#ânÂíí
+¾úÝnîÞƒ7ïpòâ3œ¾øVÇ'Pb¤\låµ²òŠBU©f¬6{ûì³`ˆÖe§<#I‚$72Íp¼Ü¦Ñ">äÐbsÚå’3¹ æÛìÐ«9Þ$rpJ~wÿ™*Z�$!ˆéGLÐkSO\À ÖvQ'í+xÛ0+Ìü‘ášƒ¢C`É&ŠdÛãå¢ë)Å@RáJ  ùŸ�ÛçC�à*ü@¨÷·–F·8oÝ2&É˜œÁ¶lÖkŒãæÃH~Ÿdä4cN½g5ØQ²�ÂN#ÍÏ“º/Ø0¸õ‘r¡Wg$É^Dûd„…Tš(!Bóˆ4'K‰
+„9e0#c«�±Ã`ÂÁõjeé˜1�4ašFìÏ�}YhÉsÐ½x¸¢tá5DË¢°Œ÷ì^A~ü2'®·§{ôÆ…­Fínu	x9fKÚ 0öÝ	œUQ¸ÂQ!¨Û,p6fáë×—àTO†Ñô(7º&•ÔÄŽY&ªÕ•.Ž+2ƒÙU3!çäêÛÛ÷¸¹|ƒýþ�'l·
+É€5@ƒdH‰}iY"1ÚeyÀë^¡±]P…yïÓR‰†.t1€ 8ÿß'r|œ—VÖÉhð)Uð JÚ3�íõha"I¥tk�›:!wÃiñ�*!íf(;,4»îrõõ~¨-hË�ù‚õbYO—DñÃÒfÞˆþfÖš€WÒ«WW!d�`“vï­·!)ySÌsÆ<e\ßÎøî»küæWW¸xÿ
+0|‡£ïðô“;¿üÖÎ0êõÝ5˜°Y­#ÖëÁ\ï*ƒ"D{_sRädÆ|æþê”×`‚¹ …n<ê¬ùm9Û¢§çÙ^‹aèîÅe#RÝ©45�ãñ�š´ÇÕ5îDT˜lN£ûT âÚ+À	ìKm*Ã™»”Ü¸%œŽ
+Å¤
+ÚSÈ€xšªÏRiì€°�'â±Ûåî³fÍ²�²À
+BÝ÷rÊ>b\!P@6shÈ#!9�s‚æäêpÓuäœ1S¥¶ÿ:Z�ØlÖà�Ä<¬²kX’ˆ�¢”÷"°ùu•Ö+ª˜sQÀ8Žˆ‘±Š„õHÕ!cFlÖ+ÊPIHó€iVDíúºÊŸ%ÏŽîíŽUÈŠÃ´¹N˜Ö=•¦ì”Æ¤ sèC½GyQ`Ê^¢ØŸ7[W½ºCÀcP*C§[ªÔb¢Qÿ®Á[è¬ŸÛÎVÚƒa=�c¸„��3BL JWQ†HÂ´WÜÞ)Ö7„a´Ï'EMRó¹ƒ§l†`ÂCâ¥� .|œœµÄ´8"òAþùûî(´„ÂþÃ¦N¹�Jƒ&dŠÐ `Íf�*M?TŒû ¨¶1Å¿É¡Ô‚¢@–­Ý‰-W¾ßŒ±CzK‡Þ"cjÍ…ö¯·;¦›?T÷½µ1šzø¶¶R�Ûl£¯7ýM�aàØy‰�-Ÿ­!zY¤êÕC”kã!p–²Y‚O“9³NI1gÁ~Úãæf‡”·¸›�)ã”OŽž"I°ç”šc°ªç‰0î6û„Õ.9|b£CÆÑ åÝ”°Ÿôˆ°bc"Þ}‡P†Á:^vJoÕÒùôžýð›&ëþ£ß«Þ¼û.Å¡ÀÎõ™ºxaé4:âº�¢=bjš±”ÐdÞzFeó�‚#×è^­ÂZm®n|ÑžýÆœTfñ�‰Ö$NÕeÆK½ß¼€f„èûmª}ƒÔ¬¨L)a¿ßc5V£9“—<pDä€‘ƒ‡q%äigšŒÈÎxÌsÄ�l©8`½qt´AŒ9ÏHi®9,S2?«œžòNËHÖÃPó^TíïÀ]�‡¡Dr×kÛS­ÆhŒ½OÓšúÒÙ`wÊJul-T¯z0}ü»ä(içQÓÓ;±/zÄ�õ!œl‰ƒQgá€Ã5~ŸÍM÷ÿ^aK4#:_ÚºÉ$wr
+{­"2ï†‹¹šdQ�ì°�Q±ÇGÈ¦1BrF‚,Ynž[J˜ØBfÊká@2#ºµ)Ø+µÚÕ¸5¦“ºås‡[×½Ro@xHÇF³Q€ÓÿD;,±äuH¨ö'Rì>Û š“Ù/�Öi�¸Wðµüêšq¸ ÜoŒÿhÇÜ`"ãâ×k|=Kš]‘ºPÙ·ÔÆ¶^§:qHç«%zÏ5©Ëˆ×êÀÀÌu9K¥š×ðÝ‚¡û~JüÁ7Ó<Âj=àÙ‹#¼üp‡”·wŽ$dž¡³%ogk2‹ª@h"‚1‰,A¼€�À	p·Sl§ìé€vRgãÌfÝÁ„qX�Ñ`ÅŠÞ¸u±¶xÜ…"øD£n“Rˆ
+Ú2Ó!e7â}‡\egT²¨—?x`š1ˆL¡ÎöLx&7+@ì4©e¦ëÒ¦§ºþ8³°°óÄ¯KÖn^òâ¸Œ/nôoQµxêruIÍÇJ¨¦ÅÌY°Ÿg¤·—W©ê‚Àq4±å6·É—ía°š~dÅ|X«nˆ#DGˆfì§ó4!Ï¶Oár-`×v6Æ!‚8š‹@š‚b¹	È:gW¨È’[YR;=G)-—€D�ùm©�5öÕa²©ÞƒµÇæE�—Ïáß-7_¯TîQ¶Ã¯Úw\œf¬v�kÑ»ÔvÐ•6jN§	(1¢Ù1ÔŒÈ‚qM89	aÄ¼_Y´&gŒ#am‚šfŽIŽMÛÍEX­#ŽŽí\¯�¨
+¥³ÈÐÐ¥²1j®³*W¥¹e
+-KÆ¡ð¯P²µÏöð½F[&7#Äf>ÔSWÍB1vŒ8ÅÂd½§Ò©8;»P7�aQ�æfª¦m
+ ·äíiÁ,„.ÙÈ‰-«ÄØö†Š‘CšfÆ;cíÝ£š×¦:ë6‹¥†8%9Kq\–
+!¨“9äà!bêO_`oŽF|ðÑ)Àñ“®®€„g £Sè‘©zÙ4Tm�q‰(.¤Â2U‘fk|â@u÷�Å°Ešm¹ZÍã0{asðu�ªUdŒÑñà
+©ï't‚%£©Ôz®uÚÞI„1pÕoÍ¢È“Ôûºd™X±,Èå3¶D²uâ9wD˜®Á$ªÚœÒ<±i1+Oø„6·áržåìèC®žÕ¢2?¥+†Å=¢Ë�)®ÃMØ+#ˆMÈ)Û³ æ@l¤„aJvXÙœ©™�ÁrG$dhÎvm†hgð•¬ÑTñ¢‚ý.CóRB@tû›¨Š�
+ù¤Â�È
+È²®¶"PnêÉŽÔ1Wè¡ºº…A¯”Ý?*ÃÂÆ„­Vï­á—á?UW,ª™‡q±OÐ‡ý‰šEE¿œ¥ößMtÒiPô~öCíH‹ŽAîms#ƒYƒb5pd˜bZ�>Ýdp,¶#–a�’`ÚgÌþ�Û¢²)ûA0F†²/¾	Â¶¼d·§Ñ­Zº¬†ê£ÃÍÆ©j6¨šÊM(Sf§Ã@—A@nÄY!¯²huJ1Ü,L+Fg¸Ù©º	ÁvÙÜ]9ˆ¤î–r§dÒŽÝemŸa]F+¦ƒ™•PÅ«…„F¾·ªžT…‘†‚ß“[YHµÌ¡.â€üþ($å“œÄŠG3¡K)»Û5<¾ÞrêyâZTc$'Nž€“³nn€íî»¼Âµ[h£”k› *ß¡|I1u×MÀC‰Œµ%*­9tµvÊ%¡ÑÝŽ Ê“ FAð"±Cl	ë��¥#&¬Fc)™f€ºî½wz¦Î=˜Èv7ë1`= vVQ²¥0²í† ¦;qÛM;Ó]pÅC�vÈ)#ÍF‹=°Ú¬E³±ÑÑÿ{}™vÄkè˜yÃI'¬µKW¥
+ÕiöìÏcÙgSšŒMõgÜ™ìÌÉ§ë€”¬¸P¤yoM‹BÎ¶áU†RôÉ“êuL1žùÂõ… `	� ¦Hwœ‘Cp·€…›ÌÚvÔ`p™ÁÂà`÷Ò"äÚ�¿·éCÒ{ƒCqÑ*¶
+‘ÝçÒ-ØS‹2¡¸ó=z,Fz�¥Ž¡s¿·¬PÚa­ZÀÕâü xho›Ò<�j§+­°˜íHFàŒ8·�AH!@ÆX\$AÈ•â˜’t²J1˜šAä43†)›«(ÈÆzV¤ •±YµV�Ä:…3\J–ùBW»ÃPªmW(†ª+MU¡VM5"–ŸgÑ:((}¨{€©‰ïz'\�ø
+^Ðps.Ù¹ZcÀófjv‹¿-0Ygš¨-×¨Ée
+cîü¾¤îºˆP­7ŠÓ4w»§¢µË^0²RÌb"1qëûsMŒÉ.¸ÓªCpÁžföç&cG´2gç0CuÂt{�Ž,þx8‡Ñ’¥¤'v¶0jr0øüWàÕì“†Pï‹Û²js.:¢mfŸ³U"ÜùÁ?Ù4N¬"áô(âÉ4âä(bÜEÎ	êºz†HØ¬lŽF€aYàÓš³5?ÝõlŽ±2%Ï4VG‘‘3C%yPS#i°ó;¤Yx¬H'¤¦š×ÑlbhnÆÔ	\5ggÑ9«Õ?L1MŠí6aà	"l†‡Æƒ…4Á…™¶W‹~‹&0'ì§½1®fk(2h0š¿ˆ ©³6ÙöP,\�©m™Ùªë^8T]“Ee·I*²#*DrVe‡ÂqiÐ·Lë‹É"˜”ðèáÛ'`k±@$O,Z“Þ÷hÐC? ]\ª×û“C¦ÃÂðØëV]Zp”¼…‡^†vÕ²T-_Õ’CD&ñ	D@£X"[4.µxÆÍÛÄ�¹DÌ15ŠB¸9zB=tb(x&·‚÷,úHÆˆQM}<–©x/¹j<«-è{Št¡vu’ÎÎdqÁZ*ú†baS-M¨Äxƒ-U±_ÃÁËë\l¿þÁX4äã3`ìœ’AÎâôUiÖéêÊsuQ²Šui
+U�Ô¯•´÷F�S±›3U<ÁiœÞr¥éi
+›SÆœÍÂÂÌû¤WÇ˜z{¸&¨¥¥nÓaÖ1eÕØcÆön�·ß_ãýû[ÜÌ·HëWÎ^!?…U‰³‰FLD'…%'jôZ.»ö¬õ{P®¼Ì�\ÆŠÆ
+$�Jª�¤˜$9Úìe.·	Çw	§G'ëˆU´DÐÑ!*Ë·Ã®œ5¶û˜-`�ÈTÒ©ØÓç"–t›dhJN[÷©Ÿ‹¨ÖÝ™‰jX^i Š«µ”bY]¨"#e/³l–©ƒ0áVCmZ‘’Ã•Ù9«àn7ØbJ³™ªÆˆ!ØR=+‘h–éä!spÁá~ï×OÍR_DkC@P°Z–’ÄJ h$ "óÝK8ÃˆNNaw¶5o0·é‚*xCÁ.¬.Î)“ë¿R+ åT¬Dª®«î5O„‡÷Ø½GõŽì\ífÝN�ÂKõ†|H­H¸Ç»|¯î¦¢ûÛz`r¨¸7©Ð}ú—p?û"¢œUEv’¡0æUF
+ÛWX
+·œGïPR¢ª,.
+åœÜ‚;PÅ–ç”ê²²öôÎ–Y­²ìŒ[Ùû�ÑÙC¬`e§$j…i¨*lµæ c`¡,±•:_.í¨ÜÔix<—¹¹$v÷- ÑVì©y(RóÞg×¶Ô	ÈŒ�T[.…0W_+E±â¶ÒÒUê¨²$ƒÙ>ÚŠV£ySådTHæO4-‰äÂtÉ
+”}q5pe¥un¾Ôâ»;»?x:'`ô–/„œWïwøöË¼y�±ÏoN.q”ÇÃ
+qcö…½N�ABÕ´p?ùÂ™Kú§Ùž«[ó7‡âf1Ì�š\ª
+µ€,_^�æÊ°Ê¿çí
+ngÁÍ>áâ–
+–ê:Y<9pÂÖ‘0Çí=Ï;ç„4Íˆ!b psªÕM²‰Z§$@VeŒaÅÁ³¤2#‹ð‘©‰�2Ùô(Îèó
+uç>Ý.-r<�ô¢^¬¸'¹Ò,ï¥Ù>ºœsl÷æ<ad`ˆ1š;@Ã1JÄ�jÅ%Ê1Ïf•s��®¬ˆd×8²…ÔÉ°x€’e!!ï1Í{ í�ÍâÑÕO¶ÔL3ƒ‹ÓxCç‚l5fœ#B|~ô€M¥80Ÿë 	½¯©£y—õA%ÚÐÙêãŠê›P­7‡û‡EŒ�¬â†§àŠîÎ|Pq¸áXNZ?”Ö­ýWñÜñøIÍNçÍ ÎN¯õN¼Æ¡™m½ˆNÉêWØJ…xl9Wl±ýge÷³òRÒÕî=Gd&R1�. rµ{µ×ïç@¦›jA÷bµfDSóÖô{¡,Ì
+´ÀÚC=àÂå%9—ŠÁ'‡•Šr\]ÏQ–÷t‘IR³ÃKgH}ÂŸaÖÍBEª`‘(×Ìì”iÎØç"ÔÊÕÛö~±Ëb§jL(N8a)ÊlÎ¾d;‰ª/}¿¹ ÏSÂöæ»éqÎˆëlÎ_"�×Èf,µCv–„}ðlø@žXWŽƒ2ý�x
+�óÁsÈÄÈÄ¦µ(#d™lâîwÚÙÙÛ½`»Î°'G·³àdVœ¬3NÖŽW&X#˜ÍGœ'ŒÃ`‡+³óÇ¤6VILÍNB` !ÄPäiB §T“Eq°Ã£.1–�ÒÏÔ³
+8ãÐ“a=^ŠK°ß÷Aàt×¶àÏä–"�¡ì•C0=– c–à¾SŒ0Ï‰‡ˆÍ*b=pMk��¡q€d©y»>-»%2Cc€ðñ4ƒ+ó”ct¨¯A¼%›Wì|ÞØûôNh„¤!(Â‰¸(�4ù<ÿË�ùáÌ Í’DÐšV�6ÊZÁ÷†ŠLô³÷qtë^IÑÆ£©N»¢÷÷„CŸ¤û\Õ’h1ÖÚêCÜÒ:šAÈe0çF9¦BröAQØÔ°Á–”1†Áe´Ale´_¶ÏÛ^Ç0°Ûh7ßüp¤Þ T‡ó×»¤6®–#T ‹ia'•ý¹…u!J¨4¥tv�w¶XˆC›�F§Ru!¡+åÍ–ºn™œÚ©ÍvÃ†#Óî�‹ÝúéÚîKñ$=©8'íóqž|�^YTž™�’˜»¬:}ÛÒ:WQ¡ÛƒSÂV˜f}ü­( É,:LWP¸ZGÅ�pz¶Âó—kì¶n®3ž1�˜o[d ËBìÊAAÙ)â.VŒR¦	ÓP„"˜•{\ÔõZ,Âºå÷]™&Ù­JruÉuÓ ¾kt®ÄeäÌíóŒë½b32N×	ç'#N7‚ÁÙ]Œã°GäÑïQFÊäÙçÙ¢™K.83`6;s†Ì
+Ö,1Ò�W¹ºHCLŠ>©;é¹ÓIyÿbQ³½uJÂ)·û“írT7‚ÀeŸh~\�ƒg|Z†dŸˆL4˜CFÊ$H4G	ñ�Ûs˜ýˆ¸†XÕ,wKÌdßSAàÈÈ1õ;	îœ*sJ�=ß=€b0øKsm¦Ê3b@äh–ò8ÈYXfe÷ÚˆÇ;q:8¨éðÐÖ¶°Rr<Bl�Y©l¤÷è´àÎD¯éšê¬Ã`Ã^ßXRØÄi¥mQÖApnÇ]Ê[¿€/a2ÖK—ØHµó·Ö5Ù’Á$Tö"Z;éfÅ®5z3FAÔ¨þ¥˜£©S|³óÓÍ—¿E{÷gÆ2_ªyß…©e'v¿ŸN:ê.zGZ¦–»ÁÔ1–
+½‹–Yã¥rt|úJ¯èn¦–¤½Žµs­mÁe¥«/ÉBKíóÆk.¸.£o™©˜cçÃ…ÚYk§äfo$Ûn*eñ|‚¨{“‘{O‰u’R)´Úìc|çb¡úµ¤²¿ÒÂ0“J¾h¸&D}ú|…ô‹3¬ÖŒ«Ë„¤'ˆ§ÇˆÇ#0h¾?Ë�3±Ó|ÅjsUï7ddBfc�©t“¥Ov%€M�š,NK®¡m*Fð¢bàé0¬35TÂ–C?*%0±äÝžp»Ë¸›2N�6cÒ(5dB«†%nýbÂI+¬ÚÝcYÙ>¤œAvMRÉr/»»Â	î“‹Ïžô!œewÅÖt¡ fKttX›DJþ¼Ö`KUAàèy5°e;ÚîQÅ”ñp3Ð ‚(Õ
+¢Ñò9 ¦ÃÈ>-ìCr7i™,øŠ ¶(bD³-A«õÊ&©y6÷lÌ­8îÎœ‘çÉ™ˆOP2á!ÂW:õìèÂV·Rüa™8:Ó»¦­3(GJ˜M§ìí,åõQAáR”ˆG–æ=‘¬trH½-
+æÎYµ0œŠMyuWí"yÕcxUÑ äVôlþ÷_Ëµ€´›¥ÂáÁðÛ!j…£ÄY>eê(‡�»P]‚Õ÷)‚œ3Ù
+V¨¹%$‹ç"#Œ!fj™!ÕE·$·ìÜ;ìöl
+j¾O�
+{)$­BoÑ_âWëy×gk�Û‹tð¡-µí\êTÔ-îú=Ûa˜UuV&#”è€2™&’²){HJõ÷@Vå¶0@ò–3Ëlši©ˆæ„KPf·K÷ÏDP3GÊò²j\|Jf‡æOÏVˆ�p|:àö&a?m�Ã¶cÇ™4²‡=µ2x„­[�“™rìÌ'Y�à®TôÜim¸×l‘º¢¦ñžÜEP³7ì$!·É¨Æ‹eO¥]Rc¾SÜÍŠ1Gc»L+ÁŒÓ£5b†Áë”*å�ª™¤J)Ù>!RÍeïIEw1‹"“FÇÑûPµ:í*-•è\Ì$›Ñ¤ºòPD+¦PmT\Ò ÝNYÄ\²==°í)SOýž!Ud
+?K€fûü¹9PKÙI¸™¦d N{D±x0Ip59°#$>™ó•PŸë�Íø3øBž9Ô)KÝZ†�Á!Õ”Êx)êe‹ÜŽÝ´vt¶]Šž‡4)ÛÃT vÃC¢">ÕÃÂFKAdéàº%e™8ÚWË]Öfod{†Þ
+¸ëÄ©%pøXï##ÉÒ/­xÀ!,"÷²*ûŒÒÍØ¶ØN¤Ó–”"’<çeÇ
+ ¥¢pŽºÃ‡Ù}tÄü«š–É’ÌÆ1`C�DØHÚy‹•›Œ¸ÅæRorWˆë,ÒKñp,ºZ�t�cMlÚÍ*‹.B—°²fö¢.Ú'V¦!.qÕö3¤îÂª³¯ë’?àÅK¨îËjŠf*åVd$ãóO�[‡—)ÌqhEðû×ïv5Ú®¥vÔfõü9Uh°&F\Œë	77„»»-vû÷Èi
+](Žˆä4`±‰¶zÉÔ”úE“â‡Of[‘³9Áª3|Êô.R¦"»_¨žvÏLiŒ¨ìr¡Êª‡@e±´;²åÿœm—tÅ-»$H`$
+8;YaˆÁºwRI�ÞËd‘³‹Ðö…fhíjwÕª€‡G	ha[v²èò<´?Ÿná"Ë µv^Rg›Ò›pÒ"ÒbNÙ-~c-vÔ‰"åÙGhÈIÎÉiÇn¾èö9š6¬±áàÆ I=¥“°Z™‹D„œ&ìwî),ó~�<Ï@ ‘ƒí>DÄ‚-/€ˆk€c4ÞÁ=ÚlaËt¢2ÜÓH<>´æ¾ÇU“Mµâ¡ÅÎáP)Ž>Q®ÃÀ�¥'U¿ë�ÞÒ¡óZLzè ÔRUµþÌr²yæ£h
+Ô:G.N¦Ù;¶bÈçjô
+_õö¨ã~ÝŠ®ÁWf²F-³=ü)IÝo‡`Å¡4)vñóì1”%:2r
+È9 '®KöŠ¾•£Œ-*w¬€D·w^N€ÔíV<¦”ZÞB‹¤m�…!¹õ>·‚¡$5J à»„ƒ¸Ä"‰/a`®ù¨6ïÔî‹
+TÉWéþ•º‚-ž!á8½³e²z—ØïÈD!8Rö/ƒY$*K›{:«÷B„U2!‚Š ©)÷…b0eáD]º‰ùS%€	7WwxûæÜî÷˜W;„óŸ!>y†W51SÅ&ŠŒìP™²ÿZgÃK(ö»I&h‡R¨;£ŠÎ
+£M=pžCóã*ÚtAc�©àþ3‹ ¯Þ«¾ÃIäÅ˜÷HÂ˜2!pºÊs±÷õC¶Ý¯äÛq]äyf•FP Õ�T£k—ÿ®¯ÝSJ‘[ì„äòwZC<eÐîsñ.nS_q�â´›�ìZ˜µM>�&U$Ô¢¸øŠ{úy8/¨<·RÎR†æiÞ¹"bÛ+©ÎØOj%Éû)%„ ivû“èEÄã€¡ÐPÐE$ZúKÑAÜ
+=fõð€j\µ·]¦©¯-ú	¤	ñ�%	=£iuÛÄOº( QØ½â¡÷<µ»ûúÅ"wÜ~n™ckæÙøn‚%#®3µxÉ¢X->7ýA» W�'ÃÙKA‰ÒŒ�1ÇàSFgéá‡NéRÔ5&¶ü•ÚU”`(³›húv0Ú®Älž‡! Ìl	uþù„hÅƒKlpµw§¥ñ%ˆÅi"»Â¿¯0ZñØÒjC]L®�É½ü™ò�,ÆÈa«.ŽÉ@L#b	{WÖCŒtÅ WT·ÈN9Õ\­DÛ3Qö‰¬~+ÆŒZ²/Bw/S³Á¨‚%ìwŠ÷ßßà»¯&ÜíÞƒ6×w[¬%c8}Ð`°Ôrì;W%­æ�V!pÀ< 	�S†›4�¼é<Ï!ƒ;z›ƒºÏ)VH½¿˜OÝE�Jž·C§•fÝ&Þìfh¶ˆ×}J8?Zãx="ªˆE½¦>i„`Œ&õÉ4wç
+Pî1s†e?¥Bv5ÇD¥îÔYn9K»ž¢.rõÜoèª`3ØYÝ‚<^X=oÄ¢³ÕôRbE…Î%FRBRÀÆà¦6ÿ²ê©ÆÍ�­ä{¨’GdHfÜ\�4%‡ÚËŽUŠyw¥È—”M®F˜¹Ššü"êÐ[êQ–=þËÚoSz¾ûÒeYD–vt=û©¦-¬°—n¸­”¢P²Ñ¿–Z
+]újub·%¡—Úÿ•`¬bLX�TXÊ8Z—æ [Š2—¯%„Å�_Xï\ÀjV%ÂT;ž1
+†ÑŠƒÈ¡¾õf·8­Ü…FÏ¶¿—SËÌ²luë+TóÀS@C…±J†v–/æŠ.Tb¦…Isï¹íaØô=—ž¨ÿ:H¤®ë‡t§Ù×,Ìý:WhZÀ`mÒË"-ÃÃˆô~yÅÈQi‘k#.wÛ1YJ¤´¼”ŽÛW-QÐ $“ªh·½~é`_îÄØAiÞaº»ƒîgdÀxÁ
+4ÛAáp•(#“é\¡úÊ‹S$˜q�©¢aˆ2@Rò×¤Uw j‘ƒž�¨
+KÓ’:qas5Ë 2Ù¸FÖˆ&têìVgHÎ¸ÛN¸Ú$<=ÝàdÍ¢`Š!zÖH¥Ç£ƒU´
+3qçÚ¬KˆªÒ%­EDÈ¼!Š•}efùTSY\n›ÎPP€eŒW;®&ñê(Ç@ãXòÍQ£¤—•09T"a°kŠ×/™ÉŠOŒT!pæâ*DmGÔ=´TkÆH1ô4WébõZq…¸µÆ(ç¤ˆý¡E¦F=À¯¢G¸µËñþ÷Õ¥iaÛ´À(ÂÒ¥ôÈøþÆlÊyíöZ'ypòè:Ñr\ÜU—Mñ÷.E¤t3â~F\'€ÙÔç&G•n¯x<6�ôd3ßIUò;^Ê�h,­zÓ£sµ<ÊÞ‰8t�¨e%û¾¤X¶¸+Íâ–Ù@f†¸÷µª §Yê˜vn™ç6"ûN%ºe‡C ÕÕ——…¦ïB;Ä®Øx¾	Yív'èvIÕÔQë�Þ&�¦/¡2m>qxðŽçChßÕªÆ¢ÙÃ?D6ïˆÕ€rÇkŸsKŽ4]ÈÒšG‹'µ½\éä6Gž½<Æv›Ã„)˜¶àtƒ¼¿Ip1ïÆÉD`BÆ²I>	d/V)Y'Œ£OÕ1š¥JŽHÓlÙÝ¹7¡5ä ÷q@U�n­¹R›¥KÍMñÉ8»Ð.°bˆž	îŽÂ-·Ìž±”�<'ÜiÂn²=É~XÀf8Z¬FÆàÍJ�&E`…žZËf{Ò9üfGØ5&ºíY§jgN,ùã\,cÌ(IOY·�goà	)L/ªM0{B¢úëq…Íz˜JR'äXŽŒböb?BÝ)×àtq2uqÛ¥9$q\ƒ(€'³
+!ÔfˆÀ£ª‡í¹€·8h¸‚=‹>¡25[#‰VuÿÐ¤q__q Â{p	þüÔa”Å½“´³Šïw"µxè=Šèb_½Ç´ªEEû¬ôCûÃ×J¸ïãÛ�qú|�NT:}»(E¤ƒ¯ÊUZ,õi°Zµ4Ué{.Xj¿3)ÿÎ¢ÄT§£Ì”Ñ:
+­NYÚ÷—öÙ:Ñ :ºrs©éPr³s·]‰aÅØv*FðN¦LOC0hlhû—{WÀ‹Mù;ÔÙ´$CnéxÞÑW¦4´$ˆ×"è!@¹6�µG:'é˜åU4×¹QÑ�£ÑCF?eß#}Æz³’¡1+\ðŽ˜8>ñêgÇ‘py¾Ãn�±Â4
+öØ#åŠáÑù´´	[Œ³4š‡]ËŒ¤¦$cÄ¸bã
+*‚‰$‚¦d×Þ½½��Mè�SìÞ�
+HsÆœ`!ÃµF-îØÌ;¸˜¨s½ ž­oÔé,Èy2èF"ŽV»}À´8=p¼,¦Ú)×æ“UòsŠ»›S÷;:?;©ÄlÜ¥%SbsA>üÏ*÷ºuûìÞgäº”bÙ(jÏ‡ª‘†ÈVÔüy�LˆBÄj±^�þ{“géØdÜ·­í3˜¢épŠNŠ\·á¹­ÒÌ~ßR6Ø5FìZÉ
+¡vFÊ	�	ÁšJ1Ÿ¼b`1�ß>Ø�ü¸ª[ò/yˆH»p'¡¨CÚ©X[¸S¬¡b¯‹Ÿ®máÜï3¤+ý¯×PmbBü@
+Éb­NzÀi« 6��æÊ¡²ÿàÂÒÐƒâAu»W+k…hÊ4¡}�Ò¡�™/Ý—½‰uyièö%èòC¼àPÙ%J«”%b›ÔEsÉHJ®}ðÌs/5#;ûµ°£UƒPÍÈHÉ!-2Å‹ë©1ÀìßÔCbº,4±î^ºÅ=hiÃÓÅÎ÷ƒbeQü‹´{
+%X­~V JV@Õøç.]J¦ÃBÒhÄzè×¢£3êFsß5•˜æÒìŽ«€'ç„Èxòd�íp»q½OÐùy”VP\uð†/\K€¦O’
+2ö•ãAdMŒGÈà*oÉ&oâ&ˆ­¤	¶€2UEˆfÆ'�ö‡Ð¥CezfÙ®tçfÑ˜mŸ"‚Ý>¹Bœ01°ßæH‰±¹6=€5KêTßow0i÷Ì.Œ©himÐÂ`C'7Ðê®LÊ8½„XeµI‹³]»ZÜBÁYWÆªšfÅ¢ƒ\À\ÊF�/© @eßš}ro4zr¨ÜÌG“½?UÜéÎ{Öà!s;Ç+�ŒÔ5l�x¤â¬5�3à"8JÏÂúý•ÝÔ]ñ°z\_Ä˜È/�	í$ŠäÌ‚’OÝ‡EéKñþ(¿_éq�X£, 	]D›,øãÒaì‹›ªX“Qw™²}Ð,Þ=(¨²¯úÉãÀ¿‹î>t0ÒÑÂ�¸;$K1a³:¥K‚ap¢H�‘-0ž8þ?&ÿ³Zqú:8¯Œ².(‡å-”áæ”M¹�J�3»ÝCrn"?iKerKŽP ®Ðb{û¯²”±¸�vI�Š*6ê²·\Ó"ôÊÒ…OØ¹h7k·'£JÑ:Ñ´äÃ²äõpèâïBKªDaûÕRäÝ»39tª*Õ´ÄÈ8:¬“dÁ>Í@º‚î�w�p
+„{Ý±O¨lx|±*Û$cüe¤ÌÐýÞ¯EF Â0³dÐœÁ³ø5¢Ú¥‹@FHc£KÏHsï+S4wÈugàŠÙ÷‰ìþN� Ùà�ýdB[DS×Ï·×û6a3ŽÖ6!(«.„àÔüÂ˜RWîg/8mÏÊh÷ù54‡d©>=R÷7T')‰«þ¬‡XDŽ¨qÁbƒ”J2M	B¹;äÙQK¼4“Mny; 
+ h ~¼hnIs}�Y�âLûbsV(¡o‹3’	Ÿ­({HuF^|ÌùVñh$Ç�D]èá�@þF8ð¤z i£Y“v�¦v	q­Ü34ì>tf‰ý¯=¬¦_þûPŒ(E›€–¯^Ý<;Û¨{_!�)WwR¢Òå,ƒªè'Jk™ö½º®�_ÕmíÙ¦’)òÀÕ'ëÐ2gEH‚i0!b�ûøHÕ:ªþòK�Þ¥… ×©³ÁŠUfó2*Æƒe�Ÿ»BcD£W˜Km³jêNÅ'•â }�÷éÏ¿À´0
+•"r«®¶¨n®m]ú)q‘Sg…RS<aYè}þ
+š¶H€,µ‚ÞZ±ö¦•q{™jnÙŠ¡-4gÌ»=òÝrÞBâŒêÝjp[~‘%‡=Z¸RÎ¶»(‘§Ü„10?Ä‚‡`õÉÉäÍIaø�ÁÔö"¨bRQ [ô†HÈè´Jv°
+?=;HƒÛ©h`¨F_D�@0Ï±íœq¹�ÀÈ8]ž?‰`ÁCÀƒÛ"‘	ã|¢hä†eÔqam–“’ÊôMžËîýfƒÓÛÖúdTb`ìFÈ	µ9"OslŒÍ^6ËŒ€ˆ8DD�1*5kGû\“ßS}‘58®+ÒÔî!Ñê™B¬é�è‚½js½�áÅ¢Ðœ«GÛ�hÏ…=,J’.!¬{Ý¼ü-írï‡s4­ˆ>àÃuPXº6°w1=œ8–š,n<fÌøHál‹ö–¨‡šjg*ÒœÅƒìDTg@g³ T«g=2•)~‰AïîÙÇtl8&uÁ¦ÛÃ÷{ ÎŽ>‹�œÍ_+‹Ô¿ÿÑ…Ê˜03!$ƒ®°àö·|îÚ¥+ê¡Ï¡å‹
+FÉBI³Ö	‰Ù¾·»(Ž*<'MÓÈõ¾�G-HmÇçäS7¥hµ«X²Šˆ›_X1·\À»…0Q0í*žÔæ¹Õ™7X@v{}(¢âÐÂ¥íqÚÚò¨LÃòþDÉà	aH€°åµ…,iô…°pyã:�À­…ú)D„2­‰fälŸ[äŠÚ	Ë¤å°,¢¹NÜ¢F…)NÊê>\\=ÍˆàÝt+¶…\A>-­x…!ÕA93�òŒý~Æ49…ž§G„<2Vl*|¸a¥‰lS±‘¨SG¹©ƒŠ˜zh�]éL)/bfÏ«õ3e˜�3#±»óf»_cˆX�±2+J¢ÖhnV#†a07âÀ1Øö&4¥
+qf5K�âŒÍþº[L…t(
+»{0È1µ©ËçÞÊ+Ôþ®³ª¬À•Gô®÷D�jzÏLñ!«=,"ƒÎ�áïÃB‘‡kç•ÕýHír<ôàïÿ>Þ‹ý»¢JnJv.¸ªçz/ùÕ	’gHN™¡j_@jB4á½ý<ÏTyøó¤ÇQFz +%X'Åj¸uëõäƒ l¾O"Èƒv“J+»å —,HA£“:YtqžÒÉÙ»žJ
+nSC+4
+ß¯¶2NéÌbÂ´°l…F;2€A]"É\Õ×RMÕ­·½0¸Ó(qË:¯
+$ÖÒiAEoI‡ÕbWlº�êò™¡Cy<-ÍÛdâh£vë�å»‰ôÃÈX¯Ì‰M(¨
+¡¥ÒÕRŸDˆÐçlS-„!Ø!o…ÔC JÖºgk›D:ŸfŸ$UvÜ]UÍ¤œÝŒ“Øœ»ËÞ¤@=lÌãÆÀƒivæd‚84óÉI€Ë}†ÜLØ«âd3âX TÕþEÍ�5×ûVêŽ«,¬áY;Áv
+êŽÅåIdFŒÃ8‚5{ú¡v”ÿ.šÌ
+IVÂ‡èÙrþIBNV€"+ŽØŒ+›˜ÀÑ½§T¡9 eÓ€ùs-b»:×¤0¸…[�+
+¼ØÒ…%•û»f
+7™CmùNä(‹OÖåþÎ‚y¿/ÖAfƒê½Ó^¢ñê�wó´èæ—dmiª÷
+À=@MtHYPy\2zèõèÌô€�V·|wËëªœÏäžS	’fHžìK¦ÅRrÑÔq°{(Vþ¡éâG”þ¨;H],ÝI¥–q]¼{a¯%D9˜R°Ì>ÉÂr3{¬¼t”äÚŠúg[;AÝ²[Êß?üÌRoúÀm¢A_Ö»"XÒK¡�'Î³Ó’Ë^…­p•ô¸ÞÙXj¤*†�–e©¦ï–û±³�aº¶FÜü’˜Í¸êÜúAã^g �H¢è1p$ŒcÀf£È@1‚„1Ð 2XÕpnqŠoOo,':fu{ ïê=v ^‹E¸yKýc¦jƒoÐ æ¼“g7OeØÁÔBÃŠ�©¨ÜCcF©F…%ñå,˜U#9;Š0Â„I—w‚)'ì“"m²³	ãNÊHÙ?ƒÛûÔ„…àk{n;”J:,PIÝ¯ÊHÓT=Ä¤$y{ó@Ñ]È]\™róËIVÅJ�ø2zx™Š˜«_*QËõº]˜�Ø >Ê•Öƒ¬yDö¼‹v´pô@5ãä*ÍTìU¼õpBEü)þí÷þ×Omë8žðÓÁîBlÀ:5õ�brO™^qÀGÀ©ŽÂsÈŠéúíÅ,RB¢P2ÈÝ¥5çÙ&�4A³}A&Ç³;GÊ!{ùÇ‘«Ã`§nR¤¦Å2>öžB�–9ô%ô‰¨�Ð%çùÝ¹Üóèjz,ôµ»Ï]bã=F«ýzt¦UQË«.3PœÓ¤�…4¶Ø» ·¯Šû™Ë.ÉR©_,ñËâ´ÚÁ„â<p`¨G�!‡PNaØQgé]`0¦&4+,$~Ú-b½}«¤Q×+f
+›”B #c\kuÝG2ãÆÙÝYM—½xˆ\�v,ƒ>‹;?¨BX(“�ßÜ=«uyœÍá·B(Ú¢Ÿ+eŸQíÍëXµx¯°@çB«v%cà¯sNH	ˆ,ru°L�¬–)’ªJ9	ôH°55·¸ÆD,„!6‡l&ó#–®g&D%÷3Z±æŒœR5˜$g)eŸè²hµ“¯yéälŒ7ûŒ=­Nr†X”�_šš²3üŒ‘rB’¶è¯!aEI^$Ü4f!¶Iª,e!~¥N[Wi_`“¬Bm§YrÞãCì‹ÓêO\Âï÷�ê}Ÿ§E–¸*œAè�º¥÷	´
+*øðJõë•%„…^e]ð\˜c©
+:sÃljÝlH-2ƒ°„±ð`î!õ~Æ:H‡Ô~ÒX$Z°~^Šû	�T|ÉpÏÚx(©R«Mµ>ðâÿ\‰m=48Ô’+žCak¹…}¯HšqðE ¸ÿUu.‹þªÂ%h\û@¨jï2}˜£q¯g�Áa*àÜ1ºŠ-L9H}qR®ÓH…‚:(¯v[ôž�§ï�ºŒ”Þ�¡A«¨1¹5r ´‚7À˜³n¦©33Hg�Æ6âº[õÚê¦'R�EÙ®Yµÿ¦åòÍ½¼Š`F{ìOm’3+t:e•”»¸Ó8Á£U«
+™?£9e(	†Ñ‚§˜M·"ÙØEû,¸É
+$¿îÆf ÌÎŽb?p_ ÛûþBÐÖQÁÜp%Õb°/úÛsÃUÚï>Õ³V´ªÝ‹½�™BZA‰a°:[·_òës7ATJ¹'`ûõàîÙÔGb—ƒN‹Ó…ïmŠ\‚;Q.³¹þr@ŒíÏ÷ÈQ,PªWîA!i=" xäv,ß^ð&÷¦�¾hàÆ´�×>ðè=ÇÞö×iQK>VŒõpŽSÅm‘óÜM3@É•àÚ�Ã?mlÓÇÃƒKB‡Åt±”¥K�þÏF�VvSµrA£§‚EÛSQ+¬áq÷‚ä ËâshY¡.‘ºÛèÇéº
+¨¦’Rõ,Ú±^Êz¹°]ê–šÞcq›jl¶LQ	×n®�,ZÅ93Bf/Tm1ª]Kì÷� aéf\³UÊßã%|¥z 0­a].â!¶cŠÑ\{‡¨H9c–„ Tda§ìG¡þl¦æËÖðnz$w¾.ö6
+5²DÍ�?èÕTœS|)ÎÕªƒ¦®E3¢íy%mË|£3“/ÞÍF$© ˆÉ»YÍ	%ÉÍi $9…|Ä<WÄ
+•-Â�A:x
+Š²¦ÁF(›F’º›‡šÙHì°�ïtØ!À”�…9„c.>‡ëŒø¬N^˜sÆ”2ˆ½dxÒe‰-`•â_¯—Rk~QÅ†%Ç%×	ËíA�Ñ`2È¬lÅz›úÂ4Ô@`É]ái“c$~LÛAîªËÎŸèAm =V?ô`é�–¢º¤Y.4%ôS@ÿÇÑ�°º‚¦§÷*�v2Óâ4…§È+ „fFíi^¾;ù½ŠÈC› ]äiáA	¨.a®Œä-yÀRáð™Vá¹öÚv
+�~ï.¤KC¯•éd¿Èo“]µ>éïŠ2­dYÀg‡¼À¯•E9{RîæE�_¨œ™ìA›1FˆÕf}[Šb^Xò{q
+rŽâNÆ9,Ý[ë¿KÞŠr[Æó²Ð/ÜåJ~‰¯A,O‚0Š9™÷RàŒH3Ÿ>º‰¸ÒÊ{õ>µŒšþý(-hÇª-¶€yÙ<joÝù¯Pa–{«ƒ«°³NÇZÝ ¨ò6I¥�Ÿ)ùnÍ†®ÚûÜ&U¤”‘„‘%#éû$X¯B%L~À7è•Ä¢"+f
+Pã¯¹Ë/ÿ¶âQV™fF{&¨¹2“iòHMû²"Öãˆ¤’ˆL»?Ì’�1ÏÌ	9Í Íˆ‘1rh¡eÔÌù7>Ú²ÃzâYE
+]øÓ™Å
+að=Gqê*×£Ï…àp!ÖHa øèÉÃ;z°LÒ/ÀU;%0Dí°hE¤š=ÜdàÇxG÷T‡D'ÐÁÚƒôÁÝ?Ý[£·ïÅ�©Ÿºó[É‘ºÔM•�E:ƒÉülÊ˜¨¤Cå'mÄ/™º,"÷Êé‘×_ZT“Æ
+¢¦´¦lišØý!•ú©e�êƒpbexÝ³d¹_@¤Ë|ï�zR@ËBà à$É`†,�Á¦ÃWÌ„\²ç»³¯w	)ËTižPhT]Í´xÍä
+îºœWc
+™Z›8J1áP<Á¬ð©;Ë¶‰†–$tlŸ
+c	BPÄ`K[s!„B/G‚jò=ˆvëªñÊÄè4-T§Ñû‹ÉÞr…4TÝW�.Ú¡yRÑZäÛ”ƒª‚]ë¾ŽúÕúºË}ÑØdž£žì³OÙeì²b=1VcÆ�±.Ä%„�«%H‘Y­Áàæ°8-kskpO*fõÞ€lFÆz`„¤I��ÀE‚lÆˆ.þåÀ1ëMÙC){f¹-)7˜8°ZÒa‰¯æ¶ÏäôÞfV¡ØAƒG£ªÍk”ƒyÑ»·vÏD†f1+=¤ÁÒ}È¾0TúÓ—‹Ì\R'Yî:Š}‚Þû1Zõ!ôKf=@ú{²
+õ,–ŠŸv^[�¡rtèÁå>Q°Þ)±%.“|A©%ÂÖXP®î;?°ÝÜèq†ý”sXZµëf�A“‰,¡¥‰áã¥é Óå±wÓ½^,ìÑñØÛ�éâ÷›ª\¬Û
+bd„¬�×U+ 9ö°™.bM+_íXAt±ZÞße/T„eíÃ+L³Âx©ËÍÀ=
+„Kp”'–ÈÛ>¹¨Rß�X\ŸÙf´"ƒ©­‰¯hsq�ò„LÏ¬qx„-M¯’„*ÕÎ±»u(bGÏ t\‘°,Ìuº×%Kª/uRuVˆ¤é÷tp¡oJbÙð §÷šR[Š�C+ÍŠ½
+V‰°‚“U0ªñ!š¥E&€AÊâSÙ¡ESÔTÛ�Ò¥„ÄÎ"D
+XE»Æ9'$™�¸â;'q-N5=†è®È#’d$±09pôsÇl-ÈaœË4ÊMÝ§˜ðÓ JöP?Ô½S%ÌŠÀJÈj× °)ú™û½˜ïCDëò´Ã$Uïï
+îaí‹Þ-Ü§³Ê¥Þn£?É°4?ì¼°pÓ‚BùÌe¡:Ö¶Ûñ××‹º:/[!*™ìvÜ`œl^2T,L¼ˆ¨š�‰–0em©at0=Rè÷a»ý´q¦7Ø?Ü³èóë'øÚà'0Šïƒlô°Çfí^õè=êwÏðÑE¡Üeµ³ý7/
+HG„p–X›hú·¨‹""6™va_”È¾%¤T¬Ó[UÔq†#�3ùÎÄƒ»˜»HjñÇè(ð^@ˆ�KÑ$ÄÄˆÎT²rƒ°:mRFöÓÈr¹¶\
+RíÒÆfïyxíû]{™P0ê
+WÝÐÿ›°p[Ö’|H­�]ZÜòCášRdp!{VÇl;‘Ä(¥Á§m†1¸M«èN‹˜&œ2"…ZlÔàÛTi¶ú0{£¢ÏQƒÃJgªX/2ƒT 2j×’È©Âl¤&°­“dhiœæ `… jyüÜ3=G†…Ö¶cC|÷a’gö¤`j	¤dgŸYªtÓ…hQ¢S£wQ£v®nIÿÑ¥¯ÏB“!KÍˆàðá×%ÛªW­ÿ˜`±pÏùWÂýÎ…7‹Àõƒ³°‡ªÊ¿MÕé™u‹±¬é@ŠLâÑµ®û@ò7/¸E÷.˜Q�sx”¼@�J7€¹ô!è£thýQ¦Ønmiæc¥‡G”ƒ{íþÞeÙ„ôËyr%oD:ƒCÖš�Pá2ébVå>•¼þi~ae‚é-gAf­‹C–‰Î
+�Ì1¼^ŠIs™@Æ82ÆìÉ�nÝbE$ÔBB¥‰Yx}Yq0&O±‰Ë‹Hðü‡¦HÎ>�Ø^Žkz&Øìt5_mC–„‰nª�¾WlJë(K�.òL×A�ƒué€%�]ž:;T#�Æ©Ø¦ƒZR¦îÐô}šÚãº›S¯Pd‹#†™b–ìFòœVËO)yé
+Òs�‘ZñŠLb±?7ï+ñ©ÃÂ¦ìP�SÒí~L9c·Ÿ@œ~[L=‹Î¦X¡0{ó“]×"‚²Ê7
+®¹F¨hs:g˜ÁbÁ„�ªî§:íþå\‘ïV&…'ê–Wq%§ö]ÅJ¢ÅÑCŠ%ÕÓ�I;'Tj5D•@">Lro'ÐØiT}’ã…>›UÞ¼Ö@+tq¸%ÐM9´[–q_<¨.‹—ÊX¾ˆ²õ	„²í=J”m™>XÒßÃš€ûqzúûÎúÈ`B?^ô~Š?¡šèé!n„þ ûs¯i¡®Ø´‰Þ¨–Õ§
+X¹ZÂ©‹9¹$<e~ui~H”z?Z¸î_¤‹NbPXbŸTŠPÐbbE²0R&wŽEU¾‡Àˆ)`Îsf)`˜ËN$Xöƒÿ›B¬wÕ¢—�	”-B€BG'mtN±%44›
+M²„&Þ{Œ>NöT,Ø±ð;+
+aÕ,h³!UÅ=Á.9£	|Èá…Þe±‹j|ía&õö%*Ú—ÚÚ³K€žï¶²2¦”±�"­¬ÛVn�L‰#°(vm°”bXHÕØ¿�Ÿ)Z„¶RrÚe¹ÿÜ,sÎÒçdnÚ%/§Ãè«Kµm±$EßO@œÜ‚½½†Â¸dÑêwe;·bf‚Z°Ì�[À¡šì"]�äMÙw þAH	_–Þñµçq;´äo�–èR9¸EÜÃ«	¼DB¤&|ïøîÝ¢¬¤–�èA-Jy�¼ØW”‘|é¥‹xÿûôgÜ-0Ù
+Ó˜›&sÁ´›ybùB-"�­ïâõë„WöÿÞËöú¡§”~r1Ðÿ=§“¾ŽêÌ±‡
+ØrÏö0­¢Ü5.|—¶9½†<õ*{>Ø·Üg’-�'KàS1”ÈHÅC¬LÊ	‰Ð �Õ4S¶Hu;‰˜	³L™0Îf
+CWDbDˆæÿÄ!‚CìŠˆû~© C ,PN[�°7ŽJ½Td€ÀÉü±´e·=@”ÑCßì‡¹æu¼GG79.%¯ýýW÷ýA×³À´î!›‡˜—ZIL}¬.ÕŒéÎuµ|Ê‚}f„ä$X-A0T{ÛwfðhbÎfºYv!¡hR
+LG^ª#ª/œ¸˜5‹ÁY.Ët¤¦d¦›õ;X<Œ�Eð¸3ª`v\Í=èh1±ÛëîmÉÉ­Œf·Cæ¹¥„äÖÚ’2™¥¾±‰SÛ³CXÚE‹�™TÖ„s”›ÅÙ‚~W�„¥Ei·„ë7Õ}\
+ï»±ÇžYº›Rù	-ûx8…£,å*fŠ†‹ºW›ÇP:ÉÔ5S�€ª_êõ[öÒ¦Õ{§î>�ÈÞSp�"@ÛþÒ�ÁDú«wü PF;ïáCú÷Ý¡<Mý`| ³=Œ½¸�>ŠíõPWg…î;­¥’Vï‰hè4C‹Æú~QÔû»]î?D!r,Ä4"YR�¡‘ÁH`Ì
+$ƒ‚fb&LÆ¤bÔäÆƒ9´â0Z~yˆ
+Î*Z222%'(ÏPšMé\=“’ûB%hÈU�^\e©Oæì³ú¾Kõ�ßí',]‡�\`¶8µ	ª-‹Xq@§o+l5õdOé4Ú9*ìšdULIbÙc¡.â5Û¢ž‹Å9J¶
+×ó¯×U”³$k–.eßÉùŸoÑ´ˆrU_°KÊ2ÔË.>-¿ÝB§ïs�+ò@¬¢ÍñI&0›ic‰$.û@ñ_i6HÅô²|Þ±¼Kú¶t“/ìCúI¡‡~”ZÕ¯‡w�®j?.D;…sßUÀ\—4A­“�°µ[`Ïþ‚£©	¡èÐÕ_EHSìÄ
+æÜ˜0Öpj¤Ìöå{ëîÊ’òÐŸÿ@´xOá§?¸uè?þÞÒcyh?¦ÝàëÄ�ÍèA­ÊOZ°ÿwoqóÈö„zÖÖ’ z†Å‚ö�}ñ°òŸú�xó+„[p¾ß– —2ƒr„ÒÖ”€#”„©‹?e�é7Dìà"1Ö·Øßaˆã€˜G„aôØÙgÕäGÍH˜‘0#cBC0›o[.™6�°$@‡6…°ÏÚ®ð�úÞ§z.'¶úÉîßˆÝiÕ©rjÈ…Ö¸kVõàŽèŒþG�×-.ÈùÔ½'nøE
+ŽÊ.Ì‰�CF�ˆE‡Øìh
+™à*Ž¤vNQûßíerç­ÕŠ€ýÜ6}ÙTÓ¦_òâ¥”!Ùpf»‡ÚÏÐjmRÖè^WU0®¶íÁ÷»1�©0¸JUŒÑHRÔ<àà1þ�Åòî¸
+üºÃŸ›j¹w¦ú—T‹R•¸u¿#ïôÂÕ.¹y-¡N"Õœ�%î¡ÔÊµ×Ø+Hˆ ¢e;ê²�ªæ¡5CËY^ž˜¦ÅÉ,Û²œÜ¶�Éò?Ê.	¾Ø\ =4j?r|ërtz <\T,Yr]VuaÚé#"Ðÿ?0½ôw6Ô-P›K<%~`Ù`·‚ûŸûBáTïçÇ
+zþh>é àÙhÚ&‚°é<r†{mY&¹hË
++ Ð0@C°ÔÆò¼©&É`dË{p•r	Õ2#fÆ Œ˜Â`q¨–6Ç5*6gA’ˆ¤ÉsËík6PÎ'Ã±¥lýµB4ý½¶4î
+(ôÁI¤‡«¯U?.¾çýmXQß;K;h»Ã–àÎe qHtd]èœ0L½‹²¡qœÄ|‘M¨5,Œ›Ù'Ê¡Í½�X;{ˆ[0U±Š×yu‹§óš“�ûÞ–€6nÐŠR®QJE3„Ü¿DƒìóÍž'R>�Ò,Ãa\r&×Ð´“–dÈ!FÓ8¹•lFñê’ÞÐ&‹"Ü±¡£ë¶\Ôzñµƒ*›²hÂ›~)»e«xš7¨bÁýv/{xµ€®åÑªØÕj~x@·Ð#î¨»´·Í:!CüÂY…vÛv™ ºt‚‹¤NZ÷r@`¹è}8ù�ýz¿¢{ûø$ÝuwŠFlÐ*"ÎÑÿï‹ˆþø²Ÿˆ~:)€Ë¿¤+–â`òÐŸ6=Å=,¤½o¨_–±â\þr½‘ÉC�,[€SAyÉàvªæ”ÐÒ’$	¤Ù–µÉìR¢¢1ÙWˆž5^B�àÑ™‘„�0Z‡¸€2{ƒ(›Zr‚Jp»ê‚Ãh‘+O�°"ëÅ‡¨Ë4ÒŽÆ~Ïì
+"Y¨mUEÒGb¤Ë¥:=,žeÄa§²¼7ª§Js…­Ì6’(8ø×—ÏÕÍ–©š#7Øœ:HPÝ>¦u°%]U é¶ôÏe){eÛG�ÛÂXsMîÙâÏtï¤ÛOG�&¡Z�;™ÊàsXÏ³ÕË~ˆ=u°$8Q¡±ÂÜ.^±ß{(è +¼Ï�vP‘ÄékZÓÌ´;ä€Ç/�ÇU	ej"+¿Aý?‹Û#±Éž‚¸ÊžvF[¼Œ§žÝ+kµëàÛ¸¸'ˆ¸“)y’ŸïdÄiŽ¦D6Þ<$Cs‚È’÷P™ÍyW“/ÔÛþƒî“™uàË}ÍÓDï†Kþ.²›Îo=ˆI‹0“–«—û-\Ç û�Ó·ì~dn¡Ãýý4&ýR“eå@þuGüø+ý©?Šz-ÓçqãöKÁé�Y‹Úœ]ØÁqÉF4)š8%R2 3@ÁŒ85™uÏNî½DsBL&J+xARöÅ¬ iDÆ€‹W¶å¬xv‡x™!9@sp’ÕÃ§Ÿß\šƒBòH¦è½é¹Poq�íC=|¥pãƒÎF?bÒ£Ô9c!¸
+T¬9Ü‹˜±3¾ì�—E	IÑõ<â¿&j´àòm={³ˆü´6
+k×ÖªVv(Õ¼#u®ÒT#˜Õÿ®v*÷©ûÔ5ÉÔŠh�—Á QÜœÁ%R™«…<tø/Ùöög#‘�5ÕÖÂ,=D¹ ¾õ>Ó]eï;•2aˆýÚ1~Ü`ÓÞ85¬A½; "yH
+w)mÚn,ÒâS^?U¶2.J§X­ÓŽ´Å¼kéno.~1–|G!Ùsd†È„œ¬x´ü�dJe§÷§á"’h)Ú£ûû%Ð¦Kévc-ñÞ¬ò¡N¾‡¾|ó0–E‡�Ä!|]¦™:ŒÈ>¡ØƒÐ�’ðà!¥‹ÿCgAøaè:üØŠFõûÂÒ„ÒÉé“nJ+Z­æCuæ5Vc#@Ä¹î’�\äLK¤~?	ÁÀ- HFÊ0ë’˜
+e—£U°ëSYƒ-ði0š/i{¶s¥¹æžd·£çêUÅTà âª›Nþý¡Ýý |{¸\'ZÄÒÕ_£Å}¦K©Aq•¦^ÝN7†˜ÅT'¸2MØI5f·3a»:Ê^ì*Ð‚·¸cYj—vHÍ×=´¨Û›)¦ú’½€w…ªËÔ‚¢B<VvŸŒ¨v¬µÆŽ%ož‹ß]ÙÙP%VsUGwŠ˜´ît*²#5YJˆÌå°à²L¥‹-à™–ˆRâŠÛÕG™zŸ"ÿqÚ´½¨*m²Q]@•‹/þ¦�,¤UÍY?$¦ö®;†PÃ©¥ÝL½¨IMjVºªÌ2ûyA$äúó	
+I34ï‘ÓI;+ y6ëqýG¹AÔo¨.\�è´µ+:åqUÏÀÖrÓõÁWmßµw=ÔÑ=”Ë~è<ðpÁ}û›ŠýÈ¢üÀŠðp1ú!þY;Ðô�ÿ¦KVÚO¬ ç®Ü«¶-à©„*-¾Ì.ìË>1�5€4VÜä…ƒØ6ñdŽi1ZY‘%�sv£»d:‘˜l²áD¡Þÿ†ã3„‚/ð¥Úr›‹4�gBª"ÅFS?7.Y}Ñþªïýû„~¼KX#M­~¿x´±šî¢¢s+Y&T £ºàf6(*AL%üIa×Ž
+ÎÊêSIÿþ¹ÑÇ«“­6x±4Ú%Lì°Á/nÃT·þí�g�(‹úÐ%HöPb¨K ]xÑõû§ªù¡Žíå–ýt“ÅEH\6Ý[qGv¶Bë*´NÁq¹^¤>©ên±X¾Ÿ–î	â"Õ†X;la‘ K´ôØ)·#¹3¦3°È1cå¶^CµaÑÓBt)‚”žMRrªÑbjÕcQÕ¦ödÑn‡ŸA2Aò’wHy‚¦	‚ÙºE’v¨.Ø˜Õ)„ÎÕëG»Þh‘—MËÙ¤½'®)�÷ò?ôì >|-‰ìðÖ‡žt]ÄqÿxÁúoÞ;$+4?´h×GA–æ÷�üß·ÂÃþ^ú#•ê¾-ÖÍäNljÈ¦R>•ˆwº„¸Š+ºNCÚÊþeƒ$ƒaÁE‚””Á!ƒ8Úôí*qF‘RùÞ–É¡" 4#¹ð²WºSuUäû%�¹úÐ,òØŽ?b”Š)ØÔejÐÃ—ß—Ã]üªJ+Òè²Xüá*PUçÕ-¶'NFH¢àlc$Ëúˆt`äJ]ÇNÝ
+±¸«ËLÝ¤Ð½FnI‘
+n¼ÉîÌù1z¯n7&„ö{k4û­ð/ŽŒ
+c�]—
+
+´ýNdmžZÅ6¾¨[ÿBgîLp¤()s£éJŸ×ÿ·,Ìï
+ÛªŠlú1Š–>Z•7!íbû@[×À�Ò³Þäî“/]ˆ‹t‹ýúÙ¶%½”
+­ÃöÊ€$ƒ°Òì a+Rà©]h½ØYÚß,Í/HøRc¿•]NínûÓÛGzî>CíYJ<"¥EÙ¯DŠ7w£‡.v#ÝŽ…–úÈ­šÀ½R:ý2A’~Â¡~ï˜R½·¹çÊüÿƒNó!	Ï#g]£yºKSFàŒPþÍâÅ¥,[Ù:Xb�Zˆ�j4ã¾ò•“#ZÅNÅYÄRYj)*
+Z&~úd['q ¡šì13%Ó”†CXIÓCk(ýqûý)K³tÁ,êµZ�Ðt?g”EÍÊ¼×É Kï[´ÁâS‡;ß2)"G$X�¦ä«SH0RA�ÍÆ=¶ÌÜv'åÀökòÿ!îMƒ-»®ó°o­}Î½oì=�y&$H‚¤8™²%2¦(KÖ`Ù²"ÉQ$Å©”Sq*¶+U±œT¢T%²c;e;¶5DbY‘mÍ¢$Ú&ÅA )I€ bF£Ñ�^¿ñÞ³W~ìi­}Î½ï6;¨zx¯ßp‡3ìµ×ú¦°§à,Lt\:�$˜†s«q”’J@eË”¬;„Î­�ë
+±Úlü•‰#õ7«´‘[!ÑAÎ)öÑòDÊÌ™TØ Þ¼(¦•”€˜¼`*v©¥¾a“}AÄ?Øq£íË¬Ï+€¸t¾¼V!õÜ”;�t�B~GäÕGðÊw^ºxCíG7
+Ÿ½tÑ}×«ê®æ´•P�©Úk†”.‚É‚Co­2[Åü}Êä±ž»Ô[•K!²˜å§è-œEÒ^"Lµ�†§MÆ…Õ
+ò¡íHt÷Iû€í2E·4fVÍYùgá9ƒ#<}aŠÕ$!ÇÄ9NÝù\<šøoŽ�>gîyÔ)Q2ç]È›é¦�¸±ËÉp‘’+1®—X@]âi\ˆ8²—Ñ-eê{f%1,OAnìM¸EÄ1ê¹kCÊ^¨²�šha*ƒ÷šÔÆº`'ƒÄ²qÊ4ÿÄ(‚ZÔÂ©…ÇÚ?�ÔŠ&VN;�	s<�A4êãT$á°éù8šj–¨Ê««qª‚ÉÔx‰UÑÈ�I^Ô­…Ëu©º1x™§&µñNkW`SY¿PŠVR¿;"4zñ'³Ë*Õ�”0‹•µ²�œŒé|N®*»xÓšzkÚ©Ì}N%SÉz¢RÑÌ~º€@Ä5QCëCÂ‘ò¸§|cy•
+­Gô’]u¥9Ë~²‚Ø¦‹ïÛ—XPÍ=h–7LN[RhR¹9ß[©É«‹À°¥3C«(Ï©ž?DÅ-kƒG“—NÆ~>ÿœŽ'ÃÊ�¶ŠÆ8@Ý‰<÷>«‰h®|Ð¾±l ¡0ÍÞdnø¥Î"�
+Œ¯f°ŽHO-$w!AØÅ�§Ø‰P)":[£ìº9º8p^øÙHq)_{ä¥h9¨ËkI¹ÌÑS”E�]×…â3�E¤k‚º1@M�Áqg…AÍ¿û’­ò¹0¦tD@Rò§¤Él„š6ŠÅ%bï—¨¸jœÃ¹Ë)f‹s
+›ÔiŠBçS|§:_6sF‹º?8'6Úë7�”Ò¹e…G¨Â�ÜpS—”Y}ùûÊf}ànÑZ»ð‰íæ½ŸAé€tœ…¹/¹Tó¦°iìpR¦½éÄ°\’ä=9›J5ß�ŠZZrÕÒÒ³¸t‘¨Àûš¼�;6.åÎç][,D
+CÁ$&*°-`b\³ù¬�ö©¾â+‰c…Øu�Tš'’Ï;
+­	‘”m ¼'¥£)š5Ò²êse$˜q4•_íÕ{Vø¢-2Ñ+ÆÇhP¨Â�ÒÎÈÐ�íªîM9�Ù4ËNÛéK&¥èÈú4W (=íÇkØãö(ÖûÌËªÐ‹!õ¿: y÷»Ó…„ND3ôTgH‘ˆ!¶Už�s-ØÞå\†àË½C„†Îå·¨ƒž°Iï=ºivÁâ„x
+pÅ�“/T¡áÙ$†}Xy†ÁEÖïÌŒ¨fñ¾•@.m’%y…Ïe/´²PçÄGDû) úÚ‘
+7.ã›äÁEqÄÝyAç)~E¤U1éH±êbôõ­ñÇœ^IE¡ÎlƒÄH�Ý¬
+©N¤¾×jŽ´Ô^|±E«S4¥Nx%Kag=ÂŠ�ÖÍ])ŠÆâ¶-(1¢›iZ•© 0ã+D‘LÎG¦æ•U5À^œ2©žÀ†S£8ÏÚš"º@J£p&B�Ï(·(bÅ‡qnÉñ}�¤ÃXøR„OZØÊ…žØÚ¤N)>ËÆK”Ù¬2�ŸI*þÅHÑEåf—Å�ñ;-fz-å<Ô~C^·ÚN"ue¾„‹‰aé"34!W—]‰ùI–”`)jñÖ‹lrˆ^šák¢ô˜[‹Ü“_†â‘q�„…Ä.„ŠˆG±¬°œ{Î2‚tE3<»ˆ�ûé¦qc#…y³ HR-¨UÙqzà=ÐMASâI=ò4v/	;(&~ó·RvÏ4è;{F>”a[qÙÓ‘Yo«Œäl”’ÅŽÂÏT#šä¢
+»KÁÉtJes'qýšz	e.„—už²¢ˆÝŒ2JxAcT�«ô5£Œ@QÚanõ&L¯‰RíÀdàZ-î5�ú8�:?é¿&+Ð«ª‹]{ÎKˆÇG�­°û±1¤¢l
+´%‡dkoÇ¤ÀùÄ(HbK¥ûH[bŠ!.hž5IVC/j„O%öRjåjç_Q»/Êÿ:‡ È„ŒFÞ1bRÌ'�Â�Dñ¢”…¾÷Y‹8¼[ãˆÅDäB1APÌKîrÄÎH“ÏXÖ÷èŸ(ãe1³~“koŠÙ�³b#¡²²€"Hhï¤Vì¬î¦�QY¼#I`Í®³¢šÎ
+@1~jû*€ƒ55“Ô+‘¨‡§…\oËN•³=ybG1ÅB1[;ÏØS@R1Ã£Ø“fÊ»¨|÷˜Ý$å>¸Ð¹°‹"]ÎS© &C™Û�¨…&Ö¥Z±4(Œ:4˜Æ®B;…K2l5ö
+_HšÕß�ÁCÊ=ÃÊÄD*gû|B'ÑÊ?Žº¼b¼õ\Ô³j@:ïèÉ(æ±
+Ð8’,"c’öƒ©Ht(ÖEÕŒœgœ9…ÿ0“^RÍß¥’õ(³R
+©$À‰Rh–4A?�WõøaÁñª*�ƒ¦+…f.’G&™þª†Œ‰1ã�#UÌ&CdOì2²xVNXÌ™æ^>’ìbÑ ‹GÉûD!SÚ¨’SðQIEÔéry�ÍÎÅ>�Ÿ<¼rêLÍVQ°–:"
++‚F³Ì<RòB/Ê;L¿ýb¡�ÇXbg�¡È°ÁóEúÆêFò6ð•Ž=±â4ß§¶k!1:�×éÅ&�$ñ¨ö5a}IŸ*û€ë4X3f0ŒÌ+„ûX6–ãÀ¢â¨£©wçTv‡\F¤;O]ìvIEp$G ’��Ç¤ËÝKÅwbˆkãH+˜?f6Žž�ÇM'Í¬¥¶›ô«
+™œu2–BÙÜ”)»ÀºHaM›(õ’UØ!Xœ†à}¶&K#ª^ƒ¦ç²¶HŠËB'!©rÚÍ�×i…y2Ì©f4±Úñ5»ê&òû•¢£óq1fPë—îFkÏ¬ÈRzž†¤FàŸBÉ|)¶+Zþ¦I	mPž*©ËÈ(¾/õ:JÓwš¶+ÊhM-‚:gZ×•î#Æ­ÍïþTAÓŽ™ÊU£�ßôð^B–4
+è
+êd»„	${–xKÉnÎ†¬jÇ�:Žø!Âœ„�ððÂQ¡œjXÂw|îrVŠØ¹>Å]M6ïÓq¡ÐFi¢dFöaHú¦•4"L«èlTå¦ôðu‚R�ñŸ2j’å‹ý0±"Çl�’Ú÷¶ÎãD‹«‘ª‹Ò³Ú ‰¢Å(`�Ò0ìQ;ýêÅOY‡§×JqÓÀÇX\QzIá 1ö@w¤v“p+"	:(	T]VN²Ù1•¼ïÔN�â!~
+DÄÂ>ä^xbtÜÀ¹	¼kà]ò.â)ÖÔÐèxv²v“[ÌËRmµÐ)z?¹”Ù®¢wÓ=ÅRvù^c‡JÅ^ÔÜˆYß/ÉÏ‡<ÆPB»0>gÓ1„7îS¦GÄ?:„‚EÕ
+Û ¨T°)zq]W™
+“Ó�Tâó1Ç©H‚Ã|pÔ`¦l°X�Mÿ¥Y¡û0I´¿©ë’h¼W¡9T‰(ÀuÂ;Q#.¤+‹ŸO”Y�žý³ÍV’>%Æ\MÌ2OWV2 Çn6Û²aUÃQ¯E•î¥Vº†®#´Ë@�ÁAÈ…‹Ðs´”(-d€zâ¨ !þ^Š²?íÈSWâ%çË{/%G]�Â�Â¿@Ñ�•QLðS†é•¯q8õU²\ÙíhÚuaÅG‹|iÑúE_Æ�ù\û˜í’
+(j>$SÃsÁQ›RŽe¹ÌÁ‰|5†ÓAµ
+W¬îe@7 Â4ã@ui�aíU—ºJÃúÜ…4ÜE:o
+KLIìqPêO­I2?œ„@.vå9WÀz×}örC7	…Äw1î9¢Ž¸› ›NÁMîº�µî¢ XñˆòxVa#ö°pÅì±nzñ"ÒøFøœrÆ�	x‹EÀq¸7¨`šEKD¦‰k˜3�®Ù‘ˆ­c‹]ˆC˜î ý½Gbq…�¤€,>¤ØTÅŠÆN^Ù§äµ(ux¬6Vd‰)>i½4$À…¤“Æí”äéu«Ñ±Æ0t–<Ñ°½‘šÕŒF&BÓEy¢hCÄÄ!¨ö,,<Å(‘òÜUt«Tƒ7¤“.¥QjbÖ«(4£Ò”Âã¢zgkb).³Êö]âJ†ÊY	ïM\gþ%Ï-rÁ•³k´ š†.„¼ê%œE§µÅ§ÅÝK3QÒî˜ÚT‘”¯is%[ß¥ ‚Ï4L–Ø¤1©@6Êö3éÔø|´úÁ@Å|2/¾¬p¥¨©Ñ«~R’:ßdvîÙ‰•TÊfÂC{«é.AÊõ¥˜ZùãŠQ<²¥b?=jWÚÒ1ÛmŒôÆùù˜pÌgg�ËÂÊc,ß�É…„ËÜMô�Xêàüd)û�¶ËÜD¢�ãªiÁv],*�R¸w…$Ca¬å»âÔë}°—S÷˜
+ ŸÇÀ}VT
+ƒÈP¢	8.‰ ŽUâ(¡$üÅ£Ò8²*kJªßÂõÌÌ&­¦6I£	ø—Bã5ªuR¯±Ø‰°Z[³bÁY o¶0¥\€”…
+V¤›qß±ÄBõ>EÏ†õŽ_²¼¼Dy§öX¤7ÞC�»t“y¼YáWÓ�À¨V¡‰¯ºªAs…wÊ¦]³d`�ŸèR€kL–±	RÀ˜]HêÛXG§[~�^>)ê@Œ³g~ü":LÂB¨p«¸—Ì™×ÁÃˆAâàáÀrá.¿*Ÿ±1cé4ÓL;þ$–”ü}ýÒŒß—!töŽéb’50-»%/„¢LÓR�REL2ÇÄ0O ò­­�<e°Ùeú”­|Ô´¡[u*:”É™Š)½NÒa‰Ék)g7�ö5[�Š8ôµ50Âê+ë©·i‘^¿«ÔÅè3ÊD1Úò0/aÔÁÑŽÃGãR÷>Â¦Ì«×1Ä Ñ:(ÎÜ|A¢�;ûè¥ÕâTâ¿i
+@2â»]7…ë¦ðÓ	<—ÄBgæéi'Fj#a,•8-Ð¤¨ÍÅ˜•òhLcZ4GÕˆ°à"…”0IÊyòËKb8NÌ4Š‘´¬£«Ë¬†©¼GÛ‚bÍÎJ.½¨±:Y[.Š¼RH¥¼—Â^#CŸ%¥E"�Ñ%‰ÚŒKZ+DsØ4 KÁ5"BªQò*Ï�mÌ°jD3"b,©^SPpnfÒ»ªi@òÔ?]+5wZ«hQgvˆ¢'ŠêH|	SRIx®�Ùöà9¿$/¢g`Hd]¥b0<‚9ž D„J¢çªA`«ž.E·`"5…HTFC9ž…<�óŸ#ó¬‚ÀLï—#ÂÆ”–ŸuH‘ŸŠ>m\(ésÀq§Ì¹ãÌ†ÒTX>)nV”¢1°ÚÈ°_�õ,ªÑ`Ž*F=I¹gÚr,ž
+Ãªý_SËž™äCÃ*À½/·ðÊ¢Â`Kóy»PŠÆŠÌ|±¼û.æ&T-(«iÐ¨²?*SBPæXÌâÅ,.â©<üCØÁ;Ÿƒª¥Ì�ƒ×Vì>ºé^N=Lâ6I@;([°fGm³8)íìŽ?ÐhÅ%„'‰ò[*»r®BtR'áX/ê’{qMíOËQŠœH(Î¼%â
+œÇháX8. tO³¢3#,*ûAÖ2ÆˆT+û¥ö&cO½QZÖwUÅ¾­r'Ó³ö¼ÓäÂ¥º-€Ö µˆ-Dºi¦�7Å*ÍM
+ÓNW¿3$7í1²jU˜1,a0ÆûÂ„Šzƒ¢Þ„-2:¤™MT8æÙ\,¨:.e.¯ævÆz>	¼Â.ÛÅ‹ÖE*o˜‰z	ô9xŒT^´HÏ­T´80��”C°Z5Òn<û_ye+Â^áŠB�ÐSt-úÂL8M¶…AÉ') ¸OEX�M"¾ˆ?¡ºŒ§S%&ÙÔ˜-(-Š~¯"P{)ŒsXT=°½NòŒ4Õ‚*“À5¾VòW�oÅXà$á @o0
+Ÿ� é<:òèÈÕULMtê¦æ—…²Á€y°ÅŠ¯P�õž8dÛˆÏ£TñÁÀ±›ìæÝ)ÇßMUBaIE„Nò€¸¬T¥cˆcvÅNœ4¶—ìÌK®8òŠŒ/³¦¾rþß¥*‰5ž!Åí…#ÎBŠE—€«ñ!ÙòŽ1'Jµ€›‘†„‚†§Öíia¥ûY¡TM	*ª2Y=I¯ûP„.¬82ãZêG3Ä¿i:�Ã¡ÇWõ.G’zôaþ¶Vä*½EZHd®c^5YÔßZRÐ€él•Ýg¾ðXiÖ¥£ê67â8^V^Y¤Y§&–PLvC"�}aQÁ-½û“ÊF™¶ªvß>*cãiõ>Ìm¡,�¡ìFrAÌ‚À2¶"¼§*ÈG#N´d �“4nRÝ$ô¹ªMæMìµr ÕÂJu¬He�©y±º�jl€Š�
+YŽjC}a#U®™ä�ü‹Ò(
+3Wâ"%šà³;A`]MÃËuh|("ìÒ+ÑÍ]dê‘š�úw_òbUF…Ö$L·K:�éž î‘ð	>o‘	C	«ŒIG-9H�pxxvNÙŠ¥Œ¯‚wRèœ+‹¹ã2æ®»øØ.¶õ,Ù “îrÄ.yÉ²Øq”õÈië�xôœ²0On½”;¥BË
+M,\9C„rÔE:m”ÂÄb×•_;ÛíõŽYH»*8Ð¤Å«N8®´7\uq†È@q-©”æd2UlG•>[¤öï¯F[µ(+H¬êl½U$¢^4¦�!Ó¾1§Ý *a‰ìÌîÔÓßq
+ãÁÚˆÄqÅ±PXÌ»Ž¥ñ…œÌP<˜X�a/„l8È ñùdø¦¨­}DêÅë1Mì6òÈ›lüI´]É]UçB·¸(X‹¦^¦HUÆÕkI"EE‘ÎØŒÆ˜ÂøLQØòxªD)nÅèªQeqE+†8wÖ^/ Å–"³¹ôæ†ª.¢š]y50ÙUZžRždÒi®:Ù¹VÑƒøhïÞ�Ya!Ôa•é>Y¢ìM”À2;g+óF²>fQÕ?’h”íÛ§¬àßùŒƒ¤46"\~)|íB]ó˜…†ª›
+OZì�shå¢@\f©¬™JŒÜùd¾ò†Ò8‰Ö/„Æ´ÁDåZ¤8[”ÈØ†J¹aêkRô(-G=gÜÔ]”sÃpìbâa)4†Œ’ìJè‡&ÊŒ²P×67=µ:»«ŒØ¸—`J={û4Œ4âÐœ#eÙ®ZŸ; * 3f®˜1:è�Y^BÃ¶Ï5»'g3c>×|B·Fˆ€b{Yp-ÏK¼–rS®ÑÄ‘Y°�0®
+jô¦'[n‘à[ð‚nxa×*r›.ÉS‰È>2xøœ/BRÊH®xË–™*–d¨º°=Œñ7@?™2ÿ©¯à^•™°'&5¦Cÿá{ò•ÆcXm*AŠê–”s°WÇCXb‹.QÍ÷¶N¦¢X}% KLÒêve]Àb�Jô†|6Wd×Áu:fpôUÊÖ;õØJ�u“'ˆ	Q©šÓ…DbÈÁ�BPuA‘`
+L¥SŠø@['™†Ï‰Á£Ró˜4Cy�gf4Žàwãª`ä8»ãX³ \äØ²ÊÙ`e—ž
+JÒM2ä¸—QQÇE{ô¨�@p•-…Kíô•~$™’vÂÍ™œ#Ás‘K–ë1¨+çy¨ñÒyÓc¼
+)‡¶rÉª|§zs~ˆñ�úôéžJºH³YŽAúÑÔå1ï+.†¦ÞÎ€/z,Ž9^+Ã‘us\ È
+¹ú¥£Vy–“DïMgŠ§³ÛÝ©V%èxLFW|ïØÅ¢‘€t–°;iQ´6‰­�‘Æ¥UÒ«q‘ö�¢!5FBÒ{dA ¢¨Qi@5X±•4! .ð³,?X1JHÙÞJv<Vã§!o+éŸÜ„1x¡àôšs>1ÀB�¹ˆê¬óÚ!Y¥_hÄR)<¬�µøXÈýO�Òó :hŒ�¢ën—Ñã
+ÇhkÂ]HôaŒÕø�óè$f}0‚¦ÈŒÙÈŒ‚Óq5)Â•T—-)´½É6(ž"ÅÂ.œaa¢”w>*Õ'áïxà1ˆ;ˆë èÀrÙCA	÷DR};‹q®9æ	ˆÖ«˜ˆd‡\B÷”ÑU²a§ÔðÊŸÉ±bPé]vìÖ9ëºJŽPã ­V1´Ð�,Ç9ÊZ‘ò¾”žÖz0
+Pus§t ¤òÎQIx«ñ²[a¬E•¾ñ×b€¾tèµc€¶ÏWX�IÜTnéñyš:ŽrˆíÑÿ²�\Ê>Aû‘á>Cƒ†+š²K ©<x†›—jªaß¬±vÉ�ç�3ˆGè>¼¸ÄÑˆêaR,2Š»d¯¨“j¿.ú{:28­u>.ªÉ{¢H¹8ùŠlGuâ¥P*s$å¤GûåW�ÆÅ~Cj	ÃzÇ�ZÐ�ë³”™+¡¢cK/,Š.—æà�ufmÞIÛY7X�¯–Œ4kÃ“ÆŠRj¥§Q6T]¸Ú
+3Á.,ªŠ‡£)ZžbBÓl°ØQRÞAkbd$��Á
+—¿0�…¯d™>�ó Öƒ:r-„ºèèì“5üÄCØCh‚�4hG
+œXÛ×Ëç�»ün;çò‚ëRÈ§ÈêrÃ&FVy¦Wîhk)DAïŠ#«O%ý¥ý€Sãí”[o’øÔÈ*aiš.œ°‹RHÊ˜-ñ‰±Æ6¡°t$ÕøHítÝ€›XODZ�Ùr‡ã¸/¸L��éÆ¨âVâO“‰RŽ”´Aï�—�Ì0™×I`�ncÞ¿ifYª „a‹‰yˆªaíÃÔ!ëmlï
+½€&¡eÒ‚$<DÂè
+éƒÅ4Ž¹à-�Úlý•`±è•°qf3ƒGVQR¤ªÔEµ£öJo!&©NûVÔ(ã“h}µ÷P¦ë¢ŒÐÂƒ±j£ÄÌuu0��ÔNÔEÛÑÌ»ÍNÔ¬VYx‹Wš
+zÍ
+ôä©$—é(ƒ°˜Z[“Î]|VÙW~z&æ–¢AÀÔèêà\×Má¸ƒº¸%¿£x|HÈì&%Ž,%§!ÿœ•Y«¦“ð��‹ã¿Æƒ:�k“K|íŠÂ{ëxŒ1�—‚)¸¸kŽ9Þ¡1ÚÆE°œK‚^Âœ¢´rL ‰‘(û²1¶Däf¥‘PXH
+qÊ÷sÝQumkjn1QLÑÓTl@RF#zqÅcMJ!ïMŽœ�ã¹xœÙ9CÓ5˜Iµ`£b£j\—jÿ…¡äq«dI<E5Ñ£ú’Éì3LrW±“²EK4KÛÌîHæñ%gtý¾ƒ°@˜Û™`¿ïÒ<N§ý:Y·£’@ôB¡D„™ªGUäâÏ¡Üõ)‘Y¦Q­¹`@‹¬�WÍ/ž3N¢µ’ŠŒ&=(–�(,R¢8Etâdbb±eN	Aûÿé”ÃBÓµ&5¥Gë§¤¼Üõ
+.¢ŒMôl6±zí*ù«%«˜:7$)öE½W’ª0Jv~Ö~nÉ;Ì´Cü_åôÜŸ£:@±y�T^š¢q¦ÒÁ‰C“ƒÙ"F�|–¨_a
+
+”DÙ‚ ë‡ÅkËÇVba‘Ã;´$“¤Ã£™x8Lš‚h
+Á‚ÎµðÓbOI¬Çaa%*q¬V$X`EŽÇÖ1©,TÎµÑb$�¶21,.ø1øÉÒcm‡j1.fV ¶Žpíë3{+8„×å8Ç8²«¡BZ-+
+L8õÂ®‹¤žFèþŠÉºÚsõ‘<Ù¦,ÖrRúcw¯‡±T¥³$ELµÌn¼´hGq5ÅCö+"³ð�@9-X8ü©@ßã
+@Â}ÄæL”�èÈë£€K›+¦b¢R
+•�†Y´KvqfõÇj†�T9ÉF†Tc8Ò£2"«/€í*Êû&ãØi4>&Dj€Õw¥P‰p…�ËŠ:.x­$²]‹hˆœÁÀîþ³â[íF}êm‚¬~ø
+¤ú˜kN@sÖLB)Ñ,1B°ö	ÔGm¬/A-D³@’¥É´Ø›øž<S„ÏB¦MvDV&o™Ye0>¯¼ÄªŒÑÔ™&ì�›°04Á·ŒÛìwÑù]�LÑI�Î4í0¡^&h©»“I‡¦i!ž5hÀ’2³¹ì’Ápá 'cÎ‘˜�£¯ˆ
+¬}ªò¬žËN›Ôb[Ïüõ
+
+G)1–âªTéŠ,â”>uùµ"œ�$P$Å<eec’GŽF%NO+…ƒú¦ˆT¨Åš	V¨¸J;Sçñ˜4DØŽ£Wlt'‚Ê‘™ÐôÖÌ«
+5^è÷IEãÎ½iáQÖkþ¯Öƒ™Õ­7É³;X!kg¢tÀAdšY�sâ@vÛ93„EÒò½
+‡)Y¥àQ¶"¤šÏÐsÂˆˆW±·ºšQÝèëÃEyÖÎyç^‰‘Ô«O‰"x‹Ke³L¯Þ�ê\D%$jc6­¢§”z/Š,drRò( �³âXS“aˆ!6«$¹1Ý…öfS]"DúY‹ÀÉ¥·»à‰Õ°Gç<:éÀ>ì\S¸¾nÄá<$g¨ˆq�†º–”æ‰ãõëäƒ�;ÆgžáeÔ…N„%¨ãÙw�NÝ·#H'è:ñï•¥qô
+›Gq.ìŽ³YbuYSÕ=¨âÁ±í¨éµuq±xT-‘:g¿Ÿý£ôõ#ÙF^Y¥ââˆ�ÍkITÞDmf%Ê,øŒvdP‚CÔ&šd½¡3D�±•ŒÃq½ØY…Uã0TåJ@[üÇØ¼šÔ±4W]0^sQ!óâQìýFYô:¶ªˆÔõ£ÞÁ×'‰Æ[è¼	î¼�`oÂ±xxµ*ym�®v‡¢³ßev‘´†TvÂžCás÷œ’©—]cn‚ŠÏ¤ì2‹
+ÕÔÄÜF’™…Oudb=Þ3}ÕæŸœHÈ€è¢=ðÆZE?G!(”Ød‹UfT)mO-¤$ëÜKT„ êB“ŒÞ"âÊ¡×Ç.„B‡ã¦xËe·eÒj•~LäÍœ«œÌ#áia€j‚M<uöÞ§ëz7Œ¢¤Èû÷ ƒŠEÙwnÕÂÎçÂÂÞº€_d¬€•Å†!OTãš48ÉE‚-ˆÎÅ¶Ãì’YuÖ¢F}Ñ5!§e¨Ñ••=±êeáb\økÌQÐŸ¤ˆYî)Ë
+¤Ö…Ä
+�Sèd…�vÜ¦�Lœ¶-GÔÌk\Äº„T›D²,ÍÿQÿ[« +¨yM
+íƒáTV¼2÷©*eb]ŒS‹H´xçXD]4dc(÷9…‹ØˆÐÁ;ð:³}„aÑÀˆ�z’Ëd¢¹§B_ÌÒc„Ô!¥s(â?kï!µäôßŸI6N´ç¤Ý ²~m: L1ï’‹Vƒ“bLÄ@z¹ÞÙtR¡ö’;3é
+	`¸Ùü°¾nx˜,"ZV$`�k›2ÓI¶&>ú.•qŠQÙ'6ñ³˜ˆbžQOŸ%Ò_Œ:–¨š&°‹b¹&yk5ðÒ……Ú9´
+‡‘Ž†zâŽ›c‘a„zÃ„‘‹¹Q³à\*\ï8jâ¸®àlº	C‹M@°+bÅ´ßH‹³¨D@Ý¿yqV‘œˆ�6‚ª˜Xf}ÜJ!pDO]‰KïMû\…ð»*8+ÝmlŠ˜ehé‚Bd•úéîd¶úªÂæ˜b¨×ZÒc@ê3©*êé—^ÿ"¯uÌ¥›‘}
+Í©@5úL¶ÃXç‘ÊƒHÌn—"8�ÅC­WÂ(«D‹rÞ’ÑÞ¨¯Êg\`#b3åT”?ŽX‘µÁ.f1è½)©"áª_)
+Äz1Œ{nÍ]VT`Ôù>E[™HÙ°M%
+æà$Uî0�1š}½Ô÷2\Ab¢šsîMòSÇœt}eä˜_Mì )a7•f„”|pËFD:Ê”Œ6B]üˆ,žC‚‘|-a¯àiž‚€0TlñÒ�_ÒŒ8fem`“5DÁöDö ñõ5®�kZ4£MãÛŠBIÃ€K~WDƒ.Ý�¹®	[©:'Z˜CñpÊÐŒ´ìÎ;�œccûNqÔ*Êß
+ÑQ‚5n¨Æ É1ZQ/JÈS\ZqAv±€ä"ÉÚnÅªÊ¡Tí–Af»�z-$ƒ“Àäš˜ï£Ÿ\wÐ…QORï{hÀå?r2»Ð`/50™�ÆYDÎXù�U3�¶ÖH.œQT(I�:BF»�`SQ¦ÓR=¾˜±L½¤›I¨Â@Jžy�2¿
+SYÑðÉPtÍßˆŒ¯j\•†+\�ØL—¼KN©—AP(¥3KÌ!cŒ©Ôóuò Öüú¬•6¦LyÒæ¸ð…Å\8•7Ù9µôÆŒdÆp™™Í2c(‡qsö˜ƒ/“ÄØfÉ�XADÜcÎ<5vùi¢vÑH�£ñ
+x‹Ç¨û&N‰#©íh„¦màFÛ2F�Gq]ãÜZ¾vñsëbQ‰‚@&6ö€œÊ³�¸«&}½Ñ Ölp•+Î•�S$0ÅÄ„#…\óÂlbKzìF{¢Ÿ7ÙÉ#+1ÅŒ“§T¶„dØf¬Ý”É¡Æ*HeÎ žl—TŠÝðriiÄl#é«çÖ£”ÇlYR_<dñâAóö}q{ºÊ"ÒŒõdQã+�…€ƒ}¶¸<Æ
+�G“‹GèBŠ±$¡‹±7~TƒN/ê&²xD±iš‘õ 4s
+ãhC%»¡¦Uª-,õ®«b—ùø‘ÝDÅ”‘9÷!8>g[×—Oöøò¶ˆ{X?±Kþ²1õx°b[•±Ÿµ¹�­¥Ý%«{}¼kè20‘$�è‰eÄÁJ$e†„›¿ƒ#Æ”|Ôþ ÓTI*3ù:F]¬�M¦óæà.¯l_(FäÆ®@¦~”w,„63Ç"ÓŒÐ6
+\ã09´
+aÔ2š–Ñ¶.h#¡i‚ybwé
+3È…,ŽôXŽÙî~3hNft›�x‰³_VÁâÎ°šÊÈ“„*Ñn8É©C2ç–`îƒZ©î"‹�©8æ‹�²!"åŠÐ×¶²™ñ’-"JÀ§˜S:ˆJoòêÄEàJ:ôG]¦e±#·ô{Mµ—ûÿ¡ó Ù¬«¹òñý‹öµûž‰:+úPQO"Š�³A|Ì	d7o’õd&ýpø€Å?È`4À¶êï¿-HÖ£¾Tã,2æ|bpžW-v½+Ð†ƒDeé&òñxye)B±� ¢º°[á%å£j•æuH”hãH=úÊ µÎM!œ6g÷SœF	£,á³Ð3±k$j«…‹ýˆ$<$jY8d…LIâbºÍP*BQ5ÀRo<Gs©î/|í£ezY`âHühbµæ8jõ¡‚»dL 19°k05�£‘Ã¨eŒZFë€Æ9´.�‘êBš&Ž|g7[ŽB¼¢z.‹o^L•‡“¤)³ºrŒ¬2þ¬éËzêc!M]‹o<©GIƒ%-EW°mé+ÐÕÐ§&Kå­hÄº“@ÏŽD	(uÁ¦õÈ›†˜ÛI!s*?Ð=jÇÒô¶çW³úÏ4ÇZG§ÙD+Zpï½zU„ŒëP"3jÑÓGU$[”D,$³±šréM­N
+(—¦"}2vðó:�º€Ôc,é±;ì^.,kÜf¹â;lLPXIZ‰æû…Cë’Ž¼±’}+-C²¹·.ÏRF5ÑI9ƒ¦º¸U¬•M¯ð¨b=S~^fÁýÆÎ2Ub7"µ�(EWf	;èNTfHøì¢>„Øƒ$N…N%Œ¹bnqñxU°Ôµ *–·Î^²ú«)´ÎcBNÝH¡à3#‚ÄAmÞ4Mè6‡¶%ŒÆ¸a´-a4ZçÐ¶AÒ6èÖ_?©`qêçüp­œÒ‡DÂ0¸z1VE9X/…¾kXiÂ9?$Ü‰�ñH '*Ôx„‰£E,ºl¨¿ÎÀ|¼.’âœE��¨Â-Ðžªè·\ý^a`qÅ¤*bÉB�FÕõ‰Š°¹$¨˜^ºãi¨Z¯¾•�×ÔyôjsŠíC±ú&^Ò77Ž³…#t"$>4w‘Ûèûƒráè¢A…W=‚ôi·YQLýÎc"H¯¾W?79+d¶)&ÞÔ·ì$|Ìù‡+¥-ú8Âê@ÉÓ]4Pìâ.®âY+¹)ê‰¡%}ãÜË©)ídJã$ˆu‰–úq ªœ[Sô]B’¦gQrSvY¯‘@tòI�äÅ7vL’óD(òÈ1òzüXBâ©ö0“â×Ü‹“oSzìèàñÇ.³Ùš¨&w„ˆƒÚÆ¡uŒ¦aŒbáhG„q™ZÅŸ7MP¦7ŽÑD_,—0¦¬ßHºŠ�ýÉ…¨SÄœ
+Õ�ˆò­Òníº cºyÅ²-‰9ZàpŽÈ;ò„Í(ð:™"²Î`âxaóKÔ¢OÊ ²/–
+&S]¬¬µb�ÃbÂ«ì%§”ôå}0õÇÚÿËüé�ÓRÐ,°$_¶±(ƒ—f€ã„‹Çœj1`·5ÛK/�Tã		„%#*ì+A£núœrÄ>ºl¨HPÖ#T3!jœ�fªVóv©mŸ*°×x*‘Wµut™Gk³:²MïÀóCé""†Óð�>¤05£®¢Oì,…m(]Ñ,³6Õ’­rwBÕo¦QF}¬¤gRO#…µ{$«ŽNÙ”ë ïl�ÏŸ'ä»dmBñƒÙƒ\$]¤¼tŸ0$DæWŒFÌÃ˜‘2u9‹4“ksR*‡XŽ‘)ÿ;-)
+–bÄ«cB»ÀÒjGŒ6æ|ŒZÂ¨¡€‡4ý°‚•ûÈ“Å¶a°ì-—L]y-­ßÁòÎ3h·Ÿ†ó—áü+pã¸rôOa‹F+óºÐN±6Å³NW-"P56¥`ï]
+‹ÕŠô#aE�+ÁSFä3GŠÀPùSEá‹î¨˜*«•Ô¨ÙT\gš£væ­�%g`©À�º»HÇ³�§¨äuÛÀÏž¾ruû²ùEŠÇëˆÁÈULÁýbväqP)Ñ¡WÅ×jÞ}ê>ˆâèF�Ý¸éöÓRêh`´†Ê¦½^
+ë±UÙh¤ÉäÊX�z…­–‡J©ªc¨ÆVˆÅCé`âRÇ-¾ìœ1ªJ÷‘Æ†j�^•1
+“ª|ØÌx+p†¢*µ7mô¤œVÔ	µ»K…"3°H/Ø(T^88H´åß÷‰…#ª�’%Ê{c¡¢c&�¡ HŽ™�•7îbGÐD?§Æ¥š&ÄÒ6Ž±4r±#aŒZ‹DmL$˜¶uqŒå¸©¾ÉŒ°é61¾òF—A³÷2í�Z»=Ðèht#Ôêóðïéd{;›X¯ƒÛ¶äÂëÂ‘®_:P–àÇŸynœÂ$ì˜RD2�ÏÆ¢á..ê.uJ:Õg�QÕq„÷4Á×
+W.o ó––ÆX__Ç¡Cpúº“xO�1�vxôÑ'°¾¾ŠÓ§OaÔ6ÕzLØÙÙÅ7žzçÏ½
+ïýàÅ~íµ'pËÍ7b4n»ê4"m^SÁXú�«]ÿ_ïâA˜aE?ã¿"2"çÆ�q^¥¯©ˆ@§âÅ…¨‹#.U@”P‚½‚a‘°¡ldªÈDC;m2#.ª0!ü¬¶D&Ê5l�º–öÁºûHÅƒÕk)¿Isb¿ÍZæ�Ø¬2·Þeêß¾*"µ#ò DGºÿè�ôh Óë=N6(Ï;KŽ£«d°H�Äg($DL>X‰¡«œ¢¾¡I»pYoÊRƒ“è/NÅ×á¢�“8�#[*|nâ÷Ê8*”†0rMÑ‡&ÒxÛØq4Mü~Ï›Ø‘8f´²‹åWAûêCp“A{çÀËëà¥ i@KG1=ôNpÓbÉÚ‘l2�âùW_Ä+››XY:ŒC+p`u—GÆÎ?l4À‹À¥n„ÊÏ§ÝÝtŠñò¨ä¢C¬ 0ã&¡àJtL†¶<I :¶V¦üû‘dyC
+ï8þ~ögÿþàß/\ÂÞd«ëk8|àZÇý÷ßƒïÿþïÄéÓ'Ð¤bGÀùó—ð�þá?Ç©kOâÇ~ìÏàškŽ\åÅ—Îáïþ�ŸÇ§?ýYœ;Ýtj9!qcñàƒ÷ãoüÔ_Æ�7œ®ØêÈo bBêBdX31«#¡GW‚ÅdÿÁÙb:À‰”åy¢r’ O�Hý3¸…—Üwë3ö‘u*ÖV’8P�˜H5³d«zœ%jâ#Ù4p àQù:Ó;Q
+Ý�P°ë±goD¨YLiÊºûHé�dXW’‹*õ’¢®:Å°š‰U…FÄd}H%ú‘óþ(�ô jî®·NÒmQ]UêBâ×ëˆ!Ž'<$*Õ6’"‰cH€…†ÝqÄF\B’WJÂ‚ø/¹$åtrjƒž#QqÉE.Á5¥˜znÁ8Ú6vMèPF�Ë]I_Å"Bá±–.?…¥óŸ‡;ÿIÐôÐÊðê!Ðx-�Z†¬Þ¿rSÀaPFJL„nêñôù3xæÒeìúgö¶A—;^›à–ÃqòÀ–F!±Ð';‘�5�j@ÂÏ§!¥a6tWÂ°ê;ùÙÈPJÄm±láœ˜3ET V!20ÎŸ»€ú‹¿‚ð÷×_wßñ�ßŽ¶áÅ^ÀSO?‹?úÜ—ð©O}ãÑ2þü}Ž=˜qŽÍÍm|õÑ'°½3ÅÞîÄ°§.\¸‚¿õ7ÿ~îçÿ9n¼þz|ä#ßŽÃ‡£›va]¢ ¦l›'OÃúÚš¡ïÒ@7ÞôfZpíž_<®ª¡×Øµ¼F°Fö+Dò½Pj¶ån�Aƒpo\…!÷òJôUòàIôìsxÔÔïD:�L4¢JS©:œ‰î8Ð/T¨¬‘Áí†Å]Wáft‡è…m¸(D†º�áóªxr¨-e0›™(HT}Î9åõ}Œ
+Šiý“Ë‰Jc)ÎsîÐ‰8’`cU<"Nâã†#9×’&Kˆ¨±HÐRk�…‹;a”œòìŒëòŽº‰ÔTAof„n¡«Hc­¶	ÊrÇ@Û2Æ�#)Õu4û€{›@tê°|áQ´OüS¸�G@+k åÃàñ*x¼Œ–€vµÀòµpí
+Y:«÷‚—/žÃS¯žÇ¶_ÂFØêÛSÂ™½<uÉã�×À='V±¶ì‚Sm¼ØÕL¼À;‚�ï;!ÈTá¤æƒIÁžq
+’gÏ,;K59@°¹¹…õ+¿…_øù†oyçÛñ_üÅÁ]o¸ŽW®\Á™—ÎáùçÏàá‡¿»6�•ìå›¦1ùñÓ©Çïüî'ðÿ÷ÿƒïþ®ãÇâqã
+×¢mœS¦"Ö¶
+ÖÖVªâa’|omÞ‚;Û(J®¢A*‚¾ç«á_ÓëW7^KÏRDŸ*ÍOÔh^w†ÀE†yç-`—<¾ÊÄ™,X³Œ2ÖÌ³èá ¤¢Ïõ¤§ÂLRQ-PZàCÓûÌk7†LÈNº¡pÄâ@]Ô(SÅø³P\S$p"¿û¬AÑEIw!:Ñ}.
+õwGd¿ö¹Oø *æ4Þ�8ŠŠ¥Ò9{x�k86Á¾Üf\fe%Hpt–ž›k‘T’žÎÓ–Êt�²7U«4‘¢åb†9G-‡Ë:—Ì9(Ð›*±®’Ö#
+f81‘TT£e�å�¡}ôç€ÍGCñ�–ÁíhF vjÐ®ƒÆ§Ñ¦…RÝ›ç®\Â×^>ƒÍ®Á#lw
+v<cŒí)ag"¸|fÛáÎãË¸î`kºÏ®ƒúØyùèkE=�“RÌ#‚q$AXè}Èr™ýVR	K72o›7!ŒgŸyûØ'°º¶†þÑÀ{ß÷`¾×®9v·Ü|#öö&øÖo}–—ÆX]]¶CÓ¼!àœEB$8óò+ø�_ÿ]:t?ù“ÿ)Þòæ»‚$Yš
+
+9R.	„Âk®óë¼µYö/‘ªjÈÀÐk¬"ƒ/Q,)ƒl.RÁób/jâXX�×¤Šˆµ2)£žŠZwBvŒUu!=æ•&.Ñ0¢GXC yÿ&aøl*A
+@."¥³°c«.º'JÎ\yÈœñæœ 3ê÷lûì.fQôfÜ„gSâ£«|{dA›D“Ç`ö¨8|±P°¬+¦Ô}D$1RÜýD“<COƒ8gêÑ8¹¡<>lT6GØ)3ØÅnÅEÕ¹KáIÁãªqŒ¦
+…&Ø•”®£Íq¶¬ÆX.¿m+—ž‚ûÊÏ�‚ÖV@K‡@£eP3ÚhF@Óü¦½n|,ŒÞÔî}cs�¿ø<6&ÀTFØ‡OØñŒ=ï°'„m!\ÚõØ:»�s»pë8y Í÷�éH$ÀSftq|—’Kèéà/¿¹ü|Hßrmˆ��pwà$èÀIp3
+·Ët“g>>ýFðÊA•ñ¬í
+ìœý*xí:¬¿S/8ûÊyÜy×í¸ýŽ[”²¼œ¿ñ¸ÅÒÒ‘AØ˜ª,‘$ú}ñ…—ðÔ“Oãmo}3nºéTd„©ë¸Ö…ìCpJßk-_÷ÛØÓ0DÕqÌ£ÕÙ‹¾J‘ÁB'WÙ�X_~+$ÓÆeVýIýÂÅƒ{;è~ˆå0§Üy¤ÔµÞX«î>Š]»ÐŒóUã*„~±ÀŒ2¤Ijh“-¢Xh±	[<BQéBŽJ´ÀÏB«¡Ù ìsiî5³À®§ ;^ÅÅ©Àõp|Â9.ˆGü#ŠÌ´ð=¶,ÏðéÚÈ"°¨~•L˜4\¼œ8¦é¥ŽÃQq“uQç‘p�&Z²·Y¿GXIÇ‘;ŽÒm„ñU,.I@èV¶_‚{äVÐhhÆ ¶µ-àZPüð®Úch–Öà—‹ÇtÚáé³/ã¥+›è°Œ‰0&ž0‡O˜FË˜Ox~×czq^ÜÁûF‡V]4V$S@|ù%�ŠÝ(à;L_ú2v¿ðsðç¾
+jÇFñ¯;P3‚;v–ßúŸÃ»A·³�ÍOý4äÍ?Šñýßc²Ô™WÎ<ŠK¿û?áÀ[þÖ®ùsX[[…€°qé2|ç½—†é¹PF‡õ:¯¿'‚étŠ'NÀw~Pƒ§­Mdfá(¿@@(%´ÏEŠ‡ÌÉYllãŒ-s§jsË�\ëjÞK–é‡T±“
+PM#‚Pbô¨6Œ¿†¢º–"’è™=OÍ8ï*$TÞÁØy&|Ïë4ê…œÈ²¿t—“Sû
+0¾.#*M×
+DÇ&b"Ñ
+ßÄWˆôkàP§¬Ys½é¢h[úfŒ¯…é7‹žn´@ÑV¦4’*"º6Wã«�‹°9‘¸Gaµi0jef³“L#-§ÍãˆŠ#ËŠHžôh5Ò(
+GÂE'Ÿ+Îc+-ÌÞW±À4Ž±"»h¾òó�³ƒV<^µc�…#‡4€s Çð¼Åh´¬§s¸°qÏ¾z
+:q˜
+cêS!tž0�c1ž
+œïŸÛÆÁ1ã[nZÅ¸å¬
+Ê)/âKÂ`¤ßJ¾
+	{ç¿ŽÝ?üßà/¼„æúàV�CÈ�\¿y“?
+9ó9ÈæG@×Üf†g¿sÛ_ùç8ð†�WÖrì¯L'Ø}áó˜lž�[;áØ‘ƒxà-oÄï}ôßáßýÛOáèá8~âX�©/?¦!ñª¿)Eï“ÉDY•„û`oo‚é´Ël;j0µvÝ¸ì›ù-Í™d-2ÈàGúÆï…#˜'D×OKl&kw[™C ÁöCc¡åFU�…Ë_ŠˆöHe¦¥=™¬�’…|IiGØÕ�ô?mÌ¤•�úªóSTlî9´CyV•4oªtö©x¤üø0¾ÒE$3´jÏª@cA6êWG‹�ÞBX¼:®4gcÕï;õQ‰JsØB’Au:‰Ù!‰ùå³(‡y	Yï¢¤cŒ]­ÑD�` ëÆì
+¥Ip1]/uì’j<…†³Uñ´
+#«´ƒo\ÄƒœºBóµÿxá“ÀÀ¨	�ÇÂÁMøp
+Ð4jÐÑÆ£#h]ßììNðÔË/`{2a	^Â=Ñ)µ‘ž<¤+m³\ �/¿²ƒ«-î½n)g¢'�¯œ»ƒl’˜Îª÷˜>þk�‹ßÀÊ»ÿ;Œn|ˆ›Xœ[t/áÊîEøÍ3ÑU9¼Þfy
+íubúÌg°wæ+hoz+¸	8Éî¥—°óô§0:y–®;çpäð¾÷{ÿ$þÂ—ð3?ó÷ð�§ŸÃ‡ÿäpÿý÷ààÁµÒ…HåHC†¯âÈ*õåëøûW6ñÐ>Œç^x90¯œ:uo{à^Œ—Æ¶ë!»Cmz�@ÕnÈëÂ¨µ³(Ñ/ÈxDÐÕu²ÿÓÎ+‹2¿t¦¶ŽmÀ½�w�q¦7KC?R{S‰í¼2@1�‰ùýY‡¦Ÿ{L&äÆº|êNDw¢z¥·w(‰Šb<«,'Mâ¤9€êUn|ê<4KA¬–jl{"]~¯Š&�ÝlM+Y�–åÎƒÍ9•}|nB%ceBŽN�„¯}45ôQ5ÍQ¡&ŠÕ–:‹LueµÑˆsqŽc¨¤Fa‡BÓMN¹.ŽÖ¹Üq¸TbaiTAic±p±Ø4M1Pdf,m<<ý›ÁÆ¦À-À-$vR¬BçDOàU´írYð¼`có
+.\¹Žõ]ú×€`™€mLH°9íððÙ-ÜpdŒ#k1]m´:Ÿ•«€ß¹ŒîìW@ÍF§ß†öà©*f¶QxOäš€%1Ò`éŽïÄÆ7>�­Çk×ßjÇ`;çžÄÞK_ÁÚ£Õ£A¬Ù6xÇƒoÂOþäŸÇÿþ3ÿúW~ô¹Gðí|þÄŸxî¸ý&¬­­Ä ­ûõj½ÔAÒ_çÎ]À/ýËßÄ'>ùi,�WA<ðÀ=¸þôIÜtãéÊ'T”ûAÄ@dàN�EkÂkÄ>jŒ‚hèAiYd(²¸qÉÂTãz¬E})HêDŠž£¢uÕf‡XÉ€yý¥�pH×Ågž¸EÛ:—QU¶M uõ\«“Q©
+Ýª„�mëuqP*YÉ¯»Á˜Ha‰º˜çŸ¨*?!-Ø±¨ØBDv¬5™qÑÈBT©V=_º×œL(˜ª.ÄQÐ+ød«ác¢ÃÎ”,Å¬¦�s	.
+_»’çÍ)Š5u.ºé6\ŠM™Y.�±"ˆÇXÎ%Ü„£à0°³3F$hžý7�éf˜ZrÈ_'v±ppüp‘‰Æ±ÐŽ"VQSœ½p“®QS,û¥8D2xbç¼Â.[� äç.ïáðÊ2œ+žY.Ž¼8fŽ${�B{v µã ís`º¡Ðz	˜î\ün¿)ê.Úk7¼WÖbç™�Cð×ÀLèöv°óìç×`|ò�AÙ»ž¥¥1¾ë»>ˆë®;…‡>û%üê¯~ïïý>ó™/àÛ¾í}xó›ïÆï»ëëkª€õ7ŒÖu`wgi<Â=÷Ü Ã/œÅCŸý#¸VpùòFÏûJª[«©öÃ¯SÇ±`724Æ&N‘ç’²Ì"X-D¼’~QÈ‹•Š�Dí¸›ˆ*:íÄC&q°î@ÊÖAÍP*Ž¬=¤×ÔÛeP¢LZSbÁò~:!J~†T‘¼½Ïª‹‘í+Z¡/ÿ°�Õné@XTœn5¢¹ý¢ús^h>&.CsUê{@V�ˆˆÌ ÷%�G<Ãìá¢jº!�°^Â¤O	ôY�ºnDH©´Ãó0içZe´‹˜‘¢èFnÌíhb'Áùw8šÔ�ÄÑUü:kC¸çã­¯A^úàw@¥X¤‚ÁŠF‚ˆbÖËŽ›ŒÛL§œ»|!Ú®sNˆnëp©PÉ’OwdKÀ‡GŒ£#‡W¯ìakw	×
+íÞ+b;
+EðMx�âG�ÉFÌ)$ŠÆ…÷´!9�¸õ#_ÿvì<þ»Ø»ð,–VîÆÎ…°ûô§Ð\s7Ö®»/¦*–B°¶¶Š|à]xðÁûñÎw¾ýáñK¿ükø_úïà®{nÇwÿ©â»¿ëC8yò˜5"™KèÈ:h%D>}Ý	üØöýØ¼²‹/=ò5ü•¿ö¿`}m	ãñ¨¿tÀZ·4ûîž^«Ùî¼VažØC0_X8„�ìó"¯æ=˜Ej(|JYg×l,ƒ}'ÁY5�#CÂi]8HÿèQx N¢Ô¡bÁm[;t
+5%ý®¦Oœè�àŒI¬ëi=FRé¬\œŒ£Ñd*"”S»RÐí[¢Ù*�Òx‰iL¬¸/Q`÷¹–ˆì–+u›èE‹-$L”â;fp´ž%/l�¤”ÓÑÙÝÅ0³�¦§lgP2'¸R:kiÊ°H,,¦òÔ”lï¢SqqÉòpNY³'@žSq‰áÓè¤+ç†D
+—E�vgœ„®¢Qž×ïìî`ÒMò1K�FôÁ”
+FBébñ$€8vÀÉ%‡ã-Ã±`c·Ã¹�=X]ŽâÊà­YR„ÊHQ’ÌM[Æ„D�"9{^�	+7¾;_ÿ¶û
+¸öNL·/bºñ,<ø±tø8Ø9«v�íúú*>ðþñ¾÷¼ïxÇ›ñë¿ñûø­ßü}üÔ_ÿlmîáGÿÂ÷àØ‘C3ÜÚÅW£*Kÿ­­®`mu‡Ÿ?€¥¥%L'Óá…³Â[›A7Õ×ØiÈ‚õcßá‘,8™¼~…£ªÒû=�±ÍR„H”.$	‡�ù™¸�™Ó/6VëÑMÓ‚8PDlë4@	&»XÊ ËmVç!}ŒDÿ\,Ã+Q$îFõ|?Éäñ$4ì!Øc1–xƒ�P.±D€¥�Ì¼\ÅŽ«+sÁô>­—8z9Kˆ KçN›Ù7ÌgraŒÕ	 LÙ€\Ò•5í„sðM'7ÜˆwäEŸ‘é¼œFSDÆ¿*³¯T8”.,Ét±Å|ùQtÝÎ™£ŒYBfÓ-‡ËÔ†Œ9òñ²�ù2ÝŠIàÈ£"eðžÐ
+°Ú'Ç
+Ž´.fTÿ[»L§KhÇ7eläLÓ#&³Ç
+ø«4Ïb¾kŸ²?g,�¼né¶¿ñqì^úAl?÷GñŸ¸£vd0IHt�Ãûßÿ ÞûÞ·á}ïyþçŸþ»ø[ÿÇ?ÀM7]�ïùÓÎ¹9£kšÅªQãiÁÞdŠ.ªRÚwÌÏõ˜B^/«)Bu\��ú752“Eß‡`þ«”Þ0‡ú“ µK©-N`%ûØ²C—j\>Ó¨¾‡™#¥¡gâzë¼%QþA)½/åhXo!±®¸æëôAêõ†Db÷!9OE§<* ]êxØY×Heb_MèŒ…„>°�AVä3Õ«b
+o¨/ŒÂ]ÛÎGùF±2¯Éqwb–¤ç qq±LªðxsQqGå.#þ<ÚD„–âø)±©(Qv]Ç¤¢A¹ÓpY]žF\Î$ºh{ÂœžŸÑì¼l>#ÈÑ?èÈQS4}äbÙ¾<^Æ¸iàÐÁ!áC-	F$hIÐÐÂ£!�{;Ü¶Úâø8.°Ò¡�¸ÒÖ^‡©sì�Å½V‹§ëÃw nóxŽSº [¦`éòçVŽ�F{ânL¶^Æù/þ+l>ö»pk'±tø†ò÷TuÆ­7�Ê>øÁ÷ã/ý¥ÇúÚ>ûÙ?ÂË/ŸÏk/? £Yu&Ž4�Ë.@í¢Êd©™3þÇúo.�eö¨b6kr�¢$û¹÷©�53Ü2H,[Àr#‚º	? ©vR1”¤dAh'a™qÑ½!Žñ{�X�¯P¬]Ùà¥(u 	@‡p±)ÕJ|åIe6ÿóÎ›2¸#…dev„÷¡òÈ`Ló.Ùz„UarP:©�a¾“COç)ÓO}Œ
+öj\“òZ¦ñÄJ¤±JZh²Ã+g§Ymîˆ@90�©P€ð¨F7?g¯ˆC± LÓMØJR¡'+swå1@¦Æ÷>SÐ1d¯Ÿ®—â÷ ÒæÒ>jGX[^ÁùÍM4Þ£#AGÏ\½»d
+ñŒ–G-Žß�)Š!]8žÓé»ÓL£àçU¤«*åþdïÜÚÉ@¬…ˆ=¸ò…*é1t)M;ÂÚ]ÆäÜWqå‹ÿ~s‚ƒïú	¬>v
+Tý	¹$Ñ^F/ðé¿Ñ¨Å;¼7Þx=Îœ9‹­­mÕÑ±’™•1œdL–mÖz�CD–ÔCXÀšþhb1†ûÜ—^ÿ"20�«ÿíŒ…xÍ³¦E!±;^²Â65š�­;*…DK×epÉWjRâ7®‹žéç¶Ó‘^§3h£²äk„DèÂÁª�»ÖX¹-"3/Áìœ‹Ortõ6ýµ–Ôp:õû“MN¤\¾ú÷‰)JÁQ-Q‡L%¤ò,â|ßÒQõ²(Û½ç¿I@z†¢ÒJG’üLñM‹¿K
+õâ­”
+%Û“Xd(ï¸Ka!´ñU€ö@nRÔ½¡Úib�L/b²{ k„NëÄ‘kpöòLv:´ÄðLOð®Ãtê±D
+Ž,7XoFpÌaÌ'àp®Ç®dX�t˜Lî!"ð¹£¤	¦³?^ƒ[?ŽÝ³_‚ŸìÝ40É’ïx5(Ó7w•e~!00€7=€Ë_<‰nãUÐX½ñŒ–—ÍŽ~gw‚³/¿
+�àúÓ'cÞ;÷¦—66±¹µ…µµÑ¶m_;—£lÃa]Y^Æòò2¶6·°³7éã*D®+ÎŽ7HJô9*òÅñ4@ø-z�ŠˆìÓ/ÈÂß\˜#¬UÌšùÔëDÄ~mpÌž‡[™w˜Í›EÊÌ6•® w’q–Õ,\3ˆêâ!½˜ÐâŽ.€ûPUéc!ÙîEè¥+¡bƒ¢qE>$EUÞ´¨f?)Ó}PþlÞ¿õÐ�Û+¦�ÁpR¤”ØRp¨Iì²’‰d¶¿áâkæ½ qE$G2,œÅÅg²†r1ˆ§c=†‰ãEÝMº
+Ž»]Ž¬ªòsêÑs)g¢SÆItñv)œ�i÷@<¸¦ŒÈñ!YQ‚[¿uˆ›LºMl^~�Ü€Ñ¨Eãœ8|O¾ø46w7àáàü�%jqpe	ãf&Ž—ø²Éó‚–Kì³-&evS�éÔW[¶¦‰‰])P»„¥Û?„íçÂ…�þìÜñ!¸ƒ7FíJƒéåç±·ñ¸]Š††œãwÓˆn¼~¼|2ñßô–£Z�ñæÉ'ŸÅÿø?þM|åÑ¯ãG~øðþc¸óŽ›ÍáÊÆ&~þ~�>ö(~ä‡¿Ç�-£®žësøïºkOàî»oÅoÿÎÇñ¶ïÇ�ý…ïÃÒxdNÙÞ¥å%ìímªçœm*Úˆ¼f¨{FaØg@C‹<ÛÍwFmºš±ÐhJ˜3ÕRƒE<a]wÍˆi�Wfº	½På‚aÓ¯H	þL/]eAŸae‹Ç0óÊîÃÅð˜ÅhAHù†±¡ù_±¢²&õâÃØH9ÿÖ×a�òk#º˜�)9”éÏÀpñ�ºkÝQêŸJo¾®.rP
+É€é½'ÂDYJ7ùx‘¹tÜÒûŠ zo¤H}MÀ3«¢ÁÅÿ*+ÐY9Äré8˜ÌèŠ’ó.«òÄºÊn¾¬biÕ˜+á/˜\Î"ƒbÅk‡Ä+�,ø£…‚"hhŠ½Í'qñÕëqâÔ�€åå1î<}¶žü
+®ìL0j—±î–á\¢B�v_’†±ÌÀR8Š.º t]iÁ.+­@8�Ú‚ƒ·½Ý+ß‡Ký<.êÿ¹FE
+v 4'îÏ]Y�]Ó6X¾é}Ø~ìX>õf,­¬f‹™Ä�¼ñÆkñ-ßòv|âˆ¿ûw~¿ó;Ão¾wÝu+VV–°yeŸùì#øõ_ÿ]¼ÿ}ïÁ·}Û{±²¼¤¿1Ë{•\sÍüÈÿüág¾€Ÿù™¿�o<õ,ÞøÆ»°²¼TD©¾úè8wöŽŸ84HNÏ×¼&t\Ýdóù»ßÌhkXÜHWQ8¤†]å*
+Úœ¨u]'Ë(Kfb =,b..2_°fF%ÉkK‘b)>„}Ôc+²Àí’ž\ªvCc!SÂ¾-¢ñRø‡³D”°ŒÈØ£—mˆ±§²ˆÔò_òãø^û)Dœ*3Ê™¹64P™µÃ*7%Õ0TvCrl&€à
+W8Ð¬$HÎ“Rºáxn=²8³ø¥E’s(XYå…<¾®œŒÇP@°Æ;Mì"\œ—§]²ëu*¡p¤¨Ü<ÂRf��0.¡DêhP2ÕÙÄ¡hˆ‡ˆ‡tÌ](tÝyl¼úe>z#Æã%4�Ãu'®ÅÆÖ6¾qæ9�¥í˜z�.žoÀÇcã}¸G–‡1—±å`£O&£¦kÓç¼]ZÅÑ·ÿ9,�º;_F·}	€¹%ø­3Ø~ú÷áw.åq`*>¤Àñã÷~�Ÿbí–wb´´n]!"�öÏþÙ�àä‰#ø•ýÛøô§¿€Ç¿öT°Åo¦Ó)vvvp÷]·ã§þ‡ÿ7œ>‘ DÚnoïàÊÆxß™ëñ¾	?ýÓÿ=þòûSøÅòËX]YÁ¨E�×pLºN°7™ Œ¨X,¤Y|MXzˆöÙÝkÓ–×27öÒZd±—
+ Ù×…®¦°ip¶ú<§ˆ˜‰NÕ…Ì/¢CBµšç…Ha¸4óöH½çuNÐ¥DT¬ÌbñUV©Øf2‹Æ[:2�H1%SG§Ö¾PéR’—à\Õuh›™Pr|m¦µÈ¸TÏý"˜	�éBªóˆä€ ã‰”Zv ŸlÙèÂ„†”Iû}°#Æ]Þ.‚ª›‘D…œ}™’é«N#9ð&ÖU=evUìÒ8HbDd­IÖ–¨‚E±H�—Ã5á,°2Ç1�Í¤cÐDí¦0ð°CË-v·ÏâüÙoàºëßþ¦Åí7Þ‚•ñ*žyéEìN÷ Ü®ù.žÛÂæópŽ%XZ©’9Äã;ÀÒã
+H¦ŠíÚQ¸í[°:�Âw{aTè;/?Žîì—0Ý»º*"Ó…¤ÏK�àø[>‚fi-xbUë¨cÂñc‡ñþã¸÷¾»ðøãOáÒ¥+xõÕË8wîVWWqýõ§p÷]·â¾{nÁWê¿Ç�à'~âqêÔI9rÈ`|£Öá½ïyþößþ)<þµoà¥3¯`ãòåBâè`}}oû›qË-7õülÛûÓìE¦W›†•�³rÃ?†~wèIçÂ²p¸ÕÕÔ²L7–T2”…]È¾ò�\?Äæ_çñ
+ÖP±��£,!×oÐŠx±z*5çhNR¥H…I‰ý
+Å£ød‘Á@¨¨á
+o`ø…’X–Âª>$<&™ê¥…:|›Êˆn�ÈKvWf(ÁCE#«®—T€ô@¡dø¤ñ@ç	)¸`‚|^|
+�J„ŠŠ?�±4¨žRñˆK°ð›³å»SEÐ>¢Gc©«Ñ�§C“Ð¬Æ÷ÞÁ­Ð"˜&6+ Ñ:Ð®€›1¤Yš1Ð,�x	Dc€—áÜ2Z,áÊÅ§qqíZ:r(Œ£Æc\ê$F­Ã…K¸°y;“)¦DªxóÀŽ£¦ÁrCpÔe9®cÂ8FìÖG¦èqo8Íh7ƒ°oj†;y.¾»Ï|ÒMþQ0•„}�£ó®î`äŒµõUÜó†;pç·`:í°»·‡­ÍmŒÚkk«XZYíGüÛÃGÖñßÿa4Mƒåå¥ž½û¡Cð�÷¿ßò®·`kk{{{UÖ{èš:ˆ••%smÛôËÔ�Èþà6
+¼Éyƒ-VÔ‰ëFs‹¬à2›#6ÀÐŸ/ÔÃlæ•Èì]xmQ(z”GûÈ¯„n‹®Ùû&8V»qVëAÆzEWEšÆU‹Ûd€ÎÛÒësFÉ&Š�‹G›ÓKÓÙöÃtêð§Ì¥XHtáH/|‡(.ÚVUž‰
+°;Õ°ót¦pP¤ÕÔaªäF\uD.%
+\YI†zd#Fñáµz$ï&†—’žÆN-öÉªœUWå 'WÞìCøb9p*Å°j­	Qfg™õbõÈ¥GB¡kibwK!…°YšeP³´cÀ-nð@Ð
+5˜L7pþì#�Þ¢VX^áÆkOáÈ�ƒøú³OcrùR /#Y»0¼FLXj#FîMÁ3–Æ©€Àd«é´ÎÀ ²+›L÷°uî9ì^xÍò14k×Tªrû@…§7”Dý©3a4j1�°¶ºŒ£‡Îæ.¥ñ,3\ïç‚¨MîxÜb<nq`}mŸÁK”^OLšŠÒ>ß�d�³È(ˆæÒn¯&ÏvQT½¿šiP^ˆpú•¹ï]ª]Ë¬¨
+Tö‹`ö½¨º�Aß¦ábê,P¢9}¦,~Ü1lÑÒ+üƒq¿4s„•"pCy(4Tßé•Øef`"™ú‘�¹‰ :‹$ã¸+~­7'’Çb
+4ˆ­uñ{åw].l�½ä4 ±óA((ˆ#¬\¬Ëë<�0õ±Q;Øl$KéE_QM)Qr£µI‰ÁMvÖ}š³ÀMcök&zü‹¿ExéøO€v7Ggêhôi¡ˆ‰@<ÈOA.t`Ó�pþåU8w+–—„÷é\0>”Œh‚Ž\îd=<<	FnŒQÃpÔGtµŒñ¨)Î¶z´[é@@º=\9ó5ìž}2Ýç–0ÝÝÁÆ“ŸÄÞÙGpø�ÿ%VNÞe ¨Ò–ä%ßä³Ñâ$û˜
+syK›Cu˜­˜‡I<ª�šÞ²}Uyä#�—Ãùü‰§„Ó"ÝKÕv¨•Gf¡.ÒÓ“ÀÈŒ¨h€Ê[u!˜Õ…Ð"uuä¢ê_}5¶Ú•@dÈŠƒæšújÃÀ9]fÕ‰Qa]0T’qÎV÷³4#-pð«G…¢XpÞt!	ØMÅ"©ì‹õw¦8ScGTj×iðŽ<Rb;Îâ&w2Ž>ªóÁ¡»h˜0%B“,ó£s`b¤q,REÁ.ŽÅ–K¤âŒ’’L5.R+ö3Ë*âiM
+ó!Xo(@‡Þ´ëÀÞN¹8:Ù½Â:à–AÒ~tl¼CY]aì44ÅîÆãØºrËËƒ rÒáåW^ÂÞöŒ8t÷ððÒ�©	Å#‚ç!¬q
+øŒøÆmÛkŽQQò%Þ´Ó�Ml=ö«Øùê/˜Bˆ±ãGèv=šnGü!zð{Ñ´#5“AaâÜ)O•Ã»»{¸|ù
+ÖÖ×°¼4²ì>õ·¾óØÞÙ(ÇQÛ`ww.m`muk«+û¬ª¶[©?×¯«Ù¿`\UE™	ÜÎ-í—
+'ó¤�9ì.Öë”ŽD†=¸dv+E¨€ì ºÖ„˜$Â}÷ChÉìúÚSÆëÎC[®Ô3ü9Å?	ç›¾¨36§xHmKR’,*Tã,I;:IŠ�¨©„„ÆŒ³@ ¨öÓ
+â£¨Í#u#ñüxÀÃ‡�
+Õ7Ø|³¹«8¶Ô]Ž´ÝRh8/º¬ñ‹\À8IÔŸFQÁ�60±B™JÒƒP>FYG;Š´ÀsV¢“ú\ìGR�¡œ
+RÀø„w¤‚¬SŠ34‘²Í×�e+ÇÁî„?$“”ÜlïÀOÎƒ¤/ÇãâÀ{uÀ´ƒ8¶ãšñQŒ—�Dñ°±q	W.>
+‡]8náÅÁ£‹L:‡¶¡q"“¯<…÷Û€ì`e|mëL¤ŽŽ‘.1±1+¤]Ž½þº‹èhi‡§[fŒoÿÚ›Þ�å¥
+K‘L’0ÔM¢��
+CñO÷ö&øìç¿Œ»î¼7ßt<_wTµ	»{|áK�£ë<Þzÿ��Z\Þ¸‚Oæ‹¸íÖðÆ{oŸ»ZÏ#õÁÍð.vöú$ûs¢�r¸Y°‹Ô¬‘–ÌZ´ÍBK�X°•WªÂ4¿tÊLP}�‘%}eúU™,Î)Ð}G`µìéQûúøK�»4g`%�ýJÓÙèO‡I©|²�I²ì¨U¦ï"K¨ÓÒïgmbÂ3rñ  
+(qf¸Uå7²¡2Àªh»Ä±x”ÂÄ–švë	‰xGÀei ƒÁáži¨`@Œ0º‚'xŽÅ0ŽÖráIÉz Ã.âj”å”šœôxK™šÙ?Åqñkbêû¼;ð±·Á_ø<ÐMÂksÄÃO.A.N!{Ûp«×€ph8^¿‘Úì)*v f8ö&¬®@ØÝÝÅÅsO€º5ËßÁ“�W!ƒxÇÁ6Dö€n‚)œìbÔ:¬­DÓ4ê>¢jŒ¥×+ �qøîoÅòMïv0$€Lá˜±´z®m±·;ÁhÄÙ	9±±&“)„Ñ¨©”Þ„n:5N¥†ÿu]‡é´Ãx4Âòò2n¼á4ÖVÇ ¼ø®ƒ÷£ñ8ã'{“)žzò9\¼twÝqÖ¬bmu7\
+k«Ëùð>:867FzÎ¦Q£½,¨´›´X@d€Ü9“4¸;,jØ_tçÇÐî_„®¢XÌbeÍ±�ìfÚ£çA5XD¤�…”õˆfÎýþ­c-õ
+A6ÃÆŽº`ÔX }à¼îDh?ÚïÐHŒ}Öâ )dJ4˜®Ì‰¨öõmó³^†úæ¢
+¡\Ôs>¶„\û Ì“Ü™@J&ÊPñ£6O	ç‘�S]I9?¹qxÞK-±ƒ—à’¤“HÛ$L½ qŠa)½qà£€úb;’ó@Ò+QxSz*Œ¢çàBáÍú	îÁÄ¹ÛE‘‹…¼pÇßÿì¯@¶ž.^wÀî&°%è&» ½+à¥ƒ�v<^ÚU�‹Wœ',»‡ŽÞˆÆ…îlóòL7ŸÄ¸tØ‹Ÿ]8§¼â]v"ÝvÓt<ˆv±¶zV×Žæ(aÑ×#tÈhvÜ%ÆÙs—ðä3gá¸ãÖëpãuÇòÕ÷ÄÏáË�|wÜqn»í,//A¼àâÆ&þÒcðÞãž7Ü†Ç�æczöìE|þ�àÔ©kpï=·‡ŽÀÙW.à‘/?Žíí<ø¶ûqôèA¿æ–—Ç`&œyùU|ù+�ãÂÅË¸û®ÛpÇí7b<n°µµƒ§ŸyçÏ¿Š‡>û%|ðÛÞƒÑx„“'Žaii@°³³‡¯|õ)¼rî<Þxß�¸öÔ5ð^ðâK¯àá‡ÃÞÞŽ=ŒÛo»×^{Ü„óÕÖHÍâL¨Šˆ!ê2§?‘… ÛEIû¦œ
+zÏg_{~ÊŒß™W<h–¾cž°uBÃƒÅ>÷ÍÎZ©çÌïD§óUïµÎ=·Ç`À*p¨›¢!f)¯ãbgB©°‘¤K¶ÿž3ô£~Rïü¤þL¥°xŸÖæP¼³uŽ`º÷’i�"¡p4œL‹p0æ—E>ÛÖçQ—„ÁâÐ	‡k+†‚tû
+Šk"cšˆÅ
+a.Ç6ãïèÂ‘,ßY©ÑK¼mK±&Š�˜ Å@Šú“•ãp×}Ó'ä¯³?`… A&;�+ç “
+Ðh~o4
+-qÍúi:õf´ã€YìlmbëüÁÓ3`ZË4H9¯G3«xß¡A(x û=8ÇX?x––—"ƒ’JÒ
+*–âÙ—_ÁKÏ?‡WÎœÅKÏ<‹|àAœ:uO|ý<ôÐqñâììLÑ6
+Þð†[péÊþÍ¯~]ç±¹y/^ÁŸüÐû°º2ÂKg^Å'?ýE<öØX[MÓâž»oÆöÎ>ñÉ/à‹_|·Þr.]¾‚µµeüágÁÍ7_�»ï¼ç_½€ÏœÇ•+[xéß=ï�7Þw¦ÓgÏžÇ¥Ëxù•KØÙÞøý�}
+o}à�8tp_yôøø'ÿ¯^¸„_:‡ïüÈpðÀ*¾ðÅÇðÛýÜwïxúÙ3ø£/~ÿõõC–M68ÂêmlÃ^X:V¯¯vž—5´2’E÷#þì$³�ï@­V§~‘”ù_20·4yd§G½(s±Ç[h¨K±^4)IÏSiF«!9–z-¡é=†¼°êÃAr•Õ?e¦S&K�J…B‡8Ç‘.8BŠA7@¼ ë|k(�©!R8]¡u‰ÞK’¾úH§õÞƒ]Ú‹V„%;œº€ˆ{¤5�ÞÙÖ$cS.-·¡ûb�y‡Îspa.8]DOºÈ#Sx…&�:¢l?¢L
+Œ+�=Ù›$F*ØˆÉËˆ×­I¸S&„ùºd‡öÆ�À¿ü)tÂq‰Xˆó QŒÖ€iÆ\;�n4Ù5<^ÅÚÍÿ	VÖEçÁ¥—ÆÎ+ŸH~ø¡3r+„�°F4Œ’Ž" ;�oÁê�S1ïæ:¯®Ø}·Ýz=Ž=ˆ—_>‡Ç¿þžxâ)ŒàóŸ›[»x÷»ÀxÜâðá€Í­üîïý~âÇëkË®¥É´Ã¯ÿæÇpéÒÞûž°¹¹‹Ï}þË8qÍal\ÙÆóÏ¿Œ·¼ù¼é�wâØÑƒ¸|ù
+¾øðWpøÈ‚o¸£Q‹­í|úS_Äg?÷%Üqûi>´Ž{Þp;®lnáo»Ë+KxéÅ³xè³ãÎ;nÁÓÏ¼ˆ?|èK¸í–ÓXY½_ÿúsøòWžÀ›ßt'vv÷pÛ­7áÛ¾õ]xò©gñk¿ñ±}ïäfÿùÍ5‘!�ŸqI­–×
+¥)#™µií£µ´ÿtGöÁ+æ�«ú@9¢§F*:mÅÆ2©zÕ‚·�„úýG�eA4½!Q	à½`&©˜T¢t2ˆwPM"¨í@H3´úgF }±X	
+9›æÌR@z|²0ŠR@®ªäýD,åE„ã×T4'ñªd/£¥Î‡Z$¦…ÓKì]R”iMé%Îyö	ÉBÂˆ�¤ÎB|(ŒŒ4–b4H®e„GôX‡£¢Z^Š#´¤Æ/‹�™”³<8ÇºX –¢ÎV&«à.„ëb/�½[>„öæï…ß|	2=°¤ó€l�G
+°tÒ­ÖÅŸu;ßð®|Õm]ÙÀæKŸ†ß<ÚÀ­8Â
+¨ëÂÈŠªÖ·Û7«X=r7Æãq+÷ª2R„�B\¼x	ÛÛÛØÜÜÀåË—Ð´
+î¾ûv<õ�pö•s¸û®[pâD08\_[Á‡>ø>\ºx	mÜÿ¦7`i¹Å«.á3Ÿyßó§¿ï{ÏxùìEüÖo.n`kk§N]ƒw¿óM8~üàÊ•M\sÍQŒÇmtn\ÞÀ+ç_ÅÎî¶vv°µµ�õõUÜxÃµ¸²¹…Ûo»ãQpê½é¦ë±¼<Æ£�=�3g^Âýà‡±¶¶‚µµu<ñä7pÓ�§püØ¬­®à¶[¯Ã�õe|å«__¤€Hÿè%¯ÑÀþn^�Ùo„?4¾*l¹*QÝ~]Á|ŒdHT8k„E>©ÊkZoMé­2ÆK}¥ý¸~ý‘
+í_ìfærK…'Þªh¡êzf<«ˆôX[T�éJómwå:DQƒ¨ÞkÀ·Š0’F.v�75ZÑ�/S´ƒFA|´¬K'Ö’¥òj}H)*…æ[Þ9ÎÀ~*"Ó§º¸3ë¤p‘‹[3EGáR<HYÌ&\#‘±5	&‰Å÷*÷bl;—–‹1jÔÚ‰:8]Û£Óïƒl<ƒÝ'��r­x�ì^�Ôžx$~²·tÖoùšÑD€®ó¸üÂç0½ø@:¢uË€gˆßÄtÅï�ˆ°rô~:r]¤9‹é¢%C:*^½¸��}ì!<öµ¯Åü
+®»ö$XÃ[¸MÛâ£¿óïñÄ×ŸÅûß÷Ü{Ï­8t`ßý�À¿úÕßÃ£�=…¯?ñ"þÔGþ1VV–á8àbÓiíòØRÅæöNŽ/Ø›ì¡q
+˜Óé¿÷±‡ðÅ‡¿‚µÕe<ÿüË¸ñ¦ÓhÛ{»{Ø¸²…½½=lllbey	]ç£Ù¦êr
+´àååðõx4Sè¬/\¸¸xé2ºè¥µ`"ó‹ˆT¥£ÎašAK½.ÅA»qµxõl‰h?°s3iÃ2‡•5¯ˆÌ`Pé9©5Ït&}	JÞ)b$3øº´¯O~™¢?ß Lf²­ª²\;/\D´1¾‰KwMçµE÷@Ì9{#¬èg’±ˆ¼ÐKu‰�N,ô˜�0:òÁn$‚Þ¢‹G˜)©ù9ÇÀ ôµ‹ç-Š	«‰”ÿ—§¬>§Ô™Q ôÎqú>ÀÉÒ]�
+EÆ©1™òºRÀzÃZóQ¬Þ‹c¯JOTÌ¬ÔÁiÆje¾Úz°k1ºõOÃïžÁô¹_Z�^0½4!Í1 9ˆf¼ŽÕÛ¾NÞ‘¯”Ý�l¿òDFÀè(Àãœ‡ñdO|5ØWËÇÄÁ“wÁµn¥
+‘«ÄwDxøáGñü/á=ï~î½÷|ò“ŸÇææ&.]ÚÀÊòn¾ñ~ì/|>ñŸÇï|ôã8th
+7ßt
+.^Æ÷|÷·ã•sñSãÿÄ}÷Þ�{Þp3î½ç^<÷üKxúéñÂ‹g1™L±²<F×ylomãÙç^Â¡CëXY^Âh4ÆÖöÇØÛ�àsŸïzÇ›ð¡o7~ó·?‰gž{{{S,�Gèº“i§ÆÐWà;�ƒàð‘#xî¹3xõÕKxâ‰gpìèA¬¬,cggÓi—7š»;{W;Â`¡¸PøUÙ'¢¨/:$ŠT�oH‰¶�!-‚O,ÒÙÌÉdßw¤UE£È@ç‘Š�Íì�zô0¥…Fy0m*¨-@dÞy¦óÃ�Qigb�(}“ÇÙæJ§
+G/D+×c’õ"@z]H™§­D8Û�Ï†ðšÂxŠ#MV@>fuKH
+¤:«Åt…”ñ�DkÍ…#
+Ós†±V|�®DýúøZ8n.HÂãu±ûðžCâ+“8XÊ99àˆË8+Œ¬D1ù�9ÆêrÄCŠb=ŒOl°cêoŽzá^oVcù®ÅÖÎYL_þÃ4¥�åÁfpê�\DsÝ±~ý;â.è¼`ãÌW1Ý|À(à%~ªÀ¾‚)Iªh~
+ø	–�½GNß�¥å5Ì³€H¢Ñrï �ï½ç\¼p_ÿú3xú™ðÒKgðÀ›ïÃêÊ2¾ñôøÜç¿Œå¥%xßáæ›NãÐÁ5ììLð¯õc8zäZÇu§Ob}}+Ëc¼ÿýâ3Ÿ~ÿæ×>†í�¼ãÁ·àøñ#X[Û…cÂG?ú8sæ,Þóž·ãÐ¡h›@^Záío½O<ñ~ic_}ì)¿æÆ£DÁþÄ{Ÿ½²Ú¶EÛ:4m‹»ï¼Û;þí¿“I‡¦mðžw¿®a:í°¼¼FŽÎayeißUÆ}ðû¾÷¯S¯Ó_pâ?Ë.}©Á a†ÁI¨—áKÕH`ÁùØB?6¹å‹ƒE«f�kª¼lCc�ó 4°(aÀvšJ¦²..»yI$×û¨rÖë¢_�­jâ€�Y{•9ÅÎ�ƒÉÊ%ºèŸÛ�Èç¦¸TÎ²Ñ×XˆÉ•Žº}§É©ï¥ï<±©ÒÂ/Ê„¶JÀ5Àä‚Ó.‘y¬ð=ÎEÁJ\ÆGrQ£ð»à&ŽÚâßÆ¯™›R˜Ôc:ç¬ënÌïhã÷S¶GÀ<d¡Ç\õì°°sp®öÒŠê±ƒKŒ­ì•E:W„•g£Y:wàVÈÎ%t›g™–¦Áè:P»Šƒ÷ýE¬Ÿ¸-_ï»ÛÛ¸ðÕ_B·ù|ÔÐxÀw¡HH¨s¾ÈO€é6ÈïaéÄÛqôæwaeýØà o½`wgŠÝ½=<¸šÏetýÇúÚ
+Nž<†í�]\¸p7ßtÞòæ{qÍ±Ã8p`
+~êñÊ+çpòÄQ¼ó�oÂ‰ãGàœÃñkŽâÜùWqùÒe|ðÛß‹[o¹MãpìØ!<¸†WÎ½Š·½õMxðí÷b4j±´4Â‘#ÐùÛÛ»¸å¦Ó8rx×\s‡­áÐÁuÜpÃµØÞÞÁ/žÁÁƒëxï»ß†S§Ž¡i¬­-ãä‰kpêä18ç°4áä‰kpúô)¬¯-ãÄ‰£ØÛ›¢iü[ß…›n<ˆ`mm×Ÿ>Žƒ×Ð´
+Ž;Šã×ž¿äýÍù/„ËEL­hnÁ€(gÐ»¤&ñÈ¾è…µkŸ=ðß_["‹Z kÑoÊÊñIÍ�¬CøZtWÕ¿#EÔV{FÕ<ìºx0Á~­<
+ëÚûæ2€XæX¶ñ(
+¢Úšº+ƒE‰ö "É¤x‰Ä_&& Ù!}ì€±¦Ýø±¦	˜&pÜ�ÉƒÙGƒ@QÇ…2›…oZÔç2¶b^‹ˆ-�CÀ.*!ÐKùœ,ÖÃ¹®Ø¢|©”h�²2¼vå�ô[r
+Ä�&(¬ÅAÐÂK‹NZx>ZtÒÀKƒ`.ÑD,'ÌÒ5Î’�w]x�ÎŒ®8[µ#æ›‡¢�Ü:âÞ¿™¡©X	«ßMc±8Jëv6°õø¿Àî¿é.�bñ®Áê½?Žc÷ÿ(ÚQHÍó“m¼úäàò£ÿ$Œ›5s´’áî¢ó£Ì«§ß‹#·ý	,Å�µŠÚTcÔ²™ÚÚÚÅÞÞ‡¯f‚Eøå™Q8�NÑ4
+Ú¶	›!ˆtØÝ� �"áÜÛ›Â{�ñÒ8Ûë§Qòdo‚¦iÐ4lFÇÓÉÓ.	�ãž�o:�b/FòŽF#8&#þÕøT"|¤k2™¢óãñ¨·ï+ŸÅ„¯�…õZ7ÜÃ4©:ˆÉ¢Îµ2›f²¡fw42¿.Ð¶)áuûoPY>g”%TÓyÉ²ØfÇ–ô<R!SÆg~¸¦öH…gPý^¿O}'eú‘~Xšs&uÖeÜ£Œ¯ÜàKb²¹äA2¬šœ=®Í$Ó"Ž´ …Çd.øG(À.c:ÁR%ž;/æ÷’Ž9àÅ¾6©›O
+¤#A;Â*�»I}Ï`FTœFW‘©ÕEk§ð¡ô8õ³HN¼I÷¡œÁØœ,DÙ Äï%½¡ü›5	@�J›t»6´+pð¾ÆÖá»°õØ?„¿ü4D&h�¿	«·|®mó_øÉ¶žùeÈîs€;™Z
+àDœq2%FïÄ�Û¿Ž�F;^¸ß5ÿ*‚è¬¬Œ±²2
+V)Ð·el`4j15± ”›œÙaeÅû ŒÆK£rOè� ¨,â°TüÑ¨Åmoó˜ï¦AÓ´½É
+´»vB‚Ø"…MãÐPÓß,ê	
+ñbÈkq»šÃ½ÊÇ³E¤ƒÓók¨£ eJ~¯‹È~�¾ÙªZçžS¥L&k¤½jE]:)„P¥E†Ž›Ì(»&A‘†Ï½Ø¼�ÁxŽ�ãßïqUt¬6V¤Ê™—,ˆn±Ä? s9H›×+58X@}Q4|Êšœ�DQÍœ|Ã¢âáAÒ¨«ÏªÌ³r¾²31c/ªØ`±p&‡^qœòˆú�Ô[9J:ÅjKc0"ãœ:�T<sBa¦ý¢8òÆŽÁ)±a*Ä0yigÝë„#ŸÌŽTãŽ¾aí†wa|è4v^ø8öÎ~«wþ–^[®Qßaûâs˜œý€]@¶à»q�³#îôyhW°|ô,Ÿ~ÖŽÝ„åC×•EP”Óé÷9ç*ë.ŽÏ¤„Ue°%¶HŠê;ÔæMÙLZ:ÿÐâ}•Ûw¢×°h]Ås]uBà‹½k-.œ]X’eös–EYh¹µXq¸;Ø/Kñj!ÌÒ²Šn�Ú›S.¼ìS<DÛ(‹äÖØîþÑËð’ã@2/H†Y^s¼ÓdQ6CM'3v)ÅEÔt#ZpXíúIE–T‡r*N+Ÿ¢¹–ö>±¤âÂÎ)"˜C=KÏ#Šªí};Š¾Ó[s¹X…u”óx1?¬koO¨TDˆJ’!'»•è‘U
+—×™gFVRž­Gšï£€æº+ÑJvŠc/ÊÖ-!íØ«Î�îIØ5¹£µcè®7Fë§ãˆ-\ãÓ�W±ñÄ¯C¦[áÔM6!¼P×Fsð,»ËGoÅÒáÛ0:pM3RÙ1eW£}ÓÂ�Ù81”½OA_�å|ÆOÅ8D�”÷iÆûLª«7h}Y¿„úkÉŒõ‹1ä«ßñ¿^ƒ—f.Et)rOŸÙ…˜ì�}ŠÈ<Fj�ç"d‰¥Ôw¸Ímme¡Þ{7s|œö-‹4%ºûPL,ÍbÔÍ~QáXëÀÜyPEÓíù¤Ð =×Œ²dÆÁè«[Ï£Ì"0ã\<ç¤8SIaqÉÇ¬KýM
+Cz�ÚfÜt4¦+Í«¯Ãc¸�[‘iê»esMŠQ�ÙÁšÒ‹£¸êB[€p^Ìô˜MŒ2vQÃ(ì+ÙWI'b)ÐÉ*%Ù´ƒ´6*©è™u•QVL.Êc¯~WCŠÌÑóc«Øš¡åÆ‡Ð,îíÎ›•c8õž¿
+zÏ_-&…¸«¤s�!
+BÏz5-LTáxÉQŒú|~ªÈ-4´È“
+ž².C»ªþÌM¡ý×{ŸÊˆ‰ýpBU5Ø·nÑ¾Œs¿¾š…zHƒQt F!âu¿Î£÷s`~„û¢Åc–ëº¶z¯ŠH�²_¼­Ž¹E¤é"fF˜ŠU©L"=@½¤Å#f%XÒŒ"Ÿ_îÜLÊi—�u&]ã @yÿjÞÎ‰™Åj±"³óe½ÛÏþT.îœÕ8‰°ír.Dâ%Re‘Ã§˜€Î{¸X¼TË‹R¤C”Z<ÑDÙå‚píL,à�™®^w—ëRÆWŒü›"’˜blò¾ƒ+çì�RP�‹C(È\,PPVÅxQã+Ô3ì¬s0ô)CÅÚÓÎ‰NË»‘‘”Ì�l}L¬�ÁÔÖsuðDêÜô$„Ô¸ÎxRÅî¤^ðÒìu´î(æ‡:,êGsÉN¯{¡ý:†­ç¾•�±Õ¼"B³Ò²fÌáÓÒG¦T…ÃtTÔÕ5ã ~Ì«�¿ËÕv#u^úEz,%µ¢žúUDYy”-q]	‡�t™é„lc<Kîz9Ö4£ õr“98ª[¢|@ÒçºóHtÕ.ê)DÙˆKÔwˆºÑK÷‘n&!‚Kb>éêäF$K‘Œç¨ð¦˜ÅAÞG#Ãdô(Å"E¢ÜK&Õ8+–b‡aHÌLÏ¾`âk³Å½(…?•ñUêlœc›Õap�d()pÌù|8¶‚Af›yN¤Ù]*s=&e#¯Ç•ù~ÔT~µfh¿dQˆUé“5A†¶1Æò‡ú£u=‘½åDÙ¶äÓAfà*K ÒIêÅ>ôÇõ4˜c>¹ÕØ7×�Æ‚ÒU½�¡£žñ×Ã˜ÙeÞž¸l]¤WHúâ5BßeSƒ‹Ðþ•@Þ}Æ�Ê#,¬ûê‚3Ž¾åÅÛnDWe[<($JQEË�RPìNÎ¾v›FÖ#Ð@�í_Qe^1òõ²à’”ÝºÞ‰ç‘90ûè%`r17Æ·‰¡óRQ�:£œ‡³:4»‰cÀT(Báb6¹¨°)R#
+¨sÆQR£“ÎÑ¿_FPDÑçJ¡@RøV(rªÑ¢ÄXY©ÏÓkpª¤Î=Ù—¤EÔénƒKŠa‰Æ�bÃwËÙGKïÈÉ¨ÖÉììS®»£*ìLÙÂëÎ¹f²™Xé!vSh±\©ëO¢™¯ª„Êq[¿(ô	'fL47ö{H¹OÕE3°‘o¶p¼®#¬þ›¤×çÅ?‰ægŒ÷Fc³ŠI*$Ù–]2«‹JA@º©WHfØ§€×ƒÀþ¨Þ[Œ¡gç
+XÒÀ¤Ê®°å3c&*sR(¼ÒßÝ
+¥Ê€¦Ft+AýÂ±ˆ¾g—¥; ™Ýš)æ”ä"ÂY8Gì"S©+‹kì:‚˜.ò�H�SØ
+	RhŠ¬ò4"âˆ�è® X„¤ð¦2ÂÎ“lŸgªH
+œu(�—lg¢í?2,5|k¨±Ö.¢ƒ§¢f#‡p¥TÄ"l$fcm’cc©Ø­„c"û GÆKe{wvœG^SŠ;¢�ÜtØlðËÆÛLßŸbO¼œ¹)™Û˜h`mUŒAQE#RÇµÖ)çëH•ï nRÖÅeÆ(‰Pod-\P›-ÍJ$”ýÆTßdá ×£€\%Ájß?6%,9
+´è“Ðlì¢\dÉ´.e¬•*ÃàI“wÙ«£\¥¸Dï�$³†*}E5ª³�¶ØEžHð
+Š—}%eÆ×4Ð*Î›¿Îé
+eX3¿d†'™Új€™#F‘TØ..ø)<HˆJÓc“ÄgÁô¸+¯�kÉZ¬C=Fªøi\˜s4®xGURÀq(¶•$œ&/ð(#.
+´+A`îvDuQRp†
+ß2l³,ÅŒ:[&-„©sÈE–Ëñb.Y"iT•Ä‘åïPÆ‰©¨0¬—bk	ê¤Ì:D‚l°±ú›TðÞú:Lw%ª<»"³JÔuCe/X änUY�To±	¥@?!“TÑüšð¤ãX—Þoýÿ
+ã©¨Gp@IEND®B`‚
\ No newline at end of file
Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/info.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/images/info.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_cs.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_cs.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_cs.properties	(revision 38313)
@@ -0,0 +1,60 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+aceptar=Budi\u017e
+cancelar=Zru\u0161it
+com.iver.andami.messages.Messages=com.iver.andami.messages.Messages
+Ejecutando\ comando\:\ =Vykonej p\u0159\u00edkaz\:
+en=
+error_parsing_comboscale_elements=Chyba p\u0159i rozd\u011blov\u00e1n\u00ed elementu m\u011b\u0159\u00edtka
+error_parsing_comboscale_value=Chyba p\u0159i rozd\u011blov\u00e1n\u00ed hodnoty m\u011b\u0159\u00edtka
+Error_reading_isocodes_file=Chyba p\u0159i \u010dten\u00ed iso k\u00f3d\u016f pro jazyky
+Icon_not_found_=Ikona nenalezena
+KeyMapping.Caracter_no_valido=Neplatn\u00fd znak
+Launcher.config_mal_formado=. Chybn\u00fd 'config.xml'
+Launcher.config_no_encontrado='config.xml' nenalezen
+Launcher.Dependencia_no_resuelta_en_plugin=Poru\u0161en\u00e1 z\u00e1vislost z\u00e1suvn\u00e9ho modulu
+Launcher.Dos_skin_extension=Dv\u011b extenze pro vzhled.
+Launcher.Error_con_las_librerias_del_plugin=Chyba v knihovn\u011b z\u00e1suvn\u00e9ho modulu
+Launcher.error_getting_class_loader_for_status_bar_control=Chyba p\u0159i zji\u0161\u0165ov\u00e1n\u00ed stavu stavov\u00e9ho \u0159\u00e1dku.
+Launcher.Error_instanciando_la_extension=Nelze vytvo\u0159it instanci extenze
+Launcher.Error_localizando_la_clase_de_la_extension=Nelze nal\u00e9zt t\u0159\u00eddu extenze
+Launcher.Hay_dependencias_circulares=Kruhov\u00e1 z\u00e1vislost z\u00e1suvn\u00e9ho modulu
+Launcher.Ignorando_el_directorio=Ignoruji adres\u00e1\u0159
+Launcher.labelset_class=Nelze nal\u00e9zt popisek t\u0159\u00eddy (labelset)
+Launcher.look_and_feel=Nelze nastavit syst\u00e9mov\u00fd vzhled
+Launcher.No_se_encontro_la_clase_de_la_extension=Nelze nal\u00e9zt t\u0159\u00eddu extenze
+Launcher.No_se_encontro_la_clase_mdi_manager=Nelze nal\u00e9zt t\u0159\u00eddu mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=P\u0159\u00edstup k mdi manager odm\u00edtnut
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Nelze ulo\u017eit konfiguraci Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Nelze vytvo\u0159it instanci mdi manager
+Launcher.No_se_puede_acceder_a=Zam\u00edtnut p\u0159\u00edstup k
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Nelze ulo\u017eit konfigurace z\u00e1suvn\u00fdch modul\u016f
+Launcher.Two_extensions_with_the_same_priority=Dv\u011b extenze se stejnou prioritou. Bude na\u010dtena jen jedna.
+Launcher.Two_menus_with_the_same_position=Dv\u011b nab\u00eddky se stejnou pozic\u00ed. Bude na\u010dtena jen jedna.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Chyba u\u017eivatele
+MDIFrame.quiere_salir=Ukon\u010dit gvSIG?
+MDIFrame.salir=Konec
+MDIManagerFactory.No_skin_extension_in_the_plugins=Neexistuje extenze pro vzhled v z\u00e1suvn\u00e9m modulu
+Messages._no_se_encontro_la_traduccion_para=Nelze nal\u00e9zt p\u0159eklad pro
+Messages.no_se_encontro_la_traduccion_para=Nebyl nalezen p\u0159eklad pro
+No_extension_associated_with_this_event_=S touto ud\u00e1losti nen\u00ed asociov\u00e1na \u017e\u00e1dn\u00e1 p\u0159\u00edpona souboru
+No_se_encontro_la_traduccion_para=Nelze nal\u00e9zt p\u0159eklad pro
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dv\u011b t\u0159\u00eddy se stejn\u00fdm jm\u00e9nem
+PluginClassLoader.Error_reading_file=IO chyba\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=Chyba aplikace
+PluginServices.Bug_en_el_codigo=Chyba
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Chyba aplikace. Doporu\u010dujeme uzav\u0159\u00edt aplikaci.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Nelze nastavit p\u0159es\u00fdpac\u00ed hodiny
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Nelze obnovit kurzor
+Preferences=Preference
+restore_defaults=Obnov standardn\u00ed
+SplashWindow.Iniciando=Spou\u0161t\u00edm...
+StatusBar.Aplicacion_iniciada=Aplikace spu\u0161t\u011bna
+Unable_to_find_icon=
+y_en=

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_cs.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_va.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_va.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_va.properties	(revision 38313)
@@ -0,0 +1,36 @@
+#text_ca.properties
+KeyMapping.Caracter_no_valido=Car\u00E0cter no v\u00E0lid\:
+Launcher.config_mal_formado=. Fitxer 'config.xml' mal format
+Launcher.config_no_encontrado=. Fitxer 'config.xml' no trobat
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00E8ncia no resolta en el connector
+Launcher.Dos_skin_extension=Dos skin-extension. Usem l'\u00FAltim
+Launcher.Error_con_las_librerias_del_plugin=Error amb les llibreries del connector
+Launcher.Error_instanciando_la_extension=Error instanciant l'extensi\u00F3
+Launcher.Error_localizando_la_clase_de_la_extension=Error en localitzar la classe de l'extensi\u00F3
+Launcher.Hay_dependencias_circulares=Hi ha depend\u00E8ncies circulars entre els connectors
+Launcher.Ignorando_el_directorio=Ignorant el directori
+Launcher.labelset_class=No s'ha pogut trobar la classe d'etiquetes (labelset)
+Launcher.look_and_feel=No s'ha pogut posar el 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=No s'ha trobat la classe de l'extensi\u00F3
+Launcher.No_se_encontro_la_clase_mdi_manager=No s'ha trobat la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No s'ha pogut accedir a la classe mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No s'ha pogut guardar la configuraci\u00F3 d'andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No s'ha pogut instanciar la classe mdi manager
+Launcher.No_se_puede_acceder_a=No es pot accedir a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=S'ha produ\u00EFt un error en guardar la configuraci\u00F3 dels connectors
+Launcher.Two_extensions_with_the_same_priority=Dos extensions amb la mateixa prioritat, nom\u00E9s se'n carregar\u00E0 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00FAs amb la mateixa posici\u00F3, nom\u00E9s se'n carregar\u00E0 un
+MDIFrame.Error_no_capturado_por_el_usuario=Error no detectat per l'usuari
+MDIFrame.quiere_salir=Est\u00E0 segur que vol eixir?
+MDIFrame.salir=Eixir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No s'ha trobat cap extensi\u00F3 'skin' entre els connectors
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos classes amb el mateix nom en el connector
+PluginClassLoader.Error_reading_file=Error llegint el fitxer\: 
+PluginServices.Bug_en_el_codigo=Error en el codi
+PluginServices.Error_grave_de_la_aplicacion=Error greu de l'aplicaci\u00F3. \u00C9s convenient que guarde les dades i isca de l'aplicaci\u00F3
+PluginServices.No_se_encontro_el_recurso_de_traducciones=No s'ha trobat el recurs de traduccions
+PluginServices.No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00F3 per a
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No s'ha pogut posar el rellotge d'arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No s'ha pogut restaurar el cursor del ratol\u00ED
+SplashWindow.Iniciando=Iniciant...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00F3 iniciada

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_va.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_fr.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_fr.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_fr.properties	(revision 38313)
@@ -0,0 +1,60 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Accepter
+cancelar=Annuler
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Caract\u00e8re non valide\:
+Launcher.config_mal_formado=. Fichier 'config.xml' mal format\u00e9
+Launcher.config_no_encontrado=. Fichier 'config.xml' non trouv\u00e9
+Launcher.Dependencia_no_resuelta_en_plugin=D\u00e9pendance non r\u00e9solue dans le plugin
+Launcher.Dos_skin_extension=Deux "skin-extension". Le dernier sera utilis\u00e9\:
+Launcher.Error_con_las_librerias_del_plugin=Erreur avec les librairies du plugin
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Erreur d'instanciation de l'extension
+Launcher.Error_localizando_la_clase_de_la_extension=Erreur de localisation de la classe d'extension
+Launcher.Hay_dependencias_circulares=Il y a des d\u00e9pendances circulaires entre les plugins
+Launcher.Ignorando_el_directorio=Ignor\u00e9 dans le r\u00e9pertoire
+Launcher.labelset_class=Impossible de trouver la classe des \u00e9tiquettes (labelset)
+Launcher.look_and_feel=Impossible d'afficher le "look and feel"\:
+Launcher.No_se_encontro_la_clase_de_la_extension=Impossible de trouver la classe de l'extension
+Launcher.No_se_encontro_la_clase_mdi_manager=Impossible de trouver la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Impossible d'acc\u00e9der la clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Impossible de conserver la configuration d'Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Impossible d'instancier la classe mdi manager
+Launcher.No_se_puede_acceder_a=Impossible d'acc\u00e9der \u00e0
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Une erreur s'est produite lors de la sauvegarde de la configuration des plugins
+Launcher.Two_extensions_with_the_same_priority=Deux extensions ont la m\u00eame priorit\u00e9, une seule sera charg\u00e9e.
+Launcher.Two_menus_with_the_same_position=Deux menus ont la m\u00eame position, un seul sera charg\u00e9
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Erreur non captur\u00e9e par l'utilisateur
+MDIFrame.quiere_salir=Voulez-vous vraiment quitter gvSIG?
+MDIFrame.salir=Quitter
+MDIManagerFactory.No_skin_extension_in_the_plugins=Aucune extension "skin" n'a \u00e9t\u00e9 trouv\u00e9e parmi les plugins\:
+Messages._no_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour
+Messages.no_se_encontro_la_traduccion_para=
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Deux classes ont le m\u00eame nom dans le plugin
+PluginClassLoader.Error_reading_file=Erreur dans la lecture du fichier\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Bug dans le code
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Absence de sablier\:
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Impossible de restaurer le curseur de la souris
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=Initialisation...
+StatusBar.Aplicacion_iniciada=Application initialis\u00e9e
+Unable_to_find_icon=
+y_en=

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_fr.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_de.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_de.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_de.properties	(revision 38313)
@@ -0,0 +1,60 @@
+#Translations for language [de]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=OK
+cancelar=Abbrechen
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Ung\u00fcltigiges zeichen\:
+Launcher.config_mal_formado=. Datei 'config.xml' fehlerhaft
+Launcher.config_no_encontrado=Konnte die Datei 'config.xml' nicht finden.
+Launcher.Dependencia_no_resuelta_en_plugin=Ungekl\u00e4rte Plugin-Abh\u00e4ngigkeit
+Launcher.Dos_skin_extension=Zwei skin-extensions. Es wird die letzte verwendet.
+Launcher.Error_con_las_librerias_del_plugin=Fehler bei den Plugin-Bibliotheken
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Kann die erweiterung nicht instanziieren.
+Launcher.Error_localizando_la_clase_de_la_extension=Fehler bei der lokalisierung der erweiterungsklasse
+Launcher.Hay_dependencias_circulares=Kreisf\u00f6rmige abh\u00e4ngigkeiten zwischen den plugins
+Launcher.Ignorando_el_directorio=Das verzeichnis wird ignoriert.
+Launcher.labelset_class=Kann die etikettenklasse (labelset) nicht finden.
+Launcher.look_and_feel=Konnte nicht auf 'look and feel'  stellen.
+Launcher.No_se_encontro_la_clase_de_la_extension=Konnte die erweiterungsklasse nicht finden.
+Launcher.No_se_encontro_la_clase_mdi_manager=Konnte die mdi-manager-klasse nicht finden.
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Konnte nicht auf den mdi-manager zugreifen.
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Konnte die Andami-Erweiterung nicht speichern.
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Konnte den mdi-manager nicht erstellen.
+Launcher.No_se_puede_acceder_a=Kein Zugriff m\u00f6glich auf\:
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Fehler bei der speicherung der plugin-konfiguration
+Launcher.Two_extensions_with_the_same_priority=Zwei Erweiterungen mit der gleichen Priorit\u00e4t. Es wird nur eine geladen.
+Launcher.Two_menus_with_the_same_position=Zwei Men\u00fcs mit der gleichen priorit\u00e4t. Es wird nur eins geladen.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Anwendungsfehler
+MDIFrame.quiere_salir=Sind Sie sicher, dass Sie das Programm beenden wollen?
+MDIFrame.salir=Beenden
+MDIManagerFactory.No_skin_extension_in_the_plugins=Keine skin-extension in den plugins gefunden
+Messages._no_se_encontro_la_traduccion_para=Konnte \u00dcbersetzung nicht finden f\u00fcr\:
+Messages.no_se_encontro_la_traduccion_para=
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=Konnte \u00dcbersetzung nicht finden f\u00fcr\:
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Zwei Klassen mit dem gleichen Namen im Plugin
+PluginClassLoader.Error_reading_file=Dateilesefehler \:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Bug im Code
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Konnte die Sanduhr nicht stellen.
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Konnte den cursor nicht wiederherstellen.
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=Startet...
+StatusBar.Aplicacion_iniciada=Anwendung gestartet
+Unable_to_find_icon=
+y_en=

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_de.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_eu.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_eu.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_eu.properties	(revision 38313)
@@ -0,0 +1,60 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Ados
+cancelar=Utzi
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Karakterea ez da baliozkoa\:
+Launcher.config_mal_formado='config.xml' fitxategia txarto eratuta dago
+Launcher.config_no_encontrado='config.xml' fitxategia ez da aurkitu
+Launcher.Dependencia_no_resuelta_en_plugin=Mendekotasuna ez da plugin-ean ebatzi
+Launcher.Dos_skin_extension=Dos skin luzapena. Azkena erabiliko dugu
+Launcher.Error_con_las_librerias_del_plugin=Errorea plugin-aren liburutegietan
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Errorea luzapena instantziatzean
+Launcher.Error_localizando_la_clase_de_la_extension=Errorea luzapen-mota aurkitzean
+Launcher.Hay_dependencias_circulares=Plugin-en artean mendekotasun zirkularrak daude
+Launcher.Ignorando_el_directorio=Ez hartu direktorioa kontuan
+Launcher.labelset_class=Etiketa-mota (labelset) ezin izan da aurkitu
+Launcher.look_and_feel=Ezin izan da jarri 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Luzapen-mota ezin izan da aurkitu
+Launcher.No_se_encontro_la_clase_mdi_manager=Mdi manager klasea ezin izan da aurkitu
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=mdi manager klasea ezin izan da atzitu
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Andamiren konfigurazioa ezin izan da gorde
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Ezin izan da mdi manager klasea instantziatu
+Launcher.No_se_puede_acceder_a=Ezin izan da honakoa atzitu\:
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Errorea plugin-en konfigurazioa gordetzean
+Launcher.Two_extensions_with_the_same_priority=Lehentasun bereko bi luzapen, bakarra kargatuko da.
+Launcher.Two_menus_with_the_same_position=Posizio bereko bi menu, bakarra kargatuko da.
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Erabiltzaileak kapturatu ez duen errorea
+MDIFrame.quiere_salir=Ziur zaude irten nahi duzula?
+MDIFrame.salir=Irten
+MDIManagerFactory.No_skin_extension_in_the_plugins=Ez da aurkitu 'skin' luzapenik plugin-en artean
+Messages._no_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:
+Messages.no_se_encontro_la_traduccion_para=Ez da horretarako itzulpenik aurkitu
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Izen bereko bi klase plugin-ean
+PluginClassLoader.Error_reading_file=Errorea fitxategia irakurtzean\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Bug-a kodean
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Ezin izan da arezko erlojua jarri
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Saguaren kurtsorea ezin izan da berrezarri
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=Hasten...
+StatusBar.Aplicacion_iniciada=Aplikazioa hasita dago
+Unable_to_find_icon=
+y_en=

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_eu.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_it.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_it.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_it.properties	(revision 38313)
@@ -0,0 +1,60 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+aceptar=Accetta
+cancelar=Cancella
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =Esegui comando\:
+en=
+error_parsing_comboscale_elements=Errore nell'esame degli elementi ComboScale
+error_parsing_comboscale_value=Errore nell'esame del valore ComboScale
+Error_reading_isocodes_file=Errore di lettura dei codici ISO della lingua
+Icon_not_found_=Icona non trovata
+KeyMapping.Caracter_no_valido=Carattere non valido\:
+Launcher.config_mal_formado=. Documento 'config.xml' mal formato
+Launcher.config_no_encontrado=. Documento 'config.xml' non trovato
+Launcher.Dependencia_no_resuelta_en_plugin=La dipendenza non risulta in plugin
+Launcher.Dos_skin_extension=Due skin-extension. Usare l'ultima
+Launcher.Error_con_las_librerias_del_plugin=Errore con la libreria del plugin
+Launcher.error_getting_class_loader_for_status_bar_control=Errore nell'ottenere il loader delle classi per la barra di stato
+Launcher.Error_instanciando_la_extension=Errore ricorrendo all'estensione
+Launcher.Error_localizando_la_clase_de_la_extension=Errore localizzando la classe dell'estensione
+Launcher.Hay_dependencias_circulares=Ci sono dipendenze circolari tra i plugins
+Launcher.Ignorando_el_directorio=Ignorando il registro
+Launcher.labelset_class=Non si \u00e9 trovata la classe delle etichette (labelset)
+Launcher.look_and_feel=Non si \u00e9 potuto porre il 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Non si \u00e9 trovata la classe dell'estensione
+Launcher.No_se_encontro_la_clase_mdi_manager=No si \u00e9 trovata la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Non si \u00e9 potuto accedere alla clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Non si \u00e9 potuta salvare la configurazione di Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Non si \u00e9 potuto ricorrere alla classe mdi manager
+Launcher.No_se_puede_acceder_a=Non si puo' accedere a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Si \u00e9 prodotto un errore salvando la configurazione dei plugins
+Launcher.Two_extensions_with_the_same_priority=Due estensioni con la stessa priorita', se ne carichera' solo una.
+Launcher.Two_menus_with_the_same_position=Due men\u00fa con la stessa posizione, se ne carichera' solo uno
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Errore non catturato per l'usario
+MDIFrame.quiere_salir=Sei sicuro di voler uscire?
+MDIFrame.salir=Uscire
+MDIManagerFactory.No_skin_extension_in_the_plugins=Non si \u00e9 trovato nessuna estensione 'skin' tra i plugins
+Messages._no_se_encontro_la_traduccion_para=Non si \u00e9 incontrata la traduzione per
+Messages.no_se_encontro_la_traduccion_para=Non \u00e8 stata individuata la traduzione per
+No_extension_associated_with_this_event_=Nessuna estensione associata a questo evento
+No_se_encontro_la_traduccion_para=Non si \u00e9 incontrata la traduzione per
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Due classi con lo stesso nome nel plugin
+PluginClassLoader.Error_reading_file=Errore leggendo il file\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=Errore dell'applicazione
+PluginServices.Bug_en_el_codigo=Bug nel codice
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=Errore dell'applicazione. Si raccomanda di riavviare l'applicazione.
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Non si \u00e9 potuta porre la clessidra
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Non si \u00e9 potuto riparare il cursore del mouse
+Preferences=Preferenze
+restore_defaults=Ripristina opzioni predefinite
+SplashWindow.Iniciando=Iniziando...
+StatusBar.Aplicacion_iniciada=Applicazione iniziata
+Unable_to_find_icon=Impossibile trovare icona
+y_en=e in

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_it.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text.properties	(revision 38313)
@@ -0,0 +1,71 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Aceptar
+cancelar=Cancelar
+com.iver.andami.messages.Messages=Mensaje
+Ejecutando\ comando\:\ =Execute command\:
+en=en
+error_parsing_comboscale_elements=Error identificando los elementos del comboscale
+error_parsing_comboscale_value=Error identificando el valor del comboscale
+Error_reading_isocodes_file=Error al leer el fichero con los c\u00f3digos ISO de idioma
+Icon_not_found_=No se encontr\u00f3 el icono
+KeyMapping.Caracter_no_valido=Car\u00e1cter no v\u00e1lido\:
+Launcher.config_mal_formado=. Fichero 'config.xml' mal formado
+Launcher.config_no_encontrado=. Fichero 'config.xml' no encontrado
+Launcher.Dependencia_no_resuelta_en_plugin=Dependencia no resuelta en plugin
+Launcher.Dos_skin_extension=Dos skin-extension. Usamos el \u00faltimo
+Launcher.Error_con_las_librerias_del_plugin=Error con las librer\u00edas del plugin
+Launcher.error_getting_class_loader_for_status_bar_control=Error obteniendo el cargador de clases para la barra de estado
+Launcher.Error_instanciando_la_extension=Error instanciando la extensi\u00f3n
+Launcher.Error_localizando_la_clase_de_la_extension=Error localizando la clase de la extensi\u00f3n
+Launcher.Hay_dependencias_circulares=Hay dependencias circulares entre los plugins
+Launcher.Ignorando_el_directorio=Ignorando el directorio
+Launcher.labelset_class=No se pudo encontrar la clase de las etiquetas (labelset)
+Launcher.look_and_feel=No se pudo poner el 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=No se encontr\u00f3 la clase de la extensi\u00f3n
+Launcher.No_se_encontro_la_clase_mdi_manager=No se encontr\u00f3 la clase mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No se pudo acceder a la clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No se pudo guardar la configuraci\u00f3n de Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No se pudo instanciar la clase mdi manager
+Launcher.No_se_puede_acceder_a=No se puede acceder a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Se produjo un error guardando la configuraci\u00f3n de los plugins
+Launcher.Two_extensions_with_the_same_priority=Dos extensiones con la misma prioridad, s\u00f3lo se cargar\u00e1 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00faes con la misma posici\u00f3n, s\u00f3lo se cargar\u00e1 uno
+login_exit=Salida
+login_invalid_user=Usuario no v\u00c3\u00a1lido
+login_name=Nombre
+login_ok=Ok
+login_password=Contrase\u00c3\u00b1a
+MDIFrame.Error_no_capturado_por_el_usuario=Error no capturado por el usuario
+MDIFrame.quiere_salir=\u00bfEst\u00e1 seguro de que quiere salir?
+MDIFrame.salir=Salir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No se encontr\u00f3 ninguna extensi\u00f3n 'skin' entre los plugins
+memory_usage=Memoria usada
+Messages._no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+Messages.no_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+No_extension_associated_with_this_event_=No hay ninguna extensi\u00f3n asociada con este evento
+No_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos clases con el mismo nombre en el plugin
+PluginClassLoader.Error_reading_file=Error leyendo fichero\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=Error de la aplicaci\u00f3n
+PluginServices.Bug_en_el_codigo=Bug en el c\u00f3digo
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Error grave de la aplicaci\u00f3n. Es conveniente que salgas de la aplicaci\u00f3n.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=Error grave en la aplicaci\u00c3\u00b3n.
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No se pudo poner el reloj de arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No se pudo restaurar el cursor del rat\u00f3n
+Preferences=Preferencias
+restore_defaults=Restaurar opciones por defecto
+SplashWindow.Iniciando=Iniciando...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00f3n iniciada
+Unable_to_find_icon=No se pudo encontrar el icono
+y_en=y en
+No_se_encontro_la_extension_especificada_en_el_parametro_exclusiveUI=No se encontr\u00f3 la extensi\u00f3n especifiacada en el par\u00e1metro 'exclusiveUI':
+Error_reading_plugin_persinstence_New_file_created_A_backup_was_made_on_=Error leyendo plugin-persistence.xml. Se creará un fichero nuevo. Se ha hecho una copia de seguridad en
+Error_reading_andami_config_New_file_created_A_backup_was_made_on_=Error leyendo andami-config.xml. Se creará un fichero nuevo. Se ha hecho una copia de seguridad en
+save_resources=Guardar recursos
+select_resources_to_save_before_exit=Antes de salir se guardar\u00e1n los elementos que est\u00e9n seleccionados
+deselect_all=Limpiar selecci\u00f3n
+discard_changes=Descartar cambios
+gvsig_package_installer=Instalador de paquetes de gvSIG
+usage=Uso
+error_getting_unsaved_data=Error obteniendo los datos sin guardar. Si continúa, es posible\nque no pueda guardar todos los datos. ¿Desea continuar con el proceso de cerrar?
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_zh.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_zh.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_zh.properties	(revision 38313)
@@ -0,0 +1,58 @@
+#Translations for language [zh]
+#Tue Dec 12 10:59:28 GMT+01:00 2006
+aceptar=\u786e\u5b9a
+cancelar=\u53d6\u6d88
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=
+Launcher.config_mal_formado=
+Launcher.config_no_encontrado=
+Launcher.Dependencia_no_resuelta_en_plugin=
+Launcher.Dos_skin_extension=
+Launcher.Error_con_las_librerias_del_plugin=
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=
+Launcher.Error_localizando_la_clase_de_la_extension=
+Launcher.Hay_dependencias_circulares=
+Launcher.Ignorando_el_directorio=
+Launcher.labelset_class=
+Launcher.look_and_feel=
+Launcher.No_se_encontro_la_clase_de_la_extension=
+Launcher.No_se_encontro_la_clase_mdi_manager=
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=
+Launcher.No_se_puede_acceder_a=
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=
+Launcher.Two_extensions_with_the_same_priority=
+Launcher.Two_menus_with_the_same_position=
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=
+MDIFrame.quiere_salir=\u60a8\u786e\u5b9e\u8981\u9000\u51fa gvSIG \u5417?
+MDIFrame.salir=\u9000\u51fa
+MDIManagerFactory.No_skin_extension_in_the_plugins=
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=
+PluginClassLoader.Error_reading_file=
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=
+StatusBar.Aplicacion_iniciada=
+Unable_to_find_icon=
+y_en=

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_zh.properties
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_en.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_en.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_en.properties	(revision 38313)
@@ -0,0 +1,68 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Accept
+cancelar=Cancel
+com.iver.andami.messages.Messages=Messages
+Ejecutando\ comando\:\ =Execute command\:
+en=In
+error_parsing_comboscale_elements=Error parsing comboScale elements
+error_parsing_comboscale_value=Error parsing comboScale value
+Error_reading_isocodes_file=Error reading the isocodes file for languages
+Icon_not_found_=Icon not found
+KeyMapping.Caracter_no_valido=Invalid character
+Launcher.config_mal_formado=. Malformed 'config.xml'
+Launcher.config_no_encontrado='config.xml' not found
+Launcher.Dependencia_no_resuelta_en_plugin=Unsatisfied plugin dependency
+Launcher.Dos_skin_extension=Two skin-extension.
+Launcher.Error_con_las_librerias_del_plugin=Plugin library error
+Launcher.error_getting_class_loader_for_status_bar_control=Error getting class loader for status bar
+Launcher.Error_instanciando_la_extension=Cannot instantiate extension
+Launcher.Error_localizando_la_clase_de_la_extension=Cannot locate extension class
+Launcher.Hay_dependencias_circulares=Plugin dependencies involved in circle
+Launcher.Ignorando_el_directorio=Ignoring the directory
+Launcher.labelset_class=Cannot find label set class (labelset)
+Launcher.look_and_feel=Cannot set system 'look and feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Cannot find extension class
+Launcher.No_se_encontro_la_clase_mdi_manager=Cannot find mdi manager class
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Cannot access mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Cannot save Andami configuration
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Cannot instantiate mdi manager
+Launcher.No_se_puede_acceder_a=Cannot access to
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Cannot save plugins configuration
+Launcher.Two_extensions_with_the_same_priority=Two extensions with the same priority. Only will load one.
+Launcher.Two_menus_with_the_same_position=Two menus with the same position. Only will load one.
+login_exit=Exit
+login_invalid_user=Invalid user
+login_name=Name
+login_ok=ok
+login_password=Password
+MDIFrame.Error_no_capturado_por_el_usuario=User error
+MDIFrame.quiere_salir=Exit gvSIG?
+MDIFrame.salir=Exit
+MDIManagerFactory.No_skin_extension_in_the_plugins=No skin extension in the plugins
+memory_usage=Memory usage
+Messages._no_se_encontro_la_traduccion_para=Cannot find translation for
+Messages.no_se_encontro_la_traduccion_para=It hasn't been found the translation for
+No_extension_associated_with_this_event_=No extension associated with this event
+No_se_encontro_la_traduccion_para=Cannot find translation for
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Two classes with the same name
+PluginClassLoader.Error_reading_file=IO error\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=Application bug
+PluginServices.Bug_en_el_codigo=Bug
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=Application error. It's strongly recommended to close the application.
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=Fatal error
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Cannot set hour glass
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Cannot restore cursor
+Preferences=Preferences
+restore_defaults=Restore defaults
+SplashWindow.Iniciando=Starting...
+StatusBar.Aplicacion_iniciada=Application started
+Unable_to_find_icon=Unable to find icon
+y_en=and in
+save_resources=Save resources
+select_resources_to_save_before_exit=Before exiting, the selected resources will be saved
+deselect_all=Clear selection
+discard_changes=Discard changes
+gvsig_package_installer=gvSIG packages installer
+usage=Usage
+error_getting_unsaved_data=Error getting the unsaved data. If you continue, you may not be able\nto save all data. ¿Do you want to continue closing the application?
\ No newline at end of file

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_en.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_gl.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_gl.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_gl.properties	(revision 38313)
@@ -0,0 +1,60 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Aceptar
+cancelar=Cancelar
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Car\u00e1cter non v\u00e1lido
+Launcher.config_mal_formado=. Arquivo 'config.xml' mal formado
+Launcher.config_no_encontrado=. Arquivo 'config.xml' non atopado
+Launcher.Dependencia_no_resuelta_en_plugin=Dependencia non resolta no plugin
+Launcher.Dos_skin_extension=D\u00faas skin-extension. Usamos a \u00faltima
+Launcher.Error_con_las_librerias_del_plugin=Erro coas librar\u00edas do plugin
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Erro instanciando a extensi\u00f3n
+Launcher.Error_localizando_la_clase_de_la_extension=Erro localizando a clase da extensi\u00f3n
+Launcher.Hay_dependencias_circulares=Hai dependencias circulares entre os plugins
+Launcher.Ignorando_el_directorio=Ignorando o directorio
+Launcher.labelset_class=Non se puido atopar a clase de etiquetas (labelset)
+Launcher.look_and_feel=Non se puido activar o 'look ans feel'
+Launcher.No_se_encontro_la_clase_de_la_extension=Non se atopou a clase da extensi\u00f3n
+Launcher.No_se_encontro_la_clase_mdi_manager=Non se atopou a clase mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=Non se puido acceder \u00e1 clase mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=Non se puido gardar a configuraci\u00f3n de Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=Non se puido instanciar a clase mdi manager
+Launcher.No_se_puede_acceder_a=Non se pode acceder a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Prod\u00faxose un erro ao gardar a configuraci\u00f3n dosplugins
+Launcher.Two_extensions_with_the_same_priority=D\u00faas extensi\u00f3ns coa mesma prioridade, cargarase soamente unha
+Launcher.Two_menus_with_the_same_position=Dous men\u00fas coa mesma posici\u00f3n, cargarase soamente un
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Erro non capturado polo usuario
+MDIFrame.quiere_salir=Est\u00e1 seguro de que quere sa\u00edr?
+MDIFrame.salir=Sa\u00edr
+MDIManagerFactory.No_skin_extension_in_the_plugins=Non se atopou ningunha extensi\u00f3n 'skin' entre o splugins
+Messages._no_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+Messages.no_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=D\u00faas clases c\u00f3 mesmo nome no plugin
+PluginClassLoader.Error_reading_file=Erro l\u00e9ndo arquivo\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Bug no c\u00f3digo
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=Non se puido activar o reloxio de area
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=Non se puido restaurar o cursor do rato
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=Iniciando ...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00f3n iniciada
+Unable_to_find_icon=
+y_en=

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_gl.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_ca.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_ca.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_ca.properties	(revision 38313)
@@ -0,0 +1,60 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Acceptar
+cancelar=Cancel\u00b7lar
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Car\u00e0cter no v\u00e0lid\:
+Launcher.config_mal_formado=. Fitxer 'config.xml' mal format
+Launcher.config_no_encontrado=. Fitxer 'config.xml' no trobat
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00e8ncia no resolta en el connector
+Launcher.Dos_skin_extension=Dos skin-extension. Usem l'\u00faltim
+Launcher.Error_con_las_librerias_del_plugin=Error amb les llibreries del connector
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Error instanciant l'extensi\u00f3
+Launcher.Error_localizando_la_clase_de_la_extension=Error en localitzar la classe de l'extensi\u00f3
+Launcher.Hay_dependencias_circulares=Hi ha depend\u00e8ncies circulars entre els connectors
+Launcher.Ignorando_el_directorio=Ignorant el directori
+Launcher.labelset_class=No s'ha pogut trobar la classe d'etiquetes (labelset)
+Launcher.look_and_feel=
+Launcher.No_se_encontro_la_clase_de_la_extension=No s'ha trobat la classe de l'extensi\u00f3
+Launcher.No_se_encontro_la_clase_mdi_manager=No s'ha trobat la classe mdi manager
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=No s'ha pogut accedir a la classe mdi manager
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=No s'ha pogut guardar la configuraci\u00f3 d'Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=No s'ha pogut instanciar la classe mdi manager
+Launcher.No_se_puede_acceder_a=No es pot accedir a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=S'ha produ\u00eft un error en guardar la configuraci\u00f3 dels connectors
+Launcher.Two_extensions_with_the_same_priority=Dos extensions amb la mateixa prioritat, nom\u00e9s se'n carregar\u00e0 una.
+Launcher.Two_menus_with_the_same_position=Dos men\u00fas amb la mateixa posici\u00f3, nom\u00e9s se'n carregar\u00e0 un
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Error no detectat per l'usuari
+MDIFrame.quiere_salir=Est\u00e0 segur que vol eixir?
+MDIFrame.salir=Eixir
+MDIManagerFactory.No_skin_extension_in_the_plugins=No s'ha trobat cap extensi\u00f3 'skin' entre els connectors
+Messages._no_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+Messages.no_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Dos classes amb el mateix nom en el connector
+PluginClassLoader.Error_reading_file=Error llegint el fitxer\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo=Error en el codi
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=No s'ha pogut posar el rellotge d'arena
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=No s'ha pogut restaurar el cursor del ratol\u00ed
+Preferences=Prefer\u00e8ncies
+restore_defaults=
+SplashWindow.Iniciando=Iniciant...
+StatusBar.Aplicacion_iniciada=Aplicaci\u00f3 iniciada
+Unable_to_find_icon=
+y_en=

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_ca.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_pt.properties
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_pt.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_pt.properties	(revision 38313)
@@ -0,0 +1,60 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+aceptar=Aceitar
+cancelar=Cancelar
+com.iver.andami.messages.Messages=
+Ejecutando\ comando\:\ =
+en=
+error_parsing_comboscale_elements=
+error_parsing_comboscale_value=
+Error_reading_isocodes_file=
+Icon_not_found_=
+KeyMapping.Caracter_no_valido=Car\u00e1cter inv\u00e1lido
+Launcher.config_mal_formado=. Ficheiro "config.xml" mal formado
+Launcher.config_no_encontrado=. Ficheiro "config.xml" n\u00e3o encontrado
+Launcher.Dependencia_no_resuelta_en_plugin=Depend\u00eancia n\u00e3o resolvida com "plugin"
+Launcher.Dos_skin_extension=Duas estens\u00f5es "skin". Usaremos a \u00faltima
+Launcher.Error_con_las_librerias_del_plugin=Erro com a biblioteca do "plugin"
+Launcher.error_getting_class_loader_for_status_bar_control=
+Launcher.Error_instanciando_la_extension=Erro ao instanciar a extens\u00e3o
+Launcher.Error_localizando_la_clase_de_la_extension=Erro ao localizar a classe da extens\u00e3o
+Launcher.Hay_dependencias_circulares=Existen depend\u00eancias c\u00edclicas entre os "plugins"
+Launcher.Ignorando_el_directorio=Ignorando o direct\u00f3rio
+Launcher.labelset_class=N\u00e3o foi poss\u00edvel encontrar a classe das etiquetas (labelset)
+Launcher.look_and_feel=N\u00e3o foi poss\u00edvel activar o "look and feel"
+Launcher.No_se_encontro_la_clase_de_la_extension=N\u00e3o se encontrou a classe da extens\u00e3o
+Launcher.No_se_encontro_la_clase_mdi_manager=N\u00e3o se encontrou a classe "mdi manager"
+Launcher.No_se_pudo_acceder_a_la_clase_mdi_manager=N\u00e3o foi poss\u00edvel ter acesso \u00e0 classe "mdi manager"
+Launcher.No_se_pudo_guardar_la_configuracion_de_andami=N\u00e3o foi poss\u00edvel guardar a configura\u00e7\u00e3o de Andami
+Launcher.No_se_pudo_instanciar_la_clase_mdi_manager=N\u00e3o foi poss\u00edvel instanciar a classe "mdi manager"
+Launcher.No_se_puede_acceder_a=N\u00e3o se consegue ter acesso a
+Launcher.Se_produjo_un_error_guardando_la_configuracion_de_los_plugins=Produziu-se um erro ao guardar a configura\u00e7\u00e3o dos "plugins"
+Launcher.Two_extensions_with_the_same_priority=Duas extens\u00f5es com a mesma prioridade, s\u00f3 uma ser\u00e1 carregada.
+Launcher.Two_menus_with_the_same_position=Dois menus com a mesma posi\u00e7\u00e3o
+login_exit=
+login_invalid_user=
+login_name=
+login_ok=
+login_password=
+MDIFrame.Error_no_capturado_por_el_usuario=Erro n\u00e3o capturado pelo usu\u00e1rio
+MDIFrame.quiere_salir=Fechar gvSIG?
+MDIFrame.salir=Fechar
+MDIManagerFactory.No_skin_extension_in_the_plugins=N\u00e3o se encontrou nenhuma extens\u00e3o "skin" entre os "plugins"
+Messages._no_se_encontro_la_traduccion_para=N\u00e3o se encontrou a tradu\u00e7\u00e3o de
+Messages.no_se_encontro_la_traduccion_para=
+No_extension_associated_with_this_event_=
+No_se_encontro_la_traduccion_para=N\u00e3o se encontrou a tradu\u00e7\u00e3o de
+PluginClassLoader.Dos_clases_con_el_mismo_nombre_en_el_plugin=Duas classes com o mesmo nome no "plugin"
+PluginClassLoader.Error_reading_file=Erro ao ler o ficheiro\:
+PluginServices.Bug\ en\ el\ c\u00f3digo=
+PluginServices.Bug_en_el_codigo="Bug" no c\u00f3digo
+PluginServices.Error\ grave\ de\ la\ aplicaci\u00f3n.\ Es\ conveniente\ que\ salgas\ de\ la\ aplicaci\u00f3n=
+PluginServices.Error_grave_de_la_aplicaci\u00f3n=
+PluginServices.No_se_pudo_poner_el_reloj_de_arena=N\u00e3o foi poss\u00edvel activar a ampulheta
+PluginServices.No_se_pudo_restaurar_el_cursor_del_raton=N\u00e3o foi poss\u00edvel restaurar o cursor
+Preferences=
+restore_defaults=
+SplashWindow.Iniciando=A iniciar...
+StatusBar.Aplicacion_iniciada=Aplica\u00e7\u00e3o iniciada
+Unable_to_find_icon=
+y_en=

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/resources/org/gvsig/andami/text_pt.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/.cvsignore
===================================================================
--- tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/.cvsignore	(revision 0)
+++ tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/.cvsignore	(revision 38313)
@@ -0,0 +1,11 @@
+bin
+gvsig.log
+gvSIG
+web
+andami.jar
+keystore
+java.hprof.txt
+build-doc
+*.log
+cachedir
+bin-test

Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami/.cvsignore
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision


Property changes on: tags/v2_0_0_Build_2047/frameworks/_fwAndami/_fwAndami
___________________________________________________________________
Added: svn:ignore
   + .classpath 
.project 
.settings 
maven-eclipse.xml
target
bin
hs_err_pid*
.externalToolBuilders
.settings
.classpath
.project


