diff options
author | Winfried Ritsch <ritsch@users.sourceforge.net> | 2005-04-12 09:14:51 +0000 |
---|---|---|
committer | Winfried Ritsch <ritsch@users.sourceforge.net> | 2005-04-12 09:14:51 +0000 |
commit | c4a712f3106d076f09ccb6783501d97e1f8490f8 (patch) | |
tree | f0fdf71af37e7554059202577edd1f91014a78f9 |
This commit was generated by cvs2svn to compensate for changes in r2726,svn2git-root
which included commits to RCS files with non-trunk default branches.
svn path=/trunk/externals/iem/comport/; revision=2727
-rw-r--r-- | bird/bird.c | 375 | ||||
-rw-r--r-- | bird/bird.dll | bin | 0 -> 36864 bytes | |||
-rw-r--r-- | bird/bird.pd_linux | bin | 0 -> 6896 bytes | |||
-rw-r--r-- | comport.dll | bin | 0 -> 36864 bytes | |||
-rw-r--r-- | comport.exp | bin | 0 -> 578 bytes | |||
-rw-r--r-- | comport.lib | bin | 0 -> 1952 bytes | |||
-rw-r--r-- | comport.pd_linux | bin | 0 -> 9604 bytes | |||
-rw-r--r-- | comport/CHANGES.txt | 8 | ||||
-rw-r--r-- | comport/LICENCE.txt | 360 | ||||
-rw-r--r-- | comport/README.txt | 29 | ||||
-rw-r--r-- | comport/comport.c | 979 | ||||
-rw-r--r-- | comport/makefile | 82 | ||||
-rw-r--r-- | comport/testcomport.pd | 81 | ||||
-rw-r--r-- | docs/Serial-Programming-HOWTO.book.pdf | bin | 0 -> 19999 bytes | |||
-rw-r--r-- | docs/serial.doc | bin | 0 -> 127488 bytes | |||
-rw-r--r-- | docs/serial.pdf | 1565 | ||||
-rw-r--r-- | licence.txt | 361 | ||||
-rw-r--r-- | makefile | 104 | ||||
-rw-r--r-- | pd_bird.bat | 5 | ||||
-rw-r--r-- | pd_comport.bat | 5 | ||||
-rw-r--r-- | testbird.pd | 96 | ||||
-rw-r--r-- | testbird.sh | 2 | ||||
-rw-r--r-- | testcomport.pd | 78 | ||||
-rw-r--r-- | testcomport.sh | 2 | ||||
-rw-r--r-- | vcmakefile.dsp | 85 | ||||
-rw-r--r-- | vcmakefile.dsw | 29 | ||||
-rw-r--r-- | vcmakefile.ncb | bin | 0 -> 33792 bytes | |||
-rw-r--r-- | vcmakefile.opt | bin | 0 -> 53760 bytes | |||
-rw-r--r-- | vcmakefile.plg | 29 |
29 files changed, 4275 insertions, 0 deletions
diff --git a/bird/bird.c b/bird/bird.c new file mode 100644 index 0000000..5f3df3c --- /dev/null +++ b/bird/bird.c @@ -0,0 +1,375 @@ +/*********************************************************************** +************************************************************************ +bird.c - controls and parses one flock of bird out of a comport + +Author: W. Ritsch 16.01.97 +Desc.: put the object in a correct parse state and send commands + +first input: where data from bird is thrown in (eg.from comport) +first output: a list of data which size is dependen on the parse mode +second output: to control the bird eg connect to a comport in + +*/ + +#ifdef NT +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#endif + +#include <stdlib.h> +#include <stdio.h> /* general I/O */ +#include <string.h> /* for string commands */ +#include "m_pd.h" + +#define B_MAX_DATA 32 /* Maximal awaited data per record */ +#define B_MAX_CMDDATA 6 /* Maximum of awaited cmd arguments */ + +typedef struct { + + t_object x_obj; + t_outlet *x_out2; + t_int x_n; + t_atom *x_vec; + + int databytes; /* expected databytes */ + int datacount; /* count bytes in record */ + int phase_wait; /* wait for phasebit */ + + int datamode; /* data mode is data or examine*/ +/* int flowmode; stream or point mode */ + int phase_error; + + void (*writefun)(void *this,unsigned char c); + + unsigned char data[B_MAX_DATA]; /* maximal record length */ + char *argname; + int argc; + int argv[B_MAX_DATA]; + + int verbose; + +} bird_t; + +bird_t *bird_init( bird_t *this); +int bird_data( bird_t *this, unsigned char data ); +void bird_setwritefun(bird_t *this,void (*newwritefun)(void *bird,unsigned char c)); +void bird_send(bird_t *this,unsigned char chr); +void bird_bang(bird_t *this); +void bird_set(bird_t *this,char *cmdname,long *cmddata); + + + +typedef struct { + + char *name; + unsigned char cmd; + int cmdbytes; /* number of cmd arguments */ + int cmdsize; /* size of arguments in bytes (most 2) */ + int databytes; /* number of awaited data */ + int datamode; /* data mode is ignore, point flow or examine*/ + +} bird_cmd; + + +/* defines Modes for data receiving */ +#define B_MODE_IGNORE 0 +#define B_MODE_POINT 1 +#define B_MODE_STREAM 2 +#define B_MODE_EXAM 3 + +/*#define B_STREAM_ON 1 + #define B_STREAM_OFF 0 +*/ +#define B_WAIT_PHASE 1 +#define B_FOUND_PHASE 0 + + +/* definitions */ + +/* cmds accepted by the flock */ +static bird_cmd cmds[]= { + + /* cmd , value, nr of cmdatabytes, cmddatasize, nr datainbytes + data modes, if change always point */ + {"ANGLES", 'W', 0, 0, 6, B_MODE_POINT}, + {"MATRIX", 'X', 0, 0, 18, B_MODE_POINT}, + {"POSITION", 'V', 0, 0, 6, B_MODE_POINT}, + {"QUATER", 0x5C, 0, 0, 8, B_MODE_POINT}, + {"POSANG", 'Y', 0, 0, 12, B_MODE_POINT}, + {"POSMAT", 'Z', 0, 0, 24, B_MODE_POINT}, + {"POSQUATER", ']', 0, 0, 14, B_MODE_POINT}, + /* output cmd */ + {"POINT", 'B', 0, 0, 0, B_MODE_POINT}, + {"STREAM", 64, 0, 0, 0, B_MODE_STREAM}, + {"RUN", 'F', 0, 0, 0, B_MODE_IGNORE}, + {"SLEEP", 'G', 0, 0, 0, B_MODE_IGNORE}, + /* set cmds */ + {"AngleAlign1", 'J', 6, 2, 0, B_MODE_IGNORE}, + {"AngleAlign2", 'q', 3, 2, 0, B_MODE_IGNORE}, + {"Hemisphere", 'L', 2, 1, 0, B_MODE_IGNORE}, + {"RefFrame1", 'H', 6, 2, 0, B_MODE_IGNORE}, + {"RefFrame2", 'r', 3, 2, 0, B_MODE_IGNORE}, + {"RepRate1", 'Q', 0, 0, 0, B_MODE_IGNORE}, + {"RepRate2", 'R', 0, 0, 0, B_MODE_IGNORE}, + {"RepRate8", 'S', 0, 0, 0, B_MODE_IGNORE}, + {"RepRate32", 'T', 0, 0, 0, B_MODE_IGNORE}, + { NULL, '\0', 0, 0, 0, B_MODE_IGNORE} +}; + + + +/* -------------------- the serial object methods -------------------- */ +bird_t *bird_init( bird_t *this) +{ + if(this == NULL){ + this = malloc(sizeof(bird_t)); + } + if(this == NULL){ + post("Could not allocate data for bird_t"); + } + + this->databytes = 0; + this->datacount = 0; + this->phase_wait = B_WAIT_PHASE; + this->datamode = B_MODE_IGNORE; + this->phase_error = 0; + this->writefun = NULL; + + this->argname = "STARTUP_MODE"; + this->argc = 0; + + + return this; +} + +int bird_data( bird_t *this, unsigned char data ) +{ + int i; + + if(this->datamode != B_MODE_IGNORE){ + + /* STREAM or POINT Mode */ + + /* Phase was detected */ + if(this->phase_wait == B_FOUND_PHASE && data < 0x80){ + + this->data[this->datacount] = data; /* store data */ + this->datacount++; /* increment counter */ + + if(this->databytes <= this->datacount){ /* last byte of record */ + this->datacount = 0; + this->phase_wait = B_WAIT_PHASE; + + /* interpret and output */ + this->argc = this->databytes / 2; + for(i=0;i<this->databytes;i+=2){ + + this->argv[i/2] = (this->data[i]<<2)+(this->data[i+1]<<9); + + /* printf("list[%2d]=%7d (%3d,%3d) ",i, + ((this->data[i]<<2)+(this->data[i+1]<<9)), + this->data[i],this->data[i+1]); + */ + } + // printf("\n"); + return this->argc; + }; + } + else{ /* Phase wait */ + + if( (data & 0x80) == 0x00 ){ /* phase bit not found */ + if(this->phase_error == 0) + if(this->verbose)post("phase error:%x",data); + this->phase_error++; + } + else{ + this->phase_wait = B_FOUND_PHASE; /* phase found */ + this->data[0] = data & 0x7F; /* store first data */ + this->datacount = 1; /* wait for next */ + this->phase_error = 0; /* phase error reset */ + }; + + }; + }; /* stream or point mode */ + return 0; +} + + +void bird_setwritefun(bird_t *bird,void (*newwritefun)(void *this,unsigned char c)) +{ + //if(bird == NULL) return; better segfault and you find the error... + bird->writefun = newwritefun; +} + +void bird_send(bird_t *this,unsigned char chr) +{ + // if(this == NULL)return; better segfault and you find the error... + if(this->writefun)this->writefun(this,chr); +} + +/* with bang to trigger a data output (POINT) */ + +void bird_bang(bird_t *this) +{ + if(this->datamode == B_MODE_POINT) + bird_send(this,'B'); +} + +/* set the modes for the bird */ +void bird_set(bird_t *this,char *cmdname,long *cmddata) +{ + int i,j; + long data; + bird_cmd *cmd = cmds; + + /* search for cmd */ + while(cmd->name != (char *) 0l && strcmp(cmd->name,cmdname) != 0)cmd++; + + if(cmd->name == (char *) 0l){ + post("bird:Dont know how to set %s",cmdname); + return; + } + + /* CMD found */ + if(cmd->databytes > 0){ /* if databytes awaited, else dont change */ + + this->databytes = cmd->databytes; /* expected databytes per record */ + this->datacount = 0; /* start with first */ + this->argname = cmd->name; + + if( cmd->datamode == B_MODE_EXAM) + this->phase_wait = B_FOUND_PHASE; /* wait for phase-bit */ + else + this->phase_wait = B_WAIT_PHASE; /* wait for phase-bit */ + } + + if( cmd->datamode != B_MODE_IGNORE) /* go into data mode */ + this->datamode = cmd->datamode; + + + if(cmd->cmdbytes >= 0){ /* is a real cmd for bird */ + + bird_send(this,cmd->cmd); + + for(i=0; i < cmd->cmdbytes;i++){ + + data = cmddata[i]; + + for(j=0; j < cmd->cmdsize;j++){ /* send it bytewise */ + bird_send(this, (unsigned char) (data&0xFF)); + data >>= 8; + }; + }; + + } + + if(this->verbose)post("command %s (%c): databytes=%d, mode=%d, phase=%d", + cmd->name,cmd->cmd, + this->databytes, + this->datamode, this->phase_wait); + +} + + +/* ---------------- pd object bird ----------------- */ + +/* code for bird pd class */ + + +void bird_float(bird_t *x, t_floatarg f) +{ + int n,i; + + if((n=bird_data(x,(unsigned char) f)) > 0){ + + /* make list and output */ + + for(i=0; i < x->argc ; i++){ + x->x_vec[i].a_type = A_FLOAT; + x->x_vec[i].a_w.w_float = x->argv[i]; + } + outlet_list(x->x_obj.ob_outlet, &s_list, x->argc, x->x_vec); + } +} + +void bird_setting(bird_t *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + char *cmdnam; + long buffer[ B_MAX_CMDDATA ]; + + if(argc < 1) return; + cmdnam = argv[0].a_w.w_symbol->s_name; + + if(argc > (B_MAX_CMDDATA +1)) + argc = B_MAX_CMDDATA +1; + + for(i=1;i< argc;i++) + if(argv[i].a_type != A_FLOAT) + post("bird set arg %d no float",i); + else + buffer[i-1] = argv[i].a_w.w_float; + + bird_set(x,cmdnam,buffer); +} + +void bird_verbose(bird_t *x, t_floatarg f) +{ + if(f) x->verbose = 1; + else x->verbose = 0; +} + +void bird_free(bird_t *x) +{ + freebytes(x->x_vec, x->x_n * sizeof(*x->x_vec)); +} + +t_class *bird_class; + +void bird_output(void *x,unsigned char c) +{ + outlet_float(((bird_t *)x)->x_out2, (t_float) c); +} + +void *bird_new(void) +{ + bird_t *x; + + x = (bird_t *)pd_new(bird_class); + + outlet_new(&x->x_obj, &s_list); + x->x_out2 = outlet_new(&x->x_obj, &s_float); + + + x->x_vec = (t_atom *)getbytes((x->x_n=B_MAX_DATA) * sizeof(*x->x_vec)); + + bird_init(x); + bird_setwritefun(x,bird_output); + + bird_set(x,"RUN",NULL); + + bird_set(x,"POSANG",NULL); + // out_byte('W'); + + bird_set(x,"POINT",NULL); + // out_byte(64); + + x->verbose = 0; + + return (void *)x; +} + +void bird_setup(void) +{ + bird_class = class_new(gensym("bird"), (t_newmethod)bird_new, + (t_method)bird_free, sizeof(bird_t), 0, 0); + + /* maximum commandatasize is 6*/ + class_addmethod(bird_class, (t_method)bird_setting, gensym("set"), A_GIMME, 0); + class_addmethod(bird_class, (t_method)bird_verbose, gensym("verbose"), A_FLOAT, 0); + + class_addbang(bird_class,bird_bang); + + class_addfloat(bird_class, bird_float); +} + diff --git a/bird/bird.dll b/bird/bird.dll Binary files differnew file mode 100644 index 0000000..a2a18ee --- /dev/null +++ b/bird/bird.dll diff --git a/bird/bird.pd_linux b/bird/bird.pd_linux Binary files differnew file mode 100644 index 0000000..7021aa1 --- /dev/null +++ b/bird/bird.pd_linux diff --git a/comport.dll b/comport.dll Binary files differnew file mode 100644 index 0000000..ad6ecb7 --- /dev/null +++ b/comport.dll diff --git a/comport.exp b/comport.exp Binary files differnew file mode 100644 index 0000000..b79b0b4 --- /dev/null +++ b/comport.exp diff --git a/comport.lib b/comport.lib Binary files differnew file mode 100644 index 0000000..c456240 --- /dev/null +++ b/comport.lib diff --git a/comport.pd_linux b/comport.pd_linux Binary files differnew file mode 100644 index 0000000..d3c3a57 --- /dev/null +++ b/comport.pd_linux diff --git a/comport/CHANGES.txt b/comport/CHANGES.txt new file mode 100644 index 0000000..3247476 --- /dev/null +++ b/comport/CHANGES.txt @@ -0,0 +1,8 @@ +1.0RC1 - (12.4.2005) + + first check in pure-data.sourceforge.net + added print feature and USB devices from posted by Marc Boon + +0.9beta2 (somedate before 2004) + + CHANGES.txt startet diff --git a/comport/LICENCE.txt b/comport/LICENCE.txt new file mode 100644 index 0000000..9ca2743 --- /dev/null +++ b/comport/LICENCE.txt @@ -0,0 +1,360 @@ +comport - PD External for the serial Ports + +Institute for Electronic Music and Acoustics +Copyright (C) 1998-2005 Winfried Ritsch + + +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. (see below) + +--------------------------- GPL.TXT ------------------------- + + + 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) 19yy <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) 19yy 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. + diff --git a/comport/README.txt b/comport/README.txt new file mode 100644 index 0000000..aff44fa --- /dev/null +++ b/comport/README.txt @@ -0,0 +1,29 @@ +comport - PD external for unix/windows to use the serial ports + + (c) 1998-2005 Winfried Ritsch (see LICENCE.txt) + Institute for Electronic Music - Graz + +on Windows the COM0, COM1, ... are used and +under Unix devices /dev/ttyS0, /dev/ttyS1, ... +and new on unix /dev/USB0, ... and can be accessed via a Index. + +Please see testcomport.pd for more help. + +USE: There should be a external comport.dll for windows, comport.pd_linux for linux and so on. + +just copy it to the extra folder of your pd Installation or working directory. +Please see testcomport.pd for more help. + +compile: + + Unix (Linux): + make pd_linux, make pd_irix5, make pd_irix6 + should produce a comport.pd_linux, .... + + + Windows: use nmake or just use Fast Build under MSVC++ + nmake pd_nt + + +If you have improvements or questions feel free to contact me under +ritsch _at_ iem.at diff --git a/comport/comport.c b/comport/comport.c new file mode 100644 index 0000000..0fa9369 --- /dev/null +++ b/comport/comport.c @@ -0,0 +1,979 @@ +/* comport - PD external for unix/windows + + (c) 1998-2005 Winfried Ritsch (see LICENCE.txt) + Institute for Electronic Music - Graz + +*/ + +#include "m_pd.h" + +#ifdef NT +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#include <windows.h> +#include <commctrl.h> +#else +#include <sys/time.h> +#include <fcntl.h> +#include <termios.h> /* for TERMIO ioctl calls */ +#include <unistd.h> +#define HANDLE int +#define INVALID_HANDLE_VALUE -1 +#endif + +#include <string.h> +#include <errno.h> + + +typedef struct comport +{ + t_object x_obj; + + long n; /* the state of a last input */ + + HANDLE comhandle; /* holds the comport handle */ + +#ifdef NT + DCB dcb; /* holds the comm pars */ + DCB dcb_old; /* holds the comm pars */ + COMMTIMEOUTS old_timeouts; +#else + struct termios oldcom_termio; /* save the old com config */ + struct termios com_termio; /* for the new com config */ +#endif + + short comport; /* holds the comport # */ + float baud; /* holds the current baud rate */ + + short rxerrors; /* holds the rx line errors */ + + t_clock *x_clock; + int x_hit; + double x_deltime; + +} t_comport; + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#ifndef ON +#define ON 1 +#define OFF 0 +#endif + +/* + Serial Port Return Values +*/ +#define NODATAAVAIL -1 +#define RXERRORS -2 +#define RXBUFOVERRUN -4 +#define TXBUFOVERRUN -5 + +#ifdef NT + +#define COMPORT_MAX 8 +static char *sys_com_port[COMPORT_MAX] = +{ + "COM1", "COM2", "COM3", "COM4", + "COM5", "COM6", "COM7", "COM8" +}; + +static +long baudspeedbittable[] = +{ + CBR_256000, + CBR_128000, + CBR_115200, + CBR_57600, + CBR_56000, + CBR_38400, + CBR_19200, + CBR_14400, + CBR_9600, + CBR_4800, + CBR_2400, + CBR_1200, + CBR_600, + CBR_300, + CBR_110 +}; + +#else /* NT */ + +#ifdef IRIX +#define COMPORT_MAX 2 +static char *sys_com_port[COMPORT_MAX] = +{ + "/dev/ttyd1", "/dev/ttyd2" +}; +#define OPENPARAMS (O_RDWR|O_NDELAY|O_NOCTTY) +#define TIONREAD FIONREAD /* re map the IOCTL function */ +#define BAUDRATE_256000 -1 +#define BAUDRATE_128000 -1 +#define BAUDRATE_115200 -1 +#define BAUDRATE_57600 -1 +#define BAUDRATE_56000 -1 +#define BAUDRATE_38400 B38400 +#define BAUDRATE_14400 B19200 /* 14400 gibts nicht */ +#else /* IRIX */ +#define COMPORT_MAX 16 +static char *sys_com_port[COMPORT_MAX] = +{ + "/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2", "/dev/ttyS3", + "/dev/ttyS4", "/dev/ttyS5", "/dev/ttyS6", "/dev/ttyS7", + "/dev/ttyUSB0", "/dev/ttyUSB1", "/dev/ttyUSB2", "/dev/ttyUSB3", + "/dev/ttyUSB4", "/dev/ttyUSB5", "/dev/ttyUSB6", "/dev/ttyUSB7" +}; +#define OPENPARAMS (O_RDWR|O_NDELAY|O_NOCTTY) +#define BAUDRATE_256000 -1 +#define BAUDRATE_128000 -1 +#define BAUDRATE_115200 B115200 +#define BAUDRATE_57600 B57600 +#define BAUDRATE_56000 B57600 /* 56000 gibts nicht */ +#define BAUDRATE_38400 B38400 +#define BAUDRATE_14400 B19200 /* 14400 gibts nicht */ + +#endif /* else IRIX */ + +static +short baudspeedbittable[] = +{ + BAUDRATE_256000, /* CPU SPECIFIC */ + BAUDRATE_128000, /* CPU SPECIFIC */ + BAUDRATE_115200, /* CPU SPECIFIC */ + BAUDRATE_57600, /* CPU SPECIFIC */ + BAUDRATE_56000, + BAUDRATE_38400, /* CPU SPECIFIC */ + B19200, + BAUDRATE_14400, + B9600, + B4800, + B2400, + B1200, + B600, + B300, + B110 +}; + +struct timeval null_tv; + +#endif /* else NT */ + + +#define BAUDRATETABLE_LEN 15 + +static +long baudratetable[] = +{ + 256000L, + 128000L, + 115200L, + 57600L, + 56000L, + 38400L, + 19200L, + 14400L, + 9600L, + 4800L, + 2400L, + 1200L, + 600L, + 300L, + 110L +}; /* holds the baud rate selections */ + +t_class *comport_class; + +/* --------- sys independend serial setup helpers ---------------- */ + +static long get_baud_ratebits(t_float *baud) +{ + int i = 0; + + while(i < BAUDRATETABLE_LEN && baudratetable[i] > *baud) + i++; + + /* nearest Baudrate finding */ + if(i==BAUDRATETABLE_LEN || baudspeedbittable[i] < 0){ + post("*Warning* The baud rate %d is not suported or out of range, using 9600\n",*baud); + i = 7; + } + *baud = baudratetable[i]; + + return baudspeedbittable[i]; +} + + +/* ------------ sys dependend serial setup helpers ---------------- */ + + +/* --------------------- NT ------------------------------------ */ + +#ifdef NT + + +static float set_baudrate(t_comport *x,t_float baud) +{ + x->dcb.BaudRate = get_baud_ratebits(&baud); + + return baud; +} + +/* bits are 5,6,7,8(default) */ + +static float set_bits(t_comport *x, int nr) +{ + + if(nr < 4 && nr > 8) + nr = 8; + + // number of bits/byte, 4-8 + return x->dcb.ByteSize = nr; +} + + +/* 1 ... Parity even, -1 parity odd , 0 (default) no parity */ +static float set_parity(t_comport *x,int n) +{ + switch(n){ + case 1: + x->dcb.fParity = TRUE; // enable parity checking + x->dcb.Parity = 2; // 0-4=no,odd,even,mark,space + return 1; + + case -1: + x->dcb.fParity = TRUE; // enable parity checking + x->dcb.Parity = 1; // 0-4=no,odd,even,mark,space + return -1; + + default: + x->dcb.fParity = FALSE; // enable parity checking + x->dcb.Parity = 0; // 0-4=no,odd,even,mark,space + } + return 0; +} + + +/* aktivate second stop bit with 1, 0(default)*/ +static float set_stopflag(t_comport *x, int nr) +{ + if(nr == 1){ + x->dcb.StopBits = 1; // 0,1,2 = 1, 1.5, 2 + return 1; + } + else + x->dcb.StopBits = 0; // 0,1,2 = 1, 1.5, 2 + + return 0; +} + +/* never testet */ +static int set_ctsrts(t_comport *x, int nr) +{ + if(nr == 1){ + x->dcb.fOutxCtsFlow = TRUE; // CTS output flow control + x->dcb.fRtsControl = RTS_CONTROL_ENABLE; // RTS flow control + return 1; + } + x->dcb.fOutxCtsFlow = FALSE; // CTS output flow control + x->dcb.fRtsControl = RTS_CONTROL_DISABLE; // RTS flow control + return 0; +} + +static int set_xonxoff(t_comport *x, int nr) +{ + // x->dcb.fTXContinueOnXoff = FALSE; // XOFF continues Tx + + if(nr == 1){ + x->dcb.fOutX = TRUE; // XON/XOFF out flow control + x->dcb.fInX = TRUE; // XON/XOFF in flow control + return 1; + } + + x->dcb.fOutX = FALSE; // XON/XOFF out flow control + x->dcb.fInX = FALSE; // XON/XOFF in flow control + return 0; +} + + +static int set_serial(t_comport *x) +{ + + if (SetCommState(x->comhandle, &(x->dcb))) + return 1; + + return 0; +} + +static HANDLE open_serial(int com_nr, t_comport *x) +{ + HANDLE fd; + + COMMTIMEOUTS timeouts; + + float *baud = &(x->baud); + + if(com_nr < 0 || com_nr >= COMPORT_MAX) { + post("comport open %d, baud %d not valid (args: [portnum] [baud])",com_nr,*baud); + return INVALID_HANDLE_VALUE; + } + + fd = CreateFile( sys_com_port[com_nr], + GENERIC_READ | GENERIC_WRITE, + 0, + 0, + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + 0); + + if(fd == INVALID_HANDLE_VALUE) + { + post("** ERROR ** could not open device %s:\n failure(%d): %s\n", + sys_com_port[com_nr],errno,strerror(errno)); + return INVALID_HANDLE_VALUE; + } + + /* Save the Current Port Configuration */ + + if (!GetCommState(fd, &(x->dcb_old))){ + post("** ERROR ** could not get old dcb of device %s\n", + sys_com_port[com_nr]); + + CloseHandle(fd); + return INVALID_HANDLE_VALUE; + } + + memset(&(x->dcb), sizeof(DCB), 0); + + if (!GetCommState(fd, &(x->dcb))){ + post("** ERROR ** could not get new dcb of device %s\n", + sys_com_port[com_nr]); + + CloseHandle(fd); + return INVALID_HANDLE_VALUE; + } + + + x->dcb.fBinary = TRUE; // binary mode, no EOF check + + // x->dcb.fOutxDsrFlow = FALSE; // DSR output flow control + // x->dcb.fDtrControl = DTR_CONTROL_DISABLE; // DTR flow control type + + // x->dcb.fDsrSensitivity = FALSE; // DSR sensitivity + + x->dcb.fErrorChar = FALSE; // enable error replacement + // x->dcb.fNull = FALSE; // enable null stripping + + // DWORD x->dcb.fAbortOnError:1; // abort reads/writes on error + + // char x->dcb.XonChar; // Tx and Rx XON character + // char x->dcb.XoffChar; // Tx and Rx XOFF character + // char x->dcb.ErrorChar; // error replacement character + // char x->dcb.EofChar; // end of input character + // char x->dcb.EvtChar; // received event character + + + set_bits(x,8); /* CS8 */ + set_stopflag(x,0); /* ~CSTOPB */ + set_ctsrts(x,0); /* ~CRTSCTS;*/ + set_xonxoff(x,1); /* (IXON | IXOFF | IXANY) */ + set_baudrate(x,*baud); + + x->comhandle = fd; + + if(set_serial(x)) + { + post("Opened serial line device %s\n",sys_com_port[com_nr]); + } + else + { + post("** ERROR ** could not set params to control dcb of device %s\n", + sys_com_port[com_nr]); + CloseHandle(fd); + return INVALID_HANDLE_VALUE; + } + + + + if (!GetCommTimeouts(fd, &(x->old_timeouts))){ + post("Couldnt get old timeouts for serial device"); + }; + + //setting new timeouts for read to immidiatly return + timeouts.ReadIntervalTimeout = MAXDWORD; + timeouts.ReadTotalTimeoutMultiplier = 0; + timeouts.ReadTotalTimeoutConstant = 0; + timeouts.WriteTotalTimeoutMultiplier = 0; + timeouts.WriteTotalTimeoutConstant = 0; + + if (!SetCommTimeouts(fd, &timeouts)){ + post("Couldnt set timeouts for serial device"); + return INVALID_HANDLE_VALUE; + }; + + + return fd; +} + +static HANDLE close_serial(t_comport *x) +{ + if(x->comhandle != INVALID_HANDLE_VALUE){ + + if (!SetCommState(x->comhandle, &(x->dcb_old)) ) + { + post("** ERROR ** could not reset params to DCB of device %s\n", + sys_com_port[x->comport]); + } + + if (!SetCommTimeouts(x->comhandle, &(x->old_timeouts))){ + post("Couldnt reset old_timeouts for serial device"); + }; + + CloseHandle(x->comhandle); + } + + return INVALID_HANDLE_VALUE; +} + + +static int write_serial(t_comport *x, unsigned char chr) +{ + OVERLAPPED osWrite = {0}; + DWORD dwWritten; + DWORD dwRes; + + /* post("open send %d",chr); */ + + if (!WriteFile(x->comhandle, &chr, 1, &dwWritten, &osWrite)) { + if (GetLastError() != ERROR_IO_PENDING) + post("WriteFile failed, but isn't delayed on serialdevice"); + return 0; + } + return 1; +} + +#else /* NT */ +/* ----------------- POSIX - UNIX ------------------------------ */ + + +static float set_baudrate(t_comport *x,t_float baud) +{ + struct termios *tio = &(x->com_termio); + + long baudbits = get_baud_ratebits(&baud); + + cfsetispeed(tio, baudbits); + cfsetospeed(tio, baudbits); + + return baud; +} + +/* bits are 5,6,7,8(default) */ + +static float set_bits(t_comport *x, int nr) +{ + struct termios *tio = &(x->com_termio); + tio->c_cflag &= ~CSIZE; + switch(nr){ + case 5: tio->c_cflag |= CS5; return 5; + case 6: tio->c_cflag |= CS6; return 6; + case 7: tio->c_cflag |= CS7; return 7; + default: tio->c_cflag |= CS8; + } + return 8; +} + + +/* 1 ... Parity even, -1 parity odd , 0 (default) no parity */ +static float set_parity(t_comport *x,int n) +{ + struct termios *tio = &(x->com_termio); + + switch(n){ + case 1: + tio->c_cflag |= PARENB; tio->c_cflag &= ~PARODD; return 1; + case -1: + tio->c_cflag |= PARENB | PARODD; return -1; + default: + tio->c_cflag &= ~PARENB; + } + return 0; +} + + +/* aktivate second stop bit with 1, 0(default)*/ +static float set_stopflag(t_comport *x, int nr) +{ + struct termios *tio = &(x->com_termio); + + if(nr == 1){ + tio->c_cflag |= CSTOPB; + return 1; + } + else + tio->c_cflag &= ~CSTOPB; + return 0; +} + +/* never testet */ +static int set_ctsrts(t_comport *x, int nr) +{ + struct termios *tio = &(x->com_termio); + + if(nr == 1){ + tio->c_cflag |= CRTSCTS; + return 1; + } + tio->c_cflag &= ~CRTSCTS; + return 0; +} + +static int set_xonxoff(t_comport *x, int nr) +{ + struct termios *tio = &(x->com_termio); + + if(nr == 1){ + tio->c_iflag |= (IXON | IXOFF | IXANY); + return 1; + } + + tio->c_iflag &= ~IXON & ~IXOFF & ~IXANY; + return 0; +} + +static int open_serial(int com_nr, t_comport *x) +{ + HANDLE fd; + struct termios *old = &(x->oldcom_termio); + struct termios *new = &(x->com_termio); + float *baud = &(x->baud); + + if(com_nr < 0 || com_nr >= COMPORT_MAX) { + post("comport open %d, baud %d not valid (args: [portnum] [baud])"); + return INVALID_HANDLE_VALUE; + } + + if((fd = open(sys_com_port[com_nr], OPENPARAMS)) == INVALID_HANDLE_VALUE) + { + post("** ERROR ** could not open device %s:\n failure(%d): %s\n", + sys_com_port[com_nr],errno,strerror(errno)); + return INVALID_HANDLE_VALUE; + } + + /* set no wait on any operation */ + fcntl(fd, F_SETFL, FNDELAY); + + /* Save the Current Port Configuration */ + if(tcgetattr(fd, old) == -1 || tcgetattr(fd, new) == -1){ + post("** ERROR ** could not get termios-structure of device %s\n", + sys_com_port[com_nr]); + close(fd); + return INVALID_HANDLE_VALUE; + } + + + /* Setupt the new port configuration...NON-CANONICAL INPUT MODE + .. as defined in termios.h + */ + + /* enable input and ignore modem controls */ + new->c_cflag |= (CREAD | CLOCAL); + + /* always nocanonical, this means raw i/o no terminal */ + new->c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); + + /* no post processing */ + new->c_oflag &= ~OPOST; + + /* setup to return after 0 seconds + ..if no characters are received + TIME units are assumed to be 0.1 secs */ + /* not needed anymore ??? in new termios in linux + new->c_cc[VMIN] = 0; + new->c_cc[VTIME] = 0; + */ + + /* defaults, see input */ + + set_bits(x,8); /* CS8 */ + set_stopflag(x,0); /* ~CSTOPB */ + set_ctsrts(x,0); /* ~CRTSCTS;*/ + set_xonxoff(x,1); /* (IXON | IXOFF | IXANY) */ + set_baudrate(x,*baud); + + if(tcsetattr(fd, TCSAFLUSH, new) != -1) + { + post("Opened serial line device %s\n",sys_com_port[com_nr]); + } + else + { + post("** ERROR ** could not set params to ioctl of device %s\n", + sys_com_port[com_nr]); + close(fd); + return INVALID_HANDLE_VALUE; + } + + return fd; +} + + +static int close_serial(t_comport *x) +{ + struct termios *tios = &(x->com_termio); + HANDLE fd = x->comhandle; + + if(fd != INVALID_HANDLE_VALUE){ + tcsetattr(fd, TCSANOW, tios); + close(fd); + } + return INVALID_HANDLE_VALUE; +} + + +static int set_serial(t_comport *x) +{ + if(tcsetattr(x->comhandle, TCSAFLUSH, &(x->com_termio)) == -1) + return 0; + return 1; +} + +static int write_serial(t_comport *x, unsigned char chr) +{ + + return write(x->comhandle,(char *) &chr,1); + + /* flush pending I/O chars */ + /* but nowadays discards them ;-( + else{ + ioctl(x->comhandle,TCFLSH,TCOFLUSH); + } + */ +} + + +#endif /* else NT */ + + +/* ------------------- serial pd methods --------------------------- */ +static void comport_pollintervall(t_comport *x, t_floatarg g) +{ + if (g < 1) g = 1; + x->x_deltime = g; +} + +static void comport_tick(t_comport *x) +{ + unsigned char chr; + int err; + HANDLE fd = x->comhandle; + + x->x_hit = 0; + + + if(fd == INVALID_HANDLE_VALUE) return; + + /* while there are bytes, read them and send them out, ignore errors */ +#ifdef NT + { + DWORD dwCommEvent; + DWORD dwRead; + + err = 0; + +// if (!SetCommMask(x->comhandle, EV_RXCHAR)) +// post(" Error setting communications event mask for serial device"); + +// for ( ; ; ) { +// if (WaitCommEvent(x->comhandle, &dwCommEvent,NULL)) { + do { + + if(ReadFile(x->comhandle, &chr, 1, &dwRead, NULL)) + if(dwRead > 0) + outlet_float(x->x_obj.ob_outlet, (t_float) chr); + else{ + err = -1; + break; + } + } while (dwRead); +// } +// else{ +// post("serial dev: Error in WaitCommEvent"); + // break; +// } + //} + } +#else + { + fd_set com_rfds; + FD_ZERO(&com_rfds); + FD_SET(fd,&com_rfds); + + while((err=select(fd+1,&com_rfds,NULL,NULL,&null_tv)) > 0) { + + err = read(fd,(char *) &chr,1); + + /* while( (err = read(fd,(char *) &chr,1)) > 0){ */ + outlet_float(x->x_obj.ob_outlet, (t_float) chr); + + }; + } +#endif + + if(err < 0){ /* if an readerror detected */ + if(x->rxerrors == 0) /* post it once */ + post("RXERRORS on serial line\n"); + x->rxerrors = 1; /* remember */ + } + + if (!x->x_hit) clock_delay(x->x_clock, 1); +} + +static void comport_float(t_comport *x,t_float f) +{ + unsigned char chr = ((int) f) & 0xFF; /* brutal conv */ + + if (write_serial(x,chr) != 1) + { + post("Write error, maybe TX-OVERRUNS on serial line"); + } +} + +static void *comport_new(t_floatarg comnr, t_floatarg fbaud) { + + t_comport test; + t_comport *x; + int com_nr = comnr; + HANDLE fd; + + +/* Open the Comport for RD and WR and get a handle */ + test.baud = fbaud; + fd = open_serial(com_nr,&test); + + if(fd == INVALID_HANDLE_VALUE ){ + /* postings in open routine */ + return 0; + } + + /* Now nothing really bad could happen so we create the class */ + + x = (t_comport *)pd_new(comport_class); + + x->comport = com_nr; + x->baud = test.baud; + x->comhandle = fd; /* holds the comport handle */ + +#ifdef NT + + memcpy(&(test.dcb_old),&(x->dcb_old),sizeof(DCB)); // save the old com config + memcpy(&(test.dcb),&(x->dcb),sizeof(DCB)); // for the new com config + +#else + /* save the old com and new com config */ + bcopy(&(test.oldcom_termio),&(x->oldcom_termio),sizeof(struct termios)); + bcopy(&(test.com_termio),&(x->com_termio),sizeof(struct termios)); +#endif + + x->rxerrors = 0; /* holds the rx line errors */ + + outlet_new(&x->x_obj, &s_float); + + x->x_hit = 0; + x->x_deltime = 1; + x->x_clock = clock_new(x, (t_method)comport_tick); + + clock_delay(x->x_clock, x->x_deltime); + + return x; +} + + +static void +comport_free(t_comport *x) +{ + post("close serial..."); + + clock_unset(x->x_clock); + clock_free(x->x_clock); + x->comhandle = close_serial(x); +} + +/* ---------------- use serial settings ------------- */ + +static void comport_baud(t_comport *x,t_floatarg f) +{ + if(f == x->baud){ + post("baudrate already %f\n",x->baud); + return; + } + + x->baud = set_baudrate(x,f); + + if(x->comhandle == INVALID_HANDLE_VALUE)return; + + if(set_serial(x) == 0){ + post("** ERROR ** could not set baudrate of device %s\n", + sys_com_port[x->comport]); + } + else post("set baudrate of %s to %f\n",sys_com_port[x->comport],x->baud); +} + +static void comport_bits(t_comport *x,t_floatarg f) +{ + f = set_bits(x,f); + + if(x->comhandle == INVALID_HANDLE_VALUE)return; + + if(set_serial(x) == 0){ + post("** ERROR ** could not set bits of device %s\n", + sys_com_port[x->comport]); + } + else post("set bits of %s to %f\n",sys_com_port[x->comport],f); +} + + +static void comport_parity(t_comport *x,t_floatarg f) +{ + f = set_parity(x,f); + + if(x->comhandle == INVALID_HANDLE_VALUE)return; + + if(set_serial(x) == 0){ + post("** ERROR ** could not set extra paritybit of device %s\n", + sys_com_port[x->comport]); + } + else post("set extra paritybit of %s to %f\n",sys_com_port[x->comport],f); +} + +static void comport_stopbit(t_comport *x,t_floatarg f) +{ + f = set_stopflag(x,f); + + if(x->comhandle == INVALID_HANDLE_VALUE)return; + + if(set_serial(x) == 0){ + post("** ERROR ** could not set extra stopbit of device %s\n", + sys_com_port[x->comport]); + } + else post("set extra stopbit of %s to %f\n",sys_com_port[x->comport],f); +} + +static void comport_rtscts(t_comport *x,t_floatarg f) +{ + f = set_ctsrts(x,f); + + if(x->comhandle == INVALID_HANDLE_VALUE)return; + + if(set_serial(x) == 0){ + post("** ERROR ** could not set rts_cts of device %s\n", + sys_com_port[x->comport]); + } + else post("set rts-cts of %s to %f\n",sys_com_port[x->comport],f); +} + +static void comport_xonxoff(t_comport *x,t_floatarg f) +{ + f = set_xonxoff(x,f); + + if(x->comhandle == INVALID_HANDLE_VALUE)return; + + if(set_serial(x) == 0){ + post("** ERROR ** could not set xonxoff of device %s\n", + sys_com_port[x->comport]); + } + else post("set xonxoff of %s to %f\n",sys_com_port[x->comport],f); +} + +static void comport_close(t_comport *x) +{ + clock_unset(x->x_clock); + x->x_hit = 1; + x->comhandle = close_serial(x); +} + +static void comport_open(t_comport *x, t_floatarg f) +{ + if(x->comhandle != INVALID_HANDLE_VALUE) + comport_close(x); + + + x->comhandle = open_serial(f,x); + + clock_delay(x->x_clock, x->x_deltime); +} + +/* + dangerous but if you really have some stupid devicename ... + you can open any file on systems if suid is set on pd be careful +*/ + +static void comport_devicename(t_comport *x, t_symbol *s) +{ + if(x->comport >= 0 && x->comport < COMPORT_MAX){ + sys_com_port[x->comport] = s->s_name; + } +} + +static void comport_print(t_comport *x, t_symbol *s, int argc, t_atom *argv) +{ + static char buf[256]; + while(argc--) { + atom_string(argv++, buf, 255); + char *pch = buf; + while(*pch != 0) { + write_serial(x, *pch++); + } + if(argc > 0) { + write_serial(x, ' '); + } + } +} +/* ---------------- SETUP OBJECTS ------------------ */ + +void comport_setup(void) +{ + comport_class + = class_new(gensym("comport"), (t_newmethod)comport_new, + (t_method)comport_free, sizeof(t_comport), + 0, A_DEFFLOAT, A_DEFFLOAT, 0); + + class_addfloat(comport_class, (t_method)comport_float); + + /* + class_addbang(comport_class, comport_bang + */ + + + class_addmethod(comport_class, (t_method)comport_baud, gensym("baud"), + A_FLOAT, 0); + + + class_addmethod(comport_class, (t_method)comport_bits, gensym("bits"), + A_FLOAT, 0); + class_addmethod(comport_class, (t_method)comport_stopbit, gensym("stopbit"), + A_FLOAT, 0); + class_addmethod(comport_class, (t_method)comport_rtscts, gensym("rtscts"), + A_FLOAT, 0); + class_addmethod(comport_class, (t_method)comport_parity, gensym("parity"), + A_FLOAT, 0); + class_addmethod(comport_class, (t_method)comport_xonxoff, gensym("xonxoff"), + A_FLOAT, 0); + class_addmethod(comport_class, (t_method)comport_close, gensym("close"), 0); + class_addmethod(comport_class, (t_method)comport_open, gensym("open"), + A_FLOAT, 0); + class_addmethod(comport_class, (t_method)comport_devicename, gensym("devicename"), + A_SYMBOL, 0); + class_addmethod(comport_class, (t_method)comport_print, gensym("print"), + A_GIMME, 0); + + class_addmethod(comport_class, (t_method)comport_pollintervall, gensym("pollintervall"), + A_FLOAT, 0); +#ifndef NT + null_tv.tv_sec = 0; /* no wait */ + null_tv.tv_usec = 0; +#endif +} + + diff --git a/comport/makefile b/comport/makefile new file mode 100644 index 0000000..48e9db2 --- /dev/null +++ b/comport/makefile @@ -0,0 +1,82 @@ +# comport - PD external for unix/windows +# +# (c) 1998-2005 Winfried Ritsch (see LICENCE.txt) +# Institute for Electronic Music - Graz +# +# + +current: + echo choose one command: make pd_linux, make pd_nt, make pd_irix5, make pd_irix6 + +# ----------------------- NT ----------------------- +pd_nt: comport.dll + +.SUFFIXES: .dll + +PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo /DWIN2000 + +VC="C:\Programme\Microsoft Visual Studio\Vc98" +PDROOT="C:\Programme\pd" + +PDNTINCLUDE = /I. /I$(PDROOT)\tcl\include /I$(PDROOT)\src /I$(VC)\include + +PDNTLDIR = $(VC)\lib +PDNTLIB = $(PDNTLDIR)\libc.lib \ + $(PDNTLDIR)\oldnames.lib \ + $(PDNTLDIR)\kernel32.lib \ + $(PDROOT)\bin\pd.lib + +.c.dll: + cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c + link /dll /export:$*_setup $*.obj $(PDNTLIB) + +# ----------------------- IRIX 5.x ----------------------- +pd_irix5: comport.pd_irix5 + +.SUFFIXES: .pd_irix5 + +SGICFLAGS5 = -o32 -DPD -DSGI -O2 + + +SGIINCLUDE = -I../../src + +.c.pd_irix5: + cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c + ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o + rm $*.o + +# ----------------------- IRIX 6.x ----------------------- +pd_irix6: comport.pd_irix6 + +.SUFFIXES: .pd_irix6 + +SGICFLAGS6 = -DPD -DSGI -n32 \ + -OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \ + -Ofast=ip32 + +SGICFLAGS5 = -DPD -O2 -DSGI + +SGIINCLUDE = -I/../../src + +.c.pd_irix6: + cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c + ld -elf -shared -rdata_shared -o $*.pd_irix6 $*.o + rm $*.o + +# ----------------------- LINUX i386 ----------------------- + +pd_linux: comport.pd_linux + +.SUFFIXES: .pd_linux + +LINUXCFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer \ + -Wall -W -Wshadow -Wstrict-prototypes -Werror \ + -Wno-unused -Wno-parentheses -Wno-switch + +LINUXINCLUDE = -I../../src + +.c.pd_linux: + cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c + ld -export_dynamic -shared -o $*.pd_linux $*.o -lc -lm + strip --strip-unneeded $*.pd_linux + rm $*.o diff --git a/comport/testcomport.pd b/comport/testcomport.pd new file mode 100644 index 0000000..0dbfcf2 --- /dev/null +++ b/comport/testcomport.pd @@ -0,0 +1,81 @@ +#N canvas 199 244 693 475 10; +#X obj 97 231 comport 1 9600; +#X msg 13 213 66; +#X obj 88 361 print; +#X floatatom 195 190 4 0 0 0 - - -; +#X msg 12 171 64; +#X text 12 191 point; +#X text 11 150 stream; +#X msg 13 263 86; +#X text 13 238 position; +#X msg 16 307 70; +#X msg 14 347 71; +#X text 15 290 run; +#X text 14 325 sleep; +#X floatatom 121 269 4 0 0 0 - - -; +#X obj 90 325 spigot; +#X msg 109 298 1; +#X msg 143 299 0; +#X msg 314 48 bits 8; +#X msg 313 72 stopbit 0; +#X msg 312 100 parity 0; +#X msg 313 129 xonxoff 1; +#X msg 313 155 rtscts 0; +#X text 392 103 parity 1=even \, -1=odd \, 0=off; +#X text 392 74 extra stopbit 1=on \, 0=off; +#X text 394 49 databits 5 \, 6 \, 7 \, 8; +#X text 393 20 use exact or higher baudrate; +#X obj 94 200 r comctl; +#X obj 271 294 s comctl; +#X text 394 128 use handshake xon/off 1=on 0=off; +#X text 392 154 cts/rts hardwarehandshake 1=on 0=off; +#X msg 318 201 pollintervall 1; +#X text 430 191 set pollintervall for read in ms; +#X text 430 205 (default is 1 tick 1ms); +#X msg 317 233 close; +#X msg 317 259 open 1; +#X msg 314 23 baud 10000; +#X text 383 230 Close Serial port; +#X text 381 263 Open seriel board Nr (0=COM1 \, 1=COM2 \, ...); +#X msg 263 354 devicename /dev/ttyS1; +#X text 257 375 Danger !!! you can open every file in your system and +maybe if suid is root damage the system.; +#X text 258 336 set devicename for actuell port \, then close and open +again; +#X obj 195 165 spigot; +#X msg 214 138 1; +#X msg 247 143 0; +#X obj 190 112 key; +#X text 260 324 never should be needed except for sys admins (only +unix); +#X msg 309 0 baud 300; +#X text 3 -10 (C) 1998-2005 IEM Winfried Ritsch GPL (see LICENSE.txt) +; +#X text 14 388; +#X text 1 41 please improve...; +#X connect 0 0 13 0; +#X connect 0 0 14 0; +#X connect 1 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 7 0 0 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 14 0 2 0; +#X connect 15 0 14 1; +#X connect 16 0 14 1; +#X connect 17 0 27 0; +#X connect 18 0 27 0; +#X connect 19 0 27 0; +#X connect 20 0 27 0; +#X connect 21 0 27 0; +#X connect 26 0 0 0; +#X connect 30 0 27 0; +#X connect 33 0 27 0; +#X connect 34 0 27 0; +#X connect 35 0 27 0; +#X connect 41 0 3 0; +#X connect 42 0 41 1; +#X connect 43 0 41 1; +#X connect 44 0 41 0; +#X connect 46 0 27 0; diff --git a/docs/Serial-Programming-HOWTO.book.pdf b/docs/Serial-Programming-HOWTO.book.pdf Binary files differnew file mode 100644 index 0000000..91328af --- /dev/null +++ b/docs/Serial-Programming-HOWTO.book.pdf diff --git a/docs/serial.doc b/docs/serial.doc Binary files differnew file mode 100644 index 0000000..8cd6310 --- /dev/null +++ b/docs/serial.doc diff --git a/docs/serial.pdf b/docs/serial.pdf new file mode 100644 index 0000000..b901cea --- /dev/null +++ b/docs/serial.pdf @@ -0,0 +1,1565 @@ +%PDF-1.2 +%âãÏÓ +1 0 obj<</Producer(htmldoc 1.8.3 Copyright 1997-1999 Easy Software Products, All Rights Reserved.)/CreationDate(D:19991216005723Z)/Title(Serial Programming Guide for POSIX Operating Systems)/Author(Michael R. Sweet)>>endobj +2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj +3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj +4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Oblique/Encoding 2 0 R>>endobj +5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj +6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj +7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Italic/Encoding 2 0 R>>endobj +8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-BoldItalic/Encoding 2 0 R>>endobj +9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj +10 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Oblique/Encoding 2 0 R>>endobj +11 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj +12 0 obj<</Subtype/Link/Rect[108.0 262.0 145.6 275.0]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +13 0 obj<</Subtype/Link/Rect[145.6 262.0 156.6 275.0]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +14 0 obj<</Subtype/Link/Rect[156.6 262.0 188.0 275.0]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +15 0 obj<</Subtype/Link/Rect[188.0 262.0 200.0 275.0]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +16 0 obj<</Subtype/Link/Rect[200.0 262.0 228.4 275.0]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +17 0 obj<</Subtype/Link/Rect[228.4 262.0 288.9 275.0]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +18 0 obj<</Subtype/Link/Rect[108.0 248.8 145.6 261.8]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +19 0 obj<</Subtype/Link/Rect[145.6 248.8 156.6 261.8]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +20 0 obj<</Subtype/Link/Rect[156.6 248.8 213.1 261.8]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +21 0 obj<</Subtype/Link/Rect[213.1 248.8 229.3 261.8]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +22 0 obj<</Subtype/Link/Rect[229.3 248.8 257.7 261.8]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +23 0 obj<</Subtype/Link/Rect[257.7 248.8 276.0 261.8]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +24 0 obj<</Subtype/Link/Rect[108.0 222.4 145.6 235.4]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +25 0 obj<</Subtype/Link/Rect[145.6 222.4 156.6 235.4]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +26 0 obj<</Subtype/Link/Rect[156.6 222.4 203.9 235.4]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +27 0 obj<</Subtype/Link/Rect[203.9 222.4 232.3 235.4]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +28 0 obj<</Subtype/Link/Rect[232.3 222.4 292.8 235.4]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +29 0 obj<</Subtype/Link/Rect[108.0 209.2 154.1 222.2]/Border[0 0 0]/Dest[384 0 R/XYZ null 812 0]>>endobj +30 0 obj<</Subtype/Link/Rect[154.1 209.2 167.6 222.2]/Border[0 0 0]/Dest[384 0 R/XYZ null 812 0]>>endobj +31 0 obj<</Subtype/Link/Rect[167.6 209.2 206.5 222.2]/Border[0 0 0]/Dest[384 0 R/XYZ null 812 0]>>endobj +32 0 obj<</Subtype/Link/Rect[206.5 209.2 239.5 222.2]/Border[0 0 0]/Dest[384 0 R/XYZ null 812 0]>>endobj +33 0 obj<</Subtype/Link/Rect[108.0 196.0 154.1 209.0]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +34 0 obj<</Subtype/Link/Rect[154.1 196.0 167.0 209.0]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +35 0 obj<</Subtype/Link/Rect[167.0 196.0 198.4 209.0]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +36 0 obj<</Subtype/Link/Rect[198.4 196.0 234.8 209.0]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +37 0 obj<</Subtype/Link/Rect[234.8 196.0 262.3 209.0]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +38 0 obj[12 0 R +13 0 R +14 0 R +15 0 R +16 0 R +17 0 R +18 0 R +19 0 R +20 0 R +21 0 R +22 0 R +23 0 R +24 0 R +25 0 R +26 0 R +27 0 R +28 0 R +29 0 R +30 0 R +31 0 R +32 0 R +33 0 R +34 0 R +35 0 R +36 0 R +37 0 R +]endobj +39 0 obj<</S/URI/URI(http://www.eia.org)>>endobj +40 0 obj<</Subtype/Link/Rect[400.2 688.6 448.2 699.6]/Border[0 0 0]/A 39 0 R>>endobj +41 0 obj<</S/URI/URI(http://www.eia.org)>>endobj +42 0 obj<</Subtype/Link/Rect[448.2 688.6 491.6 699.6]/Border[0 0 0]/A 41 0 R>>endobj +43 0 obj<</S/URI/URI(http://www.eia.org)>>endobj +44 0 obj<</Subtype/Link/Rect[36.0 675.4 90.7 686.4]/Border[0 0 0]/A 43 0 R>>endobj +45 0 obj<</S/URI/URI(http://www.eia.org)>>endobj +46 0 obj<</Subtype/Link/Rect[90.7 675.4 125.3 686.4]/Border[0 0 0]/A 45 0 R>>endobj +47 0 obj[40 0 R +42 0 R +44 0 R +46 0 R +]endobj +48 0 obj<</Subtype/Link/Rect[466.4 207.9 509.8 220.9]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +49 0 obj<</Subtype/Link/Rect[36.0 194.7 77.9 207.7]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +50 0 obj<</Subtype/Link/Rect[77.9 194.7 103.8 207.7]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +51 0 obj<</Subtype/Link/Rect[103.8 194.7 119.4 207.7]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +52 0 obj<</Subtype/Link/Rect[119.4 194.7 174.7 207.7]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +53 0 obj<</Subtype/Link/Rect[174.7 194.7 229.4 207.7]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +54 0 obj<</Subtype/Link/Rect[229.4 194.7 274.4 207.7]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +55 0 obj[48 0 R +49 0 R +50 0 R +51 0 R +52 0 R +53 0 R +54 0 R +]endobj +56 0 obj<</Subtype/Link/Rect[190.2 623.8 227.8 636.8]/Border[0 0 0]/Dest[354 0 R/XYZ null 812 0]>>endobj +57 0 obj<</Subtype/Link/Rect[227.8 623.8 238.8 636.8]/Border[0 0 0]/Dest[354 0 R/XYZ null 812 0]>>endobj +58 0 obj<</Subtype/Link/Rect[238.8 623.8 278.5 636.8]/Border[0 0 0]/Dest[354 0 R/XYZ null 812 0]>>endobj +59 0 obj<</Subtype/Link/Rect[275.8 623.8 287.1 636.8]/Border[0 0 0]/Dest[354 0 R/XYZ null 812 0]>>endobj +60 0 obj<</Subtype/Link/Rect[287.1 623.8 333.5 636.8]/Border[0 0 0]/Dest[354 0 R/XYZ null 812 0]>>endobj +61 0 obj[56 0 R +57 0 R +58 0 R +59 0 R +60 0 R +]endobj +62 0 obj<</Subtype/Link/Rect[430.1 481.0 458.8 494.0]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +63 0 obj[62 0 R +]endobj +64 0 obj<</Subtype/Link/Rect[83.9 316.4 121.5 329.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +65 0 obj<</Subtype/Link/Rect[121.5 316.4 132.5 329.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +66 0 obj<</Subtype/Link/Rect[132.5 316.4 189.0 329.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +67 0 obj<</Subtype/Link/Rect[189.0 316.4 205.2 329.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +68 0 obj<</Subtype/Link/Rect[205.2 316.4 233.6 329.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +69 0 obj<</Subtype/Link/Rect[233.6 316.4 252.0 329.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +70 0 obj[64 0 R +65 0 R +66 0 R +67 0 R +68 0 R +69 0 R +]endobj +71 0 obj<</Subtype/Link/Rect[72.0 673.2 131.9 686.2]/Border[0 0 0]/Dest[294 0 R/XYZ null 812 0]>>endobj +72 0 obj<</Subtype/Link/Rect[72.0 646.8 113.9 659.8]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +73 0 obj<</Subtype/Link/Rect[113.9 646.8 124.9 659.8]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +74 0 obj<</Subtype/Link/Rect[124.9 646.8 156.9 659.8]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +75 0 obj<</Subtype/Link/Rect[156.9 646.8 168.9 659.8]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +76 0 obj<</Subtype/Link/Rect[168.9 646.8 199.1 659.8]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +77 0 obj<</Subtype/Link/Rect[199.1 646.8 279.2 659.8]/Border[0 0 0]/Dest[300 0 R/XYZ null 812 0]>>endobj +78 0 obj<</Subtype/Link/Rect[108.0 633.6 134.6 646.6]/Border[0 0 0]/Dest[300 0 R/XYZ null 409 0]>>endobj +79 0 obj<</Subtype/Link/Rect[134.6 633.6 153.8 646.6]/Border[0 0 0]/Dest[300 0 R/XYZ null 409 0]>>endobj +80 0 obj<</Subtype/Link/Rect[153.8 633.6 182.2 646.6]/Border[0 0 0]/Dest[300 0 R/XYZ null 409 0]>>endobj +81 0 obj<</Subtype/Link/Rect[182.2 633.6 262.3 646.6]/Border[0 0 0]/Dest[300 0 R/XYZ null 409 0]>>endobj +82 0 obj<</Subtype/Link/Rect[108.0 620.4 134.6 633.4]/Border[0 0 0]/Dest[303 0 R/XYZ null 793 0]>>endobj +83 0 obj<</Subtype/Link/Rect[134.6 620.4 145.3 633.4]/Border[0 0 0]/Dest[303 0 R/XYZ null 793 0]>>endobj +84 0 obj<</Subtype/Link/Rect[145.3 620.4 186.3 633.4]/Border[0 0 0]/Dest[303 0 R/XYZ null 793 0]>>endobj +85 0 obj<</Subtype/Link/Rect[144.0 607.2 174.9 620.2]/Border[0 0 0]/Dest[303 0 R/XYZ null 264 0]>>endobj +86 0 obj<</Subtype/Link/Rect[174.9 607.2 224.4 620.2]/Border[0 0 0]/Dest[303 0 R/XYZ null 264 0]>>endobj +87 0 obj<</Subtype/Link/Rect[108.0 594.0 174.3 607.0]/Border[0 0 0]/Dest[306 0 R/XYZ null 298 0]>>endobj +88 0 obj<</Subtype/Link/Rect[174.3 594.0 249.5 607.0]/Border[0 0 0]/Dest[306 0 R/XYZ null 298 0]>>endobj +89 0 obj<</Subtype/Link/Rect[144.0 580.8 170.6 593.8]/Border[0 0 0]/Dest[309 0 R/XYZ null 498 0]>>endobj +90 0 obj<</Subtype/Link/Rect[170.6 580.8 189.8 593.8]/Border[0 0 0]/Dest[309 0 R/XYZ null 498 0]>>endobj +91 0 obj<</Subtype/Link/Rect[189.8 580.8 210.3 593.8]/Border[0 0 0]/Dest[309 0 R/XYZ null 498 0]>>endobj +92 0 obj<</Subtype/Link/Rect[210.3 580.8 245.4 593.8]/Border[0 0 0]/Dest[309 0 R/XYZ null 498 0]>>endobj +93 0 obj<</Subtype/Link/Rect[245.4 580.8 264.1 593.8]/Border[0 0 0]/Dest[309 0 R/XYZ null 498 0]>>endobj +94 0 obj<</Subtype/Link/Rect[264.1 580.8 286.4 593.8]/Border[0 0 0]/Dest[309 0 R/XYZ null 498 0]>>endobj +95 0 obj<</Subtype/Link/Rect[286.4 580.8 323.6 593.8]/Border[0 0 0]/Dest[309 0 R/XYZ null 498 0]>>endobj +96 0 obj<</Subtype/Link/Rect[144.0 567.6 169.4 580.6]/Border[0 0 0]/Dest[309 0 R/XYZ null 361 0]>>endobj +97 0 obj<</Subtype/Link/Rect[169.4 567.6 203.0 580.6]/Border[0 0 0]/Dest[309 0 R/XYZ null 361 0]>>endobj +98 0 obj<</Subtype/Link/Rect[144.0 554.4 170.6 567.4]/Border[0 0 0]/Dest[312 0 R/XYZ null 777 0]>>endobj +99 0 obj<</Subtype/Link/Rect[170.6 554.4 181.3 567.4]/Border[0 0 0]/Dest[312 0 R/XYZ null 777 0]>>endobj +100 0 obj<</Subtype/Link/Rect[181.3 554.4 188.9 567.4]/Border[0 0 0]/Dest[312 0 R/XYZ null 777 0]>>endobj +101 0 obj<</Subtype/Link/Rect[188.9 554.4 220.1 567.4]/Border[0 0 0]/Dest[312 0 R/XYZ null 777 0]>>endobj +102 0 obj<</Subtype/Link/Rect[108.0 541.2 168.2 554.2]/Border[0 0 0]/Dest[312 0 R/XYZ null 665 0]>>endobj +103 0 obj<</Subtype/Link/Rect[168.2 541.2 243.4 554.2]/Border[0 0 0]/Dest[312 0 R/XYZ null 665 0]>>endobj +104 0 obj<</Subtype/Link/Rect[108.0 528.0 156.0 541.0]/Border[0 0 0]/Dest[312 0 R/XYZ null 376 0]>>endobj +105 0 obj<</Subtype/Link/Rect[156.0 528.0 184.4 541.0]/Border[0 0 0]/Dest[312 0 R/XYZ null 376 0]>>endobj +106 0 obj<</Subtype/Link/Rect[184.4 528.0 207.0 541.0]/Border[0 0 0]/Dest[312 0 R/XYZ null 376 0]>>endobj +107 0 obj<</Subtype/Link/Rect[144.0 514.8 172.4 527.8]/Border[0 0 0]/Dest[312 0 R/XYZ null 286 0]>>endobj +108 0 obj<</Subtype/Link/Rect[172.4 514.8 193.5 527.8]/Border[0 0 0]/Dest[312 0 R/XYZ null 286 0]>>endobj +109 0 obj<</Subtype/Link/Rect[193.5 514.8 214.9 527.8]/Border[0 0 0]/Dest[312 0 R/XYZ null 286 0]>>endobj +110 0 obj<</Subtype/Link/Rect[144.0 501.6 184.6 514.6]/Border[0 0 0]/Dest[315 0 R/XYZ null 717 0]>>endobj +111 0 obj<</Subtype/Link/Rect[184.6 501.6 192.3 514.6]/Border[0 0 0]/Dest[315 0 R/XYZ null 717 0]>>endobj +112 0 obj<</Subtype/Link/Rect[192.3 501.6 220.7 514.6]/Border[0 0 0]/Dest[315 0 R/XYZ null 717 0]>>endobj +113 0 obj<</Subtype/Link/Rect[220.7 501.6 239.0 514.6]/Border[0 0 0]/Dest[315 0 R/XYZ null 717 0]>>endobj +114 0 obj<</Subtype/Link/Rect[144.0 488.4 181.0 501.4]/Border[0 0 0]/Dest[318 0 R/XYZ null 631 0]>>endobj +115 0 obj<</Subtype/Link/Rect[181.0 488.4 204.5 501.4]/Border[0 0 0]/Dest[318 0 R/XYZ null 631 0]>>endobj +116 0 obj<</Subtype/Link/Rect[204.5 488.4 215.8 501.4]/Border[0 0 0]/Dest[318 0 R/XYZ null 631 0]>>endobj +117 0 obj<</Subtype/Link/Rect[215.8 488.4 232.0 501.4]/Border[0 0 0]/Dest[318 0 R/XYZ null 631 0]>>endobj +118 0 obj<</Subtype/Link/Rect[232.0 488.4 250.3 501.4]/Border[0 0 0]/Dest[318 0 R/XYZ null 631 0]>>endobj +119 0 obj<</Subtype/Link/Rect[144.0 475.2 183.4 488.2]/Border[0 0 0]/Dest[318 0 R/XYZ null 474 0]>>endobj +120 0 obj<</Subtype/Link/Rect[183.4 475.2 206.9 488.2]/Border[0 0 0]/Dest[318 0 R/XYZ null 474 0]>>endobj +121 0 obj<</Subtype/Link/Rect[206.9 475.2 231.1 488.2]/Border[0 0 0]/Dest[318 0 R/XYZ null 474 0]>>endobj +122 0 obj<</Subtype/Link/Rect[231.1 475.2 247.3 488.2]/Border[0 0 0]/Dest[318 0 R/XYZ null 474 0]>>endobj +123 0 obj<</Subtype/Link/Rect[247.3 475.2 265.6 488.2]/Border[0 0 0]/Dest[318 0 R/XYZ null 474 0]>>endobj +124 0 obj<</Subtype/Link/Rect[144.0 462.0 181.0 475.0]/Border[0 0 0]/Dest[318 0 R/XYZ null 262 0]>>endobj +125 0 obj<</Subtype/Link/Rect[181.0 462.0 188.6 475.0]/Border[0 0 0]/Dest[318 0 R/XYZ null 262 0]>>endobj +126 0 obj<</Subtype/Link/Rect[188.6 462.0 217.0 475.0]/Border[0 0 0]/Dest[318 0 R/XYZ null 262 0]>>endobj +127 0 obj<</Subtype/Link/Rect[217.0 462.0 235.4 475.0]/Border[0 0 0]/Dest[318 0 R/XYZ null 262 0]>>endobj +128 0 obj<</Subtype/Link/Rect[72.0 435.6 113.9 448.6]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +129 0 obj<</Subtype/Link/Rect[113.9 435.6 124.9 448.6]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +130 0 obj<</Subtype/Link/Rect[124.9 435.6 185.1 448.6]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +131 0 obj<</Subtype/Link/Rect[185.1 435.6 202.5 448.6]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +132 0 obj<</Subtype/Link/Rect[202.5 435.6 232.7 448.6]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +133 0 obj<</Subtype/Link/Rect[232.7 435.6 253.5 448.6]/Border[0 0 0]/Dest[324 0 R/XYZ null 812 0]>>endobj +134 0 obj<</Subtype/Link/Rect[108.0 422.4 127.9 435.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 422 0]>>endobj +135 0 obj<</Subtype/Link/Rect[127.9 422.4 162.4 435.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 422 0]>>endobj +136 0 obj<</Subtype/Link/Rect[162.4 422.4 205.5 435.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 422 0]>>endobj +137 0 obj<</Subtype/Link/Rect[205.5 422.4 244.5 435.4]/Border[0 0 0]/Dest[324 0 R/XYZ null 422 0]>>endobj +138 0 obj<</Subtype/Link/Rect[144.0 409.2 180.4 422.2]/Border[0 0 0]/Dest[327 0 R/XYZ null 717 0]>>endobj +139 0 obj<</Subtype/Link/Rect[180.4 409.2 215.2 422.2]/Border[0 0 0]/Dest[327 0 R/XYZ null 717 0]>>endobj +140 0 obj<</Subtype/Link/Rect[144.0 396.0 171.8 409.0]/Border[0 0 0]/Dest[336 0 R/XYZ null 272 0]>>endobj +141 0 obj<</Subtype/Link/Rect[171.8 396.0 206.6 409.0]/Border[0 0 0]/Dest[336 0 R/XYZ null 272 0]>>endobj +142 0 obj<</Subtype/Link/Rect[144.0 382.8 170.0 395.8]/Border[0 0 0]/Dest[342 0 R/XYZ null 777 0]>>endobj +143 0 obj<</Subtype/Link/Rect[170.0 382.8 204.8 395.8]/Border[0 0 0]/Dest[342 0 R/XYZ null 777 0]>>endobj +144 0 obj<</Subtype/Link/Rect[144.0 369.6 177.3 382.6]/Border[0 0 0]/Dest[345 0 R/XYZ null 620 0]>>endobj +145 0 obj<</Subtype/Link/Rect[177.3 369.6 212.1 382.6]/Border[0 0 0]/Dest[345 0 R/XYZ null 620 0]>>endobj +146 0 obj<</Subtype/Link/Rect[144.0 356.4 180.4 369.4]/Border[0 0 0]/Dest[348 0 R/XYZ null 235 0]>>endobj +147 0 obj<</Subtype/Link/Rect[180.4 356.4 227.4 369.4]/Border[0 0 0]/Dest[348 0 R/XYZ null 235 0]>>endobj +148 0 obj<</Subtype/Link/Rect[72.0 330.0 113.9 343.0]/Border[0 0 0]/Dest[354 0 R/XYZ null 812 0]>>endobj +149 0 obj<</Subtype/Link/Rect[113.9 330.0 124.9 343.0]/Border[0 0 0]/Dest[354 0 R/XYZ null 812 0]>>endobj +150 0 obj<</Subtype/Link/Rect[124.9 330.0 172.2 343.0]/Border[0 0 0]/Dest[354 0 R/XYZ null 812 0]>>endobj +151 0 obj<</Subtype/Link/Rect[172.2 330.0 252.3 343.0]/Border[0 0 0]/Dest[354 0 R/XYZ null 812 0]>>endobj +152 0 obj<</Subtype/Link/Rect[108.0 316.8 134.6 329.8]/Border[0 0 0]/Dest[354 0 R/XYZ null 409 0]>>endobj +153 0 obj<</Subtype/Link/Rect[134.6 316.8 145.3 329.8]/Border[0 0 0]/Dest[354 0 R/XYZ null 409 0]>>endobj +154 0 obj<</Subtype/Link/Rect[145.3 316.8 152.9 329.8]/Border[0 0 0]/Dest[354 0 R/XYZ null 409 0]>>endobj +155 0 obj<</Subtype/Link/Rect[152.9 316.8 199.9 329.8]/Border[0 0 0]/Dest[354 0 R/XYZ null 409 0]>>endobj +156 0 obj<</Subtype/Link/Rect[108.0 303.6 181.6 316.6]/Border[0 0 0]/Dest[354 0 R/XYZ null 252 0]>>endobj +157 0 obj<</Subtype/Link/Rect[181.6 303.6 206.4 316.6]/Border[0 0 0]/Dest[354 0 R/XYZ null 252 0]>>endobj +158 0 obj<</Subtype/Link/Rect[206.4 303.6 214.0 316.6]/Border[0 0 0]/Dest[354 0 R/XYZ null 252 0]>>endobj +159 0 obj<</Subtype/Link/Rect[214.0 303.6 256.2 316.6]/Border[0 0 0]/Dest[354 0 R/XYZ null 252 0]>>endobj +160 0 obj<</Subtype/Link/Rect[144.0 290.4 185.9 303.4]/Border[0 0 0]/Dest[360 0 R/XYZ null 777 0]>>endobj +161 0 obj<</Subtype/Link/Rect[185.9 290.4 230.8 303.4]/Border[0 0 0]/Dest[360 0 R/XYZ null 777 0]>>endobj +162 0 obj<</Subtype/Link/Rect[230.8 290.4 280.9 303.4]/Border[0 0 0]/Dest[360 0 R/XYZ null 777 0]>>endobj +163 0 obj<</Subtype/Link/Rect[144.0 277.2 187.7 290.2]/Border[0 0 0]/Dest[360 0 R/XYZ null 274 0]>>endobj +164 0 obj<</Subtype/Link/Rect[187.7 277.2 232.6 290.2]/Border[0 0 0]/Dest[360 0 R/XYZ null 274 0]>>endobj +165 0 obj<</Subtype/Link/Rect[232.6 277.2 306.3 290.2]/Border[0 0 0]/Dest[360 0 R/XYZ null 274 0]>>endobj +166 0 obj<</Subtype/Link/Rect[306.3 277.2 347.8 290.2]/Border[0 0 0]/Dest[360 0 R/XYZ null 274 0]>>endobj +167 0 obj<</Subtype/Link/Rect[72.0 250.8 113.9 263.8]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +168 0 obj<</Subtype/Link/Rect[113.9 250.8 124.9 263.8]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +169 0 obj<</Subtype/Link/Rect[124.9 250.8 174.7 263.8]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +170 0 obj<</Subtype/Link/Rect[174.7 250.8 204.9 263.8]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +171 0 obj<</Subtype/Link/Rect[204.9 250.8 270.9 263.8]/Border[0 0 0]/Dest[366 0 R/XYZ null 812 0]>>endobj +172 0 obj<</Subtype/Link/Rect[108.0 237.6 136.4 250.6]/Border[0 0 0]/Dest[366 0 R/XYZ null 422 0]>>endobj +173 0 obj<</Subtype/Link/Rect[136.4 237.6 157.5 250.6]/Border[0 0 0]/Dest[366 0 R/XYZ null 422 0]>>endobj +174 0 obj<</Subtype/Link/Rect[157.5 237.6 194.2 250.6]/Border[0 0 0]/Dest[366 0 R/XYZ null 422 0]>>endobj +175 0 obj<</Subtype/Link/Rect[144.0 224.4 179.8 237.4]/Border[0 0 0]/Dest[369 0 R/XYZ null 389 0]>>endobj +176 0 obj<</Subtype/Link/Rect[179.8 224.4 195.9 237.4]/Border[0 0 0]/Dest[369 0 R/XYZ null 389 0]>>endobj +177 0 obj<</Subtype/Link/Rect[195.9 224.4 232.3 237.4]/Border[0 0 0]/Dest[369 0 R/XYZ null 389 0]>>endobj +178 0 obj<</Subtype/Link/Rect[232.3 224.4 264.7 237.4]/Border[0 0 0]/Dest[369 0 R/XYZ null 389 0]>>endobj +179 0 obj<</Subtype/Link/Rect[144.0 211.2 177.9 224.2]/Border[0 0 0]/Dest[372 0 R/XYZ null 556 0]>>endobj +180 0 obj<</Subtype/Link/Rect[177.9 211.2 194.1 224.2]/Border[0 0 0]/Dest[372 0 R/XYZ null 556 0]>>endobj +181 0 obj<</Subtype/Link/Rect[194.1 211.2 230.5 224.2]/Border[0 0 0]/Dest[372 0 R/XYZ null 556 0]>>endobj +182 0 obj<</Subtype/Link/Rect[230.5 211.2 262.9 224.2]/Border[0 0 0]/Dest[372 0 R/XYZ null 556 0]>>endobj +183 0 obj<</Subtype/Link/Rect[144.0 198.0 179.8 211.0]/Border[0 0 0]/Dest[372 0 R/XYZ null 300 0]>>endobj +184 0 obj<</Subtype/Link/Rect[179.8 198.0 195.9 211.0]/Border[0 0 0]/Dest[372 0 R/XYZ null 300 0]>>endobj +185 0 obj<</Subtype/Link/Rect[195.9 198.0 234.7 211.0]/Border[0 0 0]/Dest[372 0 R/XYZ null 300 0]>>endobj +186 0 obj<</Subtype/Link/Rect[234.7 198.0 246.7 211.0]/Border[0 0 0]/Dest[372 0 R/XYZ null 300 0]>>endobj +187 0 obj<</Subtype/Link/Rect[246.7 198.0 274.5 211.0]/Border[0 0 0]/Dest[372 0 R/XYZ null 300 0]>>endobj +188 0 obj<</Subtype/Link/Rect[274.5 198.0 317.2 211.0]/Border[0 0 0]/Dest[372 0 R/XYZ null 300 0]>>endobj +189 0 obj<</Subtype/Link/Rect[108.0 184.8 151.7 197.8]/Border[0 0 0]/Dest[375 0 R/XYZ null 760 0]>>endobj +190 0 obj<</Subtype/Link/Rect[151.7 184.8 177.7 197.8]/Border[0 0 0]/Dest[375 0 R/XYZ null 760 0]>>endobj +191 0 obj<</Subtype/Link/Rect[177.7 184.8 201.8 197.8]/Border[0 0 0]/Dest[375 0 R/XYZ null 760 0]>>endobj +192 0 obj<</Subtype/Link/Rect[201.8 184.8 209.4 197.8]/Border[0 0 0]/Dest[375 0 R/XYZ null 760 0]>>endobj +193 0 obj<</Subtype/Link/Rect[209.4 184.8 237.8 197.8]/Border[0 0 0]/Dest[375 0 R/XYZ null 760 0]>>endobj +194 0 obj<</Subtype/Link/Rect[237.8 184.8 256.2 197.8]/Border[0 0 0]/Dest[375 0 R/XYZ null 760 0]>>endobj +195 0 obj<</Subtype/Link/Rect[144.0 171.6 163.9 184.6]/Border[0 0 0]/Dest[375 0 R/XYZ null 551 0]>>endobj +196 0 obj<</Subtype/Link/Rect[163.9 171.6 206.9 184.6]/Border[0 0 0]/Dest[375 0 R/XYZ null 551 0]>>endobj +197 0 obj<</Subtype/Link/Rect[206.9 171.6 242.1 184.6]/Border[0 0 0]/Dest[375 0 R/XYZ null 551 0]>>endobj +198 0 obj<</Subtype/Link/Rect[242.1 171.6 260.4 184.6]/Border[0 0 0]/Dest[375 0 R/XYZ null 551 0]>>endobj +199 0 obj<</Subtype/Link/Rect[144.0 158.4 173.0 171.4]/Border[0 0 0]/Dest[375 0 R/XYZ null 214 0]>>endobj +200 0 obj<</Subtype/Link/Rect[173.0 158.4 189.2 171.4]/Border[0 0 0]/Dest[375 0 R/XYZ null 214 0]>>endobj +201 0 obj<</Subtype/Link/Rect[189.2 158.4 232.3 171.4]/Border[0 0 0]/Dest[375 0 R/XYZ null 214 0]>>endobj +202 0 obj<</Subtype/Link/Rect[232.3 158.4 267.5 171.4]/Border[0 0 0]/Dest[375 0 R/XYZ null 214 0]>>endobj +203 0 obj<</Subtype/Link/Rect[267.5 158.4 285.8 171.4]/Border[0 0 0]/Dest[375 0 R/XYZ null 214 0]>>endobj +204 0 obj<</Subtype/Link/Rect[144.0 145.2 173.0 158.2]/Border[0 0 0]/Dest[378 0 R/XYZ null 202 0]>>endobj +205 0 obj<</Subtype/Link/Rect[173.0 145.2 216.1 158.2]/Border[0 0 0]/Dest[378 0 R/XYZ null 202 0]>>endobj +206 0 obj<</Subtype/Link/Rect[216.1 145.2 238.4 158.2]/Border[0 0 0]/Dest[378 0 R/XYZ null 202 0]>>endobj +207 0 obj<</Subtype/Link/Rect[238.4 145.2 254.6 158.2]/Border[0 0 0]/Dest[378 0 R/XYZ null 202 0]>>endobj +208 0 obj<</Subtype/Link/Rect[254.6 145.2 265.3 158.2]/Border[0 0 0]/Dest[378 0 R/XYZ null 202 0]>>endobj +209 0 obj<</Subtype/Link/Rect[265.3 145.2 309.0 158.2]/Border[0 0 0]/Dest[378 0 R/XYZ null 202 0]>>endobj +210 0 obj<</Subtype/Link/Rect[309.0 145.2 342.0 158.2]/Border[0 0 0]/Dest[378 0 R/XYZ null 202 0]>>endobj +211 0 obj<</Subtype/Link/Rect[72.0 118.8 120.6 131.8]/Border[0 0 0]/Dest[384 0 R/XYZ null 812 0]>>endobj +212 0 obj<</Subtype/Link/Rect[120.6 118.8 134.0 131.8]/Border[0 0 0]/Dest[384 0 R/XYZ null 812 0]>>endobj +213 0 obj<</Subtype/Link/Rect[134.0 118.8 169.5 131.8]/Border[0 0 0]/Dest[384 0 R/XYZ null 812 0]>>endobj +214 0 obj<</Subtype/Link/Rect[108.0 105.6 146.9 118.6]/Border[0 0 0]/Dest[384 0 R/XYZ null 422 0]>>endobj +215 0 obj<</Subtype/Link/Rect[146.9 105.6 179.9 118.6]/Border[0 0 0]/Dest[384 0 R/XYZ null 422 0]>>endobj +216 0 obj<</Subtype/Link/Rect[108.0 92.4 146.9 105.4]/Border[0 0 0]/Dest[387 0 R/XYZ null 609 0]>>endobj +217 0 obj<</Subtype/Link/Rect[146.9 92.4 179.9 105.4]/Border[0 0 0]/Dest[387 0 R/XYZ null 609 0]>>endobj +218 0 obj<</Subtype/Link/Rect[108.0 79.2 146.9 92.2]/Border[0 0 0]/Dest[390 0 R/XYZ null 793 0]>>endobj +219 0 obj<</Subtype/Link/Rect[146.9 79.2 174.1 92.2]/Border[0 0 0]/Dest[390 0 R/XYZ null 793 0]>>endobj +220 0 obj<</Subtype/Link/Rect[174.1 79.2 211.7 92.2]/Border[0 0 0]/Dest[390 0 R/XYZ null 793 0]>>endobj +221 0 obj<</Subtype/Link/Rect[211.7 79.2 244.7 92.2]/Border[0 0 0]/Dest[390 0 R/XYZ null 793 0]>>endobj +222 0 obj<</Subtype/Link/Rect[108.0 66.0 128.5 79.0]/Border[0 0 0]/Dest[390 0 R/XYZ null 469 0]>>endobj +223 0 obj<</Subtype/Link/Rect[128.5 66.0 161.5 79.0]/Border[0 0 0]/Dest[390 0 R/XYZ null 469 0]>>endobj +224 0 obj[71 0 R +72 0 R +73 0 R +74 0 R +75 0 R +76 0 R +77 0 R +78 0 R +79 0 R +80 0 R +81 0 R +82 0 R +83 0 R +84 0 R +85 0 R +86 0 R +87 0 R +88 0 R +89 0 R +90 0 R +91 0 R +92 0 R +93 0 R +94 0 R +95 0 R +96 0 R +97 0 R +98 0 R +99 0 R +100 0 R +101 0 R +102 0 R +103 0 R +104 0 R +105 0 R +106 0 R +107 0 R +108 0 R +109 0 R +110 0 R +111 0 R +112 0 R +113 0 R +114 0 R +115 0 R +116 0 R +117 0 R +118 0 R +119 0 R +120 0 R +121 0 R +122 0 R +123 0 R +124 0 R +125 0 R +126 0 R +127 0 R +128 0 R +129 0 R +130 0 R +131 0 R +132 0 R +133 0 R +134 0 R +135 0 R +136 0 R +137 0 R +138 0 R +139 0 R +140 0 R +141 0 R +142 0 R +143 0 R +144 0 R +145 0 R +146 0 R +147 0 R +148 0 R +149 0 R +150 0 R +151 0 R +152 0 R +153 0 R +154 0 R +155 0 R +156 0 R +157 0 R +158 0 R +159 0 R +160 0 R +161 0 R +162 0 R +163 0 R +164 0 R +165 0 R +166 0 R +167 0 R +168 0 R +169 0 R +170 0 R +171 0 R +172 0 R +173 0 R +174 0 R +175 0 R +176 0 R +177 0 R +178 0 R +179 0 R +180 0 R +181 0 R +182 0 R +183 0 R +184 0 R +185 0 R +186 0 R +187 0 R +188 0 R +189 0 R +190 0 R +191 0 R +192 0 R +193 0 R +194 0 R +195 0 R +196 0 R +197 0 R +198 0 R +199 0 R +200 0 R +201 0 R +202 0 R +203 0 R +204 0 R +205 0 R +206 0 R +207 0 R +208 0 R +209 0 R +210 0 R +211 0 R +212 0 R +213 0 R +214 0 R +215 0 R +216 0 R +217 0 R +218 0 R +219 0 R +220 0 R +221 0 R +222 0 R +223 0 R +]endobj +225 0 obj<</Subtype/Link/Rect[36.0 673.2 84.6 686.2]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +226 0 obj<</Subtype/Link/Rect[84.6 673.2 97.4 686.2]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +227 0 obj<</Subtype/Link/Rect[97.4 673.2 130.7 686.2]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +228 0 obj<</Subtype/Link/Rect[130.7 673.2 170.2 686.2]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +229 0 obj<</Subtype/Link/Rect[170.2 673.2 198.9 686.2]/Border[0 0 0]/Dest[396 0 R/XYZ null 812 0]>>endobj +230 0 obj<</Subtype/Link/Rect[72.0 660.0 108.4 673.0]/Border[0 0 0]/Dest[396 0 R/XYZ null 422 0]>>endobj +231 0 obj<</Subtype/Link/Rect[108.4 660.0 135.9 673.0]/Border[0 0 0]/Dest[396 0 R/XYZ null 422 0]>>endobj +232 0 obj[225 0 R +226 0 R +227 0 R +228 0 R +229 0 R +230 0 R +231 0 R +]endobj +233 0 obj<</Dests 234 0 R>>endobj +234 0 obj<</Kids[235 0 R]>>endobj +235 0 obj<</Limits[(0-intro.html)(pinouts)]/Names[(0-intro.html)236 0 R(1)237 0 R(1-basics.html)238 0 R(2-config.html)239 0 R(2_1)240 0 R(2_2)241 0 R(2_2_1)242 0 R(2_3)243 0 R(2_3_1)244 0 R(2_3_2)245 0 R(2_3_3)246 0 R(2_4)247 0 R(2_5)248 0 R(2_5_1)249 0 R(2_5_2)250 0 R(2_5_3)251 0 R(2_5_4)252 0 R(2_5_5)253 0 R(3-modem.html)254 0 R(3_1)255 0 R(3_1_1)256 0 R(3_1_2)257 0 R(3_1_3)258 0 R(3_1_4)259 0 R(3_1_5)260 0 R(4-advanced.html)261 0 R(4_1)262 0 R(4_2)263 0 R(4_2_1)264 0 R(4_2_2)265 0 R(5_1)266 0 R(5_1_1)267 0 R(5_1_2)268 0 R(5_1_3)269 0 R(5_2)270 0 R(5_2_1)271 0 R(5_2_2)272 0 R(5_2_3)273 0 R(6_1)274 0 R(6_2)275 0 R(6_3)276 0 R(6_4)277 0 R(7_1)278 0 R(a-pinouts.html)279 0 R(advanced)280 0 R(ascii)281 0 R(b-ascii.html)282 0 R(basics)283 0 R(config)284 0 R(modem)285 0 R(pinouts)286 0 R]>>endobj +236 0 obj<</D[294 0 R/XYZ null 698 null]>>endobj +237 0 obj<</D[294 0 R/XYZ null 812 null]>>endobj +238 0 obj<</D[294 0 R/XYZ null 148 null]>>endobj +239 0 obj<</D[318 0 R/XYZ null 90 null]>>endobj +240 0 obj<</D[300 0 R/XYZ null 409 null]>>endobj +241 0 obj<</D[303 0 R/XYZ null 793 null]>>endobj +242 0 obj<</D[303 0 R/XYZ null 264 null]>>endobj +243 0 obj<</D[306 0 R/XYZ null 298 null]>>endobj +244 0 obj<</D[309 0 R/XYZ null 498 null]>>endobj +245 0 obj<</D[309 0 R/XYZ null 361 null]>>endobj +246 0 obj<</D[312 0 R/XYZ null 777 null]>>endobj +247 0 obj<</D[312 0 R/XYZ null 665 null]>>endobj +248 0 obj<</D[312 0 R/XYZ null 376 null]>>endobj +249 0 obj<</D[312 0 R/XYZ null 286 null]>>endobj +250 0 obj<</D[315 0 R/XYZ null 717 null]>>endobj +251 0 obj<</D[318 0 R/XYZ null 631 null]>>endobj +252 0 obj<</D[318 0 R/XYZ null 474 null]>>endobj +253 0 obj<</D[318 0 R/XYZ null 262 null]>>endobj +254 0 obj<</D[351 0 R/XYZ null 130 null]>>endobj +255 0 obj<</D[324 0 R/XYZ null 422 null]>>endobj +256 0 obj<</D[327 0 R/XYZ null 717 null]>>endobj +257 0 obj<</D[336 0 R/XYZ null 272 null]>>endobj +258 0 obj<</D[342 0 R/XYZ null 777 null]>>endobj +259 0 obj<</D[345 0 R/XYZ null 620 null]>>endobj +260 0 obj<</D[348 0 R/XYZ null 235 null]>>endobj +261 0 obj<</D[360 0 R/XYZ null 60 null]>>endobj +262 0 obj<</D[354 0 R/XYZ null 409 null]>>endobj +263 0 obj<</D[354 0 R/XYZ null 252 null]>>endobj +264 0 obj<</D[360 0 R/XYZ null 777 null]>>endobj +265 0 obj<</D[360 0 R/XYZ null 274 null]>>endobj +266 0 obj<</D[366 0 R/XYZ null 422 null]>>endobj +267 0 obj<</D[369 0 R/XYZ null 389 null]>>endobj +268 0 obj<</D[372 0 R/XYZ null 556 null]>>endobj +269 0 obj<</D[372 0 R/XYZ null 300 null]>>endobj +270 0 obj<</D[375 0 R/XYZ null 760 null]>>endobj +271 0 obj<</D[375 0 R/XYZ null 551 null]>>endobj +272 0 obj<</D[375 0 R/XYZ null 214 null]>>endobj +273 0 obj<</D[378 0 R/XYZ null 202 null]>>endobj +274 0 obj<</D[384 0 R/XYZ null 422 null]>>endobj +275 0 obj<</D[387 0 R/XYZ null 609 null]>>endobj +276 0 obj<</D[390 0 R/XYZ null 793 null]>>endobj +277 0 obj<</D[390 0 R/XYZ null 469 null]>>endobj +278 0 obj<</D[396 0 R/XYZ null 422 null]>>endobj +279 0 obj<</D[381 0 R/XYZ null 554 null]>>endobj +280 0 obj<</D[366 0 R/XYZ null 812 null]>>endobj +281 0 obj<</D[396 0 R/XYZ null 812 null]>>endobj +282 0 obj<</D[393 0 R/XYZ null 424 null]>>endobj +283 0 obj<</D[300 0 R/XYZ null 812 null]>>endobj +284 0 obj<</D[324 0 R/XYZ null 812 null]>>endobj +285 0 obj<</D[354 0 R/XYZ null 812 null]>>endobj +286 0 obj<</D[384 0 R/XYZ null 812 null]>>endobj +287 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 40/Kids[288 0 R +291 0 R +402 0 R +405 0 R +294 0 R +297 0 R +300 0 R +303 0 R +306 0 R +309 0 R +312 0 R +315 0 R +318 0 R +321 0 R +324 0 R +327 0 R +330 0 R +333 0 R +336 0 R +339 0 R +342 0 R +345 0 R +348 0 R +351 0 R +354 0 R +357 0 R +360 0 R +363 0 R +366 0 R +369 0 R +372 0 R +375 0 R +378 0 R +381 0 R +384 0 R +387 0 R +390 0 R +393 0 R +396 0 R +399 0 R +]>>endobj +288 0 obj<</Type/Page/Parent 287 0 R/Contents 289 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 5 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +289 0 obj<</Length 290 0 R/Filter/FlateDecode>>stream +xì–MŽÔ0FmÎ`ɾ +ä +ÅÑþ"ÑŽ†Àqg£ëƺÁ± Nâì[×ñÇ rœÐ¼±¤¾›Èà|Ô¼o—endstream +endobj +290 0 obj +725 +endobj +291 0 obj<</Type/Page/Parent 287 0 R/Contents 292 0 R/Resources<</ProcSet[/PDF/Text]>>>>endobj +292 0 obj<</Length 293 0 R/Filter/FlateDecode>>stream +x+ä2T0 +ár
á +ä +endobj +293 0 obj +31 +endobj +294 0 obj<</Type/Page/Parent 287 0 R/Contents 295 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F9 9 0 R/Fa 10 0 R/Fc 11 0 R>>>>/Annots 38 0 R>>endobj +295 0 obj<</Length 296 0 R/Filter/FlateDecode>>stream +xµ–M“Ú8†ïüŠ>&UàØÂØ°·2ÉRµÙaR5‡¹8¶ÊØëaȯßW’
ZŠ8&E•á‡îÖÛÒ¿\|< +ŠóÁízðáÓŒ¼S‡ãQNFëäÝ¢¨K™4q-dñ~ý Ož§À‘!Gc6u|…®·œV¼QFËRnÊ(ÏE±¡ÏH8¥²¤åýjñH÷;^Fµz³:T5Ï+Ú‹,£šGñ–²¡ÜS-©jâ˜WUÚdÙaH<ME,xQc¡âpiäMˆQ‘ÐN–uô-;ÐÎx¦ÁT&õ®"Y(ã%}ý{ñøÄ&íeù\ÕˆoTps‡îTñ6ÚÕ¼T–^yuæu ·Æ_£|—ñ +Þ¢ššŠk·f›Oï–&&ˆR#ĨL´Úÿ{l·„ HK¥pFiSh‘+|æ³ÚÊ&KtÄ«ÞÒ/”ò=å2F¦HøâÁìpH.G_‡´jŠû•Ú3¾Ê,*EeÅFÔ¡“ä\Ø¿DѼTiœËª& aˆ$‰¬L"R%ðMl6$KyÉ‹?ñzÏ9d>ÿ‡y9Û°®ˆTÀ©Pâ¢|DÆ‹(‡ÔPÙie—þ"àGE™ÉøYã•ÓeAWŸ0¶ÑÕˆ/²ÜD…øc¢@µi'2Ëä^Uf[:ív¼H`¿úCYüð)n; +¸[\ÇE©‡§ŸÑiŽKŒ…xæŽ ]d´º@[@NSÿ´äíäé²q› +³¸¬ºä4› @úhPªû¨ð>Ü&”êáÿø+Tì.’7æ}¥›!=¬FlÌh) +ÙÔ¿¡^œºGåô¢O¹–†08®{h€úØïÃmB)ÇTýõ˜· ð3]ßGþ +¥}a?ê|‹r]Í5–õ
s.»Ûì…áoõNKcêüîïO]ô¨«æ×^tþüwaþ7endstream +endobj +296 0 obj +1013 +endobj +297 0 obj<</Type/Page/Parent 287 0 R/Contents 298 0 R/Resources<</ProcSet[/PDF/Text]/Font<</Fa 10 0 R>>>>>>endobj +298 0 obj<</Length 299 0 R/Filter/FlateDecode>>stream +x-±Â Ew¾â:´ò°j\MÔtj
®¤Ð# ¯tðï…hîîIÎ}3žƒ°Ý—žÛ\4 ‚yS#eVÒ’ÓOè)N¤½wa‚ë⌅1ôlïн,éTˆüÌÉúy¬úYª¿F”Çz—³¶
‰¢Y†äb(è¬Ø}Rx*³endstream +endobj +299 0 obj +138 +endobj +300 0 obj<</Type/Page/Parent 287 0 R/Contents 301 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +301 0 obj<</Length 302 0 R/Filter/FlateDecode>>stream +x•VËrÛF¼ó+&¾„®a>$Š:¹l‰º©R‰Qå‹.`@® `áÝ…hæëÓ³ +—¨±fgUwl Ém¼>(¹Â—|úUÚBû_ŠðñZ¼µ\w@¬ y«jW€“®c« ½LsåÕË{b2¤Ð"Õ@Á–¼®8ZZÆÛÂ@>—Ã`¤F¨€7ñ¢€¹ÔâºÌµæ@“•mÎœ5û£±ÊùUC®ˆ|JèQ…+=ÿñ¸}Æ/t¯tJd» ýuÏ5åF×»AíQSVÙžÐ)‡ +†5ËÔ0@LrT¦Rö0n/„yŽý7*¬4‚î×O^Ú5*rœ÷qJoÕ/Š1’Ð`<Jaé–•+Î~sƒå iØBSxœ4+†G±uâáYÃvæ83˜ÝËô]Ú¸w2VK©jsãÉ +!¹Ÿ¸CR=^äo-¶Ü²TƼ%˜ê¶J±G +©¿šÏ`:‚¸8³ÉB9QÚ¢šÉÕéE$ +endobj +302 0 obj +1069 +endobj +303 0 obj<</Type/Page/Parent 287 0 R/Contents 304 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>/Annots 47 0 R>>endobj +304 0 obj<</Length 305 0 R/Filter/FlateDecode>>stream +xY]“Ú6}ß_q§O›éÂú}é$»ÙLf:I +ôk&/ZàÆØ[Ë°åß÷Ü+Ù€D“
¶|ï‘tΕtüÏMHþ…§ü7ßܼ›ÝÜ?)ôG4[â^:ÓlqûÇZÕôÑÐdÚ‹âèç7³¿oÞÏn‚~€çù#äÉDIú¥ƒ°ŸÒ†’0jå4µÑ +C{¡¢Û¨”RdjU,Tµ ëy]es•SVÔºZª¹¦eY‘ÑU†‹ór³Ù¸_geah¡—Y¡ô¼§zé"ÂcL@8 +¨mTõ
}.tõ9«I1›.<ëúUë‚zñFöˆú„ăËåµ'´OvëGı}p(Nϳ¥£3µ7<jF“ÉV…Ê
ÍUA«’Ôs¹)ÐRëéGή1ÊšØã;Ï.m‹QϹîw2ÿUn%ÔÖX*inr(¥ª‰g
)ë5ËÒP^òœ(zVÛp^¾’.ÊíjÝd‰RKÏwÚdPì5«ðÉÈ +ÀÞ º°*ùÇBÕêŽq½Âÿ’¿r”›—ªÜ!Õ?wÇ•¡ÞËK [˜µú†?qCÔ„zMú÷u×0ÿ¸É`(7 ºàþià¸Ø¥Nõ¡e2sÌh€ŸSûQ›y•½p¡ái˦å¨Ï•ôLËÕå¤eÔŸoÿqË8¸”}ÔÍ~)æI…–j€“ðãƒ0 +G۹ϢåKGÅíCUn‹…P–§¯©Ô)_9Ð_ðYöN'öV“ñ +z„Dùjï(ð¥g¢ÕbÏ7d›ØaÖo…Ùi£ey( ©§¨Z¼îKÄ£L“?%–·ÎDS©Üèè±_QܲºìQ×ØSpÓËÒHPI0·<® «÷š4l[‘Ƶ¶Vž4lcÙk‘4<#[i8Ì<×"[ixF¶Òp˜Y×"[ixF¶Ò8‹Ò°‚HƼY]ÜF<±çh=³:Þkô:|™a¯b6Y][ž1©¡¿-€N{ÃK©>|ºž¤¢_ÊU6ï$<HóT>Ò‰ïËâñAò¤<0BAuxv¢ç:ÛaÈËù7Î?t‹QÔÉ2á¥ØKX"QRýÄ!m}Åá؉CûŠÃ/²‡Åì)¿ÈN³§8ü";qœÃÜŠ#pU3¾ÄXW`OÛáª#’Tðï)ct)cìIž³k˃ª°…¯ŽøxªéÉå—Ž‡Ù”¡œ*DО=]œZut2p ‰ªugX¦rBå‹—W“xðîÆK0¶§`<[ÁØÆž‚ñŒlã0û Æ3²ŒÃì'ÏÈV0g17‚‰¼èc5I.yb‰uBä3&úŸÆÑtVvnLqØâK'‹É˜¯H9Á¡¯ÚÙuH¦L¶f¡à9´ºD{·ÖÒ¾“¡}–\_Zæw’4«b§ízr…÷û@ž¼—¶¾¼÷ìx/}yïÙñÞböä½_dÇ{‹Ù“÷~‘ïÏany +Í<ÕçöP®œž°ª9f%°¼Ý^4 +½Â[‹õ¥ïŸ”ó`à C•¦c|2Wì;ž/U¹ªÔF|ã[6ƒyŽ¿|žb6>Kùä:Ý›ZoD<=§7Œd9“ýL°×ä÷ù×X¿ÞüNž4endstream +endobj +305 0 obj +2027 +endobj +306 0 obj<</Type/Page/Parent 287 0 R/Contents 307 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +307 0 obj<</Length 308 0 R/Filter/FlateDecode>>stream +x–As9…ïþ}ÄU@Àvç˜5ÉVªÖ•,Ì!.òLZk$"i üû}`›„J9[Òtýúuÿ¼ÓÿÆôá†nï)/¯þÊ®Þ}ùHã1eüåþánø@YÑË~Lh@™W6”:F.h¢¢ºÎþÃñ»ÃñÁÍýð._1É• —VÊ•÷š¸C±õÈ»’v®ò´uþ%Dµ³E<»r]Eöä<¼Ñ9“üqøÏÛBÑ`|;¼‘ÏÎ{F¿0)zú6ùü4¿Ò'*•¡3Q-™t mñäÚ³ä În”©ðä‚Æ}Ú®´‘ûaðµ?Þê|oŒ†5“#“iB8åœõæ~rþ"~²¬]Ô)ÚÀ +ׯ±)[œ¢ +zÞ½’J*rdc$ë‹š³¦â´"!/¡Ñ¼×iµùµðÁñ@»¥¥%S@«B¥È²0èå*ºþ‘§ßnWÈeþóiCn͵‹42Hj^H¿7îÒ²¢ó¼³x?Vž2G³ÆŒÎº¡œ?’~߃¥‰ à7Ez´¤S ‚‡2^/WP£ëä•Ð›'“¿é¼{;ØÛ¸ÝBäñ¼¬t’â\·•˜ÿøøÞÖ™ž‡;Mp§ü³â/Â+7Žx‡^-ÿûfDõ~,Tï +ìÃE¿ÀÖ ]Î^ùJysN+:©ù’å_…]j†” ˜e¥Æƒ +&È¿rS…4ëh«ãŠ:JSôOóíµ{¥«˜¯[I\éðÅnÞi + F„®½,™ä¼7†ÊÅ µÁ&sÌ
ñ·V/̽Ӏ[Ó/øÎ4îÑ3àbmÊ_Vùªõ´Ãóg`ðb]–\h„FS¥Ór¿ öS¬áÇ¢ Œ«µò:¦yÕŠ×äæ& +u¤ö;¼¢[wã^ªúR²Iá#Äf°îÇμ7±Tðד-
wËÛv¹¦|©àq6×;MŽ”7xNEAY=ÓGAÑRU« ÔvÁSTaGwÃ1Ýßê5|Vo.ß½[zU&ñÿ4¹À§¾›}ýAßÖ2Ã¥-f»¹LñêwnF²'Ïêµ|Âmõ¡#ïFÃè_x/I~ήþ½ú_}ëYendstream +endobj +308 0 obj +1178 +endobj +309 0 obj<</Type/Page/Parent 287 0 R/Contents 310 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>/Annots 55 0 R>>endobj +310 0 obj<</Length 311 0 R/Filter/FlateDecode>>stream +xì]ÝsÛÆõ½¤dúã ÓüÚØoègê‡_òg:9NœòM©<m9ÎÐu£˜i¢XŽgøf·iZ½)¦Dÿmï]ì.G –Hªve“8¸wÏ.€µ€¾¼¶'ü³§wåßÓ¿]ûàñµ[6ãøñn¼±¹ùþÝøîýÍ÷ïÇÿòËGãϾzþ)³ÿ?~°?ùüé³ç_|þÅWûñ‡O^<‰?òùþßÆûûã/>¿ùø¯×>z|íËøöfúþUŽ{ï÷ãÛœénr——¥®Á‡;¼5¸õÛ?ˆû¿JTÙøP~Ò¾üÜQåÞmù¹ÿ‘ü<Påá=ùù(•ŸGªüúO·ñ‹ç_}zë÷œ?¹õ›ø6¿~°ý0ÞŒ^ËB ‚Áà@p 8‚Áà@p 8‚Áà@p 8‚Áà@p 8ÐJhm˜í§iú‡,›§é˜UîG{²œ¦wZ©ùû5§~–= îð(å…ôÀ©lˆÖ³¿v²#¢›™¼gòºæ0/Æâköê[nùúõ²,긎)%:‰1Št9cãÖbºrἚû2؆=Jè_ÜQæÜœÂkž¦“_ÓÕlbFtpDë3ñõ"ñj‘H—ù¤›Ò8¦ì˜¸ë%¢»¼K²WSöj«³ÝÉb棬®W‡Ò5¡\-ê9±TŇÍYQQªøuâE¦%KâÕŒ:ì—=šlÓä’Š²Íª¡ôºmº‘Eë¯ä@¥:”Úkt-_[Š*ó¥*~“^¥”Þ›u÷•W>PÒà
]ÙÇQ—½â2œSï
õ/¨Wâ@oq0U^xç›Ò¸^e³ÛìÒˆ‰ë|ì=•ƒ:÷¦ wÇnšÞ+QOUýÄÝGpã*¾èu‹»}¿NëG,õrÕWSêLøÀ~9é–X»Ï¸SõyÜÍÔ¹’.ÉñjÞùøB¯´W Ýg“¢u1¯(s>¾¯Æ¼nO¼ífq‡{â¥ìÕTÎnŸéJ' ü4¢IîÕ¥iL“=z'¦ëêØ.CŽ‹oÁ4U|ù¬ÜRg«ÊçnõŸÀj|¥öAÕgÆ܇hPbXÛï†Ò¯d”ºGåR>n¯é•«M´»¸T+ƒºqä×ÅXÿ <ç£P¾Æ,
yC4)±æ´6æëA^»Ë¿i:Èö‰÷Wu=˜–¸§ŸvÜù¾8òëbÌ¿§ÃL®„Ùv` é¿]íÓŽù‘ï‹#¿.ÆüMbŸvÔ†|_ùu1æoû´£6äûâȯ‹1“اµ!ßG~]Œù›Ä>í¨
ù¾8òëbÌß$öiGmÈ÷Å‘_cþ&±O;jC¾/Žüºó7‰}ÚQò}qä×Ř¿IìÓŽÚï‹#¿.ÆüMbŸvÔ†|_ùu1æoû´£6äûâȯ‹1“اµ!ßG~]Œù›Ä>í¨
ù¾8òëbÌß$öiGmÈ÷Å‘_cþ&±O;jC¾/Žüºó7‰}ÚQò}qä×Ř¿IìÓŽÚï‹#¿.ÆüMbŸvÔ†|_ùu1æoû´£6äûâȯ‹1“اµ!ßG~]Œù›Ä>í¨
ù¾8òëbÌß$öiGmÈ÷Å‘_cþ&±O;jC¾/Žüºó7‰ö¹að2MuãÈ_‚wÔ/÷†þßÕ.Óõ6Ökí³h|½Çb[PCÝ8ò—àD~g,ó‚0Žõ7‰µ¶=oóT¿V_[0¾"NΑW #5gÛ†ŸcÝ8ò—àäy}Ck<Ò»`[}^")õ²s²ÒMž—ðl‹Ï_ó-ÅçÈ«þ7ëÕÚì¼ô«ë#úF&^áçîë7¾8æ[Š÷ÎÍy0á9àj~*¶Åç…/Žù–b¹Cdìÿ¬°¾·‰µöÑ¥)
V;6D-š¬ÆŽö©ê¸Ý~E,óùy¢¢?3cc¬¿I¬Û2åÛŸ¦25UãĜõ6l;ó¹Ø{¤ +ˆÛ¯ˆ¹š¯ÕÍjšoÇÆMzƒukmÙþlÎCÑe^%Æ;Í/ÌQ ¨ãÈ÷áÏŒ.½½›õmx×Ú¬mÛtÀb/ÌQ„âö«âÿ›ä5Y¾ëú[ñ¦µ)-Î9;¹Ês¡ë’œèWYrõÐÙ
4m5Û¯Š©ó±ªJóíØØhû֦¤œæ´<c¯ˆT×Òzìظ
§xõo·_UxuåU©_åPç“~©¶_¿ˆ¸ãv†öxIfllt¶á]·åå.·_õ^ÓOÀ+·íSzucÇ+7fûq–tÙ¬~á•·Á#£Á´ŽG[ ++K íêæêüþáPç³Û¯ˆ¹‚ùŽW‰[-XXâÕˆèÇî½Øv9v#ºlP@Ïn¿"f¯þ;^ñöùØØÔІ÷%^ñ àYü£B ¶=K¨÷÷_“èb¡Îg·_gI‡Ü}·ÏÇƦ‚6¼ë¶àñ*Û)߯‰mÏŽåV ¢X¨óÙíWÄêØþC¾U4¿d´‰g8!ÌxçòOxÆWÄ ÷*5ÀB~UMsµ9^©~¶;9©JóçrÞÜýÌĨãvûqBÝ|‡F=¦†6¼£6þœÕñCkĶó>ÉÅ3ˆÛ¯Šeÿ“¢ùjY>»6M)•~„mÓZåMßÆÏÚ+ÛCÏWê`ÁÆ4ä•þHlýö\c-X°Þè}í>§%&ЯŠ”"·_c~‹[`‘• ÛÂÚò}m\/Xï–Ä-ã+â>‹mâ,è¶|"Z¥k¹m;å<¨”ÏìQ¦€¸ýŠ89G^ñ8œK¿ìž‡œc¿2§øþª€®7Uù–Äwä¹0¿ÍÇ+¾û‹<CªÔ¯Ð+ŒŸ¡WòÔ€ca¬_}"
¾˜Ï9é-~‹^ VŒŸ©W£sä?”ÍñBýÞæ¯Ô/¹;- öÞn¿"ÎþN¥ïUïÁúìRªjÝ–9;¥.34NºãvlûYE¿æÚ~à|VJ[Õ¹¥I¿oÜï»Ñ+‹5ÿ¬½JhÝÇËÅŽ<á²]¥ðê®VàR¿úþ½º¿Uš+Ç¡Ó¼oÆ›®þ5VÂœãz•ûjWÄíWÄÉ{ü=ô{œFóU¿-§Wu4ú¢µ}8Ñ*°m®8<žœáyð#S®›»•Ú'Íú6¼»Þˆ;ýJIý½²Vèú“î${Žõ[RCZÎí°Þ¸²¾G¯°~™Ž™EWÝÚ›_6Ÿ£êóýr¿BuèÆ»ý²N ~Õ¥dža›J¯ªÚŽm9+¯nrâ8xUzÆÝ’Ï*º”ñ£zÅ°Û*®]«dZ~U×aü;â-z'Ú6À²my}òÚµÊ˯ +žW¯åøÅ[oU1m營øN¤J¨áWÅdÆë`~>¡Ùž2Nt}Y%
×m‘kçÍÒyîåî¸J’æs³ø‰ÂE1ËÆ›oôw¦›¹²g/ó+c‹9•[ÿ×1ý¬eÝÊ|Ž[$szös•'¢Ó/+ì’nÛTæ2ÄÌ×åI?Ëþ<a`Ú>ÒgïÌ×îˆ}/¶òêæHÙ+µ¢e/Z{BïÆj^ŒÆÇ‹}uqãSâgËÿ¼Ìå”5ºÌ@Çù1±kÓx¯ÃSiœ~“ç/âB-õ+µ¢e/º-ÉúÁk5JcùØáBÿP=½ZÇùÚvœñC˜u‘'îgê«?ÏFÝüpcòSÙ+›ßÆ¥¾¾õ6(¸MEk½Í`W:‚ÆÄó‰fåkŒ#ùzÉÄÙ«+ü]¦iÉa÷`öìKzûlÔË@lò]_D/¢w»ßD7,?1Þh¾Å¦†6¼kmj=«-¸³eÉ.§ãSŠ;|«ƒ‰ö²Ãž‚:Î^-"çÞΗ¯%¿æ'çÈ+Õh·-}^ã\åmضM‰ÿÊÊqáÕzöªóÔéW/·Öw?qó
²¨Xòk¯ð;ê4îªß™O£
ïZ«’â´…ÿ¦Lš8×¹WEÛ¦4§NÒ1-xC?åŽ!‡/ùqwƒ\¯"Æ©ä_R?Ÿ)ò{/M
mx_¢u¤ö‰±Uˆmç+¢mùû
º3=¢KŒt>äK¾‰óYðÆô• +‘ï‹#¿.ÆüK°LX•‡væòð¤ÒLˆ¶ošòd•iº)³T¸Œyy˜=Lï/IW½Ú§·B¾/ŽüºóWcžb~•ò‹mò=
Yd'Ñ ï¥ÎöˆWóË<£š-e2OKT3=«3VõiÇmï‹#¿.ÆüÕøÌõzNüXõm/ŠItBççÉÄ:én<KIyECöjd&—ˆ¦Uï궬²Ë·ê…ªí]þw‰ŸÒš:2/.˾¥Á+ói§$ì“üÏ¢.Ý`¯zÜÁú‡tŸd^¡”*MËêôµ·sùymÅkU½.ÿ»Ä±~ëÔßå^%4™Ò7ÎDWV–¬Ñ˜ÊæÔ£ËÊ«‘xõcûX¸*MN¥E_[Jd.¿p)_ªª×å—8Öï`z2S¢äv†]>4&—”\¢i[&mÞˆ×8.e":ÌUš«âÅ×ÜÄå7…CyÅ6yO[ÉE*JÒ‹~N{Ä;(Ìr¯~”ïwãœt½©é#[â97Ê‹¤Ç{á!ñQêŸ'gÔ;ÃÜ«Í+~îÏ„{ËUþß•þ´G‘ž×›;Á«â©Ø«-Ù?nò±]n¼:¤ÎžšdΤ‹Ó¯”#â•ü%žBÆ“roh—ò·¤÷Š.±W‘į°W5¾º~Äoª\@¯¶s¯xˆ9 +ä +è—*Ó? +iÿÖQ©ª—U6ïWܺÇšvœR©:*6~¿ªX«§Ñ1@R/„N"½E_¼š&ô±
¤ëk]{~Yi¯m`† +!•&·M_$g-Ü+]•\²H2U:'ܲÁ æB¾·ô¬)RšœÙöxwOÂZÖ[1Òsî7‘3ïAj¡VcµRE©àQËÖ%G›8ˆÅ†Öì¾ö*8šÜãñË\¹¬ +¦Ä7(Lå2í¹þ@A¥WÆÕ}§Ûè†ô\Lèšœ…¯+¶êÈol¶¨œ5ߣ“JgÚ¬¸>;wN<‹oäA;4¾_à›Ö‰l1sU©@\çÚרô†ô7ng§<
®>¦ƒ!
.ßó® ð[a‘ÚàA@¿ÅW8»£ a¯º[H [Û.
Äàà²s-rQêþQÄ´ÔY@µ‹$vzwM‘«f°NÒä’Qô…Ñ~ƒ|îê¢ w5Hò›øùE³æóÏûÓ‡Û-åR.—â™-•u¾×î +t£\ø‰ýi¸](F½QØîãb‡5z«‘§ +ñp¯^ +ÞŽ¿Äʮ߃ÎçMOdåX0¦¸U§\Ö·8E°²ÄD±=óÆ_ì²Ç6r%ô¤TÆUùôN5/®éè,Iéââ,ï4JÙçºéCmš‘þüizÿ•>E‡Åi´ÈÑD;'—ãó÷7™Œ“ V|ÞÛÇo÷V> šýíÍ_E®“endstream +endobj +311 0 obj +6046 +endobj +312 0 obj<</Type/Page/Parent 287 0 R/Contents 313 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>/Annots 61 0 R>>endobj +313 0 obj<</Length 314 0 R/Filter/FlateDecode>>stream +xW]oÓH}ï¯!¤ÄOöe´@% , Zx™Ú“d6¶Ç;3N¿~ϽŽÇMK‚frç~sîÜþwŠ>þ„b‰ÁXÄÙÕ›ùÕõ»W"‘˜/ðÝxÑI矕ôâÎ )ÞX%×½œÿÓ¡ÃÊ°ƒ!~66“iºƒ¥U±Ò%ŒÞÊÜeÚ‹Dz)œ^æ2ÎË<záWJdÒ®ÅƤ^.•(s¯SxÈÕVÄ+ieì•ÚU~ÊZ•ânA7)“¾èU9'½oØ&Ö…J„7À2V‡$%Ejò¥(”Õ&Þt¦º¢t%^énx §b“']ò“ãÚµ —´×&§4ÔWýÔÎ{˺C¯«ûlg2EA‚V™Zå”GˆØdY™ëX’K'RsÑŒý¡†äoQ@f|\´îPÔÛùU?èdú'¤¾¾dS`:šNƒ©ÈD8áÿêS*fD>>¾Â!ÐDï“´ + ¬Òútsû)OûnxƒïñøÄ÷™\™ˆúã`ÔÈå±}Ô<Â>áóö
ØÃÿTëi{ìòО}Þ®dAätÅ\¦kê7HÁ}pìÁ»‚ƒ€Ø(²® +šÞ€{?ÛåñʚܔN¼=¡Å=+¾oy…“k\%ÅuEû„ÒRIJÒ4È1æ’µ3"Óƒö.sKp„cé‚ßô3ñ±Ëå•Gç mQR»²ÒyQX³ÑÄM{˜³áþEœšx-éSàÁø;w*OàBæI}
ì#¡ïkÔ¿0ö©Ô»Ý@§[ÍþHŽS–븕*ªàA-užÌ4겄º2[4'™q¾U;ÉEm厮%†i²Bhü] nt™ˆ)´†ÂÑob“Všaa ÞÐpü¨ó5ðνŷ?:/f7ß¾øñMlÅü —«Þ¬Pg/~¨.>êŒWÇð‰Z +ÚFPS#ȱ‡í®7ƒ =óÒÅ»Ç ¡YµDXÜÍŒ0õdÕ·s^e +endobj +314 0 obj +1588 +endobj +315 0 obj<</Type/Page/Parent 287 0 R/Contents 316 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +316 0 obj<</Length 317 0 R/Filter/FlateDecode>>stream +xVkoÛ6ýî_qÑ}ˆ’Ù²¤$ŽÓ®¶&.u»h‰¶¹Ê¤CR5‚mÿ}çR–m©E¤H#>νçÜŸ:1Eø‰étÀÿ²UçÏi§?:£8¦éœâ³ó0¦Áð4Ò4®äBº´ On¾Ì’óÁñôïÎpž»ý\|ë;÷ż~~›Íõ„ׯ§(Œ`t÷ëî=ì$lçâv<`… A“NN£p°=ìüôð1+äÖaÏô’âS˜×ˆI^0“ñZ(©”ÒD µqìü^™ˆzÉ <ãÓ©2³¶:»ÆY’sYˆ.¹¥ êî`«j ?’Ùq3 y©2'µâû¥99Mi– kIº¦€ÒJÐRºlIé–>|Ú-SG€ÌƒÂ½ŠW°ðb–¶L‹â™”v[Ôô±ôÈ+fš0ilHŸµùš]ªfUV”¹ l™ªkÂt¶.…YIká/ìkÞùéY`gÇ€¡§RXæÖ%S*/ï³.
^˜tE)sdK öØšFk7;î’6´J¿²õÆ+œ?)s²l>õ1: .Ûù +[o`õܪ´ò1 +·n×ÁžÒÚˆ£¢Àe[®„‡÷YO_—ZA[ËÇQÊ44ƒ&éFbÄ ¥j›¨<_g]ÈV.Ôõu@gƒ¸X—ú©5¼¹»ùo^ómð.)o%Ć`1õhŸÎ)êI÷G]ÖéßKPyðKò߬˥—¿Qÿ„&.UyjrÄr]º¾.þCÊÍ¥’ì’¥“~jøâ‘<ísýE¥¡¼†àD¢rhW5/BšgÊ;V#Žf¦•3ºxaŒÚ«rmgK¹zDj½È¾ãªÑ–=€ÇPñk +øO÷OŸtBGœrÜ„fÁìøhþfÖ ÏÉ—ôÆp¥á¢F&ûtÏ…ÍŒ\;PEúÚ²jIøêù|†$Ú´A›ÉÐpSª]¥z\þ¦e^õEN|¿ûOã.!ÿÍó7¬žÞss¸ÄNûÜJÇJム+
+~Äó#ÒüבNÐ +£Å·ûþ(ŸiÑ™¦%xŠñƒdûh©&늵x_Jåò¨ØìL*5™R/ö8½‹Ä¿Û†¼v]â•ã¿kX~ßpáYÞÇsî¯Îÿû½endstream +endobj +317 0 obj +1156 +endobj +318 0 obj<</Type/Page/Parent 287 0 R/Contents 319 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +319 0 obj<</Length 320 0 R/Filter/FlateDecode>>stream +xV]oÛ6}ϯ¸ËKÀvl×H“}<tq2h›,QÑuPÐe³‘H—¤âØß¹¤äØÊæC€À¶ÄûqιçòëјFøÓ« ½<£¬:ú99:½ÑÅpBIÁ¿¿¢$ï9ýDf%uÚ;>Íåã©÷›b|ܧ›Ïw³wô'>¼¿¹L’OñãìêíëOéÉ'ÉœÒxÌñ8˜œ
§2YJŠÏšÇ½6Æþ©¥X—eéèÃû7¿‘_ +ÊÑÊš…åF:ýÂÓZh<14—x.é83Ú[S–Js +Ú˜9ž[ÉL›˜5 ½!¥Wµ§´çêlIÂуÜÌ°9‰9’S¤qx5'g8›_¦'´VeI¢(dæ9ƒåâ3é\·€ÛØ“£R=<ƒh!|Ú¿;=OOº8ÕŽÛ,…¾¶’Ö\±óÂú +að¹zè²µÖ€jH[ +xxX‹ +¾ƒE0÷( +Zšµ|¶ïŠl)¬È°{°à`ø¹Ð¨˜£nXV˜i•(›Ý2¯±'¬>¤M'H'ÿ6R?Äy*g^šìÔ®…òà6rµSOf*ÎÞg‰BbÒ>"¿W;ä+e¥ë³†öŒš’¥ÜlW®€.>l—þÎÐd—¬D¶L3C¤ªJæ +4aæ,ÞvWXÜfo‡Ì¤È´/S\Pútýùþ*¹~‹ïÿßý£9×߬ÂdGh¿ýë¥{hëOŽØž±I[þ³ÆJD‰á{Ð:o ¡¸¯Ákàð€Ûv÷£wêk0znàkå—†w²vÎÄâ[ }¾ +òæÆ€”¸.d\¤ +È1\8Y‚p/áá3ÌE‡Šq]<ã=&èÐμ„;ÅH÷1Òí¡…™`â¶v¶“ºpO†#]ì¬ÈC …³¬âÃ@=µ±SUs±ŒØEsq2r:Kî¶$³Æ½HÁìWþ4mh) +endobj +320 0 obj +1339 +endobj +321 0 obj<</Type/Page/Parent 287 0 R/Contents 322 0 R/Resources<</ProcSet[/PDF/Text]/Font<</Fa 10 0 R>>>>>>endobj +322 0 obj<</Length 323 0 R/Filter/FlateDecode>>stream +x5±Â0C÷û +0´ä(‚Ε +endobj +323 0 obj +138 +endobj +324 0 obj<</Type/Page/Parent 287 0 R/Contents 325 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +325 0 obj<</Length 326 0 R/Filter/FlateDecode>>stream +x–KoÚ@Çï|Š9 ¯Í³©zhÚT‘Z%m|è)ZÖkØÊxÝÝuPúé;³k Y‘ +£< +}ó5ëÅQŒçdÿòë°„á²qM`:×$ƈØχ7Œ“8ŽÒÖ˜MFxzÖþ.íŽ +KF5‡-¢(ùŠ |O‡ÊÏèÞ#LSŒÕ•Ð¿AH\STpÞîñcyÊõ—:BùƒÐÊŸ…šãAÏûâQÝVuã:"ÍÓ(î*“·=4£ þ.‹G}Št׸îLÓ#uTÉÛžeÓ„z™„x{šö§ÙïË;5NºO¼·=•¶Nìž™¿Íó’E¿’ÛÃó'œÅwÓ¤ûÈ{Û7/ox{1èwJwÝù7ÂhJKìkÈÏÞ’RÄendstream +endobj +326 0 obj +813 +endobj +327 0 obj<</Type/Page/Parent 287 0 R/Contents 328 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +328 0 obj<</Length 329 0 R/Filter/FlateDecode>>stream +x¥˜QoÛ6Çßý)ø˜¶*’")>ÖIZäaHW»@1KNµÚ–'ÉÈúíww”cËç†F(ýIþx÷§tÔß)Rø'…¶øµÌ—“÷3!¥X®…TY’›kø]–7«?›n_Uå»å_—'zÂÕÇC¿?ôâ©8”âûÍ®zõ®¯Úu±ª¾¿Céýr’&)Ìóúóå-qhçà—ÆRi¢D[‰Åb•¦‰ÄÒf‰'5{!5täTX¥‡`·Í®o›xÜ÷u³ëå´´TÌ”M2Ô-T"ܴúa¥«õ¦xw¹ÛjûTµbîD=iÝmÑWS±;Ðíf-Ê¢/ÄSÝwS±/Úºÿ5]ßì‡KÅ®?Š¶|)`½ëMór1Á ,,†È@*˜²ë‹]߉uÓŠb³0Nßöû¦í«%ëúù +Ð5ƒÛKBâ8‰ÎÁf˜()GA&‹E+¾³3ÇYdü<—:;4aôñµÈHÅ·pFâ(öù`a9¶49,Ú+¾sƒ8Î/à\x/œGš,'ùÞÕ$Ž³7xWY Éb1’ï^Mâ8‹vƒ{혚,ÏyæNÒ$Ž³ÀÛ‚žÆsy‘$l³h¤ä»W“8J£¼;º7‡FB›C£¼äû7ˆã4Îý›i´Y4.å;X‘8Ncìààì"6Øfј”ïaEâ8¶ƒ‡ý…‰±Í¢Ñ)ßÅŠÄqi.ö—6Æ,‰µ+sW)Gy¤·ƒu~aºÀá‘>å;9ˆã<Ë?|_w‘.ã¦Ì„Iëùfâ8Ô‰TûϽp³³S¦Ÿe†…'3cAÒX¸†ŠÂ\ZHš)ÓDRy¾©ƒ8Ž5;=šï¿-?œ¿>ïÿcÛ®Ø<͈զYý¼RaH(ÑÙÞâ(–7ÁÚ@5ÿT9VÛÌô‘6Êäð¨ É»]<üq5:R¼ö®DËbÁÍä"m”ËdÁå·‹QÁlNçÎ+(VÜLÒFQ¨¥Ùó +endobj +329 0 obj +1059 +endobj +330 0 obj<</Type/Page/Parent 287 0 R/Contents 331 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +331 0 obj<</Length 332 0 R/Filter/FlateDecode>>stream +x•XßsÚF~÷_±“‡glYâ— y2ØN:õÈ´Ìxé„/:Ew2¥}wïN 0:É0H¬ö¾ýv¿Ý•\àã¿ +¡×ÄÜ P~ˆ%u&(k|T§×´UŽ°Fw;L}SdƒÃ%2¥9‹A&Àßxv +cØ=¿ö;Æø8ÆnÓÖþ×oÏÃÇz2¿²lQæXgq5w7Ï.Af2¥!J¥â§Pvºçk¢cŒ£l7&GÃÛ˜2b)¤"ãp
±„L"¼WÄnðùp¸jý W/>ǹ,NÖ)rS-ÒãOûKÇ[ô[k×_Bèø}*ÎÇÑàñ÷:ÃTFÃw9‡Hfº)ÈRçåIh~딨1>Jl#´øéþÏ—ñt2œN€0^טÚûzŧSÖ++âCz’T®ª@È´æ`Ö ¬¨2'â9–y,M!O™Nd±T'ÛW»Û¯jiËïv*˜o8l··Æ²áC;èÛp§¯Ü„yóÐuƒ©½DIÊ};®°äË9/L`e +z%AæZHúþÊ0¬WY¦1´bksÜtÁøjÿ€á¦vëþY¿3¬újÍ΄ŒMc%Òt]ž©ù7`Ö², /ä¢`KTWFsÉ%YpøhTð‘T@—”LÌü;4h +o0-¢ª$ˆ¤¨2ß;Y‰EÆRud_¤AŽ/êRdš ‹8ăń½NdJd7dך+ÏùovÚ1d˜³2ÄÄ)J³L+ìI6K›Ü
·ßL1öŽÿA¿ëûöÁji\ב‡*¸TX›X Ó¡n°»D§ÕJ±í½•sï¹&Rv-kŠˆ^äÁglµ)&Üæ+ãÿ`‚0;Xp›ÈH2˜#¼Æÿ„çy4ùí/HÊÌX)%“cNë~o:®äOÅôŽ3¯k"BcÅ¿Ên0Çô2k ,[Ûå»[ ½NE±ÀÝ@§ëÏ€…º§dߢšV¸}º»¢#k¬Æ¶ÔžFSÔ Çª&ÇFŠÇF)g…]„¥fÃçH^ðL»©ðÔ§î0reä<kPW¸vnÎt„êÃ8"†pÐÔð*ˆ+÷éú +P¥¢ù.œ-^’0j”Îц‡¤K©sl4ôÛ·Ã#úÃ~#PÓXmXª#Ãï+¬U'7+2—æþû4O¸Ö° kŒÂ²y$Q+Ši½vè\Ü>{î&^j⶙˜ç<‹É·+J/Ý°4{0ÚW•q·©Ð½ ä]-ÂÚÞ©-õ÷×ãurlvÕö¬^.–G±ÌS¾ÄÄ™—zòMÄGÔp´ ¼ï?Õ¾Í2m8o;,Ò%öÒmo,-ù¡f¹OT‚-À6k´ì”œ*ùÐ#6”ƒl»uLœ4DH\ip§ÛP}Ò½p ,…4ÔÖ±(]”g±¿¶|FÊ•ªòYfØÓµ©5Ó¶E¶íÙ8/×¹ÀÕ0]“Æ>ƽ&2ÅM…ž‰$årÓ' g-Ùº¥ðUvÓ,…2*jâÆYWÔæ '@úô¢”à»íuÓ¼1Ù ÁQPퟫ“ñ
96£`˜‹›O;¿Á'øâšzT®Ù]„æ±MÝóªâ°^àÓÍŽ›-8–».f—–_Ür3»|ë湞Òíy¾ÅÓV†'vØ?Û½Ãõ/% …@Ùé4Údjbº®Éÿuà·ÑÏuØôÉÍÐmÁ#»^ÊvH.0¿-ºøãâ?bÞ‹Ûendstream +endobj +332 0 obj +1555 +endobj +333 0 obj<</Type/Page/Parent 287 0 R/Contents 334 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +334 0 obj<</Length 335 0 R/Filter/FlateDecode>>stream +x•VÛnã6}ÏWÌÓ lÙ²_ìCÖoäÖØÁE€‚–(›]ITE*©‹E¿½g(Éñ%m²‰Dâp8gæÌþyäS¿>õü ’£Oó£ö´Cc¯Kóˆß
FCš‡öÉñü£µ|Ÿé„fÒ’]IZˆ"¤\XiÈjòÇÝNÇó¼=ëöÎóÎCi•É¤tf•NM“>9OÇg‡ÆúÆ;;\¤bK‡!—TO2'‘†„p(Öˆ)Ñ¡ü!,Uô^ð{ÅbIß?Òccru;9¿¢ï4¹¿8ÿ¼è ë,§ò™*ïéÜEéÜþPx6 +rÈl³tË d7ç}çäº^ÕÁ…Qéò0-›<¦Å£WY•b?ƒ8ÙXÁ‰Èd "Å=¶–DS°é/ÌJqH:@ÒH%‰š1^»lêÂîü,”å™DXÍ +K?z7R©2+¤0
Ù*}e½lX8$(¡ÀW#é9gÊÅ뤀Oâcö(}rQªã_Nf^#Œ¸@\ÄÓEE27uõkf^kƒ•‰¡PSªñXdŽ6¡â-L¦oNF 5FÓÌa6âxnÿàðÿ„‰¤'ò0‰øK%Eâ**Vví‚ó‡]o¸Õ:NiN©E“M†\×
YþtÓvC´\Ë–ä®÷°‘ïŸzcH68ÿYš WN/yåb~Ôñ:óÍŸû/äw}oD½žï
hˆêvà@g¯}]ûÞwºeíæBÝÚ~·Ï^_)¥ŽpC'ˆíZ|“†¦ú¹&#Uôc[&Uq.j:Ébi嘺ã8L½âø_L¥q‰éŘJ$ÝÑÇçûóË›m$_™ÅEjULbmWÜ+aÀ™îá°¹HM¢¬•á[á8…ï
ßÿwø§”—…˜^=Ì~Þ0uít@þª•X÷@$\;f~©0o·úïâŒ_ÒžŽ+îã62b¶fŸ“*Že²¹XägêoÇ—)"ÕJðƪŠ~s/i2ÐCKÔ“’)>ºžPUßW¨«“Nòè’&EèUR@h 0‚Ðé6vqlÑx¡l"Ì7&ÈÆ!Y©úÈè–oŽ¨öòDØo~â|ï^ÁZh77åö¯>Ò?“ÙåogÔ>¡k]×mûöJ'»7°}O¸¨Lf£3Â<ͤ›£²'·ö¿”içfPêNä@ÔJœ„I-[Uºªk´—¾¸'"-0ãÖ›qž•ž«1Îãzc×® @èÑÃÍå¯ØPŽôœ¯sfÙõL@#§MÒ!î@ì +¬¨¼Á-e*«KÍ2–T‹@…0 ø1&lX^W‚˜e´â™é´¿=—ýNßói0t·i泋í.×Ë\$ ÓäKÁ÷–¿»Û¿ÍÜÙX™•ãŒ´J?a×i«ßç—}Ÿ›Þ½À|°¹Ž±ÙÝyÃà—£Ê:{endstream +endobj +335 0 obj +1269 +endobj +336 0 obj<</Type/Page/Parent 287 0 R/Contents 337 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R/Fc 11 0 R>>>>>>endobj +337 0 obj<</Length 338 0 R/Filter/FlateDecode>>stream +xÕV]oÛ8|÷¯Ø§ƒSÄŠ%[–Ò¢©íæ´¶k)èá` `$ÊQA‘*)70PÜo¿%)ù+nš +ß5#ÔÓ6”¶ëH•¯8aÀrN•“Ì$µ½KNÇŸo1Ö:DÑ!kÿÛŸÄÎUEx¥@“Ò¦ 8lÄZ‚Ú¨Šº6ß">ê÷ + +ZÜÑGÛÜ2}tfi7BUpªÍy¹® A)“¤B¡ „“²v·1{¦¨Ì±©Tæ8 +(D+Ê©$fnôIXËå9cºB–¯Ö(&=¶þV„?誆=VmB¸à9Òräq¨$ÇA £Ÿºý9ÞkGˆÍî¢Eh¨õ¯«ë–ëá£áÕ¦ô[qÇGÐÕb³ØTp}ço(¸#ª™›mÔoÆq«ëtñö²ýX\ƒë¹ØPâÎû~x]L‰¤E§bƒK¬jbÝÐÇe»`s jÌËõôý'èc0v1‰&׺¼IoúÛ‘Ãç“i¼8üÝDósµ·•øxdž»Â_Ÿn&1XCR?äûNÏêõðŽò$ kí‚…ÑwsÉš¯¦³éI [qÔJ^¶)SP˳ŸôÙó1û3‰7±'‰'µ,ÜnÓža9²3—b%IQh»»^ç)-°ù,ÂCdVâ™#)2kXíØ,:
jKOûvÐÇ
Ä\¿ø©õ/ªÆHendstream +endobj +338 0 obj +967 +endobj +339 0 obj<</Type/Page/Parent 287 0 R/Contents 340 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +340 0 obj<</Length 341 0 R/Filter/FlateDecode>>stream +xµW]oÚH}çWÜ}Ù%Rp16vUBRTlìjó€v5ØcðÖx¨?JªþöÞ;ccbá@V‰ +Q×ClÀéä$Â3`ºƒžÖ¾Œ +®ÓíwTLg÷ûÃk8wA"è‡Y²~%Áeæû¨?E%
jµ¡¥çÔògÛD_²à'Û•Õ y6HooV– +V[+£•Õ5J±ãѳ3š¾ÞZQ[/)<îŸEnˆè\Iue\(\Ï}gPjuèœÒ‚+¢4G:EÊø‡ªXäÑžŽˆ÷8ÙE|ÿ“^½aa]}Mi¨¤®´:ù‹üNZ˜ +®%Ú·å57r*LÌÁ+Ë0¬¢²i$rkoà7{Vamçñ«àzüV§´¶o+<x”(Ç0ˆ8ˆH}“‡œ!ÚìZ—›› +®Œiv”`î'Ÿìj·˜e)5‡%§B•ËÏ’hX—»š)ƒë±u¤íÎGÓ»q¥ÖžxºßrØb¥6ÕÄX +I±Â™‡>QÑ@ÙèÎÑÛ&ÿºÐ0L\«£ßWØ™ÙÎlN+ˉåÁÁFô`gö |4¶%s?¯b‘ác!©?ƒÔ@§½¸«àd¿»äg6FîÝõ Q;d‘ˆ—…0¦“!*GhÒ"j§ˆ©ç–ˆ”9÷45¾,Q´Ô>éÍ] +Š8è!‹¶±py’Ô«ÑKd‹`µþ‚9GbÑÙ‘TüFÁ)ºF¡`RŠçyŠóB¥ÁP:”ÌÕox>óøÿ’§JƉÍjŽ®©¿V“9FPc‹G³È¥Úa&Ë0.ˆü™ÿú¾×d3M+¿è˜ +lþ7Kt£¼|é\®àv¦qð€)ÿʥ퓫+‡R]<Pt'Ⱥ–¬R†*ÓœäFïŠÍID=c<ÎîFTÕe¾D;Áé[A Ï]G.Q\zŸ`BYÂ;:¸¯¤Rè°ä
dÆ +±EJw\i
ÒÀ:G_ •)ùý‹Ú+®ŒmSÓÁÂC„¼…Ù*|‹UÌ62‡,@ó ËŸÏìñ3ÌðöȤµØû$å ½¥ËyZ½ŽìºE«˜ú ¸wN¹òLÕ=½Ã³Í_‘Ú·endstream +endobj +341 0 obj +1294 +endobj +342 0 obj<</Type/Page/Parent 287 0 R/Contents 343 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +343 0 obj<</Length 344 0 R/Filter/FlateDecode>>stream +x•XmoâHþÞ_áoK¥Â’Üé>´l[¡kiX©+!†d€\C†IŠ*í?Û“ðV(YUBx<Ÿ±=ûóÂ&þ9¸àµ!\^ÜŒ/¾ÞuÁñ.Œgø®ÝqékT맫<ƒ§U«Ô\ŽÿC;ÇZÕÝvÃ'«ñBBÌ–KIK¹œJ
Ö¾]Ø×ÂãY"æû^jª4Ó*1 Ò÷ÂËJ«P§sÈ"ƒØ@¤R ™‚p!´3©
hÊøMF R4“°R:k÷&Ôm(Qí!~Åeøò–ð–Y,“èŠÌâT$ð&’\‚É”Æ}âô£›£!!^ÚsgëØHx‚šñ$'&OÊÊh¿ÝèÀ–K1M$P‡Rž‰430Sš—Â#ókCjôÖ€Üà'\¹˜Œ§Õèâ©âI}“&Ô1ïNonÇÍF³aó1¼ÇuÐS«ë5šÐ +¸Mô©%ŒŽômåÃÖšÓªLÇõÉ+šw8±Ï½¿ ïÀØnS}%tœ½ãAËðõÆÀeŸÕ0²ñŒ²V§Ñfd÷ƒçëá>´þ<Å€šÔZi®†Ïøk¹è¯*l|›×±…†À‡´= +ýú{È<½UEÆƧ‘9¢QŒÆÃþó>k£S„†Åp–2‡ºNU`l|X +òÙø4º²c#´þ`¼OæH¦õïñ¬2Å_G°îÜxtWÊLâ‰ÂëvÊö<ŒçÓom[kìð¶{z¯ì뽃æù(V0x $°o>išBÅ`Oëµ½MC?„Tœúy<œèUñ°ñi<>‘LEÞöÏ™(ê
‰"ûæ3Š8›«BbãÓ\V|é{ï¡÷R¾ZI +”0ˆËÚþ8—VœÐU²ñi€M{¼~¹¹=àì6\(À§$ÿ¬øLbÖˆ5e™ù n7(“+X¶2ˆ¿‘byc dÕ\¨a×/¤×HfIW«Ÿœ9'¡¨ÌBåIÒê Ó®"§ÜÞÑx!Þda•w, +ÔêZ·é“ç×»LGq;¸±KñV›\²VÝé3c¸Z¾É*5Ωz9]¶[õK¸*jWŒ6zì3«2Ú³Ø?7Ý(•ËÜËTj‘$ï€ìÒ’X×q’€‘ vÕÞŽ„€·ß‰]‹ÕZ±¬ŠÓf¹KLk
§ý*æ†"PCýa£iB—t׌¸:*kÖüåTQŽ ¿þBAÃÃ/èsØ“Ë?÷騳ƒbŽÃ²¾;ÔÐô%À¨¥\Ó,‰t.µÊM1Ä`ÆáÓL&8ÁQò©cœ"£N- +â#Ú™£\ ÃKÈ.
î” t‰{Í Ä3H‘/ߘþ8E…a®qœjÀx C‘ÂTBnä,OìÌ$
W"áú™‹„æ +dTìˆ +j™§q(xÊl#¯W0ŹëinÓ‚HHUFÎ#v½¢)—$XÂ`ús}l˳§œŽ¦&¢E_¦¬Ü"*¤#ø²DI/£/´?A·õ„I!ÅP^˜•‰æÆ2
èÏ>$ç‰ó<ˆß¦ ν߶>1{š8ª0Éä’(0‹Ab‰hÀ)}®ÑTâ|Š½Ï{Wôãm/ÀÃò„Ñi‘iëoØÊ'5'6R)ì*!êðÀ;ASL†
ÅAˆb.vš>Ž‡íVË^¾#›žÏ;)g¸Ïãç +endobj +344 0 obj +1499 +endobj +345 0 obj<</Type/Page/Parent 287 0 R/Contents 346 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +346 0 obj<</Length 347 0 R/Filter/FlateDecode>>stream +xX]OÛH}çWܧU×ãÏx+ZC*$cX“J„„{B½õGÖž!UûÛ÷Λˆ±Y $gfÎ=sÎÜ1ÿ10ñ‹í©ï´<ú²:ú¸€1XñoáXe³k!e^ÝÃu½–¼°,êëJ6uq¼úG9O£æ–g84ªG¯:ÕhÈ[¿+DÛVM* +Ðsxݳóï—ñþ´³0Ëå+¯²×ÀÏñ@Ŧ•¼’íŸúÃRU£sËQ¯³Y½‘9âŒô6_ü~ŸÀ
qƒß€—Kú³ßÚ_`NÓt:¬jÈòV•íAIÚ¼ÜPòöªQ·îò÷1ûãþý_ÔP{ÔËB5 —ü攊TŸz¿Þôo§?yÃS)š” 2±Î+ÜƼ:´‡émšî‹2ÃQ
ÄqmÚäw8òN 3BÛÙzL˜ÛÌðÕ\nåf+áRoÄþtë¶zm¡ô¶V{¶?d¥(ïDCfäyÕBXç–¥ÜØï9Dù/Auå•¢PÖHû<Ö[Hy(D*aÓÔ©h[,¥n áj9ä¥+ÉfJÎn ª’9®á>£MžXÀ\EIÛÖ8‘JDÇ.ˆ°.Ãíò1g&lÎ|mÓ~°1æFµ;%™I9õÉÙêÈ4LüÓä+0‹aÂÛ3lp™áe✸·×‡À¾Ëj0®³CÓÉÑŸ„³Z– nâÕåõJQ ˆÛUÝÊN»~nfU-QW 'JÉîí›ã1îÌÃU¦r'ðîcS¥Gá·pŸñß +[xÚ©aò7à‰Ù¹m(øóg¥¤x‰Êù=õ B¬ûlÄ0Ìó{Ãì8î®ôJݨÅkð@E>0×Ö† “·&c23ÇŸn
4òÈ0arÐ0œ‚œÐÒQet׫ Ý6¨ä»t=aS·ù„³—áu¯ëð´%ð ¶AЛÅ:dû—>]VÛ4.y`O?æ;(¸èC.LìƒLÝýĽ›):qòm€°LàÚ®«Ï_Þ“@--³1Å‹Ý}x(Z„djÚøè[ÉšÀ‰Ò0‘apú¸äÝ3$æ[tw¿Æ%^ÀUSß7¼,U¾nóŒŽ]À«þùw|^
×ÿ1xl¥(IÁ¹žeÞMÃÊ6^…<ý¼rNÏYÏõ°]ÿuôºÌendstream +endobj +347 0 obj +1265 +endobj +348 0 obj<</Type/Page/Parent 287 0 R/Contents 349 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +349 0 obj<</Length 350 0 R/Filter/FlateDecode>>stream +xÍWMoã6½çWL/E +¬Ñ’,«Åjïjl6ÞÆBÚž´DÇlôUR®k èoï)ÛqàåVPiÈy3|3óøçÿDð‡•Wãôê& €1HÀ;‚áÈÇgš_§?ÙéW!s‡¸ +ß|ß +©EVW¹î"Ó6$Zἄ¾„Þgt_ôÆø4zuØýCìÿnx•Sþ![rÅ3<
m
ºá™¸‘1׳‚=Ÿ`cl!îw ã¡eÊxöáî÷C”_¸~†E"Ä™V–*!r‘wYÏ.A
c·7ÙÜ;ßsÆü"â.XãÓP£!ò +¹0žy‡@ïë"í*ò¶íÊŸ-Adz£…ž£g¬¦ +9oÌyöL"ÅãõRT@®iYe4¿ò¯KYñBCV¯Šªº…g!X5˜Švi¶ÓBI^ºU‚—ßÙ¸÷lÛqgǶ¾¾Ä329Î0ÌÃÿ’cß¿‡/’ìWJü[k¥¶ÔH7‘¿3qµœ¹l‰?¯‹íDéSäSU+‘»»s2b}*ßAUj„礮ZU0ÙiLk¼Û
¨i?î +=û–e‡ö×{µŠdU¨ Qs·\VÄ-ëj'gQ‘-deî(Ê5¬Vþ'â"# AÙ[ +⬈S·¼Â``äòEé˜m°)‘´ µlS¥)j*"ì[‰Ió—í›\JɆrð*ÛVEAÂÓ‰l¬a×çœp„ItXd[Ñ"1Fƒ«»MéLIÓü̼út_>‹
½9zOŠè¶ƒó +g Mþ³"¯T$‡ðÁâ>ÏûŒÜ[c4îÞøà’èß܆Çãí}jšœÁb¢º¥^¢V™Öy?IîœÉù°{aß°Œmß°¬ñ±°øöîëÑñGƒuf;º'$vÀ'ø´’¹0DÂvûL¡¸s³nEiÄÃÌ.N·ÍÔŽÇ©9bc`öFöôYÜåâ—«ÿ +endobj +350 0 obj +1244 +endobj +351 0 obj<</Type/Page/Parent 287 0 R/Contents 352 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F6 7 0 R/F7 8 0 R/F9 9 0 R/Fa 10 0 R>>>>/Annots 63 0 R>>endobj +352 0 obj<</Length 353 0 R/Filter/FlateDecode>>stream +x•XÛRÛH}ç+úÑTaÅòö +Íõõ Þ~›²Æ9ë· +s¿×Ê%„ZV"(¦Ú°j—#ÂYhÀˆ5Ø’‚£Áy‘×m@Ål+‰d‡¡mBSzz5ð±ÁjÇH%4nTÓ]=Øah„ªbî"Ol*ŠêpŽÄzÍíGs’Àw’š[R|îH<¦
ÍíX•àØKíDWQ$J‰(Ä‹P¡x‚æ[Ùº*ìUgèp?2™šÇS+£’x@z%Æ:9Nû—LôÙ}¶*°Ù9à½.eŽ{Ä#JyÄŵ%-m„á„i]?£áÅgHú«µvü<…:øŽ|ðÞ€þŸÅF…Ä’h€wÛSÛA\hsVžJÏHÇè²[¾¶r%ñƒN:oti’?Q/¼ÐQ" €5Õ(t®¼)ïor +endobj +353 0 obj +1655 +endobj +354 0 obj<</Type/Page/Parent 287 0 R/Contents 355 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +355 0 obj<</Length 356 0 R/Filter/FlateDecode>>stream +xTÁN1½ç+Fœ‚d“%Ê¡¢@%¤¢ªÒª\¸8¶—¸ìÚ‹í
Íß÷Í:KJ¥&R´{fÞ¼÷f^ÊðÐÙ”ò9Éz𥌿^Ðä‚Š’&³ùè”æg³Ñ” +5¼^Š&jOù1Ý¿¹½§kW×5RDãl8,~!ö”&Ž=IÁ'ùô9],M ¹I!ÝJû@q©i!‚‘\Iʈªm(êJ7Kg5Ý;ÕV":?¾ÑuÿLîúã!ɽú#¡pžàÞþuSé@Âkj¼[¥•Î'ô\]Djƒî`(] +…(¬^ÑÁUqÐUÀ;»ô7³Ñ9wˆR9ÔðóÜ¡NJüyŸ\›2¸ØáNx”^ l†Moe<8 %¢ c¦ôú¥ÕVšþª–@ì…
¥ö1•„¿…•{ê‚ß1QûL¡•KŒrK04)•¦â'úµVK–sDW[.¶Ix\CÑþü®p„Š›7ÀB™ÕOB3Žp‰Æ¤`=à>ÆU¦BCÉß&®û³„ +endobj +356 0 obj +763 +endobj +357 0 obj<</Type/Page/Parent 287 0 R/Contents 358 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/Fa 10 0 R>>>>>>endobj +358 0 obj<</Length 359 0 R/Filter/FlateDecode>>stream +x…VksÚFýί¸Ã‡Û¼Ž“NêÎPŒS&¥FS7cy<BZ™M$-]JIÝþöž+ÉØNŠ#v÷ÜǹçÞå†E}üY4<å·7~v½‹>ýÐòÚéÛ7ä0 3Rk‘¸f/öŒÙ†V³MöÝÕùõ=àançSñx>™>¹‡ïÏ>u,+7â'&ra«Mw‹‰s1kS¿~¨‚èѽ0dV‚üLk‘a¤JR:êUN=ctaÿUyìÿ¬§°®½
Éd™6˜H…¯’€ŒŒ…ÊLÝKiµëßùaäÝ¿ÎÈmgöx4Cîã«Éè¼îõ í`¯Îè_·5æö¸Éø»ü˜àsº˜¾ÿ¶U±b´N•é'‡¾óÛåt~K¨_ÿ{‡œéå䇬ک +˨3Æõ(]Ô2><ÕÁ/àu›jé]œ‹"¤DÖœvOX!sñ—¡Ê(EP$Rã-#™®ÈWqœ%Ò÷Šòo¤Yåq\Úç“Ë.9i‰Ó´ñ¶veJx/·: drÏ€Ç|†,ñ Õ9ÍܶÇUg I€½(Uø©MJiìiS즹a„_°±ô² ÜÓ‚²¾ºt½IÍÛÎ:Ç¡%À#Q_AÛ¾‰¶ÄQ¬ÕFh¬ª„$ò‘QDZ¤k–å.ëb!Ô´?4»ìå93™N÷„:4M¤‘^$¿–ù—Ù1äY§£G9-¶÷BÙm˜êC97¤¾´ÑÔ»¯K/¨ë@Âí]¬»-¶î!ìÂÒ–B#&d +>C‰:úïGÞò¹Aä¯<MË,…¾¼~}û®°ÄM[.×-”˜#€ÖFã<¿à}\Ž‘Ü¢L¾‰ÎyH–[#ÒÌèy/…&BTØA]ö3'ph´|‚V±ùAW!²ªÍ±Zâ¡Ò˜.€¸0K?ÒðññøØ=¬êì±wî +3&C¸ßhiD1WÑ.®«1÷‡('¢ØóÍ òËDuÜÔ‚ä rú¸Ú@£Yt Ê4¥Èú-*NÌE´ù]G +Væ³—â-Ê
aÐjÛfÅrs[n«(.ŽrEvºýè÷˜RùU¨ÐmÖr‡÷ (<Xî!~⬞íU +Y.Çõ.¼ò†:}Ûµètÿ& +Zåèú¨Õ½öbpuOï3âVÅM<ýìµÐ¸¦°³Ø¦FÄ)§Û±ú'°Óy3èó½3ðâpha-_?Ýo +endobj +359 0 obj +1103 +endobj +360 0 obj<</Type/Page/Parent 287 0 R/Contents 361 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +361 0 obj<</Length 362 0 R/Filter/FlateDecode>>stream +xVÛrâF}÷Wté%¸ +d„ñ-ybÁκ²´åd‹—AŒbI£Løûœž‘¸¨¼[©u
ÓÓ—Ó§OÏ÷³€úøÐÍ€.¯)ÊÎ>…gw\ú +×8»¾ðŸqgaDÓÓlrÿDc•eø¢<ÿÁ!³ï
®ý!Û?©Ò8ےʪ(”6d6’¼QèQänS)M—JE‘HSÓJF¢*%Im6FhSÒ61›½ŽÚ§žK3îD¡Ed¤.}º?¾› ¶ÌÍée:˜SÉΓü•’Ü:_'iG*²œÖ*MÕ–óÚña+hYÈ(Y'Ñ>QÀA¥hˆWIZšJç´ìŒç]êW¤"#Òå¹O£5R¥B«H–%g\Høoñ6IÓVL-‹tçªQ¹$µFyïR‹”Œü×TøÁ%¢—ËBæ1{W®´:€ï:†·;6 +'Ô£I/#šVÙJjgûAwCdé¯kG\?5ïìkŠá³´UÖ ÓÜðé1'ljI8MU]ƒ‹rƒJvªª9¹»h—¾ìx¡·<çˆGDP€µJÁ ?ã˜820èRa‰µ†ß.e¤ +nûýúç%\»A—µ
)l\¼<7燱êÙ€õ`1ô‚€fmJ0ƒu¹û
!~VÃtF“ÇÑ—p6½?IìÓ×Åß'_Àp<šÏïç'_gÓéý8ü軚%ƒºÎJT1^<ìáì¸Ï
%Oª…ŸAÊÏ•|-œÝÿ¥ãçSóÈ8>: Á»
G¨ +ŸIIËUw–U„•dðêò(S±d^r„#úa¤WbŪò_±”Sq¥¹‚r¥3W±a +²äÙYÄý4“§Ÿ06ûÔ(YÓ$œ4-Öª(düÛ~4b…Œq +8@£8)Án…¢2$£YZ%³ :ÜÝV´–2^‰èR¥ +tÃl¥ÌÙA«¡® Î
\ƒ7©Û<[XïÒv#±êEç®Õôt{ÃN/îgI.ŒëÌÏ56GÍ•!ÑÊ+—[lÞ,Ó/¼Ä¹ãÃS‚ ŠÇÞ¼BÆvL½åR»þ癤é®N=–v?59¹ +2ñ +TÚJŒUQòF¸G”³«ŸUxô¼lô²]+kkÁP$*£zVbi0IØ·üôÊ$ô]Ršd ºìØqo«¢da(UPæ=lñT«Rêw7û¢~ +endobj +362 0 obj +1249 +endobj +363 0 obj<</Type/Page/Parent 287 0 R/Contents 364 0 R/Resources<</ProcSet[/PDF/Text]/Font<</Fa 10 0 R>>>>>>endobj +364 0 obj<</Length 365 0 R/Filter/FlateDecode>>stream +x-±Â +endobj +365 0 obj +144 +endobj +366 0 obj<</Type/Page/Parent 287 0 R/Contents 367 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>/Annots 70 0 R>>endobj +367 0 obj<</Length 368 0 R/Filter/FlateDecode>>stream +x¥VÛnÛ8}÷WÌÓÂlV’eÙj´Þ&P4m¢ûV¢lvuqIºEþ¾3¤K¾uE +X€LÒGHŸî°>–B´±õâ”Í»?*X;–=I¾ˆA÷øl¼^ˆ’`ï4{Pc)FY¨J +ï#?›á̯â{Ä'!K®ã{Ä/±‚EwT’Úxþ:f¼ú¢ ¬Ú¦”›½ò‚èÍ„†qˆdŸ0Ò~ +êõŒ~L¾†£þƒ|L®ÏcË}“Ù6LyWŸ°éœ¬)8.*b·(¥jˆÁç¦ÀúüþþBk‡PXñ¹‚/¾'aª£hé¸TPó̦QÇQâwñü*Ó0ÊÿÅU4[%pµÙ×¢1ú¥;@J}•ä#Ó(v=ÊÆ@W/=–Åè·´ÓfŒ±Ç›WÔSàr•e1Äã¢w¥€Þ‰\–ÒÖ(À +íj)+…й’;Ó*Ù©“tU]ŒŽÞÅi¸Úpì¡¥lPR²!–=Îöf?å?Ñ2kÙj¶ýë8ðVpš½-¼ +㛧$z‚¶Ð–vþe[UíOT»e:ŒöÆÈ¿bg!ft~Ÿ·ÊV=û3R`êÅí¼óÍi²d,sáÕ¢—´–€úwÇ +›^„³9f¶o><¬Q°·êéåÀ²ìâ¡Æ”#ŒRT\:g3ˆÌ¦ÄÀ<6Œcô„œ î8Š)’‡éË: í
æ½uRhãvå²ÕÝÛlMåÚrl+w¤ä{¥PÏô¶7¿¾ˆpù
ŽÁ])Õè§<0‘ËTà\bí3¾Î„ÃR’kXG„Å:`äÁv®o¯®lµ>i~í›ïµyB€kúèß²®E!¹Õ“uK‡÷–gŸ|ÓÊcæ×ï¾Làvg]ÒÝÕ—y«®SŠ=¹Î“ÃO×°Ž'‹u<Àž'Tw'âév¨’KDÙ¶ŽþoÏQäµ-~§
‡µKrëz¶ØnGžÁvGxgô
·Ýß°¿ÿ~/b””=͉'œäÇÑ/0ªiendstream +endobj +368 0 obj +971 +endobj +369 0 obj<</Type/Page/Parent 287 0 R/Contents 370 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +370 0 obj<</Length 371 0 R/Filter/FlateDecode>>stream +x¥X]oêF}çWŒîCÅ•øƒû–K€FM Å–n"UÆ^·`s×KSþ}gvm06¾ª»gÎΙ™ÍŽþè`Úôì:ß¼Î`f®ƒnÀëý1xa7cBÄÉ&?ŒõþêhÐÓ;A£í!{ǧ ÞÄÉþ * +V·¬¾V€m$Ó6,
jeÝ÷õê´¯9T!ywê¹ß‰¥d¡Qœ.™Œ1c<ö·°Oy5ÒFüí6ýø9*BŠBîÇÉ€íöâ(Et(î¡¡ŽIHÀ‚¿u£ð0ŠûÅòûü’îEœ&ÙÛ×f݇#»Ð}d¢´ºç`Ú¿ ¬tW`¥û]è>´“îßV¿WeOBL<Xsæÿ
QZM?ʺMüK@Ä;v¥HO% å·ï@RÀ2X¼<xÓDAšeP`’¡ œË ÁJ†3ú$ƒ1VçèM^—‹É¥“4<Ýf¥‘øð9£Ç½¦(Ô5"̾qkšmÜ +Ü2n ®‹ÛÂ--r˜7™=¹¿]Æ=£ê”ñjŠË åy}¡¯–$ùq`‡RF”ݸdÉjòOI`Ù·jP&1šÀ* 8¯A§¥‹$°°ˆÉšë=.'Ïó©w)ÇŠ‰Oò:„^gF•¨É_ž—Óç/°Ž…*¶²N–X¤‰LŸú +l?‘ +9¸]*(pm*èE*PôX„/£?—à<tªÇ•ðÿo覔ª¥rp»Ð¸.ts,»éìq¹XMï./{rØ?5á4‚õQ Ob¬ƒŸ4‘ÆÉ›ï¹6~¸&6ä¼24å·jÈ9¸øŠ3T¾F8¥ŽÕ’wçj‘}8/‰àÆ›Äßf¤Øy~Á2PÄç¡!ÔCwäpÓ-›k0³‹!N±½\¨›¢ñÎY"NîÊ0™4Ù|¼ÇÁ;à,κ°ßÓ²ãÊí¦™$ +Û8a’m©T±¶9ÍaÁgõ*óàUh˜RO(ïêWBèØU’ +þzËhá\ +Go1’Dä +ëöôV"z•‰Y äÒšäTôÀ²€Çr¾ 'WKŠnjÈÄÐh 鸜A³XM[54‡3Ö‡4áÑX$ÏZèØA1GáÔ<¨büù4%rEÏ]Á[7ô…8áž~xÐ +Ë=ã>ýïÜc&ØNö¨žZ¥—/cØœ‰#ÂHõ$W]Ð_ð‚ؼ'ù-ÔýÎÅN + endstream +endobj +371 0 obj +1289 +endobj +372 0 obj<</Type/Page/Parent 287 0 R/Contents 373 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +373 0 obj<</Length 374 0 R/Filter/FlateDecode>>stream +xÝV]kÛ0}ϯ¸t0RH\;Iãu_Ð5i(¬Íûa…¡Dr¢aK™%wäe¿}÷Jv>ºv힣PùêÞ£{ιò÷V!þE÷ ?„EÑú¶N.EfõûÁ_õƒWòvz5½¸þ:»:N¿µâ(èáN\M6J«M™.¡Ž¸™PÈ8m…Aˆù·ÿfLRÊ8Æ”.G/ÄD¥€äà^Ø¢:8:!ì¢h
o؆;x£dvˆà¶Í™e`„ÅRŒonŸxcÒçtÁ +endobj +374 0 obj +877 +endobj +375 0 obj<</Type/Page/Parent 287 0 R/Contents 376 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +376 0 obj<</Length 377 0 R/Filter/FlateDecode>>stream +x½WÛnÛF}÷WòR9TÉ·8ÍS“:×I#qÁšZ[“\vw)GùúžÙ%%ŠVä¥q`Yär®gÎþ³7¥ ~¦tx"ÿ“bïõ|ïç·G4Ò<Óӣñ)ÍÓ_0鲪=ÝÖYÆ–n93–IyÏEåuyGŠ,«t¼?ÿ&^ÒôXž#£Ã`bÆ9'áäy0”YSà¡[rú`¬n¼NÆGâýÓBçLN>TUå:Q^›ÒQ¢JªLž“±ô ´'SRª¼¢ÄTp"Á»è¦‚›!Æùm; +¹”&D€€§‡ãñÛz,S*™Sò†ªLD¬E°^Թט3µMØ… +ÀHüÕåù5UÖ,uÊŽüBKÔ•ºÕ¹ö+|·¦¾[à“)æÒTàBÁn7ûÛ•[9Ôvò|Ls1Ù¹B¸j8¾³ª@èb£“[²àäžÐĘËLíÑ_|Zbkñ;1eªc™QUS²Ü*¤ë™´Ù$VWÞX'1<¾Ú4G—þ±÷N;ÜÀ¹«seƒ]|5(†…ý¥F9‡TéJ>àÜ™äž=ÜýiêMëÑ•M2#h4>4h1${ÉÇöé2åL—Ús¾ +ö½.e •y ÈUœèL'¤ +S#
“‘€Ô½8ùϦ=Ñ/â/Þr—½˜²œ¿èÛœûøù]ÀúîêœæÆä÷Ú»L죸l3•°`3zíá§Ê+z`zИ˜T»¤v‚H¦k:/½Õ¥Ó‰£›Á³kÿìfŸr}k•]Q®¤ºÄQízQ'UáîfìÃèıŸŽ_È 6fggoæ4‹¸}„nÇÕ™9þ=™lC>I¸BiŽIÙ»ºàÒ»_¢‘ ½”a΄àFGq°“íxÉß…úò9K‡”¥Ÿ{zÞ §ýÚŽFû=ÌÇ°¸2ÐæŸó¶N€y e f{Þ êfÿÕvΣQCq;²ŽAm?3Xçׂ3p +ÓBß-@)ëâ–-¸ª7£±}*í¹öËÓt +LØ? +Ó;ˆBËÈ"Áx£Åg‡‹þ(Ö¸h +· +qÉH÷*å)öx¤E@KŽ’J'
U¾Z›Ùb»†]:¸¼º¸èW3‹)Tzð*xÈ`±³àÄcc-»JXW×.B)l4à]ö–0V¨þÊi/¬ÚE–²*±æÉ¡xûÛç¿Î>¾¿D˜7x•,Âq{v6—»íœì8ñæâãŽIñ-Ì71ô‚§$ge#aÉ”bȵÆíiÁ5ˆÑöíì€,"èþÁX-Ri +–M± +³„ôX‘³Þoö`Wm`‘JóDñ,%Ææ¡Vì÷†&ú‘´¸íÌ» +Ü"‹ +üRƒÎ:Y@œvÀ íXà"TÍËÒ8û%ˆ.éùåK²…¤DMØ zÊ^½Ë zcö„~ +˜æÛÀûqÈzûÊÖ{"ôzuWùL`;kM]jبßÑ®¸>zÜÚI–}m¡Qe–#-ïd¿P²2À«eõ°Y2š’†ò€(B¯UCÚ}j_5DðC‹xVWp ‚AhFÔ½ÐI×xïȸ +ϲ–|žž§!^6üÚä¹ÎD03jÐ#{ŒFô/s ]…RÒtÒ@€KjðŽ<ðO=‡
±ØÎGg¬¿ÙßF_¨†à§“£ñ”NŽÇ'¢fÍkM”ßá]ä]7€ÀîÞÏðNð¾b‹×”4Ê¢ÐØQ´3zq03§àád2>Æ›.¼c‘2\†]/ z½òп.•Îe›È3gó½?öþ^kE[endstream +endobj +377 0 obj +1379 +endobj +378 0 obj<</Type/Page/Parent 287 0 R/Contents 379 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +379 0 obj<</Length 380 0 R/Filter/FlateDecode>>stream +x…VmoÛ6þž_qè>LélÙ²
;é–]ê¼&«•-œDÙ\$Ñ%)'é°ÿ¾;RŽ-zu“ ’Í{}îî9~:‰ ¿L0CZžüŸô®FEçôÕølžAœs¡¨–p]¸Õô¶˜Î§—1 k%S®5ˆj]È•,¡”ŠƒY± +dÅAËZ¥<<ÿFë}8d¾Ý¾dÁ7¢J‹:ãðC]¡›,\½%Q<§8öÏõ³î™ç5×_%?.¡yÁSãË´¼ŠÊÀÞOõý±S-ÓnŽŠäÙÑã’=Ýû"yv¯ù. +‹oÛˆ6ªN
Lxà +û”µG+îÞk˜UÂVˆÏT!ÞTü¼îµD¯Þßÿ9ýxÖorÚöŒ§‹iœyÖq&¾$à ù‚PË¡ƒ +8¬jlL/ÑF 4„; ê·=ìIÔ$rž€Â{i±umæû«Pß$˹ðáv>ï4ÿÛÎ}ÛŽEËÉ>¦òÈ4à”q¥¤òý PT@úA?9mÙX[$xÕ™3Qðì•_F^hëŽ,]`Þ‡vj£ÑJ<ûez}ÿ¯~Ëó?O +Ñj© 3 X·[–:„,Ž¦EÔõ‚Þ¶s|üJ–*SüãXzÁç8[œFÂÌÕË‹ò‚-Ahœrk˜ +endobj +380 0 obj +1072 +endobj +381 0 obj<</Type/Page/Parent 287 0 R/Contents 382 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/Fa 10 0 R>>>>>>endobj +382 0 obj<</Length 383 0 R/Filter/FlateDecode>>stream +x…T_oÚ0çSÜÛ‚)ŽvÚS[µS¥NíÖLâi2ön$vf;P¾}ï’"ui· 蜻ûý3¿Lø•Ál.o]
.óÁÉÍ>¥SÈ©ÍÏÏ 7ÉΑE¼¨ëïX¹ÞÚº‰Ë¤\9ñ)‚î¾G@6òG~æ¿xâ)d™óÄñtžžÊÌ|ƒÐÏ_Ž“€%êøgOá"V UYhÙÞrå +ç;€PxWɺ Œ³™6IdXèwèS`¡h¬Žäl`VØaØSÜðÔ3^)A+·$ìuÙ²kX¨ýî0„HEá«ãŸéËÒh!ÐûJ(¿n:š®/]kÅ…13ý¾P£¦‚0€°;²åZQ÷´íI§?a/
cX&˜®ÓN®žRj§¨T«—CÀ' +1 +õFY +ÕH"½bÑ°#õ·äÝ-X&³§å°'ZËøäF½Ü¹lršfÍ?JöÑ“*áÁ»µWU%þÒáÈðy¸¼]À}^E9yl¯eñãnÊøl:‘1³‰§gçéœÿ^¸ð#´
×w×W9´×Fd\p,¢'H¸£•Wþ ×ùàÛàko¥endstream +endobj +383 0 obj +603 +endobj +384 0 obj<</Type/Page/Parent 287 0 R/Contents 385 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 5 0 R/F5 6 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +385 0 obj<</Length 386 0 R/Filter/FlateDecode>>stream +xì™ÏsÚFÇ•™ráÔtGÇÀÛNpäÖœ„½šš¨:F"üHš9øÿ¨oþÊ|ß®$‚“bOÏt™à}ûy_½}z»¬ß–:ÂË¡c—êMº•;ª\;?%ç”ÔêGNÕ¡æq£ê’´Çã0DÿPûùQœÌgÓçêoØ¿$ÇaûŠP©»'Õ—<B½‰¦Ôφ'É»hNi¬S“ɨ?‹’˜ð‰Fýø%Cš½ é:ðçi8‰ú74N&³)}Hæô>º¹¡aªÆ5¤6ª'ìüîñappyUqëî×ÂÈmm©AQÃë$ixÓ—L¦ôú +«>¹ +ÄÓ«ÊÕüOhŒãðz–L~d-ÎqBrüyô×|’KJ=eælí©ò[Ð\áhœB”ã#ÜÎi³ÚÐSqQ;»ú½vQ»ü¥CîOGºuÎùeÚÏÔ.h6™‡µß¨Þ¨×~¥“zãŸÁéÅ«òíÞmš¹`ì³@´ùÐ +ºòàžÇR»ù¹¸\jpO4 +}x¢à´ +ùº<¢Xêh˜Ê©L¹ûÆ.Ù%Ç8ïS~׋öð>Æú2“M±@aóê÷Ø*ðr +m-øGÁ]ãoCø#QÂiÅWÁ<£™zGxø>a¾>åë`ž(˜À’Á°Üœ–7C˜‰ +ä +òê¹ÖÇî¶ø±ÚìC({‚u¢~-c¡ì§>Wµ‡‰Á³/v¦;´Õ©¯WHcz=è"µ {(Vžð<Ù#$ð@‘HA)ûððK[ùŒVzVFbé+¨V~Š0v\¬¡ ÇÍ‹ŽM}5r‹ëÚayÐmÿms®K[!+É`*ÍÍ¡©KݾAñmgK°Q‘=(“³Ùð¬6d}ÍÆ‘ö7G"ÊžeÒÈf8æÈñ3X´ºî~U}oJØé^ÿ-œB»Èa{l?ÿC
£²©91›Ïz FÖ³ÔR%|Í_‚–Q6¦Ð2s0ÕïbєسÁj9fI„Í0Sæ´\\<c¢EƳ°bE+Ì
Ò\²"'Ž—Iµ ËÌëÙt=
äæz*ã)®mË Xa?L^NËåÅ3&^d<Ë+”¸*1\n†æxmçxmF·K´’)¯µî:¼>Œ[vËÉ +BþnwZ.)ž1‘"ãYR¾ÄýŠ¤ÜìÌ‘ÚåÙu²ì¾ÂLõ1]¾Ù:µMë>¢z7‡D}™– +ùÛÞi¹´xÆD‹Œ¯imöz¸ñ·ÌîO'«êÜß^ÿ͹w%‚8 )|wIây¿¬þ[% +çendstream +endobj +386 0 obj +1706 +endobj +387 0 obj<</Type/Page/Parent 287 0 R/Contents 388 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 5 0 R/F5 6 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +388 0 obj<</Length 389 0 R/Filter/FlateDecode>>stream +xì™ÍOãFƳR¹äÔ|Ÿã•Äq>ªª +ù€U•“Øê¡êÁ†º…d×qZí=ð,7Ä_Ùç}ljqa6™:¬`f~óø™wÞf?–-aâËNþ]—;~¹zT–%üÑlˆzÓ©4…þ¶ñ½ÿªÜ¬Ê¶+-ôDÅñ¯=Y5ïõVˆ_&—ñ™8N&³ñ9ÕZŽ]iÈö¶ù©çŸ’za +?J®ãqx%†Qxþ‰õý²Y1!~ñ‹fbŠz£Å¬Ï6+¶H"1ZÑÖ2ëxÙXª[×ÚvZWm×íJmŽ®™•ºÈÑð—\;ø-Ìk>ëEw…«ìE7L’8JD/J£³”ú?6×¢_ä“3Š/ɶÁ,¼ŠÓOú¬ñÏmbšß\vn3¯3ÿ¸±²jèÌ?‰^í_ÍÃð¯U|Ýa4’¢'!g/5‹Ç—j^8
Œ£ê7VöB
y!Ñ«½°D9¼°xaåsÿœNѪa˜b™DWYD‰«ÑTáÆÊŽ¨¡3G$zµ#¦Ã~,…`N§XOãVtÄOÂñô:NE÷jrö7Õ=ï‡Ûj ç(ú!«ú¡ˆ–~dè•~¸M[æpkiŒ¢³Éø<Ldº‘Ò8ÛnÑ”¢{kiÔÕӯ˕
QCg†HôjC 9ýZKk!7¤ë^˜x·®ž&]n¬üž²5ö÷Q +æ¹%,—æò{iåÊ…?Ôl[xñx2K§$;ßÂMq`×e®Ìš…WÓ‰˜M£©…í|ˆÇ¢w0š½ˆ…1Öÿ$ùA¼Ÿ¥âß8ýSœÇQÓ»-ôþ‘F°ØÞû(¾œa£u°õgÃtç´ÌÆŒÂÎnŠ,¬`<›->xœT»£ß«'ÕáqGØ?™\:Gô%ËÏTODšÌ¢êoÂqê;Ñtª¯+lqÒ+? Ü—´fÞöM µx% þ¬•Ê0À÷†~pPønÜ`ðí.À>ÀÚè~ìßÜëì諒àT?xÐ'©§7úçàÃ`ÈàV; +βÇéɒݙӗéî+«dÈã¼Mú-&í%ð6Fq›™ƒe²@™°~÷{ƒ8*Ðv€æo,O{ÑÂ#+r0ZîL ‹ÔAÔÑËÈ1ÕªžSœ÷&"Àx·ñ!ØkªÐFZ!³²,à_Ÿ²Ç_ †ð\ÂmÅJ0uCï¦Âa½'š§¼¦‰B´$0ZnÎÒ›$LD€
|@8ž“S®š+ÎÀm&bHžà|L¹ +wXìqÖp°šÿMX“&]%S|«‹·àäàCºÒÒP<¾ÍC:¦$„„ìcŽ´€øY€éïÿï4úÞ°¯ŒûÒeÅš.ßüà[£h…§ç6dìáB(óøŽîXzÀ}¾Ø|îëÃáåy7VÜæ±mdà®{L·}9¹Oyžß##bÅÛs‘ +žƒI¼Þró +ä +Å&¸]h£IÓÚ“zË7cKBgȤþûŸãŠ„âæÜ4RüòÆ~z¾Ì—êJ¦*Xˆ(^±¨6×Uýs§…ŒÄLål®”(›í¡ÞuŸªßW7w±RTÏb&CÌá# ”}ì¡9XÁB‰í¹îÖ¦yé›d‚WÞ¤±Gz[]…AŠáO±Iê(Š‚H(dBY;£E9¡µ¿'B±ŒÒjepr¦µZ(8µ³ž/άåÍÝÜñIC»_™@ks--Ü7¸MÿK¬L{<lì +m—äü\Z=åŸí7@‘ü +ŠÙPxÖ +Y¿‡‚(Tfÿ€BÙÓq4@“Îhíá5Ä`eêC·oú^oD^÷µUœâŠí'&N.–»výýüäT†‘Ä'sÉ1‰œ³ö‘KR% ùÈ“ä +½ÖÍ?¶Å96p¸e*Q°f”‘˜ÍŠgíX¡XúXÅ)U1Ì¢©(+ªr"Ê +ý÷¨»^T(õûœLF´ˆ¬áY¬`K\p(fƒãY;pdíe2²A†ù4n9 n¹ÓµñaKϱý8Ô]½DcÍû -#ůò +Ålb<kGŒ¬}ÄdJµSiŠX^”±§õÌÖ0ˆ±^ºÞ¼ÚuÚ;ÿìœë¥´”Š_üŠÙ¬xÖŽY{XÉ,¡â‰4Åjõ=Ïê[»mÖÓmR…$G†WÅD‚#öJ›}£ÌÀÞ„2“¶¹óz‰¹`™ÖÖYûÀâXi‹©66_NuUı¬i´¹îõº…¢,4ŠÇc½kúדg>@˜Øa‹Ål„<k‡¬}ã„ZÆ8÷t§
´Ï1œ_†pã5K~ 1ÏÚÁ@±¯Ê(¡6 1¿†cÞ™ÒðBé’‘ä—y³‰ð¬O
ó®:4ÌRã<hXÎÕx–?N/á‘’_Ù%ŠÙxxÖY{²'³W ¨?r”Pvð|§4F£º›OÝuFò«1j¹,xÆ„‚Œ=$’MéSbȘ›.œ-±WEf™D-÷l$^dAzr]Æ[jín©2œC% +õԦæø`Ú©÷Ð)·bul6Z<·F<Ü—_ŸÄý‹6uoWÊ×®×{|) +óо@_x +endobj +389 0 obj +2397 +endobj +390 0 obj<</Type/Page/Parent 287 0 R/Contents 391 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 5 0 R/F5 6 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +391 0 obj<</Length 392 0 R/Filter/FlateDecode>>stream +xÔ™ËoÛF‡»òA§¨ˆïc&’ƒ,É–(;( +H–ÝêP€¦Iôа#SGNô’ÿ¾³Ù‡,HQ)Ú%`>fçÛßîÌ.Wôçrx4¡s§?–{q¹~uÍöñÄ#´sˆï_G7µv§ï^z¿AxQïÆïÞ@8ž<.æ³7ñtjA³)\j'Áq‹9ŧ Ç“y:Ý
SÏ`1Kï!ý:|XÌÆ_Ò‡oðþ2áãÝdUæ‹i:ÁÝäžUÄ8¯}OÐüB¿v³xÃÇÉ$ΧoYÛÍN€jU«Wã¿ +¹¯ŒH ‘îvDG*Ò…ˆþ%õ+T¤‹Ÿù{DLvB¼L®•ÈÝ“$>$‘ÿ]âŠ^û°ýz¿êW¨Ó:28‘ªêiÞ‹^EûêqÌKYW¿±Î²íóPå##è 7‘5YMz<Oç~„/2=:YM‰EÙËP!ÙBf6!QI‹…3¼’¸Él± +ÔjFD Dâ‹Æ&5>¸ˆ“©Šd †$J¼¬ê0aßF#•>™ÝœD|e«ô‘D)Ëáæ0a`že°n“ Ò î¤×|W¡B#Ú–·’oeÏfŒlA”’‘ò}£I¶¼D²qéÏlâU°ùÌŤ!‰"û³˜ø~O#OyáB>éeQ6&‘>Úû«ïDÔ3{{iä‰++Pz\àÌCýÿ êô)Ð_áú’£^Ï +ÙZÆÊ5pàw î.}d:î0}d:>!FÖŽÄÚ³9L,¬Šh‡†mOô2x§$‡‰ç‰Ìr°·[j7I¤X¼I$oŒLL½¡Ÿ!•F+Ø‚áñ6³ï\xu5Œvh$Q.H\
«4IÅ–)/Q*^Õu†!
ò÷«hH´mi\E”x“(× 6o9Küqq˜¸¯Ì¿C´†_Ô(;dŽKcæ2p¤ll™h%¤UQÈ’ªDcÄ°MXE<,4T‹¹²É«#x£¬:Éc“ÈÜž$ÖöÄar™ÐmŠ¥ÑHÈþeZlT^C„Ê¡QiÓeôì]ÅHpcÒ\çá%I7 u—Vs~=+Ÿ<ŒÕ³G£JÝ×V׫5–Žª.²íE¯!‰ã½:Zör݇ý£5D5iJÆ×%Šl•ª"ZÉ£'
Ú©v¦³þµ–¨«d"êxKDz/tsö:ùQµk…Z§Ïuå…ª’á¢òœBj¾¬1G#ls¢nF‹€µ:2$u{3eM
ãEÈx†È5›?‘XXä‰(’vH›Ô¬´ƒø±%úK‡žõ¡l¥ãꇑï¢Êmÿë³JªØù +ä +:V³
>ÎÕÇ!_„ý<a¯m»Í€;Ûž…çUÞŽï!Ì võbζÝiº4ŠÚºô¸4—ðµÈ7Jaçu£+`õúÌ$ƽ +0L2“ÑÍgb+×Ðë´‘“¡†ÌÙTCCh¦!‡~¨!UÎ;s1P9‡É#2N9ü@¹0'éßÉ
•pE³v)R4d&=aòi™,2ˆf(ìô†8ThŠYákJ55ƒæš2è2Mó5uË”ˆŠ4æ£éâ>ͲbYÏÊÀzE²öî’ÑÜPT¿M¶—Ùf÷¨³±¨fÐ\T]&ªç²ê•éÐBfÒÓ‹nñ(™ß§XUÕ¶Õ¶x‡ÒÒ=Þjµ "]R¡Le£ÎƲ™AsÙt™l” æ¢_&ÛÕÏûûÇÙm:†«ùl¹vKÚy«ð¨³±ÜÛÁ¶¡þ°}ìjØ-p}¿é‘í6¼ºìy³eÆÛ§HNÀ|~¹»ÁZO<±î¤ï“iËE²€tÓ)L’û6è~c¸|ãÙtŠMa6oB<½KÿJxÏþ²Ø‡ù`ŠÛíî3ܲñ¢4N‰Í‘öëìÃl‘ÀlBÆ:®ó-1ÛmùHV—éí{¬=‰€v¸è‰ÉÉ +’äÏÕíÏêõ:CHrŠçO6ÆQ$bŒ$f8(‡Ï´H ¢¸Úâ`"#½býB¬kÈHï‚ø¨~ ãÇ{A¼ˆßH’ûAŒãè™ ùßE,Xu¶¯gÑËþ‰X´Šn¤SywӓtÜ¥ÌÿÐ*³l{ ó‘ ¨
aNS“Ò‘ +Q÷²júT!CÃææ—?—=ëM$0Z°"§ÌE¾¯5ñ™Wˆ°QÁßØD9Ê`ÓÁ)²M#(²ì71Ñç=…Öä(,DP|I!23aòhé£Æoö…ÕÎÞžš‰•‡" âö¿4ÔÿD•>;¬—
}AeTõlg@RËȱGŽ)à@Ü_úðtÜcúðt|€æžHrÏl&V‰˜
y<QeðJ¤ +͘Õ`oWj×" +’¬x’t2a"ì5þRrÌ›aÔèœæO.Ô]ʘ
Gä‰ò²rgœ3mŠÈM&C 5ŽüïW6›;DZ‘Ã눼NøŽb±¯ +"&:VæßAÌÉÏ%àù‚rêTq4~B +É'[EÌ%dΑÑâ¬Ød#oBYyHh„J6¯Š à…´V˜p –<yÄ8ÔOâÜãI…© +‘ÝæÈqÔ²± Z¤9— ÂÉ3ÍiÝiøè+å¢%¸¶iÞl‚Ççñ@-©q÷gGÚ+:böHe¢¨ÅT¡»QÌñèùiªíi• ŽNíåóÕQU׃þóD¹iŽ´·KUPÂvr*sÉ£6
ÚŸ o£_õ2ªQ¹!ªx+ˆ¢/œo¸êøk9o.Ô*}Þœ<•.''ODHõfé8™È`ëu=¤VrÕ‘@Še¯G)ñÐ!ÁÓH–XwûÅI> ˆ$ÅÒ:6…v`l±õŠïq-÷¢¬p`ñÍ°^+D–Ûþ×çЬÈï? +ä +ü–ãì€f8âl›x1…ìVZízÕÚ×S¦.0èXôöâ?å
ŸxÊ9äSTÓœ†¢(œâžqQ-¡:¢¥4 +“AL#²“ê(NBâk¥wû ù`</oq]ËfjNG™Q#jÀØ}[47B÷/0×í¾©MÄmÒ†ØGÄïsŠªt¡·Îð+¢PÉJ)êW?ÃÍž{Ãó³à9ëÏ𲄅™AàÅg\‹¦Ûª¾—µ…bT³1³ùý³/íZ>Ï ¦xŠÌ›©{3õ³˜:ksÒ1Ç0”ǘ–r%Õïã@ó1§bv¨MÓ™ÐZI
…ìåª7óOpÅëzsµbo®~ÖWg=Æ•0W7“1%¯\èðÒ–ò×^v=ð¯î§0ó*øXàRo–g¯*@îÙ· +X±7Y?묳!›3¬ó˜°éŒÙ1°³úëx‚åÄ¿‘X/'f±Iß- +/"Ø€Ç3ñìZØ]MÖíÅð]€hjóð +Zý³ë…éœì; =N¹Úí°7çÁ[òjT±¸‡UÛ4x—Z
ÏøC•ÒÐIÄÆqC3¢Øà)0졶´VVKÝ®µØbê¬a¾Wµ´.ˇjñ;©q©^»^nmçœOE¶U•Uf <-®ï`9»¼âOç€Í½Ý÷VždI˜»–ÛʃŸãëä/R u³endstream +endobj +392 0 obj +3524 +endobj +393 0 obj<</Type/Page/Parent 287 0 R/Contents 394 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 5 0 R/F5 6 0 R/Fa 10 0 R>>>>>>endobj +394 0 obj<</Length 395 0 R/Filter/FlateDecode>>stream +xÜV;oA¾XŠ%¶¡¡Ju%¬”ø!8¸‹ˆ% +DJ$b’þìü +JÆÖÍÞ|;¯Ý™½½5·Š_Ím4éü]tú¢ÒÝuk5·ÿH³µ»Órû_žþ¸\ý|ñ¬&j{µ]w»ÞÄ@÷ôÛõàÄmºÛîÑAÏmmžž»ûçç'ÇWRx×—n«ºSg_<¨WÐ~¾×‚œö*ûGŸ*½Ê‡ƒŽÛxYej¼¡_§K?C¯>WzîÕàú¤òÖ+ïùÙ9ÜwënïZ<Ãy;yOæ¥q>x˜£¹Ð„iÕÎAaIv¯µ—Ãî´Ö“0À²VçB?‰eAƒ´µ¾Y¶*Y¨3è§hβø±äÑÌ1•R[ÄR;h'àCC¦Y™ZZÈ,–Dš3©u;ÒË™ä¥5hÎ$/-c¹à=r¸Â]ìp…»x½áΰ&™)0›!FžÃB‡™ï ŒC„â;&DLñΡ +ÌÙ¢@z8Ìém8eÚŠ…þUÊcbD؃^Ë£‘鎮R&0ÊVôD Ë*ŸûfÉtÇð5–P°3µ'“ˆ%ZkÒÔ’ža! ›±$ûð‘Â:*Ât{½žn¯,$ã¦èbÁºÐÿˆM +ô&r½?‹Ù
ˆöA°‚Åâý#!í0ßɾKÈPRßFX¾^¦ÎuþCE5?í3 +#ZÏßÔ:$D?ÐSô#»Öö\R‚0$3‹ñ8û˜YIòþ¯Ø¸Àæø>±ŸÖ|A¯õX;óåKû,ìéõýÎ狵32œ6’)…)ÞW쯴>¬<üC[ȦÆyw¶è”æm¬ Ÿ‘ØéÍ2a’÷œAƒÑÂør„Bˆ09ѵÂ,c™)ŒñYN“Ê$„H±:aæ@*Ñ<f®%Òb‰M¾7Ðަ┨wNœáÈgGõ‚ýŠ#PúRzIî\å“>:Œ)³f"J°.aÉ2å8¤F4MÉ=ä¿Çr
ó.XÒej9?Å2”¾†™nB‰¥H¦©ŒR´Ôö7) +ä +ÈÖ1•ößשš ²Ô‡Ìë'“‡Ñø³X`Ær +Œáœƒ8<ù㤠+áø|2>ü"(Gþý45pš#`„çâ^K{«QÐNd1*\"†1EþÈ4¡¥k$MJ䥅>ðŠäåíœ.7tÃK`˜º¬?zýGC¢‰¥¿§œýJZ B™³vÊ¡QòðîCñCÂ16Çk^ª[^£öJÿV‡ +^;»çvûÏoÊHë+í{oÕ9\aY¤dfþ êvú*^Pþþs—Twµ!îÄ}_ü&ï—vendstream +endobj +395 0 obj +1510 +endobj +396 0 obj<</Type/Page/Parent 287 0 R/Contents 397 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F9 9 0 R/Fa 10 0 R>>>>>>endobj +397 0 obj<</Length 398 0 R/Filter/FlateDecode>>stream +x—Qo›0…ßó+üØIÅvÀ°·¦K×jS«6LÚ+º0¥I©Öýû]“R@·•š^s|}ýqâ&Røô+…QB‡"{™Ì“ÉåM,d,’g!#íÅ"4§D’_\ívÅ&/ßÄü£¸Z^ß݉ëíf_m×ô™õ‡ä7Í )íÜ©›<Õ*òfvv²*k‘Òݾ¨Äº¬÷µØ¯Š&QÖ$Êl"‘nr{¬Ä&})jÏe¦ª/²¹}1ÕôO~1²>iTxX¹ÏÛõzû·Üü:,¸J«4£Rhµª¯u‘“¦‡Bv¯Õn[õ'»¶4¾¶ò¥?×…FL‡1:ö‚aÂ{ÚÍÌ(öíæå&þÙ±™ÅŒ±‡lŸ®íVžqCŸ‹¬|qƒ¤Üàmñ–構dâ{>ÝÐ㟧/T†¦Š2E"TDù´myÙ'6¡'q =T¬”9ŠQèXfÄÇ2°1±ö-Š¦æÈ.r¬þ<xLÊÐ&•ÝByÿý›…†]‚£ßü€¸µ:‰h¨Kቩ»<†R*ZŽ‹b.Jˆ¹(!æ¢t5¿Cé +endobj +398 0 obj +823 +endobj +399 0 obj<</Type/Page/Parent 287 0 R/Contents 400 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/Fa 10 0 R>>>>>>endobj +400 0 obj<</Length 401 0 R/Filter/FlateDecode>>stream +x™[oÛ8…ßý+ô¸ZU¼IöcêKP´³‘»HƒÆ-R4õ®›>ôß/yFM”±($0bó˜|ÎRÿÍLQÅ_S¸:ý}¾Ÿ½ÙÍ^o|aL±û_ë²)ê¹+çÅîö¯‹÷/vßfµ-}üN|_ÅÓ§!Í”>36½u6~È°eègi|½›Ue×~|¹:˹´\ÓÄå°ŠJ[÷E;$nêÒtâ`ʪ[Û<ŠÚ¨8,Ã@ÜcbW…có<.ò$Ž(;€µ+ëçŸÝ @ó S +`hâr,@ˆY€³ + iÒÆHÅâiK<mwü—ö¼lcˆY€³ +ŒØHˆ‰EÛˆˆY€˜™1PbΌ٠+endobj +401 0 obj +1181 +endobj +402 0 obj<</Type/Page/Parent 287 0 R/Contents 403 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F9 9 0 R/Fa 10 0 R>>>>/Annots 224 0 R>>endobj +403 0 obj<</Length 404 0 R/Filter/FlateDecode>>stream +xÍœMs¹†ïúsÜÊÒÌç”’eËQ•7r,¥6‡½Œ)JbÂeDíÆÿ>o7œíä*‹ôn•LÀ3˜îºÑ +ý0ôãã;*du1E·UVµ“V +Ë슰׾¿Ë^W™1ôHê׺Ç]¬·ýææi¶]lÖô¤jŠZcò£þgâò0f2…<JCòà‚—Šux·³ûîa;ï³Q’ê
ÑÚ}”TÍüe¤ú®²i¹’j½î³Çq˜ê¿ÊÚz&Õƒ¾žê»ÊŒm&&•ÔéjÞ/ºå8MV™Í²f-yß@xg›Õêi½˜udrlÝM;)fuŨXŠªj§“T[üã +b@¯ÎK™>˜ÄUÛ¢¶ôÛ}·—¢@ÿdšRªuÚÏÇIª3tfr9@I½ ’:S +›Ö¨|¦ÂÔ$
r +ó¨‹ÈdU}I_å>IêeP¯~±…e¹ban6Ò‹|9:]KÓ?Éÿ˜œVIW¡ÃÛUxKvjW‹»ut
QÝúX†0ÏÞ›ùíb½Ø- %ÍÙcºq)¹Eî9)Á¢¸¤L³æ¡Ÿ>~^ÏîûÍzó±+„G@RM3©B 4pÌpÞò´=ÜJ«Œ«JXQY±×æµ·â‚2¢²vn;¾Ôª¾4áZk5Iê…]kuo°bAâšåìüióª?i¬ ÛhÒ@hož–óÿ{M +ÌÔ%
„¶ÝD&œêM*£\fÈ’žuÉèî€5¯‡0ì†v/©´_cò¶ Í—”ÛÁk …†õ‘KJóÈ=²ƒý8ïnâšWýA+(ùÐü˜ÒýÐ4ì`ÍM ´Û~³Šh_õ'…U¤0ý¦þBÛFµ¯ºoŽe.€IíôO[çƒ.Þ)Í#ë²<繤4o]îz¹‰Ç!2ã=‹×¸R³xÆ;Xl²«Ž*6q˜BFð¨Ò+ôÐ4œxÀ´Z‰uÉ
êxúQNu\U¼R!ø
#”\Eé3–2§ý/ÃÏ:op9o ò¡ÙÔyƒSÐ,ÕÃã‡a\›õíâî©O¬#ª+rò šé#ËÏUÕì 'ÏÀ¤À’v¥à! ¾?8i ¼m‘‹8è܇m™ñ£+Þ¬SÊ?À +…s`w¯ÜÉî£Id‹’לeË3WPòÁ>‡ÝíÅúá)²›EÍw& ѹk€j©,(-!:¤:ô¢¸“Œÿ`ûÙ‚5Ž÷Ê)jt%%"dKÜ~öi•‘îNÓ,‡«`¾çÓì(‡(^Bô¯Iìä+Üþ‘W#.))YÊ0qšŽóÐÉÕÈÓà6°¶iš¬F;à}×w3,לAÔxÄüˆ‰q¶¥˜T‚8W é ζßÂy$‡Y’C8a© +;¥©ÉNå²IüÌó=’Oä¤T*v¡úâžG«@R- È®Ku…Ê°AÚI½€Ø +YÔ}š4`Zì+º/…›”²Ç%p&½þ¼Gîðêî€aó†õL¿¤oÀ°Ó?ºÅ’¾DþÑÒËYPÄZØš’²¶«7x G.ˆ±`ófªÝÍå_'ŠmÜ +jÝ\8)=áj‡®¤(ºŸ€¤Þß!zûþíÙõx<¥À5”p¾ç}~ÜÎcW”EiØ'
„wÖ-ù:0.®ÛƒºˆIRUXq]*™Žn(~ +â0+7tþ™º–0ô†<ø5–É!p‹ûÕ(éayºŒì*¥zE +·ÙÔÀ¤ÚÓ”¥¼Â,½(h]ÿê“`Uñ×Öpþ<¨ªp©›wãÒº!¹Ùî!\%C´)ÓWâ ˆ/&{ð'&øIùƒü‰ÿ€FGɳƒ¶TõTß}U‰ììÝÓâfžÝnúÌݬ×+zü¹l‰¯8vtÉ æ–Ù/å÷_ˆfþqòÑröAendstream +endobj +404 0 obj +3340 +endobj +405 0 obj<</Type/Page/Parent 287 0 R/Contents 406 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F9 9 0 R/Fa 10 0 R>>>>/Annots 232 0 R>>endobj +406 0 obj<</Length 407 0 R/Filter/FlateDecode>>stream +xÅ“MOÃ0†ïý>‚IJæ£érd›vÚ =p-4«Šš¶dE‚OœeÐ!UÜ ¬F¶'¯×ˆBì^ +\â÷l¢eÍ× +¨‚ü +Šæaƒ|áÒˆ‘aÑ@†~ÄÛ +æë(Å’˜§Nånû^·eý“eFh’qY'¸ny3
åP‚¤— à>ï+[m·Ó¬QºÊ*襧þ +endobj +407 0 obj +348 +endobj +408 0 obj<</Count 8/First 409 0 R/Last 452 0 R>>endobj +409 0 obj<</Parent 408 0 R/Title(Table of Contents)/Dest[402 0 R/XYZ null 756 null]/Next 410 0 R>>endobj +410 0 obj<</Parent 408 0 R/Title(Introduction)/Dest[294 0 R/XYZ null 743 null]/Prev 409 0 R/Next 411 0 R>>endobj +411 0 obj<</Parent 408 0 R/Count -5/First 412 0 R/Last 420 0 R/Title(Chapter 1, Basics of Serial Communications)/Dest[300 0 R/XYZ null 743 null]/Prev 410 0 R/Next 426 0 R>>endobj +412 0 obj<</Parent 411 0 R/Title(What Are Serial Communications?)/Dest[300 0 R/XYZ null 371 null]/Next 413 0 R>>endobj +413 0 obj<</Parent 411 0 R/Count -1/First 414 0 R/Last 414 0 R/Title(What Is RS-232?)/Dest[303 0 R/XYZ null 736 null]/Prev 412 0 R/Next 415 0 R>>endobj +414 0 obj<</Parent 413 0 R/Title(Signal Definitions)/Dest[303 0 R/XYZ null 233 null]>>endobj +415 0 obj<</Parent 411 0 R/Count -3/First 416 0 R/Last 418 0 R/Title(Asynchronous Communications)/Dest[306 0 R/XYZ null 260 null]/Prev 413 0 R/Next 419 0 R>>endobj +416 0 obj<</Parent 415 0 R/Title(What Are Full Duplex and Half Duplex?)/Dest[309 0 R/XYZ null 466 null]/Next 417 0 R>>endobj +417 0 obj<</Parent 415 0 R/Title(Flow Control)/Dest[309 0 R/XYZ null 329 null]/Prev 416 0 R/Next 418 0 R>>endobj +418 0 obj<</Parent 415 0 R/Title(What Is a Break?)/Dest[312 0 R/XYZ null 729 null]/Prev 417 0 R>>endobj +419 0 obj<</Parent 411 0 R/Title(Synchronous Communications)/Dest[312 0 R/XYZ null 627 null]/Prev 415 0 R/Next 420 0 R>>endobj +420 0 obj<</Parent 411 0 R/Count -5/First 421 0 R/Last 425 0 R/Title(Accessing Serial Ports)/Dest[312 0 R/XYZ null 338 null]/Prev 419 0 R>>endobj +421 0 obj<</Parent 420 0 R/Title(Serial Port Files)/Dest[312 0 R/XYZ null 255 null]/Next 422 0 R>>endobj +422 0 obj<</Parent 420 0 R/Title(Opening a Serial Port)/Dest[315 0 R/XYZ null 686 null]/Prev 421 0 R/Next 423 0 R>>endobj +423 0 obj<</Parent 420 0 R/Title(Writing Data to the Port)/Dest[318 0 R/XYZ null 599 null]/Prev 422 0 R/Next 424 0 R>>endobj +424 0 obj<</Parent 420 0 R/Title(Reading Data from the Port)/Dest[318 0 R/XYZ null 442 null]/Prev 423 0 R/Next 425 0 R>>endobj +425 0 obj<</Parent 420 0 R/Title(Closing a Serial Port)/Dest[318 0 R/XYZ null 230 null]/Prev 424 0 R>>endobj +426 0 obj<</Parent 408 0 R/Count -1/First 427 0 R/Last 427 0 R/Title(Chapter 2, Configuring the Serial Port)/Dest[324 0 R/XYZ null 743 null]/Prev 411 0 R/Next 433 0 R>>endobj +427 0 obj<</Parent 426 0 R/Count -5/First 428 0 R/Last 432 0 R/Title(The POSIX Terminal Interface)/Dest[324 0 R/XYZ null 384 null]>>endobj +428 0 obj<</Parent 427 0 R/Title(Control Options)/Dest[327 0 R/XYZ null 686 null]/Next 429 0 R>>endobj +429 0 obj<</Parent 427 0 R/Title(Local Options)/Dest[336 0 R/XYZ null 241 null]/Prev 428 0 R/Next 430 0 R>>endobj +430 0 obj<</Parent 427 0 R/Title(Input Options)/Dest[342 0 R/XYZ null 729 null]/Prev 429 0 R/Next 431 0 R>>endobj +431 0 obj<</Parent 427 0 R/Title(Output Options)/Dest[345 0 R/XYZ null 588 null]/Prev 430 0 R/Next 432 0 R>>endobj +432 0 obj<</Parent 427 0 R/Title(Control Characters)/Dest[348 0 R/XYZ null 204 null]/Prev 431 0 R>>endobj +433 0 obj<</Parent 408 0 R/Count -2/First 434 0 R/Last 435 0 R/Title(Chapter 3, MODEM Communications)/Dest[354 0 R/XYZ null 743 null]/Prev 426 0 R/Next 438 0 R>>endobj +434 0 obj<</Parent 433 0 R/Title(What Is a MODEM?)/Dest[354 0 R/XYZ null 371 null]/Next 435 0 R>>endobj +435 0 obj<</Parent 433 0 R/Count -2/First 436 0 R/Last 437 0 R/Title(Communicating With a MODEM)/Dest[354 0 R/XYZ null 214 null]/Prev 434 0 R>>endobj +436 0 obj<</Parent 435 0 R/Title(Standard MODEM Commands)/Dest[360 0 R/XYZ null 729 null]/Next 437 0 R>>endobj +437 0 obj<</Parent 435 0 R/Title(Common MODEM Communication Problems)/Dest[360 0 R/XYZ null 243 null]/Prev 436 0 R>>endobj +438 0 obj<</Parent 408 0 R/Count -2/First 439 0 R/Last 443 0 R/Title(Chapter 4, Advanced Serial Programming)/Dest[366 0 R/XYZ null 743 null]/Prev 433 0 R/Next 447 0 R>>endobj +439 0 obj<</Parent 438 0 R/Count -3/First 440 0 R/Last 442 0 R/Title(Serial Port IOCTLs)/Dest[366 0 R/XYZ null 384 null]/Next 443 0 R>>endobj +440 0 obj<</Parent 439 0 R/Title(Getting the Control Signals)/Dest[369 0 R/XYZ null 357 null]/Next 441 0 R>>endobj +441 0 obj<</Parent 439 0 R/Title(Setting the Control Signals)/Dest[372 0 R/XYZ null 525 null]/Prev 440 0 R/Next 442 0 R>>endobj +442 0 obj<</Parent 439 0 R/Title(Getting the Number of Bytes Available)/Dest[372 0 R/XYZ null 268 null]/Prev 441 0 R>>endobj +443 0 obj<</Parent 438 0 R/Count -3/First 444 0 R/Last 446 0 R/Title(Selecting Input from a Serial Port)/Dest[375 0 R/XYZ null 722 null]/Prev 439 0 R>>endobj +444 0 obj<</Parent 443 0 R/Title(The SELECT System Call)/Dest[375 0 R/XYZ null 520 null]/Next 445 0 R>>endobj +445 0 obj<</Parent 443 0 R/Title(Using the SELECT System Call)/Dest[375 0 R/XYZ null 182 null]/Prev 444 0 R/Next 446 0 R>>endobj +446 0 obj<</Parent 443 0 R/Title(Using SELECT with the X Intrinsics Library)/Dest[378 0 R/XYZ null 170 null]/Prev 445 0 R>>endobj +447 0 obj<</Parent 408 0 R/Count -4/First 448 0 R/Last 451 0 R/Title(Appendix A, Pinouts)/Dest[384 0 R/XYZ null 743 null]/Prev 438 0 R/Next 452 0 R>>endobj +448 0 obj<</Parent 447 0 R/Title(RS-232 Pinouts)/Dest[384 0 R/XYZ null 384 null]/Next 449 0 R>>endobj +449 0 obj<</Parent 447 0 R/Title(RS-422 Pinouts)/Dest[387 0 R/XYZ null 571 null]/Prev 448 0 R/Next 450 0 R>>endobj +450 0 obj<</Parent 447 0 R/Title(RS-574 \(IBM PC/AT\) Pinouts)/Dest[390 0 R/XYZ null 736 null]/Prev 449 0 R/Next 451 0 R>>endobj +451 0 obj<</Parent 447 0 R/Title(SGI Pinouts)/Dest[390 0 R/XYZ null 431 null]/Prev 450 0 R>>endobj +452 0 obj<</Parent 408 0 R/Count -1/First 453 0 R/Last 453 0 R/Title(Appendix B, ASCII Control Codes)/Dest[396 0 R/XYZ null 743 null]/Prev 447 0 R>>endobj +453 0 obj<</Parent 452 0 R/Title(Control Codes)/Dest[396 0 R/XYZ null 384 null]>>endobj +454 0 obj<</Type/Catalog/Pages 287 0 R/Names 233 0 R/PageLayout/SinglePage/Outlines 408 0 R/OpenAction[294 0 R/XYZ null null null]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</P(eltit)>>2<</S/r>>4<</S/D>>]>>>>endobj +xref +0 455 +0000000000 65535 f +0000000015 00000 n +0000000239 00000 n +0000001796 00000 n +0000001870 00000 n +0000001952 00000 n +0000002030 00000 n +0000002107 00000 n +0000002186 00000 n +0000002269 00000 n +0000002350 00000 n +0000002435 00000 n +0000002494 00000 n +0000002599 00000 n +0000002704 00000 n +0000002809 00000 n +0000002914 00000 n +0000003019 00000 n +0000003124 00000 n +0000003229 00000 n +0000003334 00000 n +0000003439 00000 n +0000003544 00000 n +0000003649 00000 n +0000003754 00000 n +0000003859 00000 n +0000003964 00000 n +0000004069 00000 n +0000004174 00000 n +0000004279 00000 n +0000004384 00000 n +0000004489 00000 n +0000004594 00000 n +0000004699 00000 n +0000004804 00000 n +0000004909 00000 n +0000005014 00000 n +0000005119 00000 n +0000005224 00000 n +0000005423 00000 n +0000005472 00000 n +0000005557 00000 n +0000005606 00000 n +0000005691 00000 n +0000005740 00000 n +0000005823 00000 n +0000005872 00000 n +0000005956 00000 n +0000006001 00000 n +0000006106 00000 n +0000006209 00000 n +0000006313 00000 n +0000006418 00000 n +0000006523 00000 n +0000006628 00000 n +0000006733 00000 n +0000006799 00000 n +0000006904 00000 n +0000007009 00000 n +0000007114 00000 n +0000007219 00000 n +0000007324 00000 n +0000007376 00000 n +0000007481 00000 n +0000007505 00000 n +0000007609 00000 n +0000007714 00000 n +0000007819 00000 n +0000007924 00000 n +0000008029 00000 n +0000008134 00000 n +0000008193 00000 n +0000008297 00000 n +0000008401 00000 n +0000008506 00000 n +0000008611 00000 n +0000008716 00000 n +0000008821 00000 n +0000008926 00000 n +0000009031 00000 n +0000009136 00000 n +0000009241 00000 n +0000009346 00000 n +0000009451 00000 n +0000009556 00000 n +0000009661 00000 n +0000009766 00000 n +0000009871 00000 n +0000009976 00000 n +0000010081 00000 n +0000010186 00000 n +0000010291 00000 n +0000010396 00000 n +0000010501 00000 n +0000010606 00000 n +0000010711 00000 n +0000010816 00000 n +0000010921 00000 n +0000011026 00000 n +0000011131 00000 n +0000011236 00000 n +0000011342 00000 n +0000011448 00000 n +0000011554 00000 n +0000011660 00000 n +0000011766 00000 n +0000011872 00000 n +0000011978 00000 n +0000012084 00000 n +0000012190 00000 n +0000012296 00000 n +0000012402 00000 n +0000012508 00000 n +0000012614 00000 n +0000012720 00000 n +0000012826 00000 n +0000012932 00000 n +0000013038 00000 n +0000013144 00000 n +0000013250 00000 n +0000013356 00000 n +0000013462 00000 n +0000013568 00000 n +0000013674 00000 n +0000013780 00000 n +0000013886 00000 n +0000013992 00000 n +0000014098 00000 n +0000014204 00000 n +0000014309 00000 n +0000014415 00000 n +0000014521 00000 n +0000014627 00000 n +0000014733 00000 n +0000014839 00000 n +0000014945 00000 n +0000015051 00000 n +0000015157 00000 n +0000015263 00000 n +0000015369 00000 n +0000015475 00000 n +0000015581 00000 n +0000015687 00000 n +0000015793 00000 n +0000015899 00000 n +0000016005 00000 n +0000016111 00000 n +0000016217 00000 n +0000016323 00000 n +0000016428 00000 n +0000016534 00000 n +0000016640 00000 n +0000016746 00000 n +0000016852 00000 n +0000016958 00000 n +0000017064 00000 n +0000017170 00000 n +0000017276 00000 n +0000017382 00000 n +0000017488 00000 n +0000017594 00000 n +0000017700 00000 n +0000017806 00000 n +0000017912 00000 n +0000018018 00000 n +0000018124 00000 n +0000018230 00000 n +0000018336 00000 n +0000018441 00000 n +0000018547 00000 n +0000018653 00000 n +0000018759 00000 n +0000018865 00000 n +0000018971 00000 n +0000019077 00000 n +0000019183 00000 n +0000019289 00000 n +0000019395 00000 n +0000019501 00000 n +0000019607 00000 n +0000019713 00000 n +0000019819 00000 n +0000019925 00000 n +0000020031 00000 n +0000020137 00000 n +0000020243 00000 n +0000020349 00000 n +0000020455 00000 n +0000020561 00000 n +0000020667 00000 n +0000020773 00000 n +0000020879 00000 n +0000020985 00000 n +0000021091 00000 n +0000021197 00000 n +0000021303 00000 n +0000021409 00000 n +0000021515 00000 n +0000021621 00000 n +0000021727 00000 n +0000021833 00000 n +0000021939 00000 n +0000022045 00000 n +0000022151 00000 n +0000022257 00000 n +0000022363 00000 n +0000022469 00000 n +0000022575 00000 n +0000022681 00000 n +0000022787 00000 n +0000022893 00000 n +0000022999 00000 n +0000023104 00000 n +0000023210 00000 n +0000023316 00000 n +0000023422 00000 n +0000023528 00000 n +0000023633 00000 n +0000023738 00000 n +0000023842 00000 n +0000023946 00000 n +0000024050 00000 n +0000024154 00000 n +0000024258 00000 n +0000024362 00000 n +0000025575 00000 n +0000025679 00000 n +0000025783 00000 n +0000025888 00000 n +0000025994 00000 n +0000026100 00000 n +0000026205 00000 n +0000026311 00000 n +0000026385 00000 n +0000026419 00000 n +0000026453 00000 n +0000027256 00000 n +0000027305 00000 n +0000027354 00000 n +0000027403 00000 n +0000027451 00000 n +0000027500 00000 n +0000027549 00000 n +0000027598 00000 n +0000027647 00000 n +0000027696 00000 n +0000027745 00000 n +0000027794 00000 n +0000027843 00000 n +0000027892 00000 n +0000027941 00000 n +0000027990 00000 n +0000028039 00000 n +0000028088 00000 n +0000028137 00000 n +0000028186 00000 n +0000028235 00000 n +0000028284 00000 n +0000028333 00000 n +0000028382 00000 n +0000028431 00000 n +0000028480 00000 n +0000028528 00000 n +0000028577 00000 n +0000028626 00000 n +0000028675 00000 n +0000028724 00000 n +0000028773 00000 n +0000028822 00000 n +0000028871 00000 n +0000028920 00000 n +0000028969 00000 n +0000029018 00000 n +0000029067 00000 n +0000029116 00000 n +0000029165 00000 n +0000029214 00000 n +0000029263 00000 n +0000029312 00000 n +0000029361 00000 n +0000029410 00000 n +0000029459 00000 n +0000029508 00000 n +0000029557 00000 n +0000029606 00000 n +0000029655 00000 n +0000029704 00000 n +0000029753 00000 n +0000030142 00000 n +0000030295 00000 n +0000031091 00000 n +0000031112 00000 n +0000031207 00000 n +0000031309 00000 n +0000031329 00000 n +0000031485 00000 n +0000032569 00000 n +0000032591 00000 n +0000032705 00000 n +0000032914 00000 n +0000032935 00000 n +0000033076 00000 n +0000034216 00000 n +0000034238 00000 n +0000034402 00000 n +0000036500 00000 n +0000036522 00000 n +0000036663 00000 n +0000037912 00000 n +0000037934 00000 n +0000038110 00000 n +0000044227 00000 n +0000044249 00000 n +0000044422 00000 n +0000046081 00000 n +0000046103 00000 n +0000046253 00000 n +0000047480 00000 n +0000047502 00000 n +0000047652 00000 n +0000049062 00000 n +0000049084 00000 n +0000049198 00000 n +0000049407 00000 n +0000049428 00000 n +0000049587 00000 n +0000050471 00000 n +0000050492 00000 n +0000050642 00000 n +0000051772 00000 n +0000051794 00000 n +0000051953 00000 n +0000053579 00000 n +0000053601 00000 n +0000053760 00000 n +0000055100 00000 n +0000055122 00000 n +0000055291 00000 n +0000056329 00000 n +0000056350 00000 n +0000056509 00000 n +0000057874 00000 n +0000057896 00000 n +0000058055 00000 n +0000059625 00000 n +0000059647 00000 n +0000059806 00000 n +0000061142 00000 n +0000061164 00000 n +0000061323 00000 n +0000062638 00000 n +0000062660 00000 n +0000062833 00000 n +0000064559 00000 n +0000064581 00000 n +0000064731 00000 n +0000065565 00000 n +0000065586 00000 n +0000065718 00000 n +0000066892 00000 n +0000066914 00000 n +0000067073 00000 n +0000068393 00000 n +0000068415 00000 n +0000068529 00000 n +0000068744 00000 n +0000068765 00000 n +0000068938 00000 n +0000069980 00000 n +0000070001 00000 n +0000070160 00000 n +0000071520 00000 n +0000071542 00000 n +0000071692 00000 n +0000072640 00000 n +0000072661 00000 n +0000072811 00000 n +0000074261 00000 n +0000074283 00000 n +0000074433 00000 n +0000075576 00000 n +0000075598 00000 n +0000075739 00000 n +0000076413 00000 n +0000076434 00000 n +0000076596 00000 n +0000078373 00000 n +0000078395 00000 n +0000078557 00000 n +0000081025 00000 n +0000081047 00000 n +0000081209 00000 n +0000084804 00000 n +0000084826 00000 n +0000084979 00000 n +0000086560 00000 n +0000086582 00000 n +0000086723 00000 n +0000087617 00000 n +0000087638 00000 n +0000087761 00000 n +0000089013 00000 n +0000089035 00000 n +0000089191 00000 n +0000092602 00000 n +0000092624 00000 n +0000092780 00000 n +0000093199 00000 n +0000093220 00000 n +0000093275 00000 n +0000093380 00000 n +0000093493 00000 n +0000093672 00000 n +0000093791 00000 n +0000093943 00000 n +0000094036 00000 n +0000094200 00000 n +0000094325 00000 n +0000094438 00000 n +0000094542 00000 n +0000094669 00000 n +0000094815 00000 n +0000094920 00000 n +0000095042 00000 n +0000095167 00000 n +0000095294 00000 n +0000095403 00000 n +0000095578 00000 n +0000095717 00000 n +0000095820 00000 n +0000095934 00000 n +0000096048 00000 n +0000096163 00000 n +0000096269 00000 n +0000096437 00000 n +0000096541 00000 n +0000096691 00000 n +0000096802 00000 n +0000096925 00000 n +0000097100 00000 n +0000097242 00000 n +0000097357 00000 n +0000097485 00000 n +0000097610 00000 n +0000097768 00000 n +0000097878 00000 n +0000098007 00000 n +0000098137 00000 n +0000098293 00000 n +0000098395 00000 n +0000098510 00000 n +0000098639 00000 n +0000098738 00000 n +0000098893 00000 n +0000098981 00000 n +trailer +<</Size 455/Root 454 0 R/Info 1 0 R>> +startxref +99209 +%%EOF diff --git a/licence.txt b/licence.txt new file mode 100644 index 0000000..ecd9d35 --- /dev/null +++ b/licence.txt @@ -0,0 +1,361 @@ +comport - PD External for the serial Ports + + + +Institute for Electronic Music and Acoustics +Copyright (C) 1998-2005 Winfried Ritsch + +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. (see below) + +--------------------------- GPL.TXT ------------------------- + + + 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) 19yy <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) 19yy 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. + diff --git a/makefile b/makefile new file mode 100644 index 0000000..761d12e --- /dev/null +++ b/makefile @@ -0,0 +1,104 @@ +# comport PD External Unix(Linux)/Windows +# +# IEM - Institute for Electronic Music and Acoustic, Graz +# +# Author: Winfried Ritsch +# Maintainer: Win +# +# Licence: GPL - Gnu Public Licence + + +current: pd_nt + echo make pd_linux, pd_nt, pd_irix5, or pd_irix6 + + +# ----------------------- NT ----------------------- +pd_nt: comport.dll bird.dll + +.SUFFIXES: .dll + +PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo /DWIN2000
+ +VC="C:\Programme\Microsoft Visual Studio\Vc98"
+PDROOT="C:\Programme\pd"
+
+PDNTINCLUDE = /I. /I$(PDROOT)\tcl\include /I$(PDROOT)\src /I$(VC)\include
+ +PDNTLDIR = $(VC)\lib +PDNTLIB = $(PDNTLDIR)\libc.lib \ + $(PDNTLDIR)\oldnames.lib \ + $(PDNTLDIR)\kernel32.lib \ + $(PDROOT)\bin\pd.lib + +.c.dll: + cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c + link /dll /export:$*_setup $*.obj $(PDNTLIB) + +# ----------------------- IRIX 5.x ----------------------- + +pd_irix5: comport.pd_irix5 bird.pd_irix5 + +.SUFFIXES: .pd_irix5 + +SGICFLAGS5 = -o32 -DPD -DSGI -O2 + + +SGIINCLUDE = -I../../src + +.c.pd_irix5: + cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c + ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o + rm $*.o + +# ----------------------- IRIX 6.x ----------------------- + +pd_irix6: comport.pd_irix6 bird.pd_irix6 + +.SUFFIXES: .pd_irix6 + +SGICFLAGS6 = -DPD -DSGI -n32 \ + -OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \ + -Ofast=ip32 + +SGICFLAGS5 = -DPD -O2 -DSGI + +SGIINCLUDE = -I/../../src + +.c.pd_irix6: + cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c + ld -elf -shared -rdata_shared -o $*.pd_irix6 $*.o + rm $*.o + +# ----------------------- LINUX i386 ----------------------- + +pd_linux: comport.pd_linux bird.pd_linux + +.SUFFIXES: .pd_linux + +LINUXCFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer \ + -Wall -W -Wshadow -Wstrict-prototypes -Werror \ + -Wno-unused -Wno-parentheses -Wno-switch + +LINUXINCLUDE = -I../../src + +.c.pd_linux: + cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c + ld -export_dynamic -shared -o $*.pd_linux $*.o -lc -lm + strip --strip-unneeded $*.pd_linux + rm $*.o + + +# ---------- TEST ---------- + +TESTCFLAGS = $(LINUXCFLAGS) +LIBS = -lc -lm + + +test: testser.o bird.o + gcc -o test testser.o bird.o $(LIBS) + +tester.o: testser.c + gcc -c -o testser.o testser.c $(TESTCFLAGS) + +bird.o: bird.c + gcc -c -o bird.o bird.c $(TESTCFLAGS) diff --git a/pd_bird.bat b/pd_bird.bat new file mode 100644 index 0000000..3c95436 --- /dev/null +++ b/pd_bird.bat @@ -0,0 +1,5 @@ +echo Hallo starte nun pd
+
+C:\data\pd\bin\pd -verbose -nomidi testbird.pd
+
+echo bye...
\ No newline at end of file diff --git a/pd_comport.bat b/pd_comport.bat new file mode 100644 index 0000000..497fbee --- /dev/null +++ b/pd_comport.bat @@ -0,0 +1,5 @@ +echo Hallo starte nun pd
+
+C:\Programme\pd\bin\pd -verbose -nomidi testcomport.pd
+
+echo bye...
\ No newline at end of file diff --git a/testbird.pd b/testbird.pd new file mode 100644 index 0000000..03b18fb --- /dev/null +++ b/testbird.pd @@ -0,0 +1,96 @@ +#N canvas 231 237 720 492 10; +#X obj 134 195 bird; +#X floatatom 203 248 4 0 0; +#X msg 117 58 set POINT; +#X msg 19 191 bang; +#X obj 188 197 comport 1 9600; +#X msg 28 58 set STREAM; +#X floatatom 51 329 7 0 0; +#X floatatom 71 360 7 0 0; +#X floatatom 92 394 7 0 0; +#X floatatom 113 333 7 0 0; +#X floatatom 133 362 7 0 0; +#X floatatom 155 395 7 0 0; +#X text 406 121 comment; +#X text 63 37 operationg mode; +#X floatatom 177 331 7 0 0; +#X floatatom 197 362 7 0 0; +#X floatatom 218 396 7 0 0; +#X floatatom 239 335 7 0 0; +#X floatatom 259 364 7 0 0; +#X floatatom 281 397 7 0 0; +#X msg 29 90 set RUN; +#X msg 97 92 set SLEEP; +#X text 11 171 data point; +#X obj 349 227 s birdctl; +#X obj 193 130 r birdctl; +#X obj 51 147 s birdctl; +#X obj 51 292 unpack 1 2 3 4 5 6 7 8 9 10 11 12; +#X text 479 38 3 floats; +#X text 479 65 9 floats; +#X text 480 89 3 floats; +#X text 483 115 4 floats; +#X text 481 137 6 floats; +#X text 480 167 12 floats; +#X text 488 192 7 floats; +#X text 353 16 DATA MODES; +#X text 350 254 SETTINGS; +#X msg 418 259 set AngleAlign1 0 0 0 0 0 0; +#X msg 417 288 set AngleAlign2 0 0 0; +#X msg 381 42 set ANGLES; +#X msg 381 64 set MATRIX; +#X msg 381 87 set POSITION; +#X msg 381 110 set QUARTER; +#X msg 384 139 set POSANG; +#X msg 380 165 set POSMAT; +#X msg 382 190 set POSQUARTER; +#X msg 420 314 set Hemisphere 0 0; +#X msg 420 337 set RefFrame1 0 0 0 0 0 0; +#X msg 423 362 set RefFrame2 0 0 0; +#X msg 420 386 set RepRate1; +#X msg 420 407 set RepRate2; +#X msg 420 429 set RepRate8; +#X msg 420 451 set RepRate32; +#X obj 341 451 s birdctl; +#X msg 195 154 verbose 1; +#X msg 196 175 verbose 0; +#X connect 0 0 26 0; +#X connect 0 1 1 0; +#X connect 0 1 4 0; +#X connect 2 0 25 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 25 0; +#X connect 20 0 25 0; +#X connect 21 0 25 0; +#X connect 24 0 0 0; +#X connect 26 0 6 0; +#X connect 26 1 7 0; +#X connect 26 2 8 0; +#X connect 26 3 9 0; +#X connect 26 4 10 0; +#X connect 26 5 11 0; +#X connect 26 6 14 0; +#X connect 26 7 15 0; +#X connect 26 8 16 0; +#X connect 26 9 17 0; +#X connect 26 10 18 0; +#X connect 26 11 19 0; +#X connect 36 0 52 0; +#X connect 37 0 52 0; +#X connect 38 0 23 0; +#X connect 39 0 23 0; +#X connect 40 0 23 0; +#X connect 41 0 23 0; +#X connect 42 0 23 0; +#X connect 43 0 23 0; +#X connect 44 0 23 0; +#X connect 45 0 52 0; +#X connect 46 0 52 0; +#X connect 47 0 52 0; +#X connect 48 0 52 0; +#X connect 49 0 52 0; +#X connect 50 0 52 0; +#X connect 51 0 52 0; +#X connect 53 0 0 0; +#X connect 54 0 0 0; diff --git a/testbird.sh b/testbird.sh new file mode 100644 index 0000000..bfc65cf --- /dev/null +++ b/testbird.sh @@ -0,0 +1,2 @@ +#!/bin/sh +pd -alsa -alsadev hw:1,1 -inchannels 8 -outchannels 8 -frags 20 testbird.pd diff --git a/testcomport.pd b/testcomport.pd new file mode 100644 index 0000000..bd3db6d --- /dev/null +++ b/testcomport.pd @@ -0,0 +1,78 @@ +#N canvas 199 244 690 400 10; +#X obj 89 121 comport 1 9600; +#X msg 5 103 66; +#X obj 80 251 print; +#X floatatom 187 80 4 0 0; +#X msg 4 61 64; +#X text 4 81 point; +#X text 3 40 stream; +#X msg 5 153 86; +#X text 5 128 position; +#X msg 8 197 70; +#X msg 6 237 71; +#X text 7 180 run; +#X text 6 215 sleep; +#X floatatom 113 159 4 0 0; +#X obj 82 215 spigot; +#X msg 101 188 1; +#X msg 135 189 0; +#X msg 353 37 bits 8; +#X msg 352 61 stopbit 0; +#X msg 351 89 parity 0; +#X msg 352 118 xonxoff 1; +#X msg 352 144 rtscts 0; +#X text 431 92 parity 1=even \, -1=odd \, 0=off; +#X text 431 63 extra stopbit 1=on \, 0=off; +#X text 433 38 databits 5 \, 6 \, 7 \, 8; +#X text 432 9 use exact or higher baudrate; +#X obj 112 96 r comctl; +#X obj 335 169 s comctl; +#X text 433 117 use handshake xon/off 1=on 0=off; +#X text 431 143 cts/rts hardwarehandshake 1=on 0=off; +#X msg 345 210 pollintervall 1; +#X text 461 211 set pollintervall for read in ms; +#X text 461 225 (default is 1 tick 1ms); +#X msg 246 264 close; +#X msg 251 288 open 1; +#X msg 353 12 baud 10000; +#X text 312 261 Close Serial port; +#X text 315 292 Open seriel board Nr (0=COM1 \, 1=COM2 \, ...); +#X msg 238 342 devicename /dev/ttyS1; +#X text 232 363 Danger !!! you can open every file in your system and +maybe if suid is root damage the system.; +#X text 233 324 set devicename for actuell port \, then close and open +again; +#X obj 240 78 spigot; +#X msg 259 51 1; +#X msg 293 52 0; +#X obj 235 25 key; +#X text 2 22 eg. for flock of bird:; +#X text 235 312 never should be needed except for sys admins (only +unix); +#X msg 269 10 baud 300; +#X connect 0 0 13 0; +#X connect 0 0 14 0; +#X connect 1 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 7 0 0 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 14 0 2 0; +#X connect 15 0 14 1; +#X connect 16 0 14 1; +#X connect 17 0 27 0; +#X connect 18 0 27 0; +#X connect 19 0 27 0; +#X connect 20 0 27 0; +#X connect 21 0 27 0; +#X connect 26 0 0 0; +#X connect 30 0 27 0; +#X connect 33 0 27 0; +#X connect 34 0 27 0; +#X connect 35 0 27 0; +#X connect 41 0 3 0; +#X connect 42 0 41 1; +#X connect 43 0 41 1; +#X connect 44 0 41 0; +#X connect 47 0 27 0; diff --git a/testcomport.sh b/testcomport.sh new file mode 100644 index 0000000..c7ad1e9 --- /dev/null +++ b/testcomport.sh @@ -0,0 +1,2 @@ +#!/bin/sh +pd -alsa -alsadev hw:1,1 -inchannels 8 -outchannels 8 -frags 15 testcomport.pd diff --git a/vcmakefile.dsp b/vcmakefile.dsp new file mode 100644 index 0000000..c3af30f --- /dev/null +++ b/vcmakefile.dsp @@ -0,0 +1,85 @@ +# Microsoft Developer Studio Project File - Name="vcmakefile" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=vcmakefile - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "vcmakefile.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "vcmakefile.mak" CFG="vcmakefile - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "vcmakefile - Win32 Release" (basierend auf "Win32 (x86) External Target")
+!MESSAGE "vcmakefile - Win32 Debug" (basierend auf "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "vcmakefile - Win32 Release"
+
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Cmd_Line "NMAKE /f makefile"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile.exe"
+# PROP BASE Bsc_Name "makefile.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Cmd_Line "NMAKE /f makefile"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "vcmakefile.exe"
+# PROP Bsc_Name "vcmakefile.bsc"
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "vcmakefile - Win32 Debug"
+
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Cmd_Line "NMAKE /f makefile"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile.exe"
+# PROP BASE Bsc_Name "makefile.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Cmd_Line "NMAKE /f makefile"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "vcmakefile.exe"
+# PROP Bsc_Name "vcmakefile.bsc"
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "vcmakefile - Win32 Release"
+# Name "vcmakefile - Win32 Debug"
+
+!IF "$(CFG)" == "vcmakefile - Win32 Release"
+
+!ELSEIF "$(CFG)" == "vcmakefile - Win32 Debug"
+
+!ENDIF
+
+# Begin Source File
+
+SOURCE=.\makefile
+# End Source File
+# End Target
+# End Project
diff --git a/vcmakefile.dsw b/vcmakefile.dsw new file mode 100644 index 0000000..0a9cda0 --- /dev/null +++ b/vcmakefile.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "vcmakefile"=.\vcmakefile.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/vcmakefile.ncb b/vcmakefile.ncb Binary files differnew file mode 100644 index 0000000..bde6bd9 --- /dev/null +++ b/vcmakefile.ncb diff --git a/vcmakefile.opt b/vcmakefile.opt Binary files differnew file mode 100644 index 0000000..5771755 --- /dev/null +++ b/vcmakefile.opt diff --git a/vcmakefile.plg b/vcmakefile.plg new file mode 100644 index 0000000..82ea7aa --- /dev/null +++ b/vcmakefile.plg @@ -0,0 +1,29 @@ +<html>
+<body>
+<pre>
+<h1>Erstellungsprotokoll</h1>
+<h3>
+--------------------Konfiguration: vcmakefile - Win32 Debug--------------------
+</h3>
+
+
+Microsoft (R) Program Maintenance-Dienstprogramm: Version 6.00.8168.0
+Copyright (C) Microsoft Corp 1988-1998. Alle Rechte vorbehalten.
+
+ cl /W3 /WX /DNT /DPD /nologo /DWIN2000 /I. /I"C:\Programme\pd"\tcl\include /I"C:\Programme\pd"\src /I"C:\Programme\Microsoft Visual Studio\Vc98"\include /c comport.c
+comport.c
+ link /dll /export:comport_setup comport.obj "C:\Programme\Microsoft Visual Studio\Vc98"\lib\libc.lib "C:\Programme\Microsoft Visual Studio\Vc98"\lib\oldnames.lib "C:\Programme\Microsoft Visual Studio\Vc98"\lib\kernel32.lib "C:\Programme\pd"\bin\pd.lib
+Microsoft (R) Incremental Linker Version 6.00.8168
+Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
+
+ Bibliothek comport.lib und Objekt comport.exp wird erstellt
+ echo make pd_linux, pd_nt, pd_irix5, or pd_irix6
+make pd_linux, pd_nt, pd_irix5, or pd_irix6
+
+
+
+<h3>Ergebnisse</h3>
+vcmakefile.exe - 0 Fehler, 0 Warnung(en)
+</pre>
+</body>
+</html>
|