/[svn]/web/trunk/www.linuxsampler.org/documentation.html
ViewVC logotype

Annotation of /web/trunk/www.linuxsampler.org/documentation.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1780 - (hide annotations) (download) (as text)
Sun Sep 28 21:55:42 2008 UTC (15 years, 6 months ago) by iliev
File MIME type: text/html
File size: 20531 byte(s)
- updated documentation

1 senoner 542 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2     <html>
3     <head>
4     <link rel="stylesheet" type="text/css" href="index.css">
5     <title>The Linux Sampler Project</title>
6    
7     <meta http-equiv="content-type"
8     content="text/html; charset=ISO-8859-1">
9    
10     <script language="javascript" type="text/javascript">
11     <!--
12     var dir = "gfx/";
13    
14     if(document.images) {
15    
16     newsover = new Image();
17     newsover.src = dir + "mnewshover.png";
18    
19     newsout = new Image();
20     newsout.src = dir + "mnews.png";
21    
22     aboutover = new Image();
23     aboutover.src = dir + "mabouthover.png";
24    
25     aboutout = new Image();
26     aboutout.src = dir + "mabout.png";
27    
28     featuresover = new Image();
29     featuresover.src = dir + "mfeatureshover.png";
30    
31     featuresout = new Image();
32     featuresout.src = dir + "mfeatures.png";
33    
34     screenshotsover = new Image();
35     screenshotsover.src = dir + "mscreenshotshover.png";
36    
37     screenshotsout = new Image();
38     screenshotsout.src = dir + "mscreenshots.png";
39    
40     demosover = new Image();
41     demosover.src = dir + "mdemoshover.png";
42    
43     demosout = new Image();
44     demosout.src = dir + "mdemos.png";
45    
46     downloadsover = new Image();
47     downloadsover.src = dir + "mdownloadshover.png";
48    
49     downloadsout = new Image();
50     downloadsout.src = dir + "mdownloads.png";
51    
52 schoenebeck 1675 supportover = new Image();
53     supportover.src = dir + "msupporthover.png";
54     supportout = new Image();
55     supportout.src = dir + "msupport.png";
56    
57 senoner 542 developersover = new Image();
58     developersover.src = dir + "mdevelopershover.png";
59    
60     developersout = new Image();
61     developersout.src = dir + "mdevelopers.png";
62    
63     instrumentsover = new Image();
64     instrumentsover.src = dir + "minstrumentshover.png";
65    
66     instrumentsout = new Image();
67     instrumentsout.src = dir + "minstruments.png";
68    
69     linksover = new Image();
70     linksover.src = dir + "mlinkshover.png";
71    
72     linksout = new Image();
73     linksout.src = dir + "mlinks.png";
74    
75     documentationover = new Image();
76     documentationover.src = dir + "mdocumentationhover.png";
77    
78     documentationout = new Image();
79     documentationout.src = dir + "mdocumentation.png";
80    
81     creditsover = new Image();
82     creditsover.src = dir + "mcreditshover.png";
83    
84     creditsout = new Image();
85     creditsout.src = dir + "mcredits.png";
86    
87     faqover = new Image();
88     faqover.src = dir + "mfaqhover.png";
89    
90     faqout = new Image();
91     faqout.src = dir + "mfaq.png";
92    
93     bugsover = new Image();
94     bugsover.src = dir + "mbugshover.png";
95    
96     bugsout = new Image();
97     bugsout.src = dir + "mbugs.png";
98     }
99     -->
100     </script>
101    
102     </head>
103    
104     <body>
105    
106     <div id="mainwindow"><img name="LinuxSampler" src="gfx/lsbackground.jpg" alt="LinuxSampler">
107    
108     <h1><span class="hidden">The LinuxSampler Project</span></h1>
109    
110     <table border=0 cellspacing=0 cellpadding=0><tr><th colspan=2 align=left>
111     <img name="h1blank" src="gfx/h1blank.png" alt="blank"><span class="hidden">about</span></th></tr>
112     <tr><td valign=top>
113     <a id="news" href="index.php" onmouseover="javascript:if(document.images)document.news.src = newsover.src" onmouseout="javascript:if(document.images)document.news.src = newsout.src"><img name="news" src="gfx/mnews.png" alt="news"></a>
114     <a id="about" href="about.html" onmouseover="javascript:if(document.images)document.about.src = aboutover.src" onmouseout="javascript:if(document.images)document.about.src = aboutout.src"><img name="about" src="gfx/mabout.png" alt="about"></a>
115     <a id="features" href="features.html" onmouseover="javascript:if(document.images)document.features.src = featuresover.src" onmouseout="javascript:if(document.images)document.features.src = featuresout.src"><img name="features" src="gfx/mfeatures.png" alt="features"></a>
116     <a id="screenshots" href="screenshots.html" onmouseover="javascript:if(document.images)document.screenshots.src = screenshotsover.src" onmouseout="javascript:if(document.images)document.screenshots.src = screenshotsout.src"><img name="screenshots" src="gfx/mscreenshots.png" alt="screenshots"></a>
117     <a id="demos" href="demos.html" onmouseover="javascript:if(document.images)document.demos.src = demosover.src" onmouseout="javascript:if(document.images)document.demos.src = demosout.src"><img name="demos" src="gfx/mdemos.png" alt="demos"></a>
118     <a id="downloads" href="downloads.html" onmouseover="javascript:if(document.images)document.downloads.src = downloadsover.src" onmouseout="javascript:if(document.images)document.downloads.src = downloadsout.src"><img name="downloads" src="gfx/mdownloads.png" alt="download"></a>
119 schoenebeck 1675 <a id="support" href="support.html" onmouseover="javascript:if(document.images)document.support.src = supportover.src" onmouseout="javascript:if(document.images)document.support.src = supportout.src"><img name="support" src="gfx/msupport.png" alt="support"></a>
120 senoner 542 <a id="developers" href="developers.html" onmouseover="javascript:if(document.images)document.developers.src = developersover.src" onmouseout="javascript:if(document.images)document.developers.src = developersout.src"><img name="developers" src="gfx/mdevelopers.png" alt="developers"></a>
121     <a id="faq" href="faq.html" onmouseover="javascript:if(document.images)document.faq.src = faqover.src" onmouseout="javascript:if(document.images)document.faq.src = faqout.src"><img name="faq" src="gfx/mfaq.png" alt="faq"></a>
122     <a id="documentation" href="documentation.html" onmouseover="javascript:if(document.images)document.documentation.src = documentationover.src" onmouseout="javascript:if(document.images)document.documentation.src = documentationout.src"><img name="documentation" src="gfx/mdocumentation.png" alt="documentation"></a>
123     <a id="bugs" href="http://bugs.linuxsampler.org" onmouseover="javascript:if(document.images)document.bugs.src = bugsover.src" onmouseout="javascript:if(document.images)document.bugs.src = bugsout.src"><img name="bugs" src="gfx/mbugs.png" alt="bugs"></a>
124     <a id="instruments" href="instruments.html" onmouseover="javascript:if(document.images)document.instruments.src = instrumentsover.src" onmouseout="javascript:if(document.images)document.instruments.src = instrumentsout.src"><img name="instruments" src="gfx/minstruments.png" alt="instruments"></a>
125     <a id="links" href="links.html" onmouseover="javascript:if(document.images)document.links.src = linksover.src" onmouseout="javascript:if(document.images)document.links.src = linksout.src"><img name="links" src="gfx/mlinks.png" alt="links"></a>
126     <a id="credits" href="credits.html" onmouseover="javascript:if(document.images)document.credits.src = creditsover.src" onmouseout="javascript:if(document.images)document.credits.src = creditsout.src"><img name="credits" src="gfx/mcredits.png" alt="credits"></a>
127     </td><td valign=top width="100%">
128     <div id="contents">
129    
130     <h2>Documentation</h2>
131     <p class="default">
132     This is still quite under construction. Be welcome to help us with writing some documentation!
133     </p>
134    
135 schoenebeck 1674 <a name="windows"></a>
136     <a name="osx"></a>
137     <a name="debian"></a>
138     <h2>Howtos</h2>
139     <p class="default">
140     To ease new users the first contact with the Linuxsampler applications,
141     we have written the following short Howtos:
142     </p>
143     <table class="decorated">
144     <thead>
145     <tr>
146     <td class="decorated_header">Name</td>
147     <td class="decorated_header">Descripton</td>
148     </tr>
149     </thead>
150     <tbody>
151     <tr>
152     <td class="decorated"><a href="windows.html">Windows HOWTO</a></td>
153     <td class="decorated">
154     LinuxSampler quickstart guide for the MS Windows operating system.
155     </td>
156     </tr>
157     <tr>
158     <td class="decorated"><a href="osx.html">OS X HOWTO</a></td>
159     <td class="decorated">
160     LinuxSampler quickstart guide for the Apple OS X operating system.
161     </td>
162     </tr>
163     <tr>
164     <td class="decorated"><a href="debian.html">Debian HOWTO</a></td>
165     <td class="decorated">
166     Guide for how to build optimized Debian packages of LS &amp;
167     friends for your specific machine.
168     </td>
169     </tr>
170     </tbody>
171     </table>
172    
173 schoenebeck 1241 <h2>gigedit</h2>
174     <p class="default">
175     This is our graphical instrument editor based on the Gtk toolkit.
176     It can be used stand-alone or in conjunction with LinuxSampler.
177     Read the <a href="http://download.linuxsampler.org/doc/gigedit/quickstart/gigedit_quickstart.html">Gigedit Quickstart</a>
178     for a short tutorial. Please notice that this quickstart document
179     is automatically generated from CVS and thus might reflect
180     features and behaviors only available in the very latest, bleeding
181     edge development version of gigedit from CVS.
182     </p>
183 senoner 542
184 iliev 1780 <h2><a name="jsampler">JSampler</a></h2>
185 iliev 1290 <p class="default">
186     JSampler is an opensource, platform-independent,
187     GUI front-end for LinuxSampler, written entirely in Java.
188     Read the <a href="jsampler/manual/html/jsampler.html">JSampler manual</a>
189 iliev 1780 for more information.<br>
190     For information about using Fantasia with Miditzer in Puppy Linux VTPO
191     read this <a href="http://organs.110mb.com/Fantasia.htm" target="_blank">HOWTO</a>.
192 iliev 1290 </p>
193    
194 schoenebeck 1377 <h2>libgig</h2>
195     <p class="default">
196     libgig is a C++ library used to load and modify Gigasampler format files.
197     If you're a developer and might want to use libgig, here is its
198     <a href="http://download.linuxsampler.org/doc/libgig/api/">API documentation</a>
199     (automatically daily updated from CVS).
200     </p>
201    
202 schoenebeck 1573 <a name="lscp_spec"></a>
203     <a name="lscp_specs"></a>
204 schoenebeck 1377 <h2>liblscp</h2>
205     <p class="default">
206     liblscp is C library as convenient wrapper around the <i>LinuxSampler Control Protocol</i>.
207     If you're a developer and might want to use liblscp, here is its
208     <a href="http://download.linuxsampler.org/doc/liblscp/">API documentation</a>
209     (automatically daily updated from CVS).
210     </p>
211    
212 senoner 542 <h2>LSCP Reference</h2>
213     <p class="default">
214 schoenebeck 1280 The following documents define the <i>LinuxSampler Control Protocol</i>,
215     a network protocol with which LinuxSampler can be controlled locally as well as remotely.
216 senoner 542 As this is a simple ASCII based protocol it's possible to write a frontend for LinuxSampler in
217     any programming language and GUI library. There's still a big demand especially for a Gtk and
218     ncurses based frontend, so be encouraged and let
219     <a href="http://www.linuxsampler.org/developers.html">us</a> know if you wrote a frontend for
220 schoenebeck 1280 LinuxSampler!
221 senoner 542 </p>
222 schoenebeck 1280
223     <table class="decorated">
224     <thead>
225     <tr>
226     <td class="decorated_header">Protocol Name</td>
227     <td class="decorated_header">Document Types</td>
228 schoenebeck 1434 <td class="decorated_header">Release Date</td>
229 schoenebeck 1280 <td class="decorated_header">Description</td>
230     </tr>
231     </thead>
232     <tbody>
233     <tr>
234 schoenebeck 1434 <td class="decorated">LSCP&nbsp;draft</td>
235 schoenebeck 1280 <td class="decorated">
236 schoenebeck 1434 <a href="http://www.linuxsampler.org/api/draft-linuxsampler-protocol.txt">TXT</a>,
237     <a href="http://www.linuxsampler.org/api/draft-linuxsampler-protocol.html">HTML</a>,
238     <a href="http://cvs.linuxsampler.org/cgi-bin/viewcvs.cgi/*checkout*/linuxsampler/Documentation/lscp.xml?rev=HEAD&content-type=text/xml">XML</a>
239 schoenebeck 1280 </td>
240 schoenebeck 1434 <td class="decorated">unreleased</td>
241 schoenebeck 1280 <td class="decorated">
242 schoenebeck 1434 Very latest draft of the protocol (which usually reflects the
243     latest development state from CVS or may even not be implemented
244     yet).
245 schoenebeck 1280 </td>
246     </tr>
247     <tr>
248 schoenebeck 1572 <td class="decorated">LSCP&nbsp;1.3</td>
249     <td class="decorated">
250     <a href="http://www.linuxsampler.org/api/lscp-1.3.txt">TXT</a>,
251     <a href="http://www.linuxsampler.org/api/lscp-1.3.html">HTML</a>,
252     <a href="http://www.linuxsampler.org/api/lscp-1.3.xml">XML</a>
253     </td>
254     <td class="decorated">2007-12-06</td>
255     <td class="decorated">
256     Protocol specification of the latest official release of LinuxSampler (0.5.1).
257     </td>
258     </tr>
259     <tr>
260 schoenebeck 1434 <td class="decorated">LSCP&nbsp;1.2</td>
261     <td class="decorated">
262     <a href="http://www.linuxsampler.org/api/lscp-1.2.txt">TXT</a>,
263     <a href="http://www.linuxsampler.org/api/lscp-1.2.html">HTML</a>,
264     <a href="http://www.linuxsampler.org/api/lscp-1.2.xml">XML</a>
265     </td>
266     <td class="decorated">2007-10-15</td>
267     <td class="decorated">
268 schoenebeck 1572 Protocol specification of the previous official release of LinuxSampler (0.5.0).
269 schoenebeck 1434 </td>
270     </tr>
271     <tr>
272 schoenebeck 1280 <td class="decorated">LSCP&nbsp;1.1</td>
273     <td class="decorated">
274 schoenebeck 1434 <a href="http://www.linuxsampler.org/api/lscp-1.1.txt">TXT</a>,
275 schoenebeck 1280 <a href="http://www.linuxsampler.org/api/lscp-1.1.html">HTML</a>,
276     <a href="http://www.linuxsampler.org/api/lscp-1.1.xml">XML</a>
277     </td>
278 schoenebeck 1434 <td class="decorated">2006-11-25</td>
279 schoenebeck 1280 <td class="decorated">
280 schoenebeck 1572 Protocol specification old LinuxSampler release 0.4.0.
281 schoenebeck 1280 </td>
282     </tr>
283     <tr>
284 schoenebeck 1434 <td class="decorated">LSCP&nbsp;1.0</td>
285 schoenebeck 1280 <td class="decorated">
286 schoenebeck 1434 <a href="http://www.linuxsampler.org/api/lscp-1.0.txt">TXT</a>,
287     <a href="http://www.linuxsampler.org/api/lscp-1.0.html">HTML</a>,
288     <a href="http://www.linuxsampler.org/api/lscp-1.0.xml">XML</a>
289 schoenebeck 1280 </td>
290 schoenebeck 1434 <td class="decorated">2005-07-17</td>
291 schoenebeck 1280 <td class="decorated">
292 schoenebeck 1434 Protocol specification of ancient LinuxSampler release 0.3.3.
293 schoenebeck 1280 </td>
294     </tr>
295     </tbody>
296     </table>
297    
298 senoner 542 <p class="default">
299 schoenebeck 594 The protocol will be extended from time to time. You may look at the
300     <a href="features.html#LSCP">features</a> site to see which control
301     commands are already implemented and which are not.
302     </p>
303 senoner 542
304    
305     <a name="example_lscp_scripts">
306     <h3>Example LSCP scripts</h3>
307     <p class="default">
308     If you don't want / can't use a GUI frontend you will probably write some LSCP scripts for
309     using with linuxsampler to setup your needed sampler session. It follows some common LSCP
310     examples to give you a good starting point for writing your own ones. Adjust it to your needs
311     and send it to the running linuxsampler application with:
312     </p>
313 schoenebeck 1280 <pre class="code">cat yourscript.lscp | netcat localhost 8888</pre>
314 senoner 542 <p class="default">
315 schoenebeck 1242 Optionally you can also use a graphical frontend like QSampler one time to setup a working
316     sampler session for your needs and save it. Because you have to know that the files saved
317     by our frontends are actually pure LSCP scripts, thus you can i.e. use those files simply with
318     the mentioned netcat command from above to setup the sampler session without a frontend.
319     </p>
320     <p class="default">
321 senoner 542 Here is a simple LSCP example which uses ALSA as MIDI input and as audio output driver as well,
322     it creates only one sampler channel using the Gigasampler engine and loads a Piano instrument
323     on that sampler channel:
324     </p>
325 schoenebeck 1280 <pre class="code">#enable echo mode
326 senoner 542 SET ECHO 1
327    
328     # load the ALSA audio driver
329     # (parameter CARD is optional, I use it here to select my 2nd sound card
330     # you can use 'GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA CARD' to get
331     # all available sound cards)
332     CREATE AUDIO_OUTPUT_DEVICE ALSA CARD='1,0'
333    
334     # load the ALSA MIDI driver
335     CREATE MIDI_INPUT_DEVICE ALSA
336    
337     # connect my MIDI keyboard which has ALSA seq ID '72:0'
338     # (see 'aconnect -i' for the IDs of your MIDI devices
339     # or use 'GET MIDI_INPUT_PORT_PARAMETER INFO 0 0 ALSA_SEQ_BINDINGS')
340     SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS='72:0'
341    
342     # setup a sampler channel
343     ADD CHANNEL
344     LOAD ENGINE gig 0
345     SET CHANNEL AUDIO_OUTPUT_DEVICE 0 0
346     SET CHANNEL MIDI_INPUT_DEVICE 0 0
347     LOAD INSTRUMENT '/home/me/Gigs/PMI Steinway D.gig' 0 0
348    
349     # finally show our channel setup (optional of course)
350     GET CHANNEL INFO 0
351    
352     # quit connection
353     QUIT</pre>
354     <p class="default">
355     The next example uses JACK as audio output driver instead and automatically connects the two
356     output channels of LS's JACK client to the first two ALSA PCM channels, so you can hear
357     something without having to manually connect it e.g. with qjackctl:
358     </p>
359 schoenebeck 1280 <pre class="code">#enable echo mode
360 senoner 542 SET ECHO 1
361    
362     # load the JACK audio driver
363     CREATE AUDIO_OUTPUT_DEVICE JACK
364    
365     # connect to ALSA playback JACK client so we can hear something
366     # (you can use 'GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO 0 0 JACK_BINDINGS'
367     # to get all available JACK clients / ports)
368     SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 0 JACK_BINDINGS='alsa_pcm:playback_1'
369     SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 1 JACK_BINDINGS='alsa_pcm:playback_2'
370    
371     # load the ALSA MIDI driver
372     CREATE MIDI_INPUT_DEVICE ALSA
373    
374     # connect my MIDI keyboard which has ALSA seq ID '72:0'
375     # (see 'aconnect -i' for the IDs of your MIDI devices
376     # or use 'GET MIDI_INPUT_PORT_PARAMETER INFO 0 0 ALSA_SEQ_BINDINGS')
377     SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS='72:0'
378    
379     # setup one sampler channel
380     ADD CHANNEL
381     LOAD ENGINE gig 0
382     SET CHANNEL AUDIO_OUTPUT_DEVICE 0 0
383     SET CHANNEL MIDI_INPUT_DEVICE 0 0
384     LOAD INSTRUMENT '/home/me/Gigs/PMI Steinway D.gig' 0 0
385    
386     # finally show our channel setup (optional of course)
387     GET CHANNEL INFO 0
388    
389     # quit connection
390     QUIT</pre>
391     <p class="default">
392     The next example is a bit more complex.
393     It shows how to setup a more realistic sampler session, handle routing of MIDI input channels,
394     handle routing of audio channels, it uses JACK again as audio
395     output driver, but creates the JACK client with four output channels instead, it creates two
396     sampler channels, loads two different instrument on those two sampler channels and alters
397     the audio channel routing so that the two output channels of sampler channel 1 are routed to
398     the first two JACK output channels and the two output channels of sampler channel 2 are routed
399     the second pair of the JACK client's output channels. That way you could e.g. record the output
400     of those two sampler channels independently or apply independent LADSPA effects on it.
401     </p>
402 schoenebeck 1280 <pre class="code"># enable echo mode
403 senoner 542 SET ECHO 1
404    
405     # load audio and MIDI driver
406     CREATE AUDIO_OUTPUT_DEVICE JACK
407     CREATE MIDI_INPUT_DEVICE ALSA
408    
409     # increase the amount of output channels of the LS"s Jack client e.g. to 4
410     SET AUDIO_OUTPUT_DEVICE_PARAMETER 0 CHANNELS=4
411    
412     # connect to MIDI keyboard
413     SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS="64:0"
414    
415     # set up 1st sampler channel (using default output channels, that is 0 and 1)
416     ADD CHANNEL
417     LOAD ENGINE gig 0
418     SET CHANNEL AUDIO_OUTPUT_DEVICE 0 0
419     SET CHANNEL MIDI_INPUT_DEVICE 0 0
420     LOAD INSTRUMENT "/somedir/The Bosendorfer Imperial Grand Version 2.2.gig" 0 0
421     SET CHANNEL VOLUME 0 0.40
422     # by default every sampler channel / engine listens to ALL MIDI channels
423     # but for multi channel setup it makes sense to distinguish the inputs, so
424     # let sampler channel 0 listen to MIDI channel 0 (instead of ALL)
425     SET CHANNEL MIDI_INPUT_CHANNEL 0 0
426    
427     # set up 2nd sampler channel (using output channels 2 and 3)
428     ADD CHANNEL
429     LOAD ENGINE gig 1
430     SET CHANNEL AUDIO_OUTPUT_DEVICE 1 0
431     SET CHANNEL MIDI_INPUT_DEVICE 1 0
432     LOAD INSTRUMENT "/home/me/Gigs/NemeSys_1GB_Grand.gig" 0 1
433     SET CHANNEL VOLUME 1 0.40
434     # let sampler channel 1 listen to MIDI channel 1 (instead of ALL)
435     SET CHANNEL MIDI_INPUT_CHANNEL 1 1
436     # this will alter the audio channel routing
437     # connect the engines output channel 0 to JACK clients output 2
438     SET CHANNEL AUDIO_OUTPUT_CHANNEL 1 0 2
439     # connect the engines output channel 1 to JACK clients output 3
440     SET CHANNEL AUDIO_OUTPUT_CHANNEL 1 1 3
441    
442     # automatic connection between the four 4 ports of LS's Jack client and the
443     # ALSA PCM JACK client (assuming your sound card has at least 4 outputs ;-)
444     SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 0 JACK_BINDINGS='alsa_pcm:playback_1'
445     SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 1 JACK_BINDINGS='alsa_pcm:playback_2'
446     SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 2 JACK_BINDINGS='alsa_pcm:playback_3'
447     SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 3 JACK_BINDINGS='alsa_pcm:playback_4'
448    
449     # not necessary, just to see our setup
450     GET CHANNEL INFO 0
451     GET CHANNEL INFO 1</pre>
452     <p class="default">
453     For a detailed description about LSCP read the <a href="api/draft-linuxsampler-protocol.html">LSCP reference</a>.
454     Be welcome to ask details on the mailing list.
455     </p>
456    
457    
458     </div>
459     </td></tr></table>
460    
461     </div>
462    
463     </body>
464     </html>

  ViewVC Help
Powered by ViewVC