From 8cb2432c773fb688c6d790156b62c0d92440a414 Mon Sep 17 00:00:00 2001 From: karthikmv Date: Tue, 12 Jul 2022 01:08:04 +0530 Subject: [PATCH] init --- .gitignore | 57 + COPYING | 675 ++++ DBServer/ANALOG_MEASUREMENTS.txt | 398 +++ DBServer/DIGITAL_MEASUREMENTS.txt | 0 DBServer/Db.sql | 214 ++ DBServer/Doxyfile | 1285 ++++++++ DBServer/FREQUENCY_MEASUREMENTS.txt | 398 +++ DBServer/Makefile | 70 + DBServer/PHASOR_MEASUREMENTS.txt | 398 +++ DBServer/RECEIVED_FRAME_TIME.txt | 398 +++ DBServer/Sample DBConnect.c | 145 + DBServer/cfg.bin | Bin 0 -> 94 bytes DBServer/connections.c | 271 ++ DBServer/connections.h | 57 + DBServer/dallocate.c | 112 + DBServer/dallocate.h | 37 + DBServer/dbserver.c | 52 + DBServer/global.h | 59 + DBServer/parser.c | 1837 +++++++++++ DBServer/parser.h | 137 + DBServer/recreate.c | 645 ++++ DBServer/recreate.h | 38 + PMUSimulator/CfgFunction.c | 1252 +++++++ PMUSimulator/CfgFunction.h | 91 + PMUSimulator/CfgGuiFunctions.c | 2864 +++++++++++++++++ PMUSimulator/CfgGuiFunctions.h | 105 + ... Floating Point - 3 phasors, 2 analogs.csv | 712 ++++ ...- Integer Point - 3 phasors, 2 analogs.csv | 148 + ...- Integer Point - 3 phasors, 2 analogs.csv | 581 ++++ ... Floating Point - 3 phasors, 2 analogs.csv | 439 +++ ... Floating Point - 5 phasors, 3 analogs.csv | 712 ++++ ...- Integer Point - 5 phasors, 3 analogs.csv | 148 + ...- Integer Point - 5 phasors, 3 analogs.csv | 581 ++++ ... Floating Point - 5 phasors, 3 analogs.csv | 439 +++ PMUSimulator/Doxyfile | 1285 ++++++++ PMUSimulator/Makefile | 98 + PMUSimulator/PmuGui.c | 1063 ++++++ PMUSimulator/PmuGui.h | 153 + PMUSimulator/ServerFunction.c | 1961 +++++++++++ PMUSimulator/ServerFunction.h | 116 + PMUSimulator/ShearedMemoryStructure.h | 48 + PMUSimulator/function.c | 240 ++ PMUSimulator/function.h | 64 + PMUSimulator/images/PMU.desktop | 9 + PMUSimulator/images/PSLab.PNG | Bin 0 -> 673061 bytes PMUSimulator/images/PmuLogo.png | Bin 0 -> 44773 bytes PMUSimulator/images/PmuLogo1.png | Bin 0 -> 16820 bytes PMUSimulator/images/logo.png | Bin 0 -> 2405 bytes PMUSimulator/pmu.c | 304 ++ PMUSimulator/pmu.glade | 454 +++ PMUSimulator/pmu.xml | 454 +++ PMUSimulator/pmu.xml$ | 454 +++ README | 275 ++ Release Notes 1.3.1 | 78 + change.log | 209 ++ iPDC/Doxyfile | 1285 ++++++++ iPDC/Makefile | 94 + iPDC/align_sort.c | 1016 ++++++ iPDC/align_sort.h | 79 + iPDC/connections.c | 623 ++++ iPDC/connections.h | 109 + iPDC/dallocate.c | 170 + iPDC/dallocate.h | 43 + iPDC/global.h | 74 + iPDC/iPDC.glade | 546 ++++ iPDC/iPDC.xml | 546 ++++ iPDC/iPDC.xml$ | 546 ++++ iPDC/images/PSLab.PNG | Bin 0 -> 272332 bytes iPDC/images/iPDC.desktop | 9 + iPDC/images/ipdcLogo.png | Bin 0 -> 19296 bytes iPDC/images/ipdcLogo1.png | Bin 0 -> 14973 bytes iPDC/images/logo.png | Bin 0 -> 2787 bytes iPDC/ipdc.c | 315 ++ iPDC/ipdcGui.c | 2633 +++++++++++++++ iPDC/ipdcGui.h | 171 + iPDC/new_pmu_or_pdc.c | 1591 +++++++++ iPDC/new_pmu_or_pdc.h | 68 + iPDC/parser.c | 1548 +++++++++ iPDC/parser.h | 169 + iPDC/recreate.c | 879 +++++ iPDC/recreate.h | 44 + 81 files changed, 35178 insertions(+) create mode 100644 .gitignore create mode 100755 COPYING create mode 100644 DBServer/ANALOG_MEASUREMENTS.txt create mode 100644 DBServer/DIGITAL_MEASUREMENTS.txt create mode 100755 DBServer/Db.sql create mode 100755 DBServer/Doxyfile create mode 100644 DBServer/FREQUENCY_MEASUREMENTS.txt create mode 100755 DBServer/Makefile create mode 100644 DBServer/PHASOR_MEASUREMENTS.txt create mode 100644 DBServer/RECEIVED_FRAME_TIME.txt create mode 100755 DBServer/Sample DBConnect.c create mode 100644 DBServer/cfg.bin create mode 100755 DBServer/connections.c create mode 100755 DBServer/connections.h create mode 100755 DBServer/dallocate.c create mode 100755 DBServer/dallocate.h create mode 100755 DBServer/dbserver.c create mode 100755 DBServer/global.h create mode 100755 DBServer/parser.c create mode 100755 DBServer/parser.h create mode 100755 DBServer/recreate.c create mode 100755 DBServer/recreate.h create mode 100755 PMUSimulator/CfgFunction.c create mode 100755 PMUSimulator/CfgFunction.h create mode 100755 PMUSimulator/CfgGuiFunctions.c create mode 100755 PMUSimulator/CfgGuiFunctions.h create mode 100755 PMUSimulator/DataDir/50Hz_measurement_files/Polar - Floating Point - 3 phasors, 2 analogs.csv create mode 100755 PMUSimulator/DataDir/50Hz_measurement_files/Polar - Integer Point - 3 phasors, 2 analogs.csv create mode 100755 PMUSimulator/DataDir/50Hz_measurement_files/Rect - Integer Point - 3 phasors, 2 analogs.csv create mode 100755 PMUSimulator/DataDir/50Hz_measurement_files/Rect Floating Point - 3 phasors, 2 analogs.csv create mode 100755 PMUSimulator/DataDir/60Hz_measurement_files/Polar - Floating Point - 5 phasors, 3 analogs.csv create mode 100755 PMUSimulator/DataDir/60Hz_measurement_files/Polar - Integer Point - 5 phasors, 3 analogs.csv create mode 100755 PMUSimulator/DataDir/60Hz_measurement_files/Rect - Integer Point - 5 phasors, 3 analogs.csv create mode 100755 PMUSimulator/DataDir/60Hz_measurement_files/Rect Floating Point - 5 phasors, 3 analogs.csv create mode 100755 PMUSimulator/Doxyfile create mode 100755 PMUSimulator/Makefile create mode 100755 PMUSimulator/PmuGui.c create mode 100755 PMUSimulator/PmuGui.h create mode 100755 PMUSimulator/ServerFunction.c create mode 100755 PMUSimulator/ServerFunction.h create mode 100755 PMUSimulator/ShearedMemoryStructure.h create mode 100755 PMUSimulator/function.c create mode 100755 PMUSimulator/function.h create mode 100755 PMUSimulator/images/PMU.desktop create mode 100755 PMUSimulator/images/PSLab.PNG create mode 100755 PMUSimulator/images/PmuLogo.png create mode 100755 PMUSimulator/images/PmuLogo1.png create mode 100755 PMUSimulator/images/logo.png create mode 100755 PMUSimulator/pmu.c create mode 100755 PMUSimulator/pmu.glade create mode 100644 PMUSimulator/pmu.xml create mode 100644 PMUSimulator/pmu.xml$ create mode 100755 README create mode 100755 Release Notes 1.3.1 create mode 100755 change.log create mode 100755 iPDC/Doxyfile create mode 100755 iPDC/Makefile create mode 100755 iPDC/align_sort.c create mode 100755 iPDC/align_sort.h create mode 100755 iPDC/connections.c create mode 100755 iPDC/connections.h create mode 100755 iPDC/dallocate.c create mode 100755 iPDC/dallocate.h create mode 100755 iPDC/global.h create mode 100755 iPDC/iPDC.glade create mode 100644 iPDC/iPDC.xml create mode 100644 iPDC/iPDC.xml$ create mode 100755 iPDC/images/PSLab.PNG create mode 100755 iPDC/images/iPDC.desktop create mode 100755 iPDC/images/ipdcLogo.png create mode 100755 iPDC/images/ipdcLogo1.png create mode 100755 iPDC/images/logo.png create mode 100755 iPDC/ipdc.c create mode 100755 iPDC/ipdcGui.c create mode 100755 iPDC/ipdcGui.h create mode 100755 iPDC/new_pmu_or_pdc.c create mode 100755 iPDC/new_pmu_or_pdc.h create mode 100755 iPDC/parser.c create mode 100755 iPDC/parser.h create mode 100755 iPDC/recreate.c create mode 100755 iPDC/recreate.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..188ee3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +PMU +iPDC/iPDC +DBServer/DBServer +.vscode/ \ No newline at end of file diff --git a/COPYING b/COPYING new file mode 100755 index 0000000..10926e8 --- /dev/null +++ b/COPYING @@ -0,0 +1,675 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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 Lesser General +Public License instead of this License. But first, please read +. + diff --git a/DBServer/ANALOG_MEASUREMENTS.txt b/DBServer/ANALOG_MEASUREMENTS.txt new file mode 100644 index 0000000..7dfdc5a --- /dev/null +++ b/DBServer/ANALOG_MEASUREMENTS.txt @@ -0,0 +1,398 @@ + 1,1,1657041650,880000,"B ",0.006000 + 1,1,1657041650,920000,"B ",0.006000 + 1,1,1657041650,960000,"B ",0.006000 + 1,1,1657041651,0,"B ",0.006000 + 1,1,1657041651,40000,"B ",0.006000 + 1,1,1657041651,80000,"B ",0.006000 + 1,1,1657041651,120000,"B ",0.006000 + 1,1,1657041651,160000,"B ",0.006000 + 1,1,1657041651,200000,"B ",0.006000 + 1,1,1657041651,240000,"B ",0.006000 + 1,1,1657041651,280000,"B ",0.006000 + 1,1,1657041651,320000,"B ",0.006000 + 1,1,1657041651,360000,"B ",0.006000 + 1,1,1657041651,400000,"B ",0.006000 + 1,1,1657041651,440000,"B ",0.006000 + 1,1,1657041651,480000,"B ",0.006000 + 1,1,1657041651,520000,"B ",0.006000 + 1,1,1657041651,560000,"B ",0.006000 + 1,1,1657041651,600000,"B ",0.006000 + 1,1,1657041651,640000,"B ",0.006000 + 1,1,1657041651,680000,"B ",0.006000 + 1,1,1657041651,720000,"B ",0.006000 + 1,1,1657041651,760000,"B ",0.006000 + 1,1,1657041651,800000,"B ",0.006000 + 1,1,1657041651,840000,"B ",0.006000 + 1,1,1657041651,880000,"B ",0.006000 + 1,1,1657041651,920000,"B ",0.006000 + 1,1,1657041651,960000,"B ",0.006000 + 1,1,1657041652,0,"B ",0.006000 + 1,1,1657041652,40000,"B ",0.006000 + 1,1,1657041652,80000,"B ",0.006000 + 1,1,1657041652,120000,"B ",0.006000 + 1,1,1657041652,160000,"B ",0.006000 + 1,1,1657041652,200000,"B ",0.006000 + 1,1,1657041652,240000,"B ",0.006000 + 1,1,1657041652,280000,"B ",0.006000 + 1,1,1657041652,320000,"B ",0.006000 + 1,1,1657041652,360000,"B ",0.006000 + 1,1,1657041652,400000,"B ",0.006000 + 1,1,1657041652,440000,"B ",0.006000 + 1,1,1657041652,480000,"B ",0.006000 + 1,1,1657041652,520000,"B ",0.006000 + 1,1,1657041652,560000,"B ",0.006000 + 1,1,1657041652,600000,"B ",0.006000 + 1,1,1657041652,640000,"B ",0.006000 + 1,1,1657041652,680000,"B ",0.006000 + 1,1,1657041652,720000,"B ",0.006000 + 1,1,1657041652,760000,"B ",0.006000 + 1,1,1657041652,800000,"B ",0.006000 + 1,1,1657041652,840000,"B ",0.006000 + 1,1,1657041652,880000,"B ",0.006000 + 1,1,1657041652,920000,"B ",0.006000 + 1,1,1657041652,960000,"B ",0.006000 + 1,1,1657041653,0,"B ",0.006000 + 1,1,1657041653,40000,"B ",0.006000 + 1,1,1657041653,80000,"B ",0.006000 + 1,1,1657041653,120000,"B ",0.006000 + 1,1,1657041653,160000,"B ",0.006000 + 1,1,1657041653,200000,"B ",0.006000 + 1,1,1657041653,240000,"B ",0.006000 + 1,1,1657041653,280000,"B ",0.006000 + 1,1,1657041653,320000,"B ",0.006000 + 1,1,1657041653,360000,"B ",0.006000 + 1,1,1657041653,400000,"B ",0.006000 + 1,1,1657041653,440000,"B ",0.006000 + 1,1,1657041653,480000,"B ",0.006000 + 1,1,1657041653,520000,"B ",0.006000 + 1,1,1657041653,560000,"B ",0.006000 + 1,1,1657041653,600000,"B ",0.006000 + 1,1,1657041653,640000,"B ",0.006000 + 1,1,1657041653,680000,"B ",0.006000 + 1,1,1657041653,720000,"B ",0.006000 + 1,1,1657041653,760000,"B ",0.006000 + 1,1,1657041653,800000,"B ",0.006000 + 1,1,1657041653,840000,"B ",0.006000 + 1,1,1657041653,880000,"B ",0.006000 + 1,1,1657041653,920000,"B ",0.006000 + 1,1,1657041653,960000,"B ",0.006000 + 1,1,1657041654,0,"B ",0.006000 + 1,1,1657041654,40000,"B ",0.006000 + 1,1,1657041654,80000,"B ",0.006000 + 1,1,1657041654,120000,"B ",0.006000 + 1,1,1657041654,160000,"B ",0.006000 + 1,1,1657041654,200000,"B ",0.006000 + 1,1,1657041654,240000,"B ",0.006000 + 1,1,1657041654,280000,"B ",0.006000 + 1,1,1657041654,320000,"B ",0.006000 + 1,1,1657041654,360000,"B ",0.006000 + 1,1,1657041654,400000,"B ",0.006000 + 1,1,1657041654,440000,"B ",0.006000 + 1,1,1657041654,480000,"B ",0.006000 + 1,1,1657041654,520000,"B ",0.006000 + 1,1,1657041654,560000,"B ",0.006000 + 1,1,1657041654,600000,"B ",0.006000 + 1,1,1657041654,640000,"B ",0.006000 + 1,1,1657041654,680000,"B ",0.006000 + 1,1,1657041654,720000,"B ",0.006000 + 1,1,1657041654,760000,"B ",0.006000 + 1,1,1657041654,800000,"B ",0.006000 + 1,1,1657041654,840000,"B ",0.006000 + 1,1,1657041654,880000,"B ",0.006000 + 1,1,1657041654,920000,"B ",0.006000 + 1,1,1657041654,960000,"B ",0.006000 + 1,1,1657041655,0,"B ",0.006000 + 1,1,1657041655,40000,"B ",0.006000 + 1,1,1657041655,80000,"B ",0.006000 + 1,1,1657041655,120000,"B ",0.006000 + 1,1,1657041655,160000,"B ",0.006000 + 1,1,1657041655,200000,"B ",0.006000 + 1,1,1657041655,240000,"B ",0.006000 + 1,1,1657041655,280000,"B ",0.006000 + 1,1,1657041655,320000,"B ",0.006000 + 1,1,1657041655,360000,"B ",0.006000 + 1,1,1657041655,400000,"B ",0.006000 + 1,1,1657041655,440000,"B ",0.006000 + 1,1,1657041655,480000,"B ",0.006000 + 1,1,1657041655,520000,"B ",0.006000 + 1,1,1657041655,560000,"B ",0.006000 + 1,1,1657041655,600000,"B ",0.006000 + 1,1,1657041655,640000,"B ",0.006000 + 1,1,1657041655,680000,"B ",0.006000 + 1,1,1657041655,720000,"B ",0.006000 + 1,1,1657041655,760000,"B ",0.006000 + 1,1,1657041655,800000,"B ",0.006000 + 1,1,1657041655,840000,"B ",0.006000 + 1,1,1657041655,880000,"B ",0.006000 + 1,1,1657041655,920000,"B ",0.006000 + 1,1,1657041655,960000,"B ",0.006000 + 1,1,1657041656,0,"B ",0.006000 + 1,1,1657041656,40000,"B ",0.006000 + 1,1,1657041656,80000,"B ",0.006000 + 1,1,1657041656,120000,"B ",0.006000 + 1,1,1657041656,160000,"B ",0.006000 + 1,1,1657041656,200000,"B ",0.006000 + 1,1,1657041656,240000,"B ",0.006000 + 1,1,1657041656,280000,"B ",0.006000 + 1,1,1657041656,320000,"B ",0.006000 + 1,1,1657041656,360000,"B ",0.006000 + 1,1,1657041656,400000,"B ",0.006000 + 1,1,1657041656,440000,"B ",0.006000 + 1,1,1657041656,480000,"B ",0.006000 + 1,1,1657041656,520000,"B ",0.006000 + 1,1,1657041656,560000,"B ",0.006000 + 1,1,1657041656,600000,"B ",0.006000 + 1,1,1657041656,640000,"B ",0.006000 + 1,1,1657041656,680000,"B ",0.006000 + 1,1,1657041656,720000,"B ",0.006000 + 1,1,1657041656,760000,"B ",0.006000 + 1,1,1657041656,800000,"B ",0.006000 + 1,1,1657041656,840000,"B ",0.006000 + 1,1,1657041656,880000,"B ",0.006000 + 1,1,1657041656,920000,"B ",0.006000 + 1,1,1657041656,960000,"B ",0.006000 + 1,1,1657041657,0,"B ",0.006000 + 1,1,1657041657,40000,"B ",0.006000 + 1,1,1657041657,80000,"B ",0.006000 + 1,1,1657041657,120000,"B ",0.006000 + 1,1,1657041657,160000,"B ",0.006000 + 1,1,1657041657,200000,"B ",0.006000 + 1,1,1657041657,240000,"B ",0.006000 + 1,1,1657041657,280000,"B ",0.006000 + 1,1,1657041657,320000,"B ",0.006000 + 1,1,1657041657,360000,"B ",0.006000 + 1,1,1657041657,400000,"B ",0.006000 + 1,1,1657041657,440000,"B ",0.006000 + 1,1,1657041657,480000,"B ",0.006000 + 1,1,1657041657,520000,"B ",0.006000 + 1,1,1657041657,560000,"B ",0.006000 + 1,1,1657041657,600000,"B ",0.006000 + 1,1,1657041657,640000,"B ",0.006000 + 1,1,1657041657,680000,"B ",0.006000 + 1,1,1657041657,720000,"B ",0.006000 + 1,1,1657041657,760000,"B ",0.006000 + 1,1,1657041657,800000,"B ",0.006000 + 1,1,1657041657,840000,"B ",0.006000 + 1,1,1657041657,880000,"B ",0.006000 + 1,1,1657041657,920000,"B ",0.006000 + 1,1,1657041657,960000,"B ",0.006000 + 1,1,1657041658,0,"B ",0.006000 + 1,1,1657041658,40000,"B ",0.006000 + 1,1,1657041658,80000,"B ",0.006000 + 1,1,1657041658,120000,"B ",0.006000 + 1,1,1657041658,160000,"B ",0.006000 + 1,1,1657041658,200000,"B ",0.006000 + 1,1,1657041658,240000,"B ",0.006000 + 1,1,1657041658,280000,"B ",0.006000 + 1,1,1657041658,320000,"B ",0.006000 + 1,1,1657041658,360000,"B ",0.006000 + 1,1,1657041658,400000,"B ",0.006000 + 1,1,1657041658,440000,"B ",0.006000 + 1,1,1657041658,480000,"B ",0.006000 + 1,1,1657041658,520000,"B ",0.006000 + 1,1,1657041658,560000,"B ",0.006000 + 1,1,1657041658,600000,"B ",0.006000 + 1,1,1657041658,640000,"B ",0.006000 + 1,1,1657041658,680000,"B ",0.006000 + 1,1,1657041658,720000,"B ",0.006000 + 1,1,1657041658,760000,"B ",0.006000 + 1,1,1657041658,800000,"B ",0.006000 + 1,1,1657041658,840000,"B ",0.006000 + 1,1,1657041658,880000,"B ",0.006000 + 1,1,1657041658,920000,"B ",0.006000 + 1,1,1657041658,960000,"B ",0.006000 + 1,1,1657041659,0,"B ",0.006000 + 1,1,1657041659,40000,"B ",0.006000 + 1,1,1657041659,80000,"B ",0.006000 + 1,1,1657041659,120000,"B ",0.006000 + 1,1,1657041659,160000,"B ",0.006000 + 1,1,1657041659,200000,"B ",0.006000 + 1,1,1657041659,240000,"B ",0.006000 + 1,1,1657041659,280000,"B ",0.006000 + 1,1,1657041659,320000,"B ",0.006000 + 1,1,1657041659,360000,"B ",0.006000 + 1,1,1657041659,400000,"B ",0.006000 + 1,1,1657041659,440000,"B ",0.006000 + 1,1,1657041659,480000,"B ",0.006000 + 1,1,1657041659,520000,"B ",0.006000 + 1,1,1657041659,560000,"B ",0.006000 + 1,1,1657041659,600000,"B ",0.006000 + 1,1,1657041659,640000,"B ",0.006000 + 1,1,1657041659,680000,"B ",0.006000 + 1,1,1657041659,720000,"B ",0.006000 + 1,1,1657041659,760000,"B ",0.006000 + 1,1,1657041659,800000,"B ",0.006000 + 1,1,1657041659,840000,"B ",0.006000 + 1,1,1657041659,880000,"B ",0.006000 + 1,1,1657041659,920000,"B ",0.006000 + 1,1,1657041659,960000,"B ",0.006000 + 1,1,1657041660,0,"B ",0.006000 + 1,1,1657041660,40000,"B ",0.006000 + 1,1,1657041660,80000,"B ",0.006000 + 1,1,1657041660,120000,"B ",0.006000 + 1,1,1657041660,160000,"B ",0.006000 + 1,1,1657041660,200000,"B ",0.006000 + 1,1,1657041660,240000,"B ",0.006000 + 1,1,1657041660,280000,"B ",0.006000 + 1,1,1657041660,320000,"B ",0.006000 + 1,1,1657041660,360000,"B ",0.006000 + 1,1,1657041660,400000,"B ",0.006000 + 1,1,1657041660,440000,"B ",0.006000 + 1,1,1657041660,480000,"B ",0.006000 + 1,1,1657041660,520000,"B ",0.006000 + 1,1,1657041660,560000,"B ",0.006000 + 1,1,1657041660,600000,"B ",0.006000 + 1,1,1657041660,640000,"B ",0.006000 + 1,1,1657041660,680000,"B ",0.006000 + 1,1,1657041660,720000,"B ",0.006000 + 1,1,1657041660,760000,"B ",0.006000 + 1,1,1657041660,800000,"B ",0.006000 + 1,1,1657041660,840000,"B ",0.006000 + 1,1,1657041660,880000,"B ",0.006000 + 1,1,1657041660,920000,"B ",0.006000 + 1,1,1657041660,960000,"B ",0.006000 + 1,1,1657041661,0,"B ",0.006000 + 1,1,1657041661,40000,"B ",0.006000 + 1,1,1657041661,80000,"B ",0.006000 + 1,1,1657041661,120000,"B ",0.006000 + 1,1,1657041661,160000,"B ",0.006000 + 1,1,1657041661,200000,"B ",0.006000 + 1,1,1657041661,240000,"B ",0.006000 + 1,1,1657041661,280000,"B ",0.006000 + 1,1,1657041661,320000,"B ",0.006000 + 1,1,1657041661,360000,"B ",0.006000 + 1,1,1657041661,400000,"B ",0.006000 + 1,1,1657041661,440000,"B ",0.006000 + 1,1,1657041661,480000,"B ",0.006000 + 1,1,1657041661,520000,"B ",0.006000 + 1,1,1657041661,560000,"B ",0.006000 + 1,1,1657041661,600000,"B ",0.006000 + 1,1,1657041661,640000,"B ",0.006000 + 1,1,1657041661,680000,"B ",0.006000 + 1,1,1657041661,720000,"B ",0.006000 + 1,1,1657041661,760000,"B ",0.006000 + 1,1,1657041661,800000,"B ",0.006000 + 1,1,1657041661,840000,"B ",0.006000 + 1,1,1657041661,880000,"B ",0.006000 + 1,1,1657041661,920000,"B ",0.006000 + 1,1,1657041661,960000,"B ",0.006000 + 1,1,1657041662,0,"B ",0.006000 + 1,1,1657041662,40000,"B ",0.006000 + 1,1,1657041662,80000,"B ",0.006000 + 1,1,1657041662,120000,"B ",0.006000 + 1,1,1657041662,160000,"B ",0.006000 + 1,1,1657041662,200000,"B ",0.006000 + 1,1,1657041662,240000,"B ",0.006000 + 1,1,1657041662,280000,"B ",0.006000 + 1,1,1657041662,320000,"B ",0.006000 + 1,1,1657041662,360000,"B ",0.006000 + 1,1,1657041662,400000,"B ",0.006000 + 1,1,1657041662,440000,"B ",0.006000 + 1,1,1657041662,480000,"B ",0.006000 + 1,1,1657041662,520000,"B ",0.006000 + 1,1,1657041662,560000,"B ",0.006000 + 1,1,1657041662,600000,"B ",0.006000 + 1,1,1657041662,640000,"B ",0.006000 + 1,1,1657041662,680000,"B ",0.006000 + 1,1,1657041662,720000,"B ",0.006000 + 1,1,1657041662,760000,"B ",0.006000 + 1,1,1657041662,800000,"B ",0.006000 + 1,1,1657041662,840000,"B ",0.006000 + 1,1,1657041662,880000,"B ",0.006000 + 1,1,1657041662,920000,"B ",0.006000 + 1,1,1657041662,960000,"B ",0.006000 + 1,1,1657041663,0,"B ",0.006000 + 1,1,1657041663,40000,"B ",0.006000 + 1,1,1657041663,80000,"B ",0.006000 + 1,1,1657041663,120000,"B ",0.006000 + 1,1,1657041663,160000,"B ",0.006000 + 1,1,1657041663,200000,"B ",0.006000 + 1,1,1657041663,240000,"B ",0.006000 + 1,1,1657041663,280000,"B ",0.006000 + 1,1,1657041663,320000,"B ",0.006000 + 1,1,1657041663,360000,"B ",0.006000 + 1,1,1657041663,400000,"B ",0.006000 + 1,1,1657041663,440000,"B ",0.006000 + 1,1,1657041663,480000,"B ",0.006000 + 1,1,1657041663,520000,"B ",0.006000 + 1,1,1657041663,560000,"B ",0.006000 + 1,1,1657041663,600000,"B ",0.006000 + 1,1,1657041663,640000,"B ",0.006000 + 1,1,1657041663,680000,"B ",0.006000 + 1,1,1657041663,720000,"B ",0.006000 + 1,1,1657041663,760000,"B ",0.006000 + 1,1,1657041663,800000,"B ",0.006000 + 1,1,1657041663,840000,"B ",0.006000 + 1,1,1657041663,880000,"B ",0.006000 + 1,1,1657041663,920000,"B ",0.006000 + 1,1,1657041663,960000,"B ",0.006000 + 1,1,1657041664,0,"B ",0.006000 + 1,1,1657041664,40000,"B ",0.006000 + 1,1,1657041664,80000,"B ",0.006000 + 1,1,1657041664,120000,"B ",0.006000 + 1,1,1657041664,160000,"B ",0.006000 + 1,1,1657041664,200000,"B ",0.006000 + 1,1,1657041664,240000,"B ",0.006000 + 1,1,1657041664,280000,"B ",0.006000 + 1,1,1657041664,320000,"B ",0.006000 + 1,1,1657041664,360000,"B ",0.006000 + 1,1,1657041664,400000,"B ",0.006000 + 1,1,1657041664,440000,"B ",0.006000 + 1,1,1657041664,480000,"B ",0.006000 + 1,1,1657041664,520000,"B ",0.006000 + 1,1,1657041664,560000,"B ",0.006000 + 1,1,1657041664,600000,"B ",0.006000 + 1,1,1657041664,640000,"B ",0.006000 + 1,1,1657041664,680000,"B ",0.006000 + 1,1,1657041664,720000,"B ",0.006000 + 1,1,1657041664,760000,"B ",0.006000 + 1,1,1657041664,800000,"B ",0.006000 + 1,1,1657041664,840000,"B ",0.006000 + 1,1,1657041664,880000,"B ",0.006000 + 1,1,1657041664,920000,"B ",0.006000 + 1,1,1657041664,960000,"B ",0.006000 + 1,1,1657041665,0,"B ",0.006000 + 1,1,1657041665,40000,"B ",0.006000 + 1,1,1657041665,80000,"B ",0.006000 + 1,1,1657041665,120000,"B ",0.006000 + 1,1,1657041665,160000,"B ",0.006000 + 1,1,1657041665,200000,"B ",0.006000 + 1,1,1657041665,240000,"B ",0.006000 + 1,1,1657041665,280000,"B ",0.006000 + 1,1,1657041665,320000,"B ",0.006000 + 1,1,1657041665,360000,"B ",0.006000 + 1,1,1657041665,400000,"B ",0.006000 + 1,1,1657041665,440000,"B ",0.006000 + 1,1,1657041665,480000,"B ",0.006000 + 1,1,1657041665,520000,"B ",0.006000 + 1,1,1657041665,560000,"B ",0.006000 + 1,1,1657041665,600000,"B ",0.006000 + 1,1,1657041665,640000,"B ",0.006000 + 1,1,1657041665,680000,"B ",0.006000 + 1,1,1657041665,720000,"B ",0.006000 + 1,1,1657041665,760000,"B ",0.006000 + 1,1,1657041665,800000,"B ",0.006000 + 1,1,1657041665,840000,"B ",0.006000 + 1,1,1657041665,880000,"B ",0.006000 + 1,1,1657041665,920000,"B ",0.006000 + 1,1,1657041665,960000,"B ",0.006000 + 1,1,1657041666,0,"B ",0.006000 + 1,1,1657041666,40000,"B ",0.006000 + 1,1,1657041666,80000,"B ",0.006000 + 1,1,1657041666,120000,"B ",0.006000 + 1,1,1657041666,160000,"B ",0.006000 + 1,1,1657041666,200000,"B ",0.006000 + 1,1,1657041666,240000,"B ",0.006000 + 1,1,1657041666,280000,"B ",0.006000 + 1,1,1657041666,320000,"B ",0.006000 + 1,1,1657041666,360000,"B ",0.006000 + 1,1,1657041666,400000,"B ",0.006000 + 1,1,1657041666,440000,"B ",0.006000 + 1,1,1657041666,480000,"B ",0.006000 + 1,1,1657041666,520000,"B ",0.006000 + 1,1,1657041666,560000,"B ",0.006000 + 1,1,1657041666,600000,"B ",0.006000 + 1,1,1657041666,640000,"B ",0.006000 + 1,1,1657041666,680000,"B ",0.006000 + 1,1,1657041666,720000,"B ",0.006000 + 1,1,1657041666,760000,"B ",0.006000 diff --git a/DBServer/DIGITAL_MEASUREMENTS.txt b/DBServer/DIGITAL_MEASUREMENTS.txt new file mode 100644 index 0000000..e69de29 diff --git a/DBServer/Db.sql b/DBServer/Db.sql new file mode 100755 index 0000000..ba6f386 --- /dev/null +++ b/DBServer/Db.sql @@ -0,0 +1,214 @@ +-- ============================================================================= +-- Db.sql (iPDC Data Structures for MySQL ) +-- +-- iPDC - Phasor Data Concentrator +-- +-- Copyright (C) 2011 Nitesh Pandit +-- Copyright (C) 2011 Kedar V. Khandeparkar +-- +-- 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. +-- +-- Authors: +-- Kedar V. Khandeparkar +-- Nitesh Pandit +-- +-- ============================================================================= + + +-- First execute the following from the command prompt to create database: +-- mysql -uroot -p <"Db.sql" + +-- The following statements are used to create a user with access to the database. +-- Be sure to change the username and password. +-- CREATE USER NewUser IDENTIFIED BY 'MyPassword'; +-- GRANT SELECT, UPDATE, INSERT, DELETE ON iPDC.* TO NewUser; + +SET default_storage_engine=INNODB; +CREATE DATABASE iPDC; +USE iPDC; + + +-- ============================================================================================ +-- This creates Main Configuration Table, +-- This table stores MAIN CONFIGURATION details Like PDC_ID, SOC, TIME BASE, NO. OF PMU, +-- DATA Rate in iPDC Database + +CREATE TABLE MAIN_CFG_TABLE( + PDC_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + TIMEBASE DECIMAL(10) NOT NULL, + NUM_OF_PMU INT NOT NULL, + DATA_RATE INT DEFAULT 0, + PRIMARY KEY (PDC_ID ASC) +); + + +-- ============================================================================================ +-- This creates Sub Configuration Table, +-- This table stores Sub Configuration details Like PDC_ID, PMU_ID, SOC,Fraction of Second, +-- Station Name, No. of Analog channels, No. of Phasor channels in iPDC Database + +CREATE TABLE SUB_CFG_TABLE( + + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + STN VARCHAR(40) NOT NULL, + PHNMR INT DEFAULT 0, + ANNMR INT DEFAULT 0, + DGNMR INT DEFAULT 0, + FNOM INT DEFAULT 0, + PRIMARY KEY (PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID) +); + +-- ============================================================================================ +-- This creates Phasor channel information Table +-- This table stores details about phasor Configuration like PDC_ID, Phasor name, Phasor type, +-- Phasor units in iPDC Database + +CREATE TABLE PHASOR ( + + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + PHASOR_NAMES VARCHAR(32) NOT NULL, + PHASOR_TYPE VARCHAR(3) NOT NULL, + PHUNITS FLOAT(20,6) DEFAULT 1.0, + PRIMARY KEY(PHASOR_NAMES,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) +); + +-- ============================================================================================ +-- This creates ANALOG channel information Table +-- This table stores details about Analog Configuration like PDC_ID, Analog name, Analog type, +-- Analog units in iPDC Database + +CREATE TABLE ANALOG ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + ANALOG_NAMES VARCHAR(32) NOT NULL, + ANALOG_TYPE VARCHAR(6) NOT NULL, + ANUNITS FLOAT(20,6) DEFAULT 1.0, + PRIMARY KEY(ANALOG_NAMES,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); + + +-- ============================================================================================ +-- This creates Digital information Table +-- this table stores details about Digital channel Configuration like Digital Status word etc.. +-- in iPDC Database + +CREATE TABLE DIGITAL ( + + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + DIGITAL_NAMES VARCHAR(32) NOT NULL, + DIGITAL_WORD BIGINT NOT NULL, + PRIMARY KEY(DIGITAL_NAMES,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) +); + +-- ============================================================================================ +-- This creates Phasor Data Table +-- this table stores measurements received from phasor data channel(s) in iPDC Database. + +CREATE TABLE PHASOR_MEASUREMENTS ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + PHASOR_NAME VARCHAR(32) NOT NULL, + PHASOR_AMPLITUDE REAL NOT NULL, + PHASOR_ANGLE REAL NOT NULL, + CONSTRAINT FOREIGN KEY (PHASOR_NAME) REFERENCES PHASOR (PHASOR_NAMES), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) +); + +-- ============================================================================================ +-- This creates Analog Data Table in iPDC database, +-- this table stores measurements received from Analog data channel(s) in iPDC Database. + +CREATE TABLE ANALOG_MEASUREMENTS ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + ANALOG_NAME VARCHAR(32) NOT NULL, + ANALOG_VALUE REAL NOT NULL, + CONSTRAINT FOREIGN KEY (ANALOG_NAME) REFERENCES ANALOG (ANALOG_NAMES), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); + +-- ============================================================================================ +-- This creates "Digital Measurements" Table +-- this table stores measurements received from Digital data channel in iPDC Database. + +CREATE TABLE DIGITAL_MEASUREMENTS ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + DIGITAL_WORD INT NOT NULL, + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); + +-- ============================================================================================ +-- This creates "Frequency Measurements" Table +-- This table stores Frequency measurements received from frequency data channel in iPDC +-- Database. + +CREATE TABLE FREQUENCY_MEASUREMENTS ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + FREQ FLOAT (10, 8) NOT NULL, + DFREQ FLOAT (10, 8) NOT NULL, + PRIMARY KEY(SOC,FRACSEC,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); + +-- ============================================================================================ +-- This creates Received frame Time Table +-- This table stores REceived frame time log in iPDC Database. + +CREATE TABLE RECEIVED_FRAME_TIME ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + FRAME_SOC DECIMAL(10) NOT NULL, + FRAME_FRACSEC DECIMAL(10) NOT NULL, + RECEIVE_SOC DECIMAL(10) NOT NULL, + RECEIVE_FRACSEC DECIMAL(10) NOT NULL, + TIME_DIFF DECIMAL(10) NOT NULL, + PRIMARY KEY(FRAME_SOC,FRAME_FRACSEC,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); +-- ============================================================================================ diff --git a/DBServer/Doxyfile b/DBServer/Doxyfile new file mode 100755 index 0000000..80b247d --- /dev/null +++ b/DBServer/Doxyfile @@ -0,0 +1,1285 @@ + # ----------------------------------------------------------------------------- + # Doxyfile for documentation of DBServer + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # 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. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = DBServer + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = YES + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = gif + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = /usr/local/bin/dot + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/DBServer/FREQUENCY_MEASUREMENTS.txt b/DBServer/FREQUENCY_MEASUREMENTS.txt new file mode 100644 index 0000000..f79a713 --- /dev/null +++ b/DBServer/FREQUENCY_MEASUREMENTS.txt @@ -0,0 +1,398 @@ + 1,1,1657041650,880000,50.400002,0.000000 + 1,1,1657041650,920000,50.099998,0.000000 + 1,1,1657041650,960000,50.099998,0.000000 + 1,1,1657041651,0,50.400002,0.000000 + 1,1,1657041651,40000,50.400002,0.000000 + 1,1,1657041651,80000,50.200001,0.000000 + 1,1,1657041651,120000,50.500000,0.000000 + 1,1,1657041651,160000,50.400002,0.000000 + 1,1,1657041651,200000,50.500000,0.000000 + 1,1,1657041651,240000,50.299999,0.000000 + 1,1,1657041651,280000,50.299999,0.000000 + 1,1,1657041651,320000,50.099998,0.000000 + 1,1,1657041651,360000,50.500000,0.000000 + 1,1,1657041651,400000,50.200001,0.000000 + 1,1,1657041651,440000,50.500000,0.000000 + 1,1,1657041651,480000,50.099998,0.000000 + 1,1,1657041651,520000,50.500000,0.000000 + 1,1,1657041651,560000,50.500000,0.000000 + 1,1,1657041651,600000,50.200001,0.000000 + 1,1,1657041651,640000,50.099998,0.000000 + 1,1,1657041651,680000,50.500000,0.000000 + 1,1,1657041651,720000,50.200001,0.000000 + 1,1,1657041651,760000,50.500000,0.000000 + 1,1,1657041651,800000,50.200001,0.000000 + 1,1,1657041651,840000,50.500000,0.000000 + 1,1,1657041651,880000,50.200001,0.000000 + 1,1,1657041651,920000,50.299999,0.000000 + 1,1,1657041651,960000,50.500000,0.000000 + 1,1,1657041652,0,50.099998,0.000000 + 1,1,1657041652,40000,50.299999,0.000000 + 1,1,1657041652,80000,50.400002,0.000000 + 1,1,1657041652,120000,50.200001,0.000000 + 1,1,1657041652,160000,50.200001,0.000000 + 1,1,1657041652,200000,50.299999,0.000000 + 1,1,1657041652,240000,50.500000,0.000000 + 1,1,1657041652,280000,50.400002,0.000000 + 1,1,1657041652,320000,50.200001,0.000000 + 1,1,1657041652,360000,50.299999,0.000000 + 1,1,1657041652,400000,50.099998,0.000000 + 1,1,1657041652,440000,50.200001,0.000000 + 1,1,1657041652,480000,50.099998,0.000000 + 1,1,1657041652,520000,50.299999,0.000000 + 1,1,1657041652,560000,50.299999,0.000000 + 1,1,1657041652,600000,50.299999,0.000000 + 1,1,1657041652,640000,50.299999,0.000000 + 1,1,1657041652,680000,50.200001,0.000000 + 1,1,1657041652,720000,50.299999,0.000000 + 1,1,1657041652,760000,50.400002,0.000000 + 1,1,1657041652,800000,50.500000,0.000000 + 1,1,1657041652,840000,50.099998,0.000000 + 1,1,1657041652,880000,50.099998,0.000000 + 1,1,1657041652,920000,50.200001,0.000000 + 1,1,1657041652,960000,50.299999,0.000000 + 1,1,1657041653,0,50.500000,0.000000 + 1,1,1657041653,40000,50.200001,0.000000 + 1,1,1657041653,80000,50.099998,0.000000 + 1,1,1657041653,120000,50.500000,0.000000 + 1,1,1657041653,160000,50.400002,0.000000 + 1,1,1657041653,200000,50.299999,0.000000 + 1,1,1657041653,240000,50.099998,0.000000 + 1,1,1657041653,280000,50.400002,0.000000 + 1,1,1657041653,320000,50.299999,0.000000 + 1,1,1657041653,360000,50.400002,0.000000 + 1,1,1657041653,400000,50.400002,0.000000 + 1,1,1657041653,440000,50.400002,0.000000 + 1,1,1657041653,480000,50.200001,0.000000 + 1,1,1657041653,520000,50.500000,0.000000 + 1,1,1657041653,560000,50.099998,0.000000 + 1,1,1657041653,600000,50.099998,0.000000 + 1,1,1657041653,640000,50.200001,0.000000 + 1,1,1657041653,680000,50.200001,0.000000 + 1,1,1657041653,720000,50.200001,0.000000 + 1,1,1657041653,760000,50.200001,0.000000 + 1,1,1657041653,800000,50.200001,0.000000 + 1,1,1657041653,840000,50.299999,0.000000 + 1,1,1657041653,880000,50.099998,0.000000 + 1,1,1657041653,920000,50.400002,0.000000 + 1,1,1657041653,960000,50.500000,0.000000 + 1,1,1657041654,0,50.200001,0.000000 + 1,1,1657041654,40000,50.400002,0.000000 + 1,1,1657041654,80000,50.200001,0.000000 + 1,1,1657041654,120000,50.500000,0.000000 + 1,1,1657041654,160000,50.299999,0.000000 + 1,1,1657041654,200000,50.200001,0.000000 + 1,1,1657041654,240000,50.299999,0.000000 + 1,1,1657041654,280000,50.400002,0.000000 + 1,1,1657041654,320000,50.400002,0.000000 + 1,1,1657041654,360000,50.400002,0.000000 + 1,1,1657041654,400000,50.500000,0.000000 + 1,1,1657041654,440000,50.500000,0.000000 + 1,1,1657041654,480000,50.099998,0.000000 + 1,1,1657041654,520000,50.099998,0.000000 + 1,1,1657041654,560000,50.400002,0.000000 + 1,1,1657041654,600000,50.299999,0.000000 + 1,1,1657041654,640000,50.099998,0.000000 + 1,1,1657041654,680000,50.299999,0.000000 + 1,1,1657041654,720000,50.400002,0.000000 + 1,1,1657041654,760000,50.299999,0.000000 + 1,1,1657041654,800000,50.200001,0.000000 + 1,1,1657041654,840000,50.099998,0.000000 + 1,1,1657041654,880000,50.099998,0.000000 + 1,1,1657041654,920000,50.400002,0.000000 + 1,1,1657041654,960000,50.200001,0.000000 + 1,1,1657041655,0,50.200001,0.000000 + 1,1,1657041655,40000,50.500000,0.000000 + 1,1,1657041655,80000,50.299999,0.000000 + 1,1,1657041655,120000,50.299999,0.000000 + 1,1,1657041655,160000,50.500000,0.000000 + 1,1,1657041655,200000,50.200001,0.000000 + 1,1,1657041655,240000,50.299999,0.000000 + 1,1,1657041655,280000,50.200001,0.000000 + 1,1,1657041655,320000,50.500000,0.000000 + 1,1,1657041655,360000,50.299999,0.000000 + 1,1,1657041655,400000,50.200001,0.000000 + 1,1,1657041655,440000,50.200001,0.000000 + 1,1,1657041655,480000,50.299999,0.000000 + 1,1,1657041655,520000,50.400002,0.000000 + 1,1,1657041655,560000,50.099998,0.000000 + 1,1,1657041655,600000,50.500000,0.000000 + 1,1,1657041655,640000,50.099998,0.000000 + 1,1,1657041655,680000,50.500000,0.000000 + 1,1,1657041655,720000,50.500000,0.000000 + 1,1,1657041655,760000,50.099998,0.000000 + 1,1,1657041655,800000,50.200001,0.000000 + 1,1,1657041655,840000,50.099998,0.000000 + 1,1,1657041655,880000,50.400002,0.000000 + 1,1,1657041655,920000,50.099998,0.000000 + 1,1,1657041655,960000,50.299999,0.000000 + 1,1,1657041656,0,50.500000,0.000000 + 1,1,1657041656,40000,50.500000,0.000000 + 1,1,1657041656,80000,50.400002,0.000000 + 1,1,1657041656,120000,50.200001,0.000000 + 1,1,1657041656,160000,50.099998,0.000000 + 1,1,1657041656,200000,50.500000,0.000000 + 1,1,1657041656,240000,50.200001,0.000000 + 1,1,1657041656,280000,50.400002,0.000000 + 1,1,1657041656,320000,50.099998,0.000000 + 1,1,1657041656,360000,50.500000,0.000000 + 1,1,1657041656,400000,50.299999,0.000000 + 1,1,1657041656,440000,50.299999,0.000000 + 1,1,1657041656,480000,50.200001,0.000000 + 1,1,1657041656,520000,50.500000,0.000000 + 1,1,1657041656,560000,50.400002,0.000000 + 1,1,1657041656,600000,50.299999,0.000000 + 1,1,1657041656,640000,50.299999,0.000000 + 1,1,1657041656,680000,50.500000,0.000000 + 1,1,1657041656,720000,50.200001,0.000000 + 1,1,1657041656,760000,50.099998,0.000000 + 1,1,1657041656,800000,50.500000,0.000000 + 1,1,1657041656,840000,50.500000,0.000000 + 1,1,1657041656,880000,50.099998,0.000000 + 1,1,1657041656,920000,50.299999,0.000000 + 1,1,1657041656,960000,50.200001,0.000000 + 1,1,1657041657,0,50.200001,0.000000 + 1,1,1657041657,40000,50.099998,0.000000 + 1,1,1657041657,80000,50.200001,0.000000 + 1,1,1657041657,120000,50.400002,0.000000 + 1,1,1657041657,160000,50.400002,0.000000 + 1,1,1657041657,200000,50.099998,0.000000 + 1,1,1657041657,240000,50.400002,0.000000 + 1,1,1657041657,280000,50.400002,0.000000 + 1,1,1657041657,320000,50.400002,0.000000 + 1,1,1657041657,360000,50.200001,0.000000 + 1,1,1657041657,400000,50.099998,0.000000 + 1,1,1657041657,440000,50.099998,0.000000 + 1,1,1657041657,480000,50.400002,0.000000 + 1,1,1657041657,520000,50.500000,0.000000 + 1,1,1657041657,560000,50.400002,0.000000 + 1,1,1657041657,600000,50.099998,0.000000 + 1,1,1657041657,640000,50.500000,0.000000 + 1,1,1657041657,680000,50.400002,0.000000 + 1,1,1657041657,720000,50.299999,0.000000 + 1,1,1657041657,760000,50.400002,0.000000 + 1,1,1657041657,800000,50.500000,0.000000 + 1,1,1657041657,840000,50.099998,0.000000 + 1,1,1657041657,880000,50.400002,0.000000 + 1,1,1657041657,920000,50.500000,0.000000 + 1,1,1657041657,960000,50.400002,0.000000 + 1,1,1657041658,0,50.500000,0.000000 + 1,1,1657041658,40000,50.400002,0.000000 + 1,1,1657041658,80000,50.400002,0.000000 + 1,1,1657041658,120000,50.200001,0.000000 + 1,1,1657041658,160000,50.500000,0.000000 + 1,1,1657041658,200000,50.400002,0.000000 + 1,1,1657041658,240000,50.200001,0.000000 + 1,1,1657041658,280000,50.099998,0.000000 + 1,1,1657041658,320000,50.200001,0.000000 + 1,1,1657041658,360000,50.500000,0.000000 + 1,1,1657041658,400000,50.500000,0.000000 + 1,1,1657041658,440000,50.400002,0.000000 + 1,1,1657041658,480000,50.099998,0.000000 + 1,1,1657041658,520000,50.099998,0.000000 + 1,1,1657041658,560000,50.200001,0.000000 + 1,1,1657041658,600000,50.099998,0.000000 + 1,1,1657041658,640000,50.099998,0.000000 + 1,1,1657041658,680000,50.200001,0.000000 + 1,1,1657041658,720000,50.099998,0.000000 + 1,1,1657041658,760000,50.500000,0.000000 + 1,1,1657041658,800000,50.099998,0.000000 + 1,1,1657041658,840000,50.299999,0.000000 + 1,1,1657041658,880000,50.299999,0.000000 + 1,1,1657041658,920000,50.099998,0.000000 + 1,1,1657041658,960000,50.400002,0.000000 + 1,1,1657041659,0,50.200001,0.000000 + 1,1,1657041659,40000,50.099998,0.000000 + 1,1,1657041659,80000,50.200001,0.000000 + 1,1,1657041659,120000,50.400002,0.000000 + 1,1,1657041659,160000,50.400002,0.000000 + 1,1,1657041659,200000,50.500000,0.000000 + 1,1,1657041659,240000,50.099998,0.000000 + 1,1,1657041659,280000,50.200001,0.000000 + 1,1,1657041659,320000,50.200001,0.000000 + 1,1,1657041659,360000,50.400002,0.000000 + 1,1,1657041659,400000,50.299999,0.000000 + 1,1,1657041659,440000,50.299999,0.000000 + 1,1,1657041659,480000,50.200001,0.000000 + 1,1,1657041659,520000,50.200001,0.000000 + 1,1,1657041659,560000,50.299999,0.000000 + 1,1,1657041659,600000,50.099998,0.000000 + 1,1,1657041659,640000,50.299999,0.000000 + 1,1,1657041659,680000,50.099998,0.000000 + 1,1,1657041659,720000,50.299999,0.000000 + 1,1,1657041659,760000,50.400002,0.000000 + 1,1,1657041659,800000,50.200001,0.000000 + 1,1,1657041659,840000,50.400002,0.000000 + 1,1,1657041659,880000,50.200001,0.000000 + 1,1,1657041659,920000,50.400002,0.000000 + 1,1,1657041659,960000,50.299999,0.000000 + 1,1,1657041660,0,50.200001,0.000000 + 1,1,1657041660,40000,50.299999,0.000000 + 1,1,1657041660,80000,50.500000,0.000000 + 1,1,1657041660,120000,50.200001,0.000000 + 1,1,1657041660,160000,50.500000,0.000000 + 1,1,1657041660,200000,50.200001,0.000000 + 1,1,1657041660,240000,50.099998,0.000000 + 1,1,1657041660,280000,50.299999,0.000000 + 1,1,1657041660,320000,50.200001,0.000000 + 1,1,1657041660,360000,50.299999,0.000000 + 1,1,1657041660,400000,50.500000,0.000000 + 1,1,1657041660,440000,50.400002,0.000000 + 1,1,1657041660,480000,50.200001,0.000000 + 1,1,1657041660,520000,50.200001,0.000000 + 1,1,1657041660,560000,50.299999,0.000000 + 1,1,1657041660,600000,50.500000,0.000000 + 1,1,1657041660,640000,50.200001,0.000000 + 1,1,1657041660,680000,50.200001,0.000000 + 1,1,1657041660,720000,50.099998,0.000000 + 1,1,1657041660,760000,50.099998,0.000000 + 1,1,1657041660,800000,50.099998,0.000000 + 1,1,1657041660,840000,50.400002,0.000000 + 1,1,1657041660,880000,50.299999,0.000000 + 1,1,1657041660,920000,50.400002,0.000000 + 1,1,1657041660,960000,50.299999,0.000000 + 1,1,1657041661,0,50.200001,0.000000 + 1,1,1657041661,40000,50.500000,0.000000 + 1,1,1657041661,80000,50.299999,0.000000 + 1,1,1657041661,120000,50.500000,0.000000 + 1,1,1657041661,160000,50.200001,0.000000 + 1,1,1657041661,200000,50.200001,0.000000 + 1,1,1657041661,240000,50.200001,0.000000 + 1,1,1657041661,280000,50.400002,0.000000 + 1,1,1657041661,320000,50.200001,0.000000 + 1,1,1657041661,360000,50.200001,0.000000 + 1,1,1657041661,400000,50.500000,0.000000 + 1,1,1657041661,440000,50.400002,0.000000 + 1,1,1657041661,480000,50.200001,0.000000 + 1,1,1657041661,520000,50.099998,0.000000 + 1,1,1657041661,560000,50.299999,0.000000 + 1,1,1657041661,600000,50.299999,0.000000 + 1,1,1657041661,640000,50.500000,0.000000 + 1,1,1657041661,680000,50.400002,0.000000 + 1,1,1657041661,720000,50.400002,0.000000 + 1,1,1657041661,760000,50.500000,0.000000 + 1,1,1657041661,800000,50.099998,0.000000 + 1,1,1657041661,840000,50.500000,0.000000 + 1,1,1657041661,880000,50.099998,0.000000 + 1,1,1657041661,920000,50.400002,0.000000 + 1,1,1657041661,960000,50.400002,0.000000 + 1,1,1657041662,0,50.500000,0.000000 + 1,1,1657041662,40000,50.400002,0.000000 + 1,1,1657041662,80000,50.099998,0.000000 + 1,1,1657041662,120000,50.299999,0.000000 + 1,1,1657041662,160000,50.500000,0.000000 + 1,1,1657041662,200000,50.200001,0.000000 + 1,1,1657041662,240000,50.200001,0.000000 + 1,1,1657041662,280000,50.099998,0.000000 + 1,1,1657041662,320000,50.099998,0.000000 + 1,1,1657041662,360000,50.400002,0.000000 + 1,1,1657041662,400000,50.500000,0.000000 + 1,1,1657041662,440000,50.500000,0.000000 + 1,1,1657041662,480000,50.099998,0.000000 + 1,1,1657041662,520000,50.400002,0.000000 + 1,1,1657041662,560000,50.200001,0.000000 + 1,1,1657041662,600000,50.299999,0.000000 + 1,1,1657041662,640000,50.200001,0.000000 + 1,1,1657041662,680000,50.099998,0.000000 + 1,1,1657041662,720000,50.500000,0.000000 + 1,1,1657041662,760000,50.500000,0.000000 + 1,1,1657041662,800000,50.200001,0.000000 + 1,1,1657041662,840000,50.099998,0.000000 + 1,1,1657041662,880000,50.299999,0.000000 + 1,1,1657041662,920000,50.099998,0.000000 + 1,1,1657041662,960000,50.099998,0.000000 + 1,1,1657041663,0,50.200001,0.000000 + 1,1,1657041663,40000,50.500000,0.000000 + 1,1,1657041663,80000,50.099998,0.000000 + 1,1,1657041663,120000,50.400002,0.000000 + 1,1,1657041663,160000,50.400002,0.000000 + 1,1,1657041663,200000,50.500000,0.000000 + 1,1,1657041663,240000,50.400002,0.000000 + 1,1,1657041663,280000,50.200001,0.000000 + 1,1,1657041663,320000,50.099998,0.000000 + 1,1,1657041663,360000,50.099998,0.000000 + 1,1,1657041663,400000,50.200001,0.000000 + 1,1,1657041663,440000,50.099998,0.000000 + 1,1,1657041663,480000,50.099998,0.000000 + 1,1,1657041663,520000,50.400002,0.000000 + 1,1,1657041663,560000,50.099998,0.000000 + 1,1,1657041663,600000,50.099998,0.000000 + 1,1,1657041663,640000,50.500000,0.000000 + 1,1,1657041663,680000,50.099998,0.000000 + 1,1,1657041663,720000,50.299999,0.000000 + 1,1,1657041663,760000,50.400002,0.000000 + 1,1,1657041663,800000,50.500000,0.000000 + 1,1,1657041663,840000,50.200001,0.000000 + 1,1,1657041663,880000,50.400002,0.000000 + 1,1,1657041663,920000,50.099998,0.000000 + 1,1,1657041663,960000,50.400002,0.000000 + 1,1,1657041664,0,50.500000,0.000000 + 1,1,1657041664,40000,50.500000,0.000000 + 1,1,1657041664,80000,50.200001,0.000000 + 1,1,1657041664,120000,50.200001,0.000000 + 1,1,1657041664,160000,50.400002,0.000000 + 1,1,1657041664,200000,50.299999,0.000000 + 1,1,1657041664,240000,50.500000,0.000000 + 1,1,1657041664,280000,50.099998,0.000000 + 1,1,1657041664,320000,50.299999,0.000000 + 1,1,1657041664,360000,50.099998,0.000000 + 1,1,1657041664,400000,50.500000,0.000000 + 1,1,1657041664,440000,50.099998,0.000000 + 1,1,1657041664,480000,50.400002,0.000000 + 1,1,1657041664,520000,50.200001,0.000000 + 1,1,1657041664,560000,50.299999,0.000000 + 1,1,1657041664,600000,50.400002,0.000000 + 1,1,1657041664,640000,50.299999,0.000000 + 1,1,1657041664,680000,50.400002,0.000000 + 1,1,1657041664,720000,50.400002,0.000000 + 1,1,1657041664,760000,50.500000,0.000000 + 1,1,1657041664,800000,50.400002,0.000000 + 1,1,1657041664,840000,50.400002,0.000000 + 1,1,1657041664,880000,50.200001,0.000000 + 1,1,1657041664,920000,50.299999,0.000000 + 1,1,1657041664,960000,50.099998,0.000000 + 1,1,1657041665,0,50.500000,0.000000 + 1,1,1657041665,40000,50.200001,0.000000 + 1,1,1657041665,80000,50.200001,0.000000 + 1,1,1657041665,120000,50.500000,0.000000 + 1,1,1657041665,160000,50.099998,0.000000 + 1,1,1657041665,200000,50.099998,0.000000 + 1,1,1657041665,240000,50.200001,0.000000 + 1,1,1657041665,280000,50.299999,0.000000 + 1,1,1657041665,320000,50.400002,0.000000 + 1,1,1657041665,360000,50.500000,0.000000 + 1,1,1657041665,400000,50.500000,0.000000 + 1,1,1657041665,440000,50.400002,0.000000 + 1,1,1657041665,480000,50.500000,0.000000 + 1,1,1657041665,520000,50.500000,0.000000 + 1,1,1657041665,560000,50.099998,0.000000 + 1,1,1657041665,600000,50.400002,0.000000 + 1,1,1657041665,640000,50.400002,0.000000 + 1,1,1657041665,680000,50.299999,0.000000 + 1,1,1657041665,720000,50.200001,0.000000 + 1,1,1657041665,760000,50.299999,0.000000 + 1,1,1657041665,800000,50.400002,0.000000 + 1,1,1657041665,840000,50.299999,0.000000 + 1,1,1657041665,880000,50.200001,0.000000 + 1,1,1657041665,920000,50.200001,0.000000 + 1,1,1657041665,960000,50.099998,0.000000 + 1,1,1657041666,0,50.299999,0.000000 + 1,1,1657041666,40000,50.500000,0.000000 + 1,1,1657041666,80000,50.200001,0.000000 + 1,1,1657041666,120000,50.099998,0.000000 + 1,1,1657041666,160000,50.299999,0.000000 + 1,1,1657041666,200000,50.299999,0.000000 + 1,1,1657041666,240000,50.500000,0.000000 + 1,1,1657041666,280000,50.200001,0.000000 + 1,1,1657041666,320000,50.099998,0.000000 + 1,1,1657041666,360000,50.299999,0.000000 + 1,1,1657041666,400000,50.299999,0.000000 + 1,1,1657041666,440000,50.500000,0.000000 + 1,1,1657041666,480000,50.299999,0.000000 + 1,1,1657041666,520000,50.500000,0.000000 + 1,1,1657041666,560000,50.200001,0.000000 + 1,1,1657041666,600000,50.299999,0.000000 + 1,1,1657041666,640000,50.099998,0.000000 + 1,1,1657041666,680000,50.500000,0.000000 + 1,1,1657041666,720000,50.099998,0.000000 + 1,1,1657041666,760000,50.099998,0.000000 diff --git a/DBServer/Makefile b/DBServer/Makefile new file mode 100755 index 0000000..a5faa34 --- /dev/null +++ b/DBServer/Makefile @@ -0,0 +1,70 @@ + # ----------------------------------------------------------------------------- + # Makefile for building DBServer + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # 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. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + + +SHELL = /bin/sh +prefix = /usr/local +includedir = /usr/src/include + +INSTALL = /usr/bin/install -c +INSTALL_PREFIX = /usr/local + +CC = gcc +LIBS = -lpthread -lm +LDLIBS=`mysql_config --cflags --libs` +CFLAGS=-Wall -g -fcommon `mysql_config --cflags --libs` + +SOURCES = \ + dbserver.c \ + recreate.c recreate.h \ + connections.c connections.h \ + parser.c parser.h \ + dallocate.c dallocate.h + +OBJECTS = dbserver.c recreate.o connections.o parser.o dallocate.o + +CLEAN_OBJECTS = recreate.o connections.o new_pmu_or_pdc.o parser.o dallocate.o cfg.bin + +PROGRAM = DBServer + +COMPILE = $(CC) + +$(PROGRAM): $(OBJECTS) + $(CC) $(OBJECTS) $(LDLIBS) $(LIBS) -o $@ + +%.o: %.c + $(COMPILE) $(CFLAGS) -c -w $< + +clean: + rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +install: $(PROGRAM) + cp -f $(PROGRAM) $(INSTALL_PREFIX)/bin/$(PROGRAM) + +uninstall: + rm -f $(INSTALL_PREFIX)/bin/$(PROGRAM) diff --git a/DBServer/PHASOR_MEASUREMENTS.txt b/DBServer/PHASOR_MEASUREMENTS.txt new file mode 100644 index 0000000..9e25a64 --- /dev/null +++ b/DBServer/PHASOR_MEASUREMENTS.txt @@ -0,0 +1,398 @@ + 1,1,1657041650,840000,"P1 ",3995.759521,0.001298 + 1,1,1657041650,880000,"P1 ",3996.003906,0.001375 + 1,1,1657041650,920000,"P1 ",3995.575928,0.001222 + 1,1,1657041650,960000,"P1 ",3994.415283,0.000901 + 1,1,1657041651,0,"P1 ",3994.110107,0.000917 + 1,1,1657041651,40000,"P1 ",3994.354492,0.000978 + 1,1,1657041651,80000,"P1 ",3994.231689,0.000795 + 1,1,1657041651,120000,"P1 ",3995.453857,0.001191 + 1,1,1657041651,160000,"P1 ",3994.109619,0.000795 + 1,1,1657041651,200000,"P1 ",3994.293213,0.000947 + 1,1,1657041651,240000,"P1 ",3994.781982,0.001039 + 1,1,1657041651,280000,"P1 ",3996.126221,0.001390 + 1,1,1657041651,320000,"P1 ",3994.232178,0.000932 + 1,1,1657041651,360000,"P1 ",3995.026367,0.001130 + 1,1,1657041651,400000,"P1 ",3995.209473,0.001100 + 1,1,1657041651,440000,"P1 ",3994.048828,0.000886 + 1,1,1657041651,480000,"P1 ",3994.170654,0.000779 + 1,1,1657041651,520000,"P1 ",3994.292969,0.000825 + 1,1,1657041651,560000,"P1 ",3995.454102,0.001268 + 1,1,1657041651,600000,"P1 ",3994.170654,0.000810 + 1,1,1657041651,640000,"P1 ",3994.292969,0.000856 + 1,1,1657041651,680000,"P1 ",3994.354004,0.000871 + 1,1,1657041651,720000,"P1 ",3995.454346,0.001314 + 1,1,1657041651,760000,"P1 ",3994.537354,0.000947 + 1,1,1657041651,800000,"P1 ",3995.209473,0.001100 + 1,1,1657041651,840000,"P1 ",3995.026855,0.001207 + 1,1,1657041651,880000,"P1 ",3994.476562,0.000993 + 1,1,1657041651,920000,"P1 ",3995.209473,0.001130 + 1,1,1657041651,960000,"P1 ",3994.598877,0.001039 + 1,1,1657041652,0,"P1 ",3994.904541,0.001161 + 1,1,1657041652,40000,"P1 ",3994.170654,0.000779 + 1,1,1657041652,80000,"P1 ",3995.820557,0.001329 + 1,1,1657041652,120000,"P1 ",3994.049072,0.000932 + 1,1,1657041652,160000,"P1 ",3994.048828,0.000856 + 1,1,1657041652,200000,"P1 ",3995.270752,0.001161 + 1,1,1657041652,240000,"P1 ",3994.721191,0.001085 + 1,1,1657041652,280000,"P1 ",3995.881348,0.001268 + 1,1,1657041652,320000,"P1 ",3994.721191,0.001131 + 1,1,1657041652,360000,"P1 ",3995.332031,0.001268 + 1,1,1657041652,400000,"P1 ",3995.759521,0.001314 + 1,1,1657041652,440000,"P1 ",3994.904053,0.001039 + 1,1,1657041652,480000,"P1 ",3995.698730,0.001344 + 1,1,1657041652,520000,"P1 ",3995.148926,0.001222 + 1,1,1657041652,560000,"P1 ",3994.293457,0.000993 + 1,1,1657041652,600000,"P1 ",3996.126221,0.001390 + 1,1,1657041652,640000,"P1 ",3995.942627,0.001298 + 1,1,1657041652,680000,"P1 ",3995.881348,0.001268 + 1,1,1657041652,720000,"P1 ",3995.514893,0.001207 + 1,1,1657041652,760000,"P1 ",3993.926514,0.000810 + 1,1,1657041652,800000,"P1 ",3993.926758,0.000840 + 1,1,1657041652,840000,"P1 ",3995.331299,0.001130 + 1,1,1657041652,880000,"P1 ",3995.209717,0.001161 + 1,1,1657041652,920000,"P1 ",3995.271240,0.001283 + 1,1,1657041652,960000,"P1 ",3994.354492,0.000978 + 1,1,1657041653,0,"P1 ",3994.843262,0.001115 + 1,1,1657041653,40000,"P1 ",3995.331787,0.001222 + 1,1,1657041653,80000,"P1 ",3996.125977,0.001375 + 1,1,1657041653,120000,"P1 ",3994.599121,0.001115 + 1,1,1657041653,160000,"P1 ",3995.209961,0.001207 + 1,1,1657041653,200000,"P1 ",3995.697998,0.001207 + 1,1,1657041653,240000,"P1 ",3995.820312,0.001237 + 1,1,1657041653,280000,"P1 ",3995.942627,0.001329 + 1,1,1657041653,320000,"P1 ",3994.598877,0.001069 + 1,1,1657041653,360000,"P1 ",3993.926514,0.000810 + 1,1,1657041653,400000,"P1 ",3993.926758,0.000871 + 1,1,1657041653,440000,"P1 ",3996.125977,0.001344 + 1,1,1657041653,480000,"P1 ",3994.415527,0.001008 + 1,1,1657041653,520000,"P1 ",3994.904785,0.001207 + 1,1,1657041653,560000,"P1 ",3996.003662,0.001329 + 1,1,1657041653,600000,"P1 ",3994.537598,0.001008 + 1,1,1657041653,640000,"P1 ",3995.453613,0.001176 + 1,1,1657041653,680000,"P1 ",3995.331787,0.001222 + 1,1,1657041653,720000,"P1 ",3996.064697,0.001313 + 1,1,1657041653,760000,"P1 ",3995.942383,0.001252 + 1,1,1657041653,800000,"P1 ",3994.965332,0.001100 + 1,1,1657041653,840000,"P1 ",3995.576416,0.001329 + 1,1,1657041653,880000,"P1 ",3994.537354,0.000917 + 1,1,1657041653,920000,"P1 ",3995.270996,0.001191 + 1,1,1657041653,960000,"P1 ",3995.637207,0.001252 + 1,1,1657041654,0,"P1 ",3995.942627,0.001298 + 1,1,1657041654,40000,"P1 ",3995.759033,0.001222 + 1,1,1657041654,80000,"P1 ",3994.720703,0.000978 + 1,1,1657041654,120000,"P1 ",3995.271240,0.001283 + 1,1,1657041654,160000,"P1 ",3994.048828,0.000856 + 1,1,1657041654,200000,"P1 ",3995.087646,0.001161 + 1,1,1657041654,240000,"P1 ",3994.720703,0.000978 + 1,1,1657041654,280000,"P1 ",3995.026855,0.001207 + 1,1,1657041654,320000,"P1 ",3994.170898,0.000840 + 1,1,1657041654,360000,"P1 ",3994.904541,0.001161 + 1,1,1657041654,400000,"P1 ",3995.637695,0.001344 + 1,1,1657041654,440000,"P1 ",3995.698242,0.001237 + 1,1,1657041654,480000,"P1 ",3994.721191,0.001085 + 1,1,1657041654,520000,"P1 ",3994.781982,0.001039 + 1,1,1657041654,560000,"P1 ",3994.599121,0.001115 + 1,1,1657041654,600000,"P1 ",3995.515381,0.001298 + 1,1,1657041654,640000,"P1 ",3994.904541,0.001161 + 1,1,1657041654,680000,"P1 ",3995.148926,0.001222 + 1,1,1657041654,720000,"P1 ",3995.454102,0.001237 + 1,1,1657041654,760000,"P1 ",3994.415527,0.001008 + 1,1,1657041654,800000,"P1 ",3994.354736,0.001054 + 1,1,1657041654,840000,"P1 ",3994.231934,0.000825 + 1,1,1657041654,880000,"P1 ",3995.698486,0.001329 + 1,1,1657041654,920000,"P1 ",3995.575928,0.001191 + 1,1,1657041654,960000,"P1 ",3994.354004,0.000886 + 1,1,1657041655,0,"P1 ",3995.270508,0.001115 + 1,1,1657041655,40000,"P1 ",3995.821045,0.001390 + 1,1,1657041655,80000,"P1 ",3995.698242,0.001283 + 1,1,1657041655,120000,"P1 ",3994.232422,0.001008 + 1,1,1657041655,160000,"P1 ",3994.415283,0.000901 + 1,1,1657041655,200000,"P1 ",3995.087891,0.001207 + 1,1,1657041655,240000,"P1 ",3994.110107,0.000947 + 1,1,1657041655,280000,"P1 ",3996.186768,0.001298 + 1,1,1657041655,320000,"P1 ",3995.026611,0.001176 + 1,1,1657041655,360000,"P1 ",3995.453857,0.001222 + 1,1,1657041655,400000,"P1 ",3995.209473,0.001100 + 1,1,1657041655,440000,"P1 ",3995.698486,0.001329 + 1,1,1657041655,480000,"P1 ",3994.476562,0.000963 + 1,1,1657041655,520000,"P1 ",3994.720703,0.001008 + 1,1,1657041655,560000,"P1 ",3995.209473,0.001130 + 1,1,1657041655,600000,"P1 ",3994.049072,0.000932 + 1,1,1657041655,640000,"P1 ",3995.698242,0.001237 + 1,1,1657041655,680000,"P1 ",3995.943115,0.001390 + 1,1,1657041655,720000,"P1 ",3995.332031,0.001268 + 1,1,1657041655,760000,"P1 ",3995.942383,0.001252 + 1,1,1657041655,800000,"P1 ",3994.781982,0.001039 + 1,1,1657041655,840000,"P1 ",3995.759521,0.001298 + 1,1,1657041655,880000,"P1 ",3994.598633,0.000978 + 1,1,1657041655,920000,"P1 ",3995.453613,0.001146 + 1,1,1657041655,960000,"P1 ",3995.148682,0.001176 + 1,1,1657041656,0,"P1 ",3995.576416,0.001329 + 1,1,1657041656,40000,"P1 ",3995.820312,0.001283 + 1,1,1657041656,80000,"P1 ",3995.637451,0.001314 + 1,1,1657041656,120000,"P1 ",3995.942383,0.001252 + 1,1,1657041656,160000,"P1 ",3994.538086,0.001100 + 1,1,1657041656,200000,"P1 ",3994.782227,0.001115 + 1,1,1657041656,240000,"P1 ",3994.659668,0.000963 + 1,1,1657041656,280000,"P1 ",3994.170898,0.000871 + 1,1,1657041656,320000,"P1 ",3995.454346,0.001314 + 1,1,1657041656,360000,"P1 ",3995.698242,0.001237 + 1,1,1657041656,400000,"P1 ",3994.598633,0.001008 + 1,1,1657041656,440000,"P1 ",3995.759033,0.001222 + 1,1,1657041656,480000,"P1 ",3994.109863,0.000886 + 1,1,1657041656,520000,"P1 ",3995.698242,0.001283 + 1,1,1657041656,560000,"P1 ",3994.171387,0.000978 + 1,1,1657041656,600000,"P1 ",3995.820312,0.001252 + 1,1,1657041656,640000,"P1 ",3994.231934,0.000871 + 1,1,1657041656,680000,"P1 ",3994.293213,0.000947 + 1,1,1657041656,720000,"P1 ",3996.065186,0.001405 + 1,1,1657041656,760000,"P1 ",3994.354248,0.000947 + 1,1,1657041656,800000,"P1 ",3994.659668,0.000993 + 1,1,1657041656,840000,"P1 ",3995.942627,0.001329 + 1,1,1657041656,880000,"P1 ",3994.476562,0.000993 + 1,1,1657041656,920000,"P1 ",3995.454102,0.001268 + 1,1,1657041656,960000,"P1 ",3994.781982,0.001039 + 1,1,1657041657,0,"P1 ",3995.514648,0.001161 + 1,1,1657041657,40000,"P1 ",3996.065186,0.001405 + 1,1,1657041657,80000,"P1 ",3994.232178,0.000932 + 1,1,1657041657,120000,"P1 ",3995.942627,0.001298 + 1,1,1657041657,160000,"P1 ",3995.270996,0.001191 + 1,1,1657041657,200000,"P1 ",3994.781982,0.001069 + 1,1,1657041657,240000,"P1 ",3995.575928,0.001222 + 1,1,1657041657,280000,"P1 ",3995.454346,0.001314 + 1,1,1657041657,320000,"P1 ",3994.659424,0.000947 + 1,1,1657041657,360000,"P1 ",3994.415283,0.000932 + 1,1,1657041657,400000,"P1 ",3994.110107,0.000947 + 1,1,1657041657,440000,"P1 ",3996.308838,0.001313 + 1,1,1657041657,480000,"P1 ",3995.881836,0.001375 + 1,1,1657041657,520000,"P1 ",3995.088135,0.001237 + 1,1,1657041657,560000,"P1 ",3995.210205,0.001253 + 1,1,1657041657,600000,"P1 ",3995.087891,0.001207 + 1,1,1657041657,640000,"P1 ",3995.209473,0.001100 + 1,1,1657041657,680000,"P1 ",3994.110107,0.000947 + 1,1,1657041657,720000,"P1 ",3994.537354,0.000947 + 1,1,1657041657,760000,"P1 ",3995.026855,0.001207 + 1,1,1657041657,800000,"P1 ",3995.576172,0.001237 + 1,1,1657041657,840000,"P1 ",3995.697998,0.001207 + 1,1,1657041657,880000,"P1 ",3994.660400,0.001146 + 1,1,1657041657,920000,"P1 ",3995.393066,0.001237 + 1,1,1657041657,960000,"P1 ",3994.171143,0.000947 + 1,1,1657041658,0,"P1 ",3996.003906,0.001359 + 1,1,1657041658,40000,"P1 ",3995.698242,0.001283 + 1,1,1657041658,80000,"P1 ",3995.881836,0.001375 + 1,1,1657041658,120000,"P1 ",3994.048828,0.000886 + 1,1,1657041658,160000,"P1 ",3994.232422,0.000978 + 1,1,1657041658,200000,"P1 ",3994.720703,0.001008 + 1,1,1657041658,240000,"P1 ",3995.515137,0.001253 + 1,1,1657041658,280000,"P1 ",3995.209961,0.001207 + 1,1,1657041658,320000,"P1 ",3993.926514,0.000810 + 1,1,1657041658,360000,"P1 ",3994.598633,0.000978 + 1,1,1657041658,400000,"P1 ",3995.881348,0.001268 + 1,1,1657041658,440000,"P1 ",3995.392822,0.001207 + 1,1,1657041658,480000,"P1 ",3994.415283,0.000932 + 1,1,1657041658,520000,"P1 ",3994.170898,0.000871 + 1,1,1657041658,560000,"P1 ",3993.927002,0.000917 + 1,1,1657041658,600000,"P1 ",3994.598389,0.000932 + 1,1,1657041658,640000,"P1 ",3994.476318,0.000932 + 1,1,1657041658,680000,"P1 ",3995.698486,0.001329 + 1,1,1657041658,720000,"P1 ",3995.575928,0.001191 + 1,1,1657041658,760000,"P1 ",3994.965332,0.001100 + 1,1,1657041658,800000,"P1 ",3994.660156,0.001100 + 1,1,1657041658,840000,"P1 ",3995.881348,0.001268 + 1,1,1657041658,880000,"P1 ",3995.087646,0.001161 + 1,1,1657041658,920000,"P1 ",3993.865723,0.000825 + 1,1,1657041658,960000,"P1 ",3994.537354,0.000947 + 1,1,1657041659,0,"P1 ",3994.109863,0.000886 + 1,1,1657041659,40000,"P1 ",3994.354248,0.000947 + 1,1,1657041659,80000,"P1 ",3995.393311,0.001298 + 1,1,1657041659,120000,"P1 ",3994.965088,0.001039 + 1,1,1657041659,160000,"P1 ",3994.476318,0.000917 + 1,1,1657041659,200000,"P1 ",3994.537842,0.001054 + 1,1,1657041659,240000,"P1 ",3995.759277,0.001268 + 1,1,1657041659,280000,"P1 ",3995.942627,0.001298 + 1,1,1657041659,320000,"P1 ",3996.248047,0.001344 + 1,1,1657041659,360000,"P1 ",3994.598877,0.001039 + 1,1,1657041659,400000,"P1 ",3994.781982,0.001039 + 1,1,1657041659,440000,"P1 ",3993.987549,0.000810 + 1,1,1657041659,480000,"P1 ",3995.026367,0.001100 + 1,1,1657041659,520000,"P1 ",3996.247803,0.001329 + 1,1,1657041659,560000,"P1 ",3995.515381,0.001298 + 1,1,1657041659,600000,"P1 ",3994.904053,0.001039 + 1,1,1657041659,640000,"P1 ",3993.865723,0.000886 + 1,1,1657041659,680000,"P1 ",3995.881836,0.001375 + 1,1,1657041659,720000,"P1 ",3995.881836,0.001375 + 1,1,1657041659,760000,"P1 ",3996.125732,0.001329 + 1,1,1657041659,800000,"P1 ",3994.781982,0.001039 + 1,1,1657041659,840000,"P1 ",3995.759521,0.001314 + 1,1,1657041659,880000,"P1 ",3995.026367,0.001130 + 1,1,1657041659,920000,"P1 ",3994.476562,0.000963 + 1,1,1657041659,960000,"P1 ",3993.987793,0.000871 + 1,1,1657041660,0,"P1 ",3995.515137,0.001253 + 1,1,1657041660,40000,"P1 ",3995.576172,0.001237 + 1,1,1657041660,80000,"P1 ",3994.171143,0.000902 + 1,1,1657041660,120000,"P1 ",3995.881592,0.001313 + 1,1,1657041660,160000,"P1 ",3996.125732,0.001329 + 1,1,1657041660,200000,"P1 ",3995.759521,0.001314 + 1,1,1657041660,240000,"P1 ",3994.843506,0.001146 + 1,1,1657041660,280000,"P1 ",3995.453613,0.001146 + 1,1,1657041660,320000,"P1 ",3994.170898,0.000840 + 1,1,1657041660,360000,"P1 ",3995.943115,0.001405 + 1,1,1657041660,400000,"P1 ",3993.865723,0.000825 + 1,1,1657041660,440000,"P1 ",3994.599121,0.001115 + 1,1,1657041660,480000,"P1 ",3995.087402,0.001115 + 1,1,1657041660,520000,"P1 ",3995.943115,0.001390 + 1,1,1657041660,560000,"P1 ",3996.125977,0.001344 + 1,1,1657041660,600000,"P1 ",3994.110107,0.000947 + 1,1,1657041660,640000,"P1 ",3994.170654,0.000779 + 1,1,1657041660,680000,"P1 ",3994.782471,0.001146 + 1,1,1657041660,720000,"P1 ",3994.599121,0.001115 + 1,1,1657041660,760000,"P1 ",3995.698242,0.001237 + 1,1,1657041660,800000,"P1 ",3995.026855,0.001222 + 1,1,1657041660,840000,"P1 ",3994.415771,0.001039 + 1,1,1657041660,880000,"P1 ",3994.415771,0.001070 + 1,1,1657041660,920000,"P1 ",3995.759766,0.001375 + 1,1,1657041660,960000,"P1 ",3994.965576,0.001146 + 1,1,1657041661,0,"P1 ",3995.759033,0.001222 + 1,1,1657041661,40000,"P1 ",3995.637451,0.001298 + 1,1,1657041661,80000,"P1 ",3995.332031,0.001268 + 1,1,1657041661,120000,"P1 ",3994.476807,0.001039 + 1,1,1657041661,160000,"P1 ",3996.003906,0.001375 + 1,1,1657041661,200000,"P1 ",3994.537598,0.001008 + 1,1,1657041661,240000,"P1 ",3995.881348,0.001283 + 1,1,1657041661,280000,"P1 ",3995.392578,0.001161 + 1,1,1657041661,320000,"P1 ",3994.599121,0.001115 + 1,1,1657041661,360000,"P1 ",3994.292969,0.000886 + 1,1,1657041661,400000,"P1 ",3995.636963,0.001222 + 1,1,1657041661,440000,"P1 ",3994.659668,0.000993 + 1,1,1657041661,480000,"P1 ",3995.332031,0.001253 + 1,1,1657041661,520000,"P1 ",3994.782471,0.001146 + 1,1,1657041661,560000,"P1 ",3994.048828,0.000856 + 1,1,1657041661,600000,"P1 ",3995.392822,0.001207 + 1,1,1657041661,640000,"P1 ",3994.659668,0.000993 + 1,1,1657041661,680000,"P1 ",3994.965332,0.001100 + 1,1,1657041661,720000,"P1 ",3994.354492,0.000978 + 1,1,1657041661,760000,"P1 ",3995.270508,0.001115 + 1,1,1657041661,800000,"P1 ",3994.781982,0.001069 + 1,1,1657041661,840000,"P1 ",3994.109619,0.000795 + 1,1,1657041661,880000,"P1 ",3995.149170,0.001237 + 1,1,1657041661,920000,"P1 ",3995.576416,0.001329 + 1,1,1657041661,960000,"P1 ",3996.126221,0.001390 + 1,1,1657041662,0,"P1 ",3995.575928,0.001191 + 1,1,1657041662,40000,"P1 ",3994.170898,0.000840 + 1,1,1657041662,80000,"P1 ",3995.515137,0.001253 + 1,1,1657041662,120000,"P1 ",3995.209473,0.001130 + 1,1,1657041662,160000,"P1 ",3994.476074,0.000886 + 1,1,1657041662,200000,"P1 ",3995.393311,0.001298 + 1,1,1657041662,240000,"P1 ",3996.125977,0.001344 + 1,1,1657041662,280000,"P1 ",3994.843018,0.001024 + 1,1,1657041662,320000,"P1 ",3994.415771,0.001070 + 1,1,1657041662,360000,"P1 ",3994.415039,0.000871 + 1,1,1657041662,400000,"P1 ",3995.454102,0.001268 + 1,1,1657041662,440000,"P1 ",3993.926514,0.000810 + 1,1,1657041662,480000,"P1 ",3995.209473,0.001100 + 1,1,1657041662,520000,"P1 ",3994.598389,0.000932 + 1,1,1657041662,560000,"P1 ",3995.209473,0.001130 + 1,1,1657041662,600000,"P1 ",3996.004395,0.001420 + 1,1,1657041662,640000,"P1 ",3994.415283,0.000901 + 1,1,1657041662,680000,"P1 ",3995.087891,0.001207 + 1,1,1657041662,720000,"P1 ",3995.087891,0.001207 + 1,1,1657041662,760000,"P1 ",3994.537354,0.000947 + 1,1,1657041662,800000,"P1 ",3995.270996,0.001191 + 1,1,1657041662,840000,"P1 ",3994.660400,0.001146 + 1,1,1657041662,880000,"P1 ",3994.231934,0.000825 + 1,1,1657041662,920000,"P1 ",3994.476318,0.000932 + 1,1,1657041662,960000,"P1 ",3994.171143,0.000947 + 1,1,1657041663,0,"P1 ",3994.231934,0.000871 + 1,1,1657041663,40000,"P1 ",3994.232178,0.000901 + 1,1,1657041663,80000,"P1 ",3994.659668,0.000993 + 1,1,1657041663,120000,"P1 ",3994.537598,0.001008 + 1,1,1657041663,160000,"P1 ",3994.293457,0.000993 + 1,1,1657041663,200000,"P1 ",3994.415771,0.001039 + 1,1,1657041663,240000,"P1 ",3994.476807,0.001039 + 1,1,1657041663,280000,"P1 ",3994.659424,0.000947 + 1,1,1657041663,320000,"P1 ",3994.415527,0.001008 + 1,1,1657041663,360000,"P1 ",3995.270752,0.001161 + 1,1,1657041663,400000,"P1 ",3994.598389,0.000932 + 1,1,1657041663,440000,"P1 ",3994.109619,0.000795 + 1,1,1657041663,480000,"P1 ",3995.576416,0.001329 + 1,1,1657041663,520000,"P1 ",3995.209717,0.001161 + 1,1,1657041663,560000,"P1 ",3994.904541,0.001161 + 1,1,1657041663,600000,"P1 ",3996.125977,0.001375 + 1,1,1657041663,640000,"P1 ",3996.065186,0.001405 + 1,1,1657041663,680000,"P1 ",3995.026367,0.001130 + 1,1,1657041663,720000,"P1 ",3995.576172,0.001268 + 1,1,1657041663,760000,"P1 ",3995.271240,0.001237 + 1,1,1657041663,800000,"P1 ",3994.659912,0.001024 + 1,1,1657041663,840000,"P1 ",3995.942383,0.001252 + 1,1,1657041663,880000,"P1 ",3994.965820,0.001192 + 1,1,1657041663,920000,"P1 ",3994.049072,0.000932 + 1,1,1657041663,960000,"P1 ",3995.881836,0.001375 + 1,1,1657041664,0,"P1 ",3994.415527,0.000963 + 1,1,1657041664,40000,"P1 ",3995.087402,0.001085 + 1,1,1657041664,80000,"P1 ",3994.354248,0.000917 + 1,1,1657041664,120000,"P1 ",3994.110352,0.000963 + 1,1,1657041664,160000,"P1 ",3994.843262,0.001100 + 1,1,1657041664,200000,"P1 ",3994.904541,0.001176 + 1,1,1657041664,240000,"P1 ",3994.843506,0.001146 + 1,1,1657041664,280000,"P1 ",3995.820312,0.001237 + 1,1,1657041664,320000,"P1 ",3995.698242,0.001237 + 1,1,1657041664,360000,"P1 ",3993.804688,0.000825 + 1,1,1657041664,400000,"P1 ",3995.942383,0.001252 + 1,1,1657041664,440000,"P1 ",3995.576416,0.001329 + 1,1,1657041664,480000,"P1 ",3995.942383,0.001252 + 1,1,1657041664,520000,"P1 ",3996.247803,0.001329 + 1,1,1657041664,560000,"P1 ",3995.515381,0.001298 + 1,1,1657041664,600000,"P1 ",3995.637695,0.001344 + 1,1,1657041664,640000,"P1 ",3993.865723,0.000856 + 1,1,1657041664,680000,"P1 ",3994.292969,0.000856 + 1,1,1657041664,720000,"P1 ",3994.354004,0.000886 + 1,1,1657041664,760000,"P1 ",3993.743652,0.000840 + 1,1,1657041664,800000,"P1 ",3996.247803,0.001329 + 1,1,1657041664,840000,"P1 ",3994.415527,0.001008 + 1,1,1657041664,880000,"P1 ",3994.232422,0.001008 + 1,1,1657041664,920000,"P1 ",3994.476807,0.001070 + 1,1,1657041664,960000,"P1 ",3995.454102,0.001268 + 1,1,1657041665,0,"P1 ",3994.109619,0.000795 + 1,1,1657041665,40000,"P1 ",3994.232178,0.000932 + 1,1,1657041665,80000,"P1 ",3994.048828,0.000825 + 1,1,1657041665,120000,"P1 ",3994.721191,0.001131 + 1,1,1657041665,160000,"P1 ",3995.209473,0.001130 + 1,1,1657041665,200000,"P1 ",3995.270752,0.001161 + 1,1,1657041665,240000,"P1 ",3995.637451,0.001314 + 1,1,1657041665,280000,"P1 ",3995.514893,0.001207 + 1,1,1657041665,320000,"P1 ",3995.698242,0.001237 + 1,1,1657041665,360000,"P1 ",3995.332031,0.001268 + 1,1,1657041665,400000,"P1 ",3994.782471,0.001161 + 1,1,1657041665,440000,"P1 ",3995.942627,0.001329 + 1,1,1657041665,480000,"P1 ",3993.865723,0.000886 + 1,1,1657041665,520000,"P1 ",3995.026367,0.001100 + 1,1,1657041665,560000,"P1 ",3994.843506,0.001146 + 1,1,1657041665,600000,"P1 ",3995.942383,0.001252 + 1,1,1657041665,640000,"P1 ",3995.088135,0.001237 + 1,1,1657041665,680000,"P1 ",3995.576172,0.001237 + 1,1,1657041665,720000,"P1 ",3995.148682,0.001146 + 1,1,1657041665,760000,"P1 ",3995.087158,0.001069 + 1,1,1657041665,800000,"P1 ",3995.942627,0.001329 + 1,1,1657041665,840000,"P1 ",3995.943115,0.001405 + 1,1,1657041665,880000,"P1 ",3995.148926,0.001222 + 1,1,1657041665,920000,"P1 ",3995.820312,0.001283 + 1,1,1657041665,960000,"P1 ",3995.331543,0.001146 + 1,1,1657041666,0,"P1 ",3995.148926,0.001192 + 1,1,1657041666,40000,"P1 ",3994.354004,0.000840 + 1,1,1657041666,80000,"P1 ",3994.660400,0.001146 + 1,1,1657041666,120000,"P1 ",3994.354004,0.000871 + 1,1,1657041666,160000,"P1 ",3995.209717,0.001161 + 1,1,1657041666,200000,"P1 ",3994.170898,0.000840 + 1,1,1657041666,240000,"P1 ",3994.781738,0.001008 + 1,1,1657041666,280000,"P1 ",3995.148926,0.001222 + 1,1,1657041666,320000,"P1 ",3994.110352,0.000963 + 1,1,1657041666,360000,"P1 ",3995.576416,0.001329 + 1,1,1657041666,400000,"P1 ",3995.698242,0.001283 + 1,1,1657041666,440000,"P1 ",3994.720703,0.000978 + 1,1,1657041666,480000,"P1 ",3995.821045,0.001390 + 1,1,1657041666,520000,"P1 ",3995.148682,0.001176 + 1,1,1657041666,560000,"P1 ",3994.660156,0.001100 + 1,1,1657041666,600000,"P1 ",3995.881348,0.001283 + 1,1,1657041666,640000,"P1 ",3994.476074,0.000886 + 1,1,1657041666,680000,"P1 ",3995.698242,0.001283 + 1,1,1657041666,720000,"P1 ",3994.659912,0.001024 diff --git a/DBServer/RECEIVED_FRAME_TIME.txt b/DBServer/RECEIVED_FRAME_TIME.txt new file mode 100644 index 0000000..253f7be --- /dev/null +++ b/DBServer/RECEIVED_FRAME_TIME.txt @@ -0,0 +1,398 @@ + 1,1,1657041650,880000,1657041650,880385,385 + 1,1,1657041650,920000,1657041650,920803,803 + 1,1,1657041650,960000,1657041650,961026,1026 + 1,1,1657041651,0,1657041651,1038,1038 + 1,1,1657041651,40000,1657041651,40772,772 + 1,1,1657041651,80000,1657041651,80650,650 + 1,1,1657041651,120000,1657041651,120590,590 + 1,1,1657041651,160000,1657041651,160639,639 + 1,1,1657041651,200000,1657041651,200644,644 + 1,1,1657041651,240000,1657041651,240673,673 + 1,1,1657041651,280000,1657041651,280682,682 + 1,1,1657041651,320000,1657041651,320720,720 + 1,1,1657041651,360000,1657041651,360638,638 + 1,1,1657041651,400000,1657041651,400630,630 + 1,1,1657041651,440000,1657041651,440695,695 + 1,1,1657041651,480000,1657041651,480704,704 + 1,1,1657041651,520000,1657041651,520670,670 + 1,1,1657041651,560000,1657041651,561026,1026 + 1,1,1657041651,600000,1657041651,601031,1031 + 1,1,1657041651,640000,1657041651,640596,596 + 1,1,1657041651,680000,1657041651,680637,637 + 1,1,1657041651,720000,1657041651,720672,672 + 1,1,1657041651,760000,1657041651,760687,687 + 1,1,1657041651,800000,1657041651,800702,702 + 1,1,1657041651,840000,1657041651,840667,667 + 1,1,1657041651,880000,1657041651,880593,593 + 1,1,1657041651,920000,1657041651,920727,727 + 1,1,1657041651,960000,1657041651,960833,833 + 1,1,1657041652,0,1657041652,652,652 + 1,1,1657041652,40000,1657041652,40957,957 + 1,1,1657041652,80000,1657041652,81033,1033 + 1,1,1657041652,120000,1657041652,121162,1162 + 1,1,1657041652,160000,1657041652,161194,1194 + 1,1,1657041652,200000,1657041652,200802,802 + 1,1,1657041652,240000,1657041652,240728,728 + 1,1,1657041652,280000,1657041652,280980,980 + 1,1,1657041652,320000,1657041652,321182,1182 + 1,1,1657041652,360000,1657041652,360960,960 + 1,1,1657041652,400000,1657041652,401137,1137 + 1,1,1657041652,440000,1657041652,440841,841 + 1,1,1657041652,480000,1657041652,481201,1201 + 1,1,1657041652,520000,1657041652,520792,792 + 1,1,1657041652,560000,1657041652,560853,853 + 1,1,1657041652,600000,1657041652,600959,959 + 1,1,1657041652,640000,1657041652,641064,1064 + 1,1,1657041652,680000,1657041652,680774,774 + 1,1,1657041652,720000,1657041652,720885,885 + 1,1,1657041652,760000,1657041652,760959,959 + 1,1,1657041652,800000,1657041652,800960,960 + 1,1,1657041652,840000,1657041652,841134,1134 + 1,1,1657041652,880000,1657041652,880842,842 + 1,1,1657041652,920000,1657041652,920964,964 + 1,1,1657041652,960000,1657041652,960970,970 + 1,1,1657041653,0,1657041653,1038,1038 + 1,1,1657041653,40000,1657041653,40969,969 + 1,1,1657041653,80000,1657041653,80964,964 + 1,1,1657041653,120000,1657041653,121187,1187 + 1,1,1657041653,160000,1657041653,160868,868 + 1,1,1657041653,200000,1657041653,200809,809 + 1,1,1657041653,240000,1657041653,240864,864 + 1,1,1657041653,280000,1657041653,280839,839 + 1,1,1657041653,320000,1657041653,320952,952 + 1,1,1657041653,360000,1657041653,361174,1174 + 1,1,1657041653,400000,1657041653,401188,1188 + 1,1,1657041653,440000,1657041653,440963,963 + 1,1,1657041653,480000,1657041653,481136,1136 + 1,1,1657041653,520000,1657041653,521185,1185 + 1,1,1657041653,560000,1657041653,560974,974 + 1,1,1657041653,600000,1657041653,601049,1049 + 1,1,1657041653,640000,1657041653,640935,935 + 1,1,1657041653,680000,1657041653,680718,718 + 1,1,1657041653,720000,1657041653,720961,961 + 1,1,1657041653,760000,1657041653,761141,1141 + 1,1,1657041653,800000,1657041653,801150,1150 + 1,1,1657041653,840000,1657041653,840964,964 + 1,1,1657041653,880000,1657041653,881141,1141 + 1,1,1657041653,920000,1657041653,921137,1137 + 1,1,1657041653,960000,1657041653,961005,1005 + 1,1,1657041654,0,1657041654,977,977 + 1,1,1657041654,40000,1657041654,40984,984 + 1,1,1657041654,80000,1657041654,81131,1131 + 1,1,1657041654,120000,1657041654,121132,1132 + 1,1,1657041654,160000,1657041654,161108,1108 + 1,1,1657041654,200000,1657041654,200798,798 + 1,1,1657041654,240000,1657041654,240944,944 + 1,1,1657041654,280000,1657041654,280989,989 + 1,1,1657041654,320000,1657041654,321120,1120 + 1,1,1657041654,360000,1657041654,360972,972 + 1,1,1657041654,400000,1657041654,401186,1186 + 1,1,1657041654,440000,1657041654,440974,974 + 1,1,1657041654,480000,1657041654,481186,1186 + 1,1,1657041654,520000,1657041654,521150,1150 + 1,1,1657041654,560000,1657041654,560986,986 + 1,1,1657041654,600000,1657041654,600965,965 + 1,1,1657041654,640000,1657041654,640962,962 + 1,1,1657041654,680000,1657041654,680721,721 + 1,1,1657041654,720000,1657041654,721120,1120 + 1,1,1657041654,760000,1657041654,761143,1143 + 1,1,1657041654,800000,1657041654,800993,993 + 1,1,1657041654,840000,1657041654,840810,810 + 1,1,1657041654,880000,1657041654,881183,1183 + 1,1,1657041654,920000,1657041654,921149,1149 + 1,1,1657041654,960000,1657041654,961146,1146 + 1,1,1657041655,0,1657041655,1048,1048 + 1,1,1657041655,40000,1657041655,40746,746 + 1,1,1657041655,80000,1657041655,81134,1134 + 1,1,1657041655,120000,1657041655,120852,852 + 1,1,1657041655,160000,1657041655,160962,962 + 1,1,1657041655,200000,1657041655,200753,753 + 1,1,1657041655,240000,1657041655,240639,639 + 1,1,1657041655,280000,1657041655,281009,1009 + 1,1,1657041655,320000,1657041655,321146,1146 + 1,1,1657041655,360000,1657041655,361160,1160 + 1,1,1657041655,400000,1657041655,400766,766 + 1,1,1657041655,440000,1657041655,440653,653 + 1,1,1657041655,480000,1657041655,480615,615 + 1,1,1657041655,520000,1657041655,520699,699 + 1,1,1657041655,560000,1657041655,560692,692 + 1,1,1657041655,600000,1657041655,600677,677 + 1,1,1657041655,640000,1657041655,640642,642 + 1,1,1657041655,680000,1657041655,680635,635 + 1,1,1657041655,720000,1657041655,720664,664 + 1,1,1657041655,760000,1657041655,760956,956 + 1,1,1657041655,800000,1657041655,800962,962 + 1,1,1657041655,840000,1657041655,840810,810 + 1,1,1657041655,880000,1657041655,880904,904 + 1,1,1657041655,920000,1657041655,920825,825 + 1,1,1657041655,960000,1657041655,960958,958 + 1,1,1657041656,0,1657041656,1191,1191 + 1,1,1657041656,40000,1657041656,40931,931 + 1,1,1657041656,80000,1657041656,81052,1052 + 1,1,1657041656,120000,1657041656,121131,1131 + 1,1,1657041656,160000,1657041656,161208,1208 + 1,1,1657041656,200000,1657041656,200836,836 + 1,1,1657041656,240000,1657041656,240958,958 + 1,1,1657041656,280000,1657041656,280826,826 + 1,1,1657041656,320000,1657041656,320648,648 + 1,1,1657041656,360000,1657041656,360705,705 + 1,1,1657041656,400000,1657041656,400408,408 + 1,1,1657041656,440000,1657041656,440656,656 + 1,1,1657041656,480000,1657041656,480798,798 + 1,1,1657041656,520000,1657041656,521136,1136 + 1,1,1657041656,560000,1657041656,560936,936 + 1,1,1657041656,600000,1657041656,601144,1144 + 1,1,1657041656,640000,1657041656,640966,966 + 1,1,1657041656,680000,1657041656,680963,963 + 1,1,1657041656,720000,1657041656,721128,1128 + 1,1,1657041656,760000,1657041656,761148,1148 + 1,1,1657041656,800000,1657041656,800389,389 + 1,1,1657041656,840000,1657041656,840651,651 + 1,1,1657041656,880000,1657041656,880275,275 + 1,1,1657041656,920000,1657041656,920389,389 + 1,1,1657041656,960000,1657041656,960738,738 + 1,1,1657041657,0,1657041657,659,659 + 1,1,1657041657,40000,1657041657,40883,883 + 1,1,1657041657,80000,1657041657,80839,839 + 1,1,1657041657,120000,1657041657,121165,1165 + 1,1,1657041657,160000,1657041657,161154,1154 + 1,1,1657041657,200000,1657041657,200870,870 + 1,1,1657041657,240000,1657041657,240973,973 + 1,1,1657041657,280000,1657041657,280995,995 + 1,1,1657041657,320000,1657041657,321192,1192 + 1,1,1657041657,360000,1657041657,360991,991 + 1,1,1657041657,400000,1657041657,401144,1144 + 1,1,1657041657,440000,1657041657,441147,1147 + 1,1,1657041657,480000,1657041657,480838,838 + 1,1,1657041657,520000,1657041657,520786,786 + 1,1,1657041657,560000,1657041657,560806,806 + 1,1,1657041657,600000,1657041657,600789,789 + 1,1,1657041657,640000,1657041657,640775,775 + 1,1,1657041657,680000,1657041657,680696,696 + 1,1,1657041657,720000,1657041657,720840,840 + 1,1,1657041657,760000,1657041657,761080,1080 + 1,1,1657041657,800000,1657041657,800828,828 + 1,1,1657041657,840000,1657041657,841151,1151 + 1,1,1657041657,880000,1657041657,881149,1149 + 1,1,1657041657,920000,1657041657,921155,1155 + 1,1,1657041657,960000,1657041657,961143,1143 + 1,1,1657041658,0,1657041658,868,868 + 1,1,1657041658,40000,1657041658,40971,971 + 1,1,1657041658,80000,1657041658,81149,1149 + 1,1,1657041658,120000,1657041658,120856,856 + 1,1,1657041658,160000,1657041658,161162,1162 + 1,1,1657041658,200000,1657041658,200834,834 + 1,1,1657041658,240000,1657041658,240826,826 + 1,1,1657041658,280000,1657041658,280912,912 + 1,1,1657041658,320000,1657041658,321145,1145 + 1,1,1657041658,360000,1657041658,360844,844 + 1,1,1657041658,400000,1657041658,401149,1149 + 1,1,1657041658,440000,1657041658,441051,1051 + 1,1,1657041658,480000,1657041658,481204,1204 + 1,1,1657041658,520000,1657041658,521216,1216 + 1,1,1657041658,560000,1657041658,560808,808 + 1,1,1657041658,600000,1657041658,600804,804 + 1,1,1657041658,640000,1657041658,640370,370 + 1,1,1657041658,680000,1657041658,680646,646 + 1,1,1657041658,720000,1657041658,720546,546 + 1,1,1657041658,760000,1657041658,761027,1027 + 1,1,1657041658,800000,1657041658,800822,822 + 1,1,1657041658,840000,1657041658,841063,1063 + 1,1,1657041658,880000,1657041658,880979,979 + 1,1,1657041658,920000,1657041658,921140,1140 + 1,1,1657041658,960000,1657041658,961202,1202 + 1,1,1657041659,0,1657041659,820,820 + 1,1,1657041659,40000,1657041659,40704,704 + 1,1,1657041659,80000,1657041659,80883,883 + 1,1,1657041659,120000,1657041659,121132,1132 + 1,1,1657041659,160000,1657041659,161143,1143 + 1,1,1657041659,200000,1657041659,200780,780 + 1,1,1657041659,240000,1657041659,240976,976 + 1,1,1657041659,280000,1657041659,280807,807 + 1,1,1657041659,320000,1657041659,320951,951 + 1,1,1657041659,360000,1657041659,360856,856 + 1,1,1657041659,400000,1657041659,401203,1203 + 1,1,1657041659,440000,1657041659,441135,1135 + 1,1,1657041659,480000,1657041659,481162,1162 + 1,1,1657041659,520000,1657041659,521209,1209 + 1,1,1657041659,560000,1657041659,561206,1206 + 1,1,1657041659,600000,1657041659,601136,1136 + 1,1,1657041659,640000,1657041659,641151,1151 + 1,1,1657041659,680000,1657041659,680730,730 + 1,1,1657041659,720000,1657041659,720970,970 + 1,1,1657041659,760000,1657041659,760306,306 + 1,1,1657041659,800000,1657041659,800855,855 + 1,1,1657041659,840000,1657041659,841151,1151 + 1,1,1657041659,880000,1657041659,880984,984 + 1,1,1657041659,920000,1657041659,920387,387 + 1,1,1657041659,960000,1657041659,960683,683 + 1,1,1657041660,0,1657041660,743,743 + 1,1,1657041660,40000,1657041660,40747,747 + 1,1,1657041660,80000,1657041660,80827,827 + 1,1,1657041660,120000,1657041660,121158,1158 + 1,1,1657041660,160000,1657041660,161145,1145 + 1,1,1657041660,200000,1657041660,201156,1156 + 1,1,1657041660,240000,1657041660,240961,961 + 1,1,1657041660,280000,1657041660,280958,958 + 1,1,1657041660,320000,1657041660,321198,1198 + 1,1,1657041660,360000,1657041660,360963,963 + 1,1,1657041660,400000,1657041660,401186,1186 + 1,1,1657041660,440000,1657041660,440918,918 + 1,1,1657041660,480000,1657041660,481146,1146 + 1,1,1657041660,520000,1657041660,521191,1191 + 1,1,1657041660,560000,1657041660,561198,1198 + 1,1,1657041660,600000,1657041660,601194,1194 + 1,1,1657041660,640000,1657041660,641145,1145 + 1,1,1657041660,680000,1657041660,680684,684 + 1,1,1657041660,720000,1657041660,720986,986 + 1,1,1657041660,760000,1657041660,761144,1144 + 1,1,1657041660,800000,1657041660,801119,1119 + 1,1,1657041660,840000,1657041660,841151,1151 + 1,1,1657041660,880000,1657041660,881195,1195 + 1,1,1657041660,920000,1657041660,920763,763 + 1,1,1657041660,960000,1657041660,960735,735 + 1,1,1657041661,0,1657041661,664,664 + 1,1,1657041661,40000,1657041661,40638,638 + 1,1,1657041661,80000,1657041661,80728,728 + 1,1,1657041661,120000,1657041661,120825,825 + 1,1,1657041661,160000,1657041661,160890,890 + 1,1,1657041661,200000,1657041661,200878,878 + 1,1,1657041661,240000,1657041661,240803,803 + 1,1,1657041661,280000,1657041661,280803,803 + 1,1,1657041661,320000,1657041661,320821,821 + 1,1,1657041661,360000,1657041661,360838,838 + 1,1,1657041661,400000,1657041661,400890,890 + 1,1,1657041661,440000,1657041661,440881,881 + 1,1,1657041661,480000,1657041661,480866,866 + 1,1,1657041661,520000,1657041661,520843,843 + 1,1,1657041661,560000,1657041661,560996,996 + 1,1,1657041661,600000,1657041661,601163,1163 + 1,1,1657041661,640000,1657041661,641142,1142 + 1,1,1657041661,680000,1657041661,680666,666 + 1,1,1657041661,720000,1657041661,720995,995 + 1,1,1657041661,760000,1657041661,760998,998 + 1,1,1657041661,800000,1657041661,801157,1157 + 1,1,1657041661,840000,1657041661,841040,1040 + 1,1,1657041661,880000,1657041661,880983,983 + 1,1,1657041661,920000,1657041661,921031,1031 + 1,1,1657041661,960000,1657041661,960990,990 + 1,1,1657041662,0,1657041662,1143,1143 + 1,1,1657041662,40000,1657041662,40984,984 + 1,1,1657041662,80000,1657041662,81164,1164 + 1,1,1657041662,120000,1657041662,121214,1214 + 1,1,1657041662,160000,1657041662,160973,973 + 1,1,1657041662,200000,1657041662,200972,972 + 1,1,1657041662,240000,1657041662,240862,862 + 1,1,1657041662,280000,1657041662,280817,817 + 1,1,1657041662,320000,1657041662,320714,714 + 1,1,1657041662,360000,1657041662,360821,821 + 1,1,1657041662,400000,1657041662,401095,1095 + 1,1,1657041662,440000,1657041662,440818,818 + 1,1,1657041662,480000,1657041662,480686,686 + 1,1,1657041662,520000,1657041662,520701,701 + 1,1,1657041662,560000,1657041662,560681,681 + 1,1,1657041662,600000,1657041662,600722,722 + 1,1,1657041662,640000,1657041662,640665,665 + 1,1,1657041662,680000,1657041662,680683,683 + 1,1,1657041662,720000,1657041662,720939,939 + 1,1,1657041662,760000,1657041662,760830,830 + 1,1,1657041662,800000,1657041662,800991,991 + 1,1,1657041662,840000,1657041662,840978,978 + 1,1,1657041662,880000,1657041662,881002,1002 + 1,1,1657041662,920000,1657041662,921038,1038 + 1,1,1657041662,960000,1657041662,960898,898 + 1,1,1657041663,0,1657041663,357,357 + 1,1,1657041663,40000,1657041663,40703,703 + 1,1,1657041663,80000,1657041663,80270,270 + 1,1,1657041663,120000,1657041663,120535,535 + 1,1,1657041663,160000,1657041663,160692,692 + 1,1,1657041663,200000,1657041663,200764,764 + 1,1,1657041663,240000,1657041663,240976,976 + 1,1,1657041663,280000,1657041663,280938,938 + 1,1,1657041663,320000,1657041663,321126,1126 + 1,1,1657041663,360000,1657041663,360980,980 + 1,1,1657041663,400000,1657041663,400765,765 + 1,1,1657041663,440000,1657041663,440449,449 + 1,1,1657041663,480000,1657041663,480648,648 + 1,1,1657041663,520000,1657041663,520824,824 + 1,1,1657041663,560000,1657041663,560659,659 + 1,1,1657041663,600000,1657041663,600698,698 + 1,1,1657041663,640000,1657041663,640802,802 + 1,1,1657041663,680000,1657041663,680732,732 + 1,1,1657041663,720000,1657041663,720797,797 + 1,1,1657041663,760000,1657041663,760823,823 + 1,1,1657041663,800000,1657041663,800808,808 + 1,1,1657041663,840000,1657041663,840800,800 + 1,1,1657041663,880000,1657041663,880789,789 + 1,1,1657041663,920000,1657041663,920802,802 + 1,1,1657041663,960000,1657041663,960792,792 + 1,1,1657041664,0,1657041664,1150,1150 + 1,1,1657041664,40000,1657041664,40801,801 + 1,1,1657041664,80000,1657041664,80816,816 + 1,1,1657041664,120000,1657041664,120789,789 + 1,1,1657041664,160000,1657041664,160779,779 + 1,1,1657041664,200000,1657041664,200699,699 + 1,1,1657041664,240000,1657041664,240710,710 + 1,1,1657041664,280000,1657041664,280730,730 + 1,1,1657041664,320000,1657041664,320831,831 + 1,1,1657041664,360000,1657041664,360776,776 + 1,1,1657041664,400000,1657041664,401208,1208 + 1,1,1657041664,440000,1657041664,440926,926 + 1,1,1657041664,480000,1657041664,480795,795 + 1,1,1657041664,520000,1657041664,520811,811 + 1,1,1657041664,560000,1657041664,560791,791 + 1,1,1657041664,600000,1657041664,600811,811 + 1,1,1657041664,640000,1657041664,640777,777 + 1,1,1657041664,680000,1657041664,680699,699 + 1,1,1657041664,720000,1657041664,720779,779 + 1,1,1657041664,760000,1657041664,760778,778 + 1,1,1657041664,800000,1657041664,801143,1143 + 1,1,1657041664,840000,1657041664,840846,846 + 1,1,1657041664,880000,1657041664,880913,913 + 1,1,1657041664,920000,1657041664,920986,986 + 1,1,1657041664,960000,1657041664,961161,1161 + 1,1,1657041665,0,1657041665,1208,1208 + 1,1,1657041665,40000,1657041665,40982,982 + 1,1,1657041665,80000,1657041665,81198,1198 + 1,1,1657041665,120000,1657041665,121147,1147 + 1,1,1657041665,160000,1657041665,160979,979 + 1,1,1657041665,200000,1657041665,201050,1050 + 1,1,1657041665,240000,1657041665,240989,989 + 1,1,1657041665,280000,1657041665,280970,970 + 1,1,1657041665,320000,1657041665,321213,1213 + 1,1,1657041665,360000,1657041665,361003,1003 + 1,1,1657041665,400000,1657041665,401137,1137 + 1,1,1657041665,440000,1657041665,441223,1223 + 1,1,1657041665,480000,1657041665,481222,1222 + 1,1,1657041665,520000,1657041665,521041,1041 + 1,1,1657041665,560000,1657041665,560964,964 + 1,1,1657041665,600000,1657041665,601208,1208 + 1,1,1657041665,640000,1657041665,641233,1233 + 1,1,1657041665,680000,1657041665,680716,716 + 1,1,1657041665,720000,1657041665,721169,1169 + 1,1,1657041665,760000,1657041665,761209,1209 + 1,1,1657041665,800000,1657041665,801031,1031 + 1,1,1657041665,840000,1657041665,840763,763 + 1,1,1657041665,880000,1657041665,880750,750 + 1,1,1657041665,920000,1657041665,920792,792 + 1,1,1657041665,960000,1657041665,960816,816 + 1,1,1657041666,0,1657041666,812,812 + 1,1,1657041666,40000,1657041666,40789,789 + 1,1,1657041666,80000,1657041666,80805,805 + 1,1,1657041666,120000,1657041666,121155,1155 + 1,1,1657041666,160000,1657041666,161160,1160 + 1,1,1657041666,200000,1657041666,201032,1032 + 1,1,1657041666,240000,1657041666,241004,1004 + 1,1,1657041666,280000,1657041666,280989,989 + 1,1,1657041666,320000,1657041666,320897,897 + 1,1,1657041666,360000,1657041666,360310,310 + 1,1,1657041666,400000,1657041666,400688,688 + 1,1,1657041666,440000,1657041666,441162,1162 + 1,1,1657041666,480000,1657041666,481150,1150 + 1,1,1657041666,520000,1657041666,521148,1148 + 1,1,1657041666,560000,1657041666,560984,984 + 1,1,1657041666,600000,1657041666,601148,1148 + 1,1,1657041666,640000,1657041666,641182,1182 + 1,1,1657041666,680000,1657041666,680739,739 + 1,1,1657041666,720000,1657041666,720966,966 + 1,1,1657041666,760000,1657041666,761309,1309 diff --git a/DBServer/Sample DBConnect.c b/DBServer/Sample DBConnect.c new file mode 100755 index 0000000..e995d0a --- /dev/null +++ b/DBServer/Sample DBConnect.c @@ -0,0 +1,145 @@ +/* ----------------------------------------------------------------------------- + * db.c & iPDC_DB_Queries + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Kedar V. Khandeparkar + * Nitesh Pandit + * + * ----------------------------------------------------------------------------- */ + + +/**************************************** Begin of db.c *******************************************************/ + +#include +#include + +main() { /* Simple C program that connects to MySQL Database server*/ + + MYSQL *conn; + MYSQL_RES *res; + MYSQL_ROW row; + + char *server = "localhost"; + char *user = "root"; + char *password = "root"; /* set me first */ + char *database = "test"; + + conn = mysql_init(NULL); + + /* Connect to database */ + if (!mysql_real_connect(conn, server, + user, password, database, 0, NULL, 0)) { + fprintf(stderr, "%s\n", mysql_error(conn)); + exit(1); + } + + char cmd[40]; + int i=2; + sprintf(cmd, "select * from student"); + + /* send SQL query */ + if (mysql_query(conn, cmd)) { + fprintf(stderr, "%s\n", mysql_error(conn)); + exit(1); + } + + res = mysql_use_result(conn); + + /* output table name */ + printf("Data in student:\n"); + while ((row = mysql_fetch_row(res)) != NULL) + printf("%s \n", row[0]); + /* close connection */ + mysql_free_result(res); + mysql_close(conn); +} + + +/**************************************** Begins of iPDC_DB_Queries *******************************************************/ + +/* + + ANALOG + ANALOG_MEASUREMENTS + DIGITAL + DIGITAL_MEASUREMENTS + FREQUENCY_MEASUREMENTS + MAIN_CFG_TABLE + PHASOR + PHASOR_MEASUREMENTS + REVEIVED_FRAME_TIME + SUB_CFG_TABLE + + +----CFG + +SELECT * FROM MAIN_CFG_TABLE; +SELECT * FROM SUB_CFG_TABLE; +SELECT * FROM PHASOR; +SELECT * FROM ANALOG; +SELECT * FROM DIGITAL; + +SELECT * from PHASOR_MEASUREMENTS WHERE SOC = (SELECT MAX(SOC) FROM PHASOR_MEASUREMENTS); + +delete from MAIN_CFG_TABLE; +delete from SUB_CFG_TABLE; +delete from PHASOR; +delete from ANALOG; +delete from DIGITAL; +delete from PHASOR_MEASUREMENTS; +delete from FREQUENCY_MEASUREMENTS; +delete from ANALOG_MEASUREMENTS; +delete from DIGITAL_MEASUREMENTS; +delete from REVEIVED_FRAME_TIME; + +----DATA + +SELECT * FROM PHASOR_MEASUREMENTS ; +SELECT * FROM FREQUENCY_MEASUREMENTS; +SELECT * FROM ANALOG_MEASUREMENTS; +SELECT * FROM DIGITAL_MEASUREMENTS; +SELECT * FROM REVEIVED_FRAME_TIME; + +SELECT COUNT(*) FROM PHASOR_MEASUREMENTS ; +SELECT COUNT(*) FROM FREQUENCY_MEASUREMENTS; +SELECT COUNT(*) FROM ANALOG_MEASUREMENTS; +SELECT COUNT(*) FROM DIGITAL_MEASUREMENTS; + +// To verify the number of frames received per second from PMU Simulator. +SELECT COUNT(*) from PHASOR_MEASUREMENTS WHERE SOC = (SELECT MAX(SOC)-n FROM PHASOR_MEASUREMENTS); +SELECT COUNT(*) from ANALOG_MEASUREMENTS WHERE SOC = (SELECT MAX(SOC)-n FROM ANALOG_MEASUREMENTS); + +----DROP TABLE + +drop table MAIN_CFG_TABLE; +drop table SUB_CFG_TABLE; +drop table PHASOR; +drop table ANALOG; +drop table DIGITAL; +drop table PHASOR_MEASUREMENTS; +drop table FREQUENCY_MEASUREMENTS; +drop table ANALOG_MEASUREMENTS; +drop table DIGITAL_MEASUREMENTS; +drop table REVEIVED_FRAME_TIME; +*/ + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/cfg.bin b/DBServer/cfg.bin new file mode 100644 index 0000000000000000000000000000000000000000..54a4732c7e99888ab44682a66dac9dc3b786a34e GIT binary patch literal 94 zcmZ2w$PmZCm~^CYDZ}*WD-8et|7T!yR6qp`j0_Aw3?u^#QDvM^xe5#n;@5%7*uXj@ HBOe0*-U1N~ literal 0 HcmV?d00001 diff --git a/DBServer/connections.c b/DBServer/connections.c new file mode 100755 index 0000000..1209f3b --- /dev/null +++ b/DBServer/connections.c @@ -0,0 +1,271 @@ +/* ----------------------------------------------------------------------------- + * connections.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* Functions defined in connections.c */ +/* -----------------------------------------------------------------------------*/ + +/* 1. void setup() */ +/* 2. void* DB_udp() */ +/* 3. void* DB_udphandler(void * udp_BUF) */ +/* 4. void DB_process_UDP(char* udp_BUF) */ + +/* ---------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "connections.h" +#include "parser.h" +#include "global.h" + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +pthread_mutex_t mutex_on_buffer; + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION setup(): */ +/* ---------------------------------------------------------------------------- */ + +void setup(){ + + printf("Entering DBServer setup()\n"); + + /* MySQL data base parameters */ + server = "localhost"; + user = "root"; + password = "root"; /* Change this password value, if not the same in your case? */ + database = "iPDC"; + + /* MySQL data base connection */ + conn_data = mysql_init(NULL); + conn_cfg = mysql_init(NULL); + + if(conn_data == NULL) { + + printf("No sufficient memory\n"); + exit(1); + } + + if(conn_cfg == NULL) { + + printf("No sufficient memory\n"); + exit(1); + } + + /* Connect to database */ + if (!mysql_real_connect(conn_data, server, + user, password, database, 0, NULL, 0)) { + + fprintf(stderr, "%s\n", mysql_error(conn_data)); + exit(1); + } + + if (!mysql_real_connect(conn_cfg, server, + user, password, database, 0, NULL, 0)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + + /* Create UDP socket and bind to port */ + int yes; + if ((DB_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + + perror("socket"); + exit(1); + + } else { + + printf("DB Socket:Sucessfully created\n"); + + } + + if (setsockopt(DB_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + DB_server_addr.sin_family = AF_INET; // host byte order + DB_server_addr.sin_port = htons(DBPORT); // short, network byte order + DB_server_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(DB_server_addr.sin_zero),'\0', 8); // zero the rest of the struct + + if (bind(DB_sockfd, (struct sockaddr *)&DB_server_addr, + sizeof(DB_server_addr)) == -1) { + perror("bind"); + exit(1); + + } else { + + printf("DB Socket Bind :Sucessfull\n"); + } + + printf("\nDB Server Listening on port %d\n",DBPORT); + + DB_addr_len = sizeof(struct sockaddr); + + DB_udp(); + mysql_close(conn_cfg); + mysql_close(conn_data); + +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION udp(): */ +/* It creates a Pthread for each received UDP data. */ +/* ---------------------------------------------------------------------------- */ + + +void DB_udp(){ + + // UDP threads are created for each received UDP message in 'detached' mode. Thus allowing any number of threads to be created. + int err; + pthread_attr_t attr; + pthread_attr_init(&attr); + + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { // In the detached state, the thread resources are + // immediately freed when it terminates, but + perror(strerror(err)); // pthread_join(3) cannot be used to synchronize + exit(1); // on the thread termination. + + } + + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { // Shed policy = SCHED_FIFO (realtime, first-in first-out) + + perror(strerror(err)); + exit(1); + } + + + /* UDP data Received */ + while(1) { + + if ((numbytes = recvfrom(DB_sockfd,buffer, MAXBUFLEN-1, 0,(struct sockaddr *)&their_addr, (socklen_t *)&DB_addr_len)) == -1) { + // Main if + perror("recvfrom"); + exit(1); + + } else { /* New datagram has been received */ + + pthread_t t; + int tt; + unsigned char *udp_BUF; + udp_BUF = malloc(MAXBUFLEN*sizeof(unsigned char)); + + if(!udp_BUF) { + + printf("No space for udp_BUF\n"); + exit(1); + } + + printf("UDP Server got packet from %s\n",inet_ntoa(their_addr.sin_addr)); + printf("packet is %d bytes long.\n",numbytes); + buffer[numbytes] = '\0'; + + /* Copy the udp_buf data to a local variable */ + pthread_mutex_lock(&mutex_on_buffer); + copy_cbyc(udp_BUF,buffer,MAXBUFLEN); + memset(buffer, '\0', MAXBUFLEN); + pthread_mutex_unlock(&mutex_on_buffer); + + /* Creates a new thread for each received UDP message */ + if((tt = pthread_create(&t,&attr,DB_udphandler,(void *)udp_BUF))) { + + perror(strerror(tt)); + exit(1); + } + + } // Main if ends + + } // while ends + + pthread_attr_destroy(&attr); +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION udphandler(): */ +/* It internally calls process_UDP(). */ +/* ---------------------------------------------------------------------------- */ + +void* DB_udphandler(void * udp_BUF) { + + DB_process_UDP((unsigned char*)udp_BUF); + + free((unsigned char*)udp_BUF); + + pthread_exit(NULL); /* Exit the thread once the task is done. */ + +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION process_UDP(): */ +/* This function Processes the frames as per their type(command, data, config). */ +/* ---------------------------------------------------------------------------- */ + +void DB_process_UDP(unsigned char* udp_BUF){ + + int stat_status,i; + unsigned char c = udp_BUF[1]; + c <<= 1; + c >>= 5; + if(c == 0x00){ /* If data frame */ + + printf("\nData frame reveived\n"); + stat_status = dataparser(udp_BUF); + printf("Return from Data Parser\n"); + + } else if(c == 0x03) { /* If configuration frame */ + + printf("\nConfiguration frame reveived\n"); + cfgparser(udp_BUF); + printf("Return from CFG\n"); + + + } else { + + printf("Erroneous frame\n"); + + } + fflush(stdout); +} + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/connections.h b/DBServer/connections.h new file mode 100755 index 0000000..3ec106a --- /dev/null +++ b/DBServer/connections.h @@ -0,0 +1,57 @@ +/* ----------------------------------------------------------------------------- + * connections.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include + +/* ---------------------------------------------------------------- */ +/* global variable */ +/* ---------------------------------------------------------------- */ + +#define DBPORT 9000 +#define MAXBUFLEN 2000 + +int DB_sockfd; //socket descriptor +struct sockaddr_in DB_server_addr,their_addr; +int DB_addr_len,numbytes; +unsigned char buffer[MAXBUFLEN]; + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void setup(); + +void DB_udp(); + +void* DB_udphandler(void * udp_BUF); + +void DB_process_UDP(unsigned char* udp_BUF); + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/dallocate.c b/DBServer/dallocate.c new file mode 100755 index 0000000..64cdf0b --- /dev/null +++ b/DBServer/dallocate.c @@ -0,0 +1,112 @@ +/* ----------------------------------------------------------------------------- + * dallocate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include "parser.h" +#include "dallocate.h" +#include "global.h" + +/* ------------------------------------------------------------------------------------ */ +/* Functions defined in dallocate.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. void free_cfgframe_object(struct cfg_frame *cfg) */ +/* 2. void free_2darray(char** array, int x) */ + +/* ------------------------------------------------------------------------------------ */ + + +/* -------------------------------------------------------------*/ +/* FUNCTION free_cfgframe_object(): */ +/* It frees memory allocated to cfg objects. */ +/* ------------------------------------------------------------ */ + +void free_cfgframe_object(struct cfg_frame *cfg) { + + int j = 0; + struct dgnames *t_dgnames,*r_dgnames; + printf("Inside free_cfgframe_object()\n"); + + while(jnum_pmu) { + + if(cfg->pmu[j]->phnmr != 0) + free_2darray(cfg->pmu[j]->cnext->phnames,cfg->pmu[j]->phnmr); + if(cfg->pmu[j]->annmr != 0) + free_2darray(cfg->pmu[j]->cnext->angnames,cfg->pmu[j]->annmr); + + if(cfg->pmu[j]->dgnmr != 0) { + + t_dgnames = cfg->pmu[j]->cnext->first; + while(t_dgnames != NULL) { + + r_dgnames = t_dgnames->dg_next; + free_2darray(t_dgnames->dgn,16); + t_dgnames = r_dgnames; + + } + } + + if(cfg->pmu[j]->dgnmr != 0) + free_2darray(cfg->pmu[j]->dgunit,cfg->pmu[j]->dgnmr); + + j++; + } // End of While + + free(cfg); +} + +/* -------------------------------------------------------------*/ +/* FUNCTION free_2darray: */ +/* It frees memory allocated to 2D Arrays. */ +/* -------------------------------------------------------------*/ + +void free_2darray_l(long int **array, int x){ + + int i; + for(i=0; i + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +void free_cfgframe_object(struct cfg_frame *cfg); // Frees memory allocated to cfg objects + +void free_2darray_l(long int** array, int x); // frees memory allocated to 2D arrays + +void free_2darray(unsigned char** array, int x); // frees memory allocated to 2D arrays + +/**************************************** End of File *******************************************************/ + diff --git a/DBServer/dbserver.c b/DBServer/dbserver.c new file mode 100755 index 0000000..e55608d --- /dev/null +++ b/DBServer/dbserver.c @@ -0,0 +1,52 @@ +/* ----------------------------------------------------------------------------- + * dbserver.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include "connections.h" +#include "parser.h" +#include "recreate.h" + +/* ---------------------------------------------------------------- */ +/* main program starts here */ +/* ---------------------------------------------------------------- */ + +int main(void) { + + system("clear"); + recreate_cfg_objects() ; + setup(); + return 0; +} + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/global.h b/DBServer/global.h new file mode 100755 index 0000000..86063c5 --- /dev/null +++ b/DBServer/global.h @@ -0,0 +1,59 @@ +/* ----------------------------------------------------------------------------- + * global.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include + + +/* ---------------------------------------------------------------- */ +/* Database variables */ +/* ---------------------------------------------------------------- */ + +char *server; +char *user; +char *password ; +char *database ; +int BUFF_LEN; + +MYSQL *conn_data; // Connection to database for data insertion +MYSQL *conn_cfg; // Connection to database for cfg insertion + +pthread_mutex_t mutex_cfg; // To lock cfg objects +pthread_mutex_t mutex_file; // To lock cfg.txt +pthread_mutex_t mutex_MYSQL_CONN_ON_DATA; // To lock 'conn_data' connection for DATA insertion +pthread_mutex_t mutex_MYSQL_CONN_ON_CFG; // To lock 'conn_cfg' connection for CFG insertion + +pthread_mutex_t mutex_phasor_buffer; +char *phasorBuff; +char *frequencyBuff; +char *digitalBuff; +char *analogBuff; +char *delayBuff; + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/parser.c b/DBServer/parser.c new file mode 100755 index 0000000..515e15f --- /dev/null +++ b/DBServer/parser.c @@ -0,0 +1,1837 @@ +/* ----------------------------------------------------------------------------- + * parser.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* Functions defined in parser.c */ +/* -----------------------------------------------------------------------------*/ + +/* 1. void cfgparser(char []) */ +/* 2. int remove_old_cfg(char[]) */ +/* 3. void cfginsert(struct cfg_frame *) */ +/* 4. void dataparser(char[]) */ +/* 5. int check_statword(char stat[]) */ +/* 6. void hexTobin(char []) */ +/* 7. void hexToAscii(char []) */ + +/* ---------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "dallocate.h" +#include "connections.h" + +const int PI = 3.14; + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfgparser(): */ +/* It creates configuration objects for the received configuration frames. */ +/* Configuration frame is also written in the file `cfg.bin`. */ +/* If the object is already present, it will replace in cfg_frame LL and */ +/* also in the file `cfg.bin` by calling remove_old_cfg(). */ +/* ---------------------------------------------------------------------------- */ + +void cfgparser(unsigned char st[]){ + + FILE *fp; + unsigned char *s; + int match = 0,dgchannels,i,j, phtype, antype; + struct cfg_frame *cfg; + struct channel_names *cn; + unsigned long int l_phunit,l_anunit; + + unsigned char *sync,*frame_size,*idcode_h,*soc,*fracsec,*time_base,*num_pmu,*stn,*idcode_l,*format,*phnmr,*annmr,*dgnmr; + unsigned char *fnom,*cfg_cnt,*data_rate,*buf; + + sync = malloc(3*sizeof(unsigned char)); + frame_size = malloc(3*sizeof(unsigned char)); + idcode_h= malloc(3*sizeof(unsigned char)); + soc = malloc(5*sizeof(unsigned char)); + fracsec = malloc(5*sizeof(unsigned char)); + time_base = malloc(5*sizeof(unsigned char)); + num_pmu = malloc(3*sizeof(unsigned char)); + stn = malloc(17*sizeof(unsigned char)); + idcode_l = malloc(3*sizeof(unsigned char)); + format = malloc(5*sizeof(unsigned char)); + phnmr = malloc(3*sizeof(unsigned char)); + annmr = malloc(3*sizeof(unsigned char)); + dgnmr = malloc(3*sizeof(unsigned char)); + + fnom = malloc(3*sizeof(unsigned char)); + cfg_cnt = malloc(3*sizeof(unsigned char)); + data_rate = malloc(3*sizeof(unsigned char)); + buf = malloc(9*sizeof(unsigned char)); + + memset(sync,'\0',3); + memset(frame_size,'\0',3); + memset(idcode_h,'\0',3); + memset(soc,'\0',3); + memset(fracsec,'\0',5); + memset(time_base,'\0',5); + memset(num_pmu,'\0',3); + memset(stn,'\0',17); + memset(idcode_l,'\0',3); + memset(format,'\0',3); + memset(phnmr,'\0',3); + memset(annmr,'\0',3); + memset(dgnmr,'\0',3); + + memset(fnom,'\0',3); + memset(cfg_cnt ,'\0',3); + memset(data_rate,'\0',3); + memset(buf,'\0',9); + + /******************** PARSING BEGINGS *******************/ + + pthread_mutex_lock(&mutex_file); + + fp = fopen("cfg.bin","ab"); //Store configuration in a file + + if (fp == NULL) + printf("File doesn't exist\n"); + + cfg = malloc(sizeof(struct cfg_frame)); + if(!cfg) { + printf("No enough memory for cfg\n"); + } + + printf("Inside cfgparser()\n"); + s = st; + + //Copy sync word to file + copy_cbyc (sync,(unsigned char *)s,2); + sync[2] = '\0'; + s = s + 2; + + // Separate the FRAME SIZE + copy_cbyc (frame_size,(unsigned char *)s,2); + frame_size[2]='\0'; + cfg->framesize = to_intconvertor(frame_size); + printf("FRAME SIZE %d\n",cfg->framesize); + s = s + 2; + + size_t result; + + result = fwrite(st, sizeof(unsigned char),cfg->framesize, fp); + printf("No of bytes written %ld, into the cfg file.\n",(long int)result); + + unsigned long fileLen; + fseek(fp, 0, SEEK_END); + fileLen = ftell(fp); + fseek(fp, 0, SEEK_SET); + printf("FILE LENGTH %ld\n",fileLen); + + + //SEPARATE IDCODE + copy_cbyc (idcode_h,(unsigned char *)s,2); + idcode_h[2] = '\0'; + cfg->idcode = to_intconvertor(idcode_h); + printf("ID Code %d\n",cfg->idcode); + s = s + 2; + + //SEPARATE SOC + copy_cbyc (soc,(unsigned char *)s,4); + soc[4] = '\0'; + cfg->soc = to_long_int_convertor(soc); + printf("SOC %ld\n",cfg->soc); + s =s + 4; + + //SEPARATE FRACSEC + copy_cbyc (fracsec,(unsigned char *)s,4); + fracsec[4] = '\0'; + cfg->fracsec = to_long_int_convertor(fracsec); + printf("FracSec %ld\n",cfg->fracsec); + s = s + 4; + + //SEPARATE TIMEBASE + copy_cbyc (time_base,(unsigned char *)s,4); + time_base[4]='\0'; + cfg->time_base = to_long_int_convertor(time_base); + printf("Time Base %ld\n",cfg->time_base); + s = s + 4; + + //SEPARATE PMU NUM + copy_cbyc (num_pmu,(unsigned char *)s,2); + num_pmu[2] = '\0'; + cfg->num_pmu = to_intconvertor(num_pmu); + printf("Number of PMU's %d\n",cfg->num_pmu); + s = s + 2; + + // Allocate Memeory For Each PMU + cfg->pmu = malloc(cfg->num_pmu* sizeof(struct for_each_pmu *)); + if(!cfg->pmu) { + printf("Not enough memory pmu[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->num_pmu; i++) { + cfg->pmu[i] = malloc(sizeof(struct for_each_pmu)); + } + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jnum_pmu) { + + //SEPARATE STATION NAME + memset(cfg->pmu[j]->stn,'\0',17); + copy_cbyc (cfg->pmu[j]->stn,(unsigned char *)s,16); + cfg->pmu[j]->stn[16] = '\0'; + + printf("STATION NAME %s\n",cfg->pmu[j]->stn); + s = s + 16; + + //SEPARATE IDCODE + copy_cbyc (idcode_l,(unsigned char *)s,2); + idcode_l[2]='\0'; + cfg->pmu[j]->idcode = to_intconvertor(idcode_l); + printf("ID Code %d\n",cfg->pmu[j]->idcode); + s = s + 2; + + //SEPARATE DATA FORMAT + copy_cbyc ((unsigned char *)cfg->pmu[j]->data_format,(unsigned char *)s,2); + cfg->pmu[j]->data_format[2]='\0'; + //printf("PMU format %s\n",cfg->pmu[j]->data_format); + s = s + 2; + + unsigned char hex = cfg->pmu[j]->data_format[1]; + hex <<= 4; + + // Extra field has been added to identify polar,rectangular,floating/fixed point + cfg->pmu[j]->fmt = malloc(sizeof(struct format)); + if((hex & 0x80) == 0x80) cfg->pmu[j]->fmt->freq = 1; else cfg->pmu[j]->fmt->freq = 0; + if((hex & 0x40) == 0x40 ) cfg->pmu[j]->fmt->analog = 1; else cfg->pmu[j]->fmt->analog = 0; + if((hex & 0x20) == 0x20) cfg->pmu[j]->fmt->phasor = 1; else cfg->pmu[j]->fmt->phasor = 0; + if((hex & 0x10) == 0x10) cfg->pmu[j]->fmt->polar = 1; else cfg->pmu[j]->fmt->polar = 0; + + //SEPARATE PHASORS + copy_cbyc (phnmr,(unsigned char *)s,2); + phnmr[2]='\0'; + cfg->pmu[j]->phnmr = to_intconvertor(phnmr); + printf("Phasors %d\n",cfg->pmu[j]->phnmr); + s = s + 2; + + //SEPARATE ANALOGS + copy_cbyc (annmr,(unsigned char *)s,2); + annmr[2]='\0'; + cfg->pmu[j]->annmr = to_intconvertor(annmr); + printf("Analogs %d\n",cfg->pmu[j]->annmr); + s = s + 2; + + //SEPARATE DIGITALS + copy_cbyc (dgnmr,(unsigned char *)s,2); + dgnmr[2]='\0'; + cfg->pmu[j]->dgnmr = to_intconvertor(dgnmr); + printf("Digitals %d\n",cfg->pmu[j]->dgnmr); + s = s + 2; + + cn = malloc(sizeof(struct channel_names)); + cn->first = NULL; + + ////SEPARATE PHASOR NAMES + if(cfg->pmu[j]->phnmr != 0){ + cn->phtypes = malloc((cfg->pmu[j]->phnmr) * sizeof(unsigned char*)); + cn->phnames = malloc((cfg->pmu[j]->phnmr) * sizeof(unsigned char*)); + if(!cn->phnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->phnmr; i++) { + + cn->phnames[i] = malloc(17*sizeof(unsigned char)); + memset(cn->phnames[i],'\0',17); + cn->phtypes[i] = malloc(2*sizeof(unsigned char)); + memset(cn->phtypes[i],'\0',2); + + } + + cfg->pmu[j]->phunit = malloc(cfg->pmu[j]->phnmr*sizeof(float*)); + if(!cfg->pmu[j]->phunit) { + printf("Not enough memory cfg.pmu[j]->phunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->phnmr; i++) { + cfg->pmu[j]->phunit[i] = malloc(sizeof(float)); + } + + + i = 0;//Index for PHNAMES + while(ipmu[j]->phnmr){ + + copy_cbyc (cn->phnames[i],(unsigned char *)s,16); + cn->phnames[i][16] = '\0'; + printf("Phnames %s\n",cn->phnames[i]); + s = s + 16; + i++; + } + } + + //SEPARATE ANALOG NAMES + if(cfg->pmu[j]->annmr != 0){ + cn->antypes = malloc((cfg->pmu[j]->annmr)*sizeof(unsigned char*)); + cn->angnames = malloc((cfg->pmu[j]->annmr)*sizeof(unsigned char*)); + if(!cn->angnames) { + + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->annmr; i++) { + + cn->angnames[i] = malloc(17*sizeof(unsigned char)); + memset(cn->angnames[i],'\0',17); + cn->antypes[i] = malloc(5*sizeof(unsigned char)); + memset(cn->antypes[i],'\0',5); + } + + cfg->pmu[j]->anunit = malloc(cfg->pmu[j]->annmr*sizeof(float*)); + if(!cfg->pmu[j]->anunit) { + printf("Not enough memory cfg.pmu[j]->anunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->annmr; i++) { + cfg->pmu[j]->anunit[i] = malloc(sizeof(float)); + } + + i = 0;//Index for ANGNAMES + + while(ipmu[j]->annmr){ + copy_cbyc (cn->angnames[i],(unsigned char *)s,16); + cn->angnames[i][16]='\0'; + printf("ANGNAMES %s\n",cn->angnames[i]); + s = s + 16; + i++; + } + } + + + if(cfg->pmu[j]->dgnmr != 0){ + + cfg->pmu[j]->dgunit = malloc(cfg->pmu[j]->dgnmr*sizeof(unsigned char*)); + if(!cfg->pmu[j]->dgunit) { + + printf("Not enough memory cfg->pmu[j]->dgunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->dgnmr; i++) { + + cfg->pmu[j]->dgunit[i] = malloc(5); + } + } + + i = 0; + int di;//Index for number of dgwords + + struct dgnames *q; + + while(i < cfg->pmu[j]->dgnmr) { + + struct dgnames *temp1 = malloc(sizeof(struct dgnames)); + temp1->dgn = malloc(16*sizeof(unsigned char *)); + if(!temp1->dgn) { + + printf("Not enough memory temp1->dgn\n"); + exit(1); + } + + for (di = 0; di < 16; di++) { + + temp1->dgn[di] = malloc(17*sizeof(unsigned char)); + + } + + temp1->dg_next = NULL; + + for(dgchannels = 0;dgchannels < 16;dgchannels++){ + + memset(temp1->dgn[dgchannels],'\0',16); + copy_cbyc (temp1->dgn[dgchannels],(unsigned char *)s,16); + temp1->dgn[dgchannels][16] = '\0'; + s += 16; + printf("%s\n",temp1->dgn[dgchannels]); + } + + if(cn->first == NULL){ + cn->first = q = temp1; + + } else { + + while(q->dg_next!=NULL){ + q = q->dg_next; + } + q->dg_next = temp1; + } + + i++; + } //DGWORD WHILE ENDS + + cfg->pmu[j]->cnext = cn;//Assign to pointers + + ///PHASOR FACTORS + if(cfg->pmu[j]->phnmr != 0){ + + i = 0; + while(i < cfg->pmu[j]->phnmr){ //Separate the Phasor conversion factors + + memset(buf,'\0',9); + copy_cbyc (buf,(unsigned char *)s,1); + buf[1] = '\0'; + s = s + 1; + phtype = to_intconvertor1(buf); + copy_cbyc (buf,(unsigned char *)s,3); + buf[3] = '\0'; + s = s + 3; + l_phunit = to_long_int_convertor1(buf); + + if (phtype == 0) + { + cfg->pmu[j]->cnext->phtypes[i] = "V"; + if (cfg->pmu[j]->fmt->phasor == 0) + { + *cfg->pmu[j]->phunit[i] = l_phunit * 1e-5; + } + else + { + *cfg->pmu[j]->phunit[i] = 1; + } + } + else if (phtype == 1) + { + cfg->pmu[j]->cnext->phtypes[i] = "I"; + if (cfg->pmu[j]->fmt->phasor == 0) + { + *cfg->pmu[j]->phunit[i] = l_phunit * 1e-5; + } + else + { + *cfg->pmu[j]->phunit[i] = 1; + } + } + else + { + perror("Invalid first byte in PHUNIT - probably error in PMU"); + } + + printf("Phasor Factor %d = %f\n",i,*cfg->pmu[j]->phunit[i]); + i++; + } + }//if for PHASOR Factors ends + + //ANALOG FACTORS + if(cfg->pmu[j]->annmr != 0){ + + i=0; + while(ipmu[j]->annmr){ //Separate the Phasor conversion factors + + memset(buf,'\0',9); + copy_cbyc (buf,(unsigned char *)s,1); + buf[1] = '\0'; + s = s + 1; + + antype = to_intconvertor1(buf); + switch(antype) + { + case 0 : cfg->pmu[j]->cnext->antypes[i] = "POW"; + break; + case 1 : cfg->pmu[j]->cnext->antypes[i] = "RMS"; + break; + case 2 : cfg->pmu[j]->cnext->antypes[i] = "PEAK"; + break; + default: perror("Invalid first byte in ANUNIT?"); + break; + } + + copy_cbyc (buf,(unsigned char *)s,3); + buf[3] = '\0'; + s = s + 3; + l_anunit = to_long_int_convertor1(buf); + + if (cfg->pmu[j]->fmt->analog == 0) + { + *cfg->pmu[j]->anunit[i] = l_anunit * 1e-5; // Assumed factor of 1e5 in iPDC + } + else + { + *cfg->pmu[j]->anunit[i] = 1; + } + + printf("Analog Factor %d = %f\n",i,*cfg->pmu[j]->anunit[i]); + i++; + } + + } // if for ANALOG FActtors ends + + ///DIGITAL FACTORS + if(cfg->pmu[j]->dgnmr != 0){ + + i = 0; + while(i < cfg->pmu[j]->dgnmr ){ //Separate the Digital conversion factors + + copy_cbyc(cfg->pmu[j]->dgunit[i],(unsigned char *)s,4); + cfg->pmu[j]->dgunit[i][4] = '\0'; + printf("DGWORD %s\n",cfg->pmu[j]->dgunit[i]); + s += 4; + i++; + } + } //if for Digital Words FActtors ends + + copy_cbyc (fnom,(unsigned char *)s,2); + fnom[2]='\0'; + cfg->pmu[j]->fnom = to_intconvertor(fnom); + printf("FREQUENCY %d\n",cfg->pmu[j]->fnom); + s = s + 2; + + copy_cbyc (cfg_cnt,(unsigned char *)s,2); + cfg_cnt[2] = '\0'; + cfg->pmu[j]->cfg_cnt = to_intconvertor(cfg_cnt); + printf("CFG CHANGE COUNT %d\n",cfg->pmu[j]->cfg_cnt); + s = s + 2; + j++; + }//While for PMU number ends + + copy_cbyc (data_rate,(unsigned char *)s,2); + data_rate[2] = '\0'; + cfg->data_rate = to_intconvertor(data_rate); + printf("Data Rate %d\n",cfg->data_rate); + s += 2; + cfg->cfgnext = NULL; + + // Adjust the configuration object pointers + + // Lock the mutex_cfg + pthread_mutex_lock(&mutex_cfg); + + // Index is kept to replace the cfgfirst if it matches + int index = 0; + + if (cfgfirst == NULL) { // Main if + printf("1\n"); + cfgfirst = cfg; + fclose(fp); + + } else { + + struct cfg_frame *temp_cfg = cfgfirst,*tprev_cfg; + tprev_cfg = temp_cfg; + + //Check if the configuration frame already exists + while(temp_cfg!=NULL){ + + if(cfg->idcode == temp_cfg->idcode) { + + printf("CFG PRESENT NEED TO REPLACE\n"); + match = 1; + break; + + } else { + + index++; + tprev_cfg = temp_cfg; + temp_cfg = temp_cfg->cfgnext; + + } + }// While ends + + if(match) { + + if(!index) { + + // Replace the cfgfirst + cfg->cfgnext = cfgfirst->cfgnext; + free_cfgframe_object(cfgfirst); + cfgfirst = cfg; + + // Get the new value of the CFG frame + fclose(fp); + remove_old_cfg(cfg->idcode,st); + + } else { + + // Replace in between cfg + tprev_cfg->cfgnext = cfg; + cfg->cfgnext = temp_cfg->cfgnext; + free_cfgframe_object(temp_cfg); + fclose(fp); + remove_old_cfg(cfg->idcode,st); + } + + } else { // No match and not first cfg + + tprev_cfg->cfgnext = cfg; + fclose(fp); + } + + } //Main if + + cfginsert(cfg); // DATABASE INSERTION + pthread_mutex_unlock(&mutex_cfg); + pthread_mutex_unlock(&mutex_file); + + free(sync); + free(frame_size); + free(idcode_h); + free(soc); + free(fracsec); + free(time_base); + free(num_pmu); + free(stn); + free(idcode_l); + free(format); + free(phnmr); + free(annmr); + free(dgnmr); + free(fnom); + free(cfg_cnt); + free(data_rate); + free(buf); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_old_cfg(): */ +/* It removes the old configuration frame from the file `cfg.bin` and replaces */ +/* it with new configuration frame at same position in the file. */ +/* ---------------------------------------------------------------------------- */ + +void remove_old_cfg(int idcode,unsigned char frame[]) { // Begins + + FILE *file,*newfile; + int result; + unsigned int idCODE,framesize; + unsigned char *s,id[3],*line,frame_len[2]; + unsigned long fileLen; + + file = fopen("cfg.bin","rb"); + newfile = fopen("ncfg.bin","wb"); + if (file != NULL) { + + //Get file length + fseek(file, 0, SEEK_END); + fileLen = ftell(file); + fseek(file, 0, SEEK_SET); + printf("BEFORE REMOVAL OF OLDFRAME FILE LEN %ld\n",fileLen); + + while (fileLen != 0) /* Till the EOF */{ + + fseek (file,2 ,SEEK_CUR); + fread(frame_len, sizeof(unsigned char),2, file); + fseek (file,-4 ,SEEK_CUR); + + framesize = to_intconvertor(frame_len); + line = malloc(framesize*sizeof(unsigned char)); + memset(line,'\0',sizeof(line)); + fread(line, sizeof(unsigned char),framesize,file); + s = line; + s += 4; + //match IDCODE in cfg.bin file + copy_cbyc (id,s,2); + id[2] = '\0'; + idCODE = to_intconvertor(id); + + if(idCODE == idcode) { + + printf("MATCH the new cfg with old cfg in file cfg.bin?\n"); + break; + + } else { + + //Place rest of lines in the new file + fwrite(line, sizeof(unsigned char),framesize,newfile); + free(line); + fileLen -= framesize; + } + }//While ends + + // The new cfg is copied in the ncfg.bin file + unsigned int len; + unsigned char *p = frame; + p += 2; + copy_cbyc (frame_len,p,2); + len = to_intconvertor(frame_len); + fwrite(frame, sizeof(unsigned char),len,newfile); + + // If cfg.bin file still contains data copy it to ncfg.bin + while (fileLen != 0) /* Till the EOF */{ + + fseek (file,2 ,SEEK_CUR); + fread(frame_len, sizeof(unsigned char),2, file); + fseek (file,-4 ,SEEK_CUR); + + framesize = to_intconvertor(frame_len); + line = malloc(framesize*sizeof(unsigned char)); + memset(line,'\0',sizeof(line)); + fread(line, sizeof(unsigned char),framesize,file); + + if(!ncmp_cbyc(line,frame,framesize)) { + + //This skips the last line of the file that contains already added cfg + //hence we dont copy this line to ncfg.bin + break; + + } else { + + fwrite(frame, sizeof(unsigned char),framesize,newfile); + free(line); + fileLen -= framesize; + } + + } + + //File renaming + fclose (file); + fclose(newfile); + + if( remove( "cfg.bin" ) != 0 ) + perror( "Error deleting file" ); + result= rename("ncfg.bin","cfg.bin"); + if ( result == 0 ) + fputs ("File successfully renamed",stdout); + else + perror( "Error renaming file" ); + + } else { + + perror ("cfg.bin"); /* why didn't the file open? */ + + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfginsert(): */ +/* It inserts/updates the configuration frames in the configuration tables. */ +/* ---------------------------------------------------------------------------- */ + +void cfginsert(struct cfg_frame *cfg){ + + int i,j,k; + char *cmd,*cmd2; + MYSQL_RES *res1,*res2,*res3,*res4; + + printf("INSIDE CFG INSERT\n"); + + cmd = malloc(1000); + cmd2 = malloc(500); + memset(cmd,'\0',1000); //For update queries + memset(cmd2,'\0',500); //For insert queries + + pthread_mutex_lock(&mutex_MYSQL_CONN_ON_CFG); + + sprintf(cmd2, "SELECT * FROM MAIN_CFG_TABLE WHERE PDC_ID = %d",cfg->idcode); + + + if (mysql_query(conn_cfg,cmd2)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + + res1 = mysql_use_result(conn_cfg); + if(mysql_fetch_row(res1)== NULL) { + + mysql_free_result(res1); + printf("No Entry Make Insert into table\n"); + memset(cmd,'\0',1000); + sprintf(cmd, "INSERT INTO MAIN_CFG_TABLE VALUES(%d,%ld,%ld,%ld,%d,%d)",cfg->idcode,cfg->soc,cfg->fracsec, + cfg->time_base,cfg->num_pmu,cfg->data_rate); + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + j = 0; + while(j < cfg->num_pmu){ + + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO SUB_CFG_TABLE(PDC_ID,PMU_ID,SOC,FRACSEC,STN,PHNMR,ANNMR,DGNMR,FNOM) VALUES(%d,%d,%ld,%ld,\"%s\",%d,%d,%d,%d)",cfg->idcode,cfg->pmu[j]->idcode,cfg->soc,cfg->fracsec,cfg->pmu[j]->stn,cfg->pmu[j]->phnmr,cfg->pmu[j]->annmr,cfg->pmu[j]->dgnmr,(cfg->pmu[j]->fnom > 0) ? 50 : 60); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + if(cfg->pmu[j]->phnmr != 0){ + for(i = 0;ipmu[j]->phnmr;i++) { + + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO PHASOR(PDC_ID,PMU_ID,PHASOR_NAMES,PHASOR_TYPE,PHUNITS) VALUES (%d,%d,\"%s\",\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i],cfg->pmu[j]->cnext->phtypes[i],*cfg->pmu[j]->phunit[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + } + } + + if(cfg->pmu[j]->annmr != 0){ + for(i = 0;ipmu[j]->annmr;i++) { + + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO ANALOG(PDC_ID,PMU_ID,ANALOG_NAMES,ANALOG_TYPE,ANUNITS) VALUES(%d,%d,\"%s\",\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i],cfg->pmu[j]->cnext->antypes[i],*cfg->pmu[j]->anunit[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + } + } + + if(cfg->pmu[j]->dgnmr != 0){ + + unsigned long int dunit; + struct dgnames *temp_dnames = cfg->pmu[j]->cnext->first; + for(i = 0;ipmu[j]->dgnmr;i++) { + + for(k = 0;k<16;k++) { + + dunit = to_long_int_convertor(cfg->pmu[j]->dgunit[i]); + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO DIGITAL(PDC_ID,PMU_ID,DIGITAL_NAMES,DIGITAL_WORD) VALUES(%d,%d,\"%s\",%u)",cfg->idcode,cfg->pmu[j]->idcode,temp_dnames->dgn[k],(unsigned int)dunit); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + } + + temp_dnames = temp_dnames->dg_next; + } + } + + j++; + } + + } else { + + // update + mysql_free_result(res1); + + printf("Update the existing entry in table\n"); + memset(cmd,'\0',1000); + + sprintf(cmd, "UPDATE MAIN_CFG_TABLE SET SOC = %ld,FRACSEC = %ld,TIMEBASE = %ld,NUM_OF_PMU = %d,DATA_RATE = %d WHERE PDC_ID = %d",cfg->soc,cfg->fracsec,cfg->time_base,cfg->num_pmu,cfg->data_rate,cfg->idcode); + + if (mysql_query(conn_cfg,cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + mysql_query(conn_cfg, "COMMIT"); + printf("%s\n",cmd); + + int j = 0; + while(j < cfg->num_pmu){ + + memset(cmd2,'\0',500); + + sprintf(cmd2, "SELECT * FROM SUB_CFG_TABLE WHERE PDC_ID = %d AND PMU_ID = %d AND STN = \"%s\"",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->stn); + + if (mysql_query(conn_cfg, cmd2)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + res2 = mysql_use_result(conn_cfg); + printf("%s\n",cmd2); + + if(mysql_fetch_row(res2)== NULL) { + + mysql_free_result(res2); + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO SUB_CFG_TABLE(PDC_ID,PMU_ID,SOC,FRACSEC,STN,PHNMR,ANNMR,DGNMR,FNOM) VALUES(%d,%d,%ld,%ld,\"%s\",%d,%d,%d,%d)",cfg->idcode,cfg->pmu[j]->idcode,cfg->soc,cfg->fracsec,cfg->pmu[j]->stn,cfg->pmu[j]->phnmr,cfg->pmu[j]->annmr,cfg->pmu[j]->dgnmr,(cfg->pmu[j]->fnom > 0) ? 50 : 60); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + } else { + + mysql_free_result(res2); + memset(cmd,'\0',1000); + + sprintf(cmd, "UPDATE SUB_CFG_TABLE SET PHNMR = %d,ANNMR = %d,DGNMR = %d,FNOM = %d WHERE PDC_ID = %d AND PMU_ID = %d AND STN = \"%s\"",cfg->pmu[j]->phnmr,cfg->pmu[j]->annmr,cfg->pmu[j]->dgnmr,(cfg->pmu[j]->fnom > 0) ? 50 : 60,cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->stn); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + + mysql_query(conn_cfg, "COMMIT"); + printf("%s\n",cmd); + } + + if(cfg->pmu[j]->phnmr !=0){ + for(i = 0;ipmu[j]->phnmr;i++) { + + memset(cmd2,'\0',500); + + sprintf(cmd2, "SELECT * FROM PHASOR WHERE PDC_ID = %d AND PMU_ID = %d AND PHASOR_NAMES = \"%s\"",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i]); + + if (mysql_query(conn_cfg, cmd2)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd2); + + res3 = mysql_use_result(conn_cfg); + if(mysql_fetch_row(res3)== NULL) { + + mysql_free_result(res3); + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO PHASOR(PDC_ID,PMU_ID,PHASOR_NAMES,PHASOR_TYPE,PHUNITS) VALUES (%d,%d,\"%s\",\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i],cfg->pmu[j]->cnext->phtypes[i],*cfg->pmu[j]->phunit[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + } else { + + mysql_free_result(res3); + memset(cmd,'\0',1000); + sprintf(cmd,"UPDATE PHASOR SET PHUNITS = %f, PHASOR_TYPE = \"%s\" WHERE PDC_ID = %d AND PMU_ID = %d AND PHASOR_NAMES = \"%s\"",*cfg->pmu[j]->phunit[i],cfg->pmu[j]->cnext->phtypes[i],cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + mysql_query(conn_cfg, "COMMIT"); + printf("%s\n",cmd); + + } + } + } // Phasors + + if(cfg->pmu[j]->annmr !=0){ + + for(i = 0;ipmu[j]->annmr;i++) { + + memset(cmd2,'\0',500); + + sprintf(cmd2, "SELECT * FROM ANALOG WHERE PDC_ID = %d AND PMU_ID = %d AND ANALOG_NAMES = \"%s\"",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i]); + + if (mysql_query(conn_cfg, cmd2)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd2); + + res4 = mysql_use_result(conn_cfg); + if(mysql_fetch_row(res4)== NULL) { + + mysql_free_result(res4); + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO ANALOG(PDC_ID,PMU_ID,ANALOG_NAMES,ANALOG_TYPE,ANUNITS) VALUES(%d,%d,\"%s\",\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i],cfg->pmu[j]->cnext->antypes[i],*cfg->pmu[j]->anunit[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + } else { + + mysql_free_result(res4); + memset(cmd,'\0',1000); + + sprintf(cmd,"UPDATE ANALOG SET ANUNITS = %f, ANALOG_TYPE = \"%s\" WHERE PDC_ID = %d AND PMU_ID = %d AND ANALOG_NAMES = \"%s\"",*cfg->pmu[j]->anunit[i],cfg->pmu[j]->cnext->antypes[i],cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + mysql_query(conn_cfg, "COMMIT"); + printf("%s\n",cmd); + } + } + } // Analog + j++; + + } // while ends + + } // Update else ends + + pthread_mutex_unlock(&mutex_MYSQL_CONN_ON_CFG); + free(cmd); + free(cmd2); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION dataparser(): */ +/* Parses the data frames. It searches for configuration objects that matches */ +/* with the IDCODE and then inserts into data tables. */ +/* ---------------------------------------------------------------------------- */ + +int dataparser(unsigned char data[]) { + + struct cfg_frame *temp_cfg; + int match = 0,i,j = 0; + int stat_status,config_change = 0; + unsigned int t_id,num_pmu,phnmr,annmr,dgnmr; + float fp_r,fp_i,fp_real,fp_imaginary,fp_analogs; + long int f_r,f_i,f_analogs,f_freq,f_dfreq,l_soc,l_fracsec; + short int s_analogs, s_freq, s_dfreq; + float fp_freq,fp_dfreq; + + unsigned char *sync,*framesize,*idcode,*soc,*fracsec,*timequality,*stat,*phasors,*analogs,*digital,*freq,*dfreq,*d; + unsigned char *fp_left,*fp_right; + unsigned char *f_left,*f_right; + char *cmd; + + cmd = malloc(500); + sync = malloc(3*sizeof(unsigned char)); + framesize = malloc(3*sizeof(unsigned char)); + idcode = malloc(3*sizeof(unsigned char)); + soc = malloc(5*sizeof(unsigned char)); + fracsec = malloc(5*sizeof(unsigned char)); + timequality = malloc(2*sizeof(unsigned char)); + stat = malloc(3*sizeof(unsigned char)); + phasors = malloc(9*sizeof(unsigned char)); + analogs = malloc(5*sizeof(unsigned char)); + digital = malloc(3*sizeof(unsigned char)); + freq = malloc(5*sizeof(unsigned char)); + dfreq = malloc(5*sizeof(unsigned char)); + + memset(cmd,'\0',500); + memset(sync,'\0',3); + memset(framesize,'\0',3); + memset(idcode,'\0',3); + memset(soc,'\0',5); + memset(fracsec,'\0',5); + memset(timequality,'\0',2); + memset(stat,'\0',3); + memset(phasors,'\0',9); + memset(analogs,'\0',5); + memset(digital,'\0',3); + memset(freq,'\0',5); + memset(dfreq,'\0',5); + + fp_left = malloc(5); + fp_right = malloc(5); + f_left = malloc(3); + f_right = malloc(3); + + memset(fp_left,'\0',5); + memset(fp_right,'\0',5); + memset(f_left,'\0',3); + memset(f_right,'\0',3); + + d = data; + + //Skip SYN + d += 2; + + //SEPARATE FRAMESIZE + copy_cbyc (framesize,d,2); + framesize[2] = '\0'; + d += 2; + + //SEPARATE IDCODE + copy_cbyc (idcode,d,2); + idcode[2] ='\0'; + d += 2; + + pthread_mutex_lock(&mutex_cfg); + // Check for the IDCODE in Configuration Frame + temp_cfg = cfgfirst; + t_id = to_intconvertor(idcode); + printf("ID Code %d\n",t_id); + + while(temp_cfg != NULL){ + + if(t_id == temp_cfg->idcode) { + + match = 1; + break; + + } else { + + temp_cfg = temp_cfg->cfgnext; + + } + } + pthread_mutex_unlock(&mutex_cfg); + + pthread_mutex_lock(&mutex_MYSQL_CONN_ON_DATA); + + if(match){ // idcode matches with cfg idcode + + printf("Inside DATAPARSER, data frame and matched with CFG.\n"); + + // Allocate Memeory For Each PMU + num_pmu = temp_cfg->num_pmu; + + //Copy SOC + copy_cbyc (soc,d,4); + soc[4] = '\0'; + l_soc = to_long_int_convertor(soc); + d += 4; + + //Copy FRACSEC + //First seprate the first Byte of Time Quality Flags + copy_cbyc (timequality,d,1); + timequality[1] = '\0'; + d += 1; + + //First seprate the next 3-Byte of Actual Fraction of Seconds + copy_cbyc (fracsec,d,3); + fracsec[3] = '\0'; + l_fracsec = to_long_int_convertor1(fracsec); + l_fracsec = roundf((l_fracsec*1e6)/(temp_cfg->time_base)); + d += 3; + + // Separate the data for each PMU + while(j < num_pmu) { + + copy_cbyc (stat,d,2); + stat[2] = '\0'; + d += 2; + + // Check Stat Word for each data block + stat_status = check_statword(stat); + + + // If the data has not arrived + if(stat_status == 16) { + + memset(stat,'\0',3); + j++; + continue; + + } else if((stat_status == 14)||(stat_status == 10)) { + + memset(stat,'\0',3); + config_change = stat_status; + j++; + continue; + } + + // Extract PHNMR, DGNMR, ANNMR + phnmr = temp_cfg->pmu[j]->phnmr; + annmr = temp_cfg->pmu[j]->annmr; + dgnmr = temp_cfg->pmu[j]->dgnmr; + + pthread_mutex_lock(&mutex_phasor_buffer); + + //Phasors + if(phnmr != 0) { + + if(temp_cfg->pmu[j]->fmt->phasor == 1) { // Floating + + for(i = 0;ipmu[j]->fmt->polar == 1) { // POLAR + + /*fp_real = fp_r*cos(f_i); + fp_imaginary = fp_r*sin(f_i); + + Commented by Gopal on 8th Aug 2012. + We want to store polar values in the table */ + + fp_real = fp_r; + fp_imaginary = fp_i; + } + else // RECTANGULAR + { + fp_real = hypotf(fp_r,fp_i); + fp_imaginary = atan2f(fp_i, fp_r); + } + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,\"%s\",%f,%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->phnames[i],fp_real,fp_imaginary); + + dataCollectInBuffer(cmd, phasorBuff, 1); + } + } + else { // Fixed point + + for(i = 0;i < phnmr; i++){ + + memset(f_left,'\0',3); + memset(f_right,'\0',3); + copy_cbyc (f_left,d,2); + f_left[2] = '\0'; + d += 2; + + copy_cbyc(f_right,d,2); + f_right[2] = '\0'; + d += 2; + + f_r = to_intconvertor(f_left); + f_i = to_intconvertor(f_right); + + if(temp_cfg->pmu[j]->fmt->polar == 1) { // POLAR + + fp_real = *temp_cfg->pmu[j]->phunit[i] *f_r; + fp_imaginary = f_i*1e-4; // Angle is in 10^4 radians + } + else // RACTANGULAR + { + fp_r = *temp_cfg->pmu[j]->phunit[i] *f_r; + fp_i = *temp_cfg->pmu[j]->phunit[i] *f_i; + + fp_real = hypotf(fp_r,fp_i); + fp_imaginary = atan2f(fp_i, fp_r); + } + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,\"%s\",%f,%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->phnames[i],fp_real,fp_imaginary); + + dataCollectInBuffer(cmd, phasorBuff,1); + } + } + }// Phasors Insertion ends + + //Freq + if(temp_cfg->pmu[j]->fmt->freq == 1) { // FLOATING + + memset(freq,'\0',5); + copy_cbyc (freq,d,4); + freq[4] = '\0'; + d += 4; + + memset(dfreq,'\0',5); + copy_cbyc (dfreq,d,4); + dfreq[4] = '\0'; + d += 4; + + fp_freq = decode_ieee_single(freq); + fp_dfreq = decode_ieee_single(dfreq); + + } else { // FIXED + + memset(freq,'\0',5); + copy_cbyc (freq,d,2); + freq[2] = '\0'; + d += 2; + + memset(dfreq,'\0',5); + copy_cbyc (dfreq,d,2); + dfreq[2] = '\0'; + d += 2; + s_freq = to_intconvertor(freq); + s_dfreq = to_intconvertor(dfreq); + + fp_freq = s_freq*1e-3; // freq is in mHz deviation from nominal + if (temp_cfg->pmu[j]->fnom == 0) + fp_freq = 60 + fp_freq; + else + fp_freq = 50 + fp_freq; + fp_dfreq = s_dfreq*1e-2; // dfreq is 100 times hz/sec + } + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,%f,%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,fp_freq,fp_dfreq); + + dataCollectInBuffer(cmd, frequencyBuff,2); // Freq Insert Ends + + //Analogs + if(annmr != 0) { + + if(temp_cfg->pmu[j]->fmt->analog == 1) { // FLOATING + + for(i = 0; i < annmr; i++){ + + memset(analogs,'\0',5); + copy_cbyc(analogs,d,4); + d += 4; + analogs[4] = '\0'; + + fp_analogs = decode_ieee_single(analogs); + fp_analogs = *temp_cfg->pmu[j]->anunit[i]*fp_analogs;; + memset(cmd,'\0',500); + + sprintf(cmd," %d,%d,%ld,%ld,\"%s\",%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->angnames[i],fp_analogs); + + dataCollectInBuffer(cmd, analogBuff,3); + } + + } else { // FIXED + + for(i = 0; i < annmr; i++){ + + memset(analogs,'\0',5); + copy_cbyc (analogs,d,2); + d += 2; + + analogs[2] = '\0'; + s_analogs = to_intconvertor(analogs); + fp_analogs = *temp_cfg->pmu[j]->anunit[i]*s_analogs ; + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,\"%s\",%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->angnames[i],fp_analogs); + + dataCollectInBuffer(cmd, analogBuff,3); + } + } + } // Insertion for Analog done here. + + // Digital + if(dgnmr != 0) { + + unsigned int dgword; + + for(i = 0; iidcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,dgword); + + dataCollectInBuffer(cmd, digitalBuff,4); + } + } // Insertion for Digital done here. + + struct timeval tv; + long local_soc, local_fsec,ms_diff,s_diff; + + /* Obtain the time of day, and convert it to a tm struct. */ + gettimeofday (&tv, NULL); + + local_soc = tv.tv_sec; + local_fsec = tv.tv_usec; + s_diff = (tv.tv_sec - l_soc); + ms_diff = (tv.tv_usec - l_fracsec); + + // Formula to calculate the exact delay in micro between data frame inside-time and + // system receive time at which that data frame received. + ms_diff = ((s_diff == 0) ? ((ms_diff > 0) ? ms_diff : -1*ms_diff) : ((s_diff == 1) ? (1000000-l_fracsec+tv.tv_usec) : ((1000000*(s_diff-1))+(1000000-l_fracsec+tv.tv_usec)))); + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,%ld,%ld,%ld\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,local_soc,local_fsec,ms_diff); + dataCollectInBuffer(cmd, delayBuff,5); + + pthread_mutex_unlock(&mutex_phasor_buffer); + j++; + } //While ends + + } else { + + printf("NO CFG for data frames\n"); + } + + pthread_mutex_unlock(&mutex_MYSQL_CONN_ON_DATA); + + free(cmd); + free(sync); + free(framesize); + free(idcode); + free(soc); + free(fracsec); + free(timequality); + free(stat); + free(phasors); + free(analogs); + free(digital); + free(freq); + free(dfreq); + + free(fp_left); + free(fp_right); + free(f_left); + free(f_right); + + if((config_change == 14) ||(config_change == 10)) + return config_change; + else return stat_status; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION check_statword(): */ +/* Check the STAT word of the data frames for any change in the data block. */ +/* Some of the prime errors are handled. */ +/* ---------------------------------------------------------------------------- */ + +int check_statword(unsigned char stat[]) { + + int ret = 0; + + if(stat[0] == 0x0f) { + + // DEVELOPERS has used these bits as an indication for PMU data that has not arrived/missing data frames + ret = 16; + return ret; + + } else if ((stat[0] & 0x04) == 0x04) { + + printf("Configuration Change error\n"); + ret = 10; + return ret; + + } else if ((stat[0] & 0x40) == 0x40) { + + printf("PMU error including configuration error\n"); + ret = 14; + return ret; + + } else if((stat[0] & 0x80) == 0x80) { + + printf("Data invalid\n"); + ret = 15; + return ret; + + } else if ((stat[0] & 0x20) == 0x20) { + + printf("PMU Sync error\n"); + ret = 13; + return ret; + + } else if ((stat[0] & 0x10) == 0x10) { + + printf("Data sorting error\n"); + ret = 12; + return ret; + + } else if ((stat[0] & 0x08) == 0x08) { + + printf("PMU Trigger error\n"); + ret = 11; + return ret; + + } + + printf("Return from STAT Word checking %d.\n",ret); + return ret; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_intconvertor(): */ +/* ---------------------------------------------------------------------------- */ + +unsigned int to_intconvertor(unsigned char array[]) { + + unsigned int n; + n = array[0]; + n <<= 8; + n |= array[1]; + return n; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_intconvertor1(): */ +/* Written by Gopal to convert just 1 byte to int */ +/* ---------------------------------------------------------------------------- */ + +unsigned int to_intconvertor1(unsigned char array[]) { + + unsigned int n; + n = array[0]; + return n; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_long_int_convertor(): */ +/* ---------------------------------------------------------------------------- */ + +unsigned long int to_long_int_convertor(unsigned char array[]) { + + unsigned long int n; + n = array[0]; + n <<= 8; + n |= array[1]; + n <<= 8; + n |= array[2]; + n <<= 8; + n |= array[3]; + return n; + +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_long_int_convertor1(): */ +/* Written by Gopal to convert just 3 bytes to long int */ +/* ---------------------------------------------------------------------------- */ + +unsigned long int to_long_int_convertor1(unsigned char array[]) { + + unsigned long int n; + n = array[0]; + n <<= 8; + n |= array[1]; + n <<= 8; + n |= array[2]; + return n; + +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION decode_ieee_single(): */ +/* ---------------------------------------------------------------------------- */ + +float decode_ieee_single(const void *v) { + + const unsigned char *data = v; + int s, e; + unsigned long src; + long f; + float value; + + src = ((unsigned long)data[0] << 24) | + ((unsigned long)data[1] << 16) | + ((unsigned long)data[2] << 8) | + ((unsigned long)data[3]); + + s = (src & 0x80000000UL) >> 31; + e = (src & 0x7F800000UL) >> 23; + f = (src & 0x007FFFFFUL); + + if (e == 255 && f != 0) { + /* NaN (Not a Number) */ + value = DBL_MAX; + + } else if (e == 255 && f == 0 && s == 1) { + /* Negative infinity */ + value = -DBL_MAX; + } else if (e == 255 && f == 0 && s == 0) { + /* Positive infinity */ + value = DBL_MAX; + } else if (e > 0 && e < 255) { + /* Normal number */ + f += 0x00800000UL; + if (s) f = -f; + value = ldexp(f, e - 150); + } else if (e == 0 && f != 0) { + /* Denormal number */ + if (s) f = -f; + value = ldexp(f, -149); + } else if (e == 0 && f == 0 && s == 1) { + /* Negative zero */ + value = 0; + } else if (e == 0 && f == 0 && s == 0) { + /* Positive zero */ + value = 0; + } else { + /* Never happens */ + printf("s = %d, e = %d, f = %lu\n", s, e, f); + assert(!"Woops, unhandled case in decode_ieee_single()"); + } + + return value; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION copy_cbyc(): */ +/* ---------------------------------------------------------------------------- */ + +void copy_cbyc(unsigned char dst[],unsigned char *s,int size) { + + int i; + for(i = 0; i< size; i++) + dst[i] = *(s + i); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ncmp_cbyc(): */ +/* ---------------------------------------------------------------------------- */ + +int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size) { + + int i,flag = 0; + for(i = 0; i< size; i++) { + + if(dst[i] != src[i]) { + + flag = 1; + break; + } + } + return flag; +} + + + +void dataCollectInBuffer(char *cmd, char *buffer, int type) +{ + + int err; + if((BUFF_LEN - strlen(buffer)) < strlen(cmd)) { + + char *ttt; + ttt = malloc((BUFF_LEN+1)*sizeof(unsigned char)); + memset(ttt,'\0',BUFF_LEN+1); + strncpy(ttt,buffer,BUFF_LEN+1); + memset(buffer,'\0',BUFF_LEN); + strncpy(buffer,cmd,strlen(cmd)); + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_t thread1; + + + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { // In the detached state, the thread resources are + // immediately freed when it terminates, but + perror(strerror(err)); // pthread_join(3) cannot be used to synchronize + exit(1); // on the thread termination. + } + + //int er; + struct DataBuff *buf=malloc(sizeof(struct DataBuff)); + buf->data = ttt; + buf->type = type; + if((err = pthread_create(&thread1,&attr,dataWriteInFile,(void *)buf))) { + + perror(strerror(err)); + exit(1); + } + + } else { + strcat(buffer,cmd); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION dataWriteInFile(): */ +/* */ +/* ---------------------------------------------------------------------------- */ + +void* dataWriteInFile(void * temp_buff) { + + FILE *p,*f,*a,*d,*e; + + struct DataBuff *buf = (struct DataBuff*)temp_buff; + char *phasorFile = "PHASOR_MEASUREMENTS.txt"; + char *freqFile = "FREQUENCY_MEASUREMENTS.txt"; + char *analogFile = "ANALOG_MEASUREMENTS.txt"; + char *digitalFile = "DIGITAL_MEASUREMENTS.txt"; + char *frameDelay = "RECEIVED_FRAME_TIME.txt"; + + if(buf->type == 1) { + + p = fopen(phasorFile,"w"); + fprintf(p,buf->data); + fclose(p); + + f = fopen(freqFile,"w"); + fprintf(f,frequencyBuff); + memset(frequencyBuff,'\0',BUFF_LEN); + fclose(f); + + a = fopen(analogFile,"w"); + fprintf(a,analogBuff); + memset(analogBuff,'\0',BUFF_LEN); + fclose(a); + + d = fopen(digitalFile,"w"); + fprintf(d,digitalBuff); + memset(digitalBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + + } else if(buf->type == 2) { + + f = fopen(freqFile,"w"); + fprintf(f,buf->data); + fclose(f); + + p = fopen(phasorFile,"w"); + fprintf(p,phasorBuff); + memset(phasorBuff,'\0',BUFF_LEN); + fclose(p); + + a = fopen(analogFile,"w"); + fprintf(a,analogBuff); + memset(analogBuff,'\0',BUFF_LEN); + fclose(a); + + d = fopen(digitalFile,"w"); + fprintf(d,digitalBuff); + memset(digitalBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + + } else if(buf->type == 3) { + + a = fopen(analogFile,"w"); + fprintf(a,buf->data); + fclose(a); + + p = fopen(phasorFile,"w"); + fprintf(p,phasorBuff); + memset(phasorBuff,'\0',BUFF_LEN); + fclose(p); + + f = fopen(freqFile,"w"); + fprintf(f,frequencyBuff); + memset(frequencyBuff,'\0',BUFF_LEN); + fclose(f); + + d = fopen(digitalFile,"w"); + fprintf(d,digitalBuff); + memset(digitalBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + + } else if(buf->type == 4) { + + d = fopen(digitalFile,"w"); + fprintf(d,buf->data); + fclose(d); + + p = fopen(phasorFile,"w"); + fprintf(p,phasorBuff); + memset(phasorBuff,'\0',BUFF_LEN); + fclose(p); + + f = fopen(freqFile,"w"); + fprintf(f,frequencyBuff); + memset(frequencyBuff,'\0',BUFF_LEN); + fclose(f); + + a = fopen(analogFile,"w"); + fprintf(d,analogBuff); + memset(analogBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + + } else if(buf->type == 5) { + + d = fopen(digitalFile,"w"); + fprintf(d,buf->data); + fclose(d); + + p = fopen(phasorFile,"w"); + fprintf(p,phasorBuff); + memset(phasorBuff,'\0',BUFF_LEN); + fclose(p); + + f = fopen(freqFile,"w"); + fprintf(f,frequencyBuff); + memset(frequencyBuff,'\0',BUFF_LEN); + fclose(f); + + a = fopen(analogFile,"w"); + fprintf(d,analogBuff); + memset(analogBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + } + + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC PHASOR_MEASUREMENTS.txt"); + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC FREQUENCY_MEASUREMENTS.txt"); + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC ANALOG_MEASUREMENTS.txt"); + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC DIGITAL_MEASUREMENTS.txt"); + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC RECEIVED_FRAME_TIME.txt"); + +// system("./upDateTable.sh"); + printf("wrote to database\n"); + + free((unsigned char*)temp_buff); + + pthread_exit(NULL); /* Exit the thread once the task is done. */ + +} + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/parser.h b/DBServer/parser.h new file mode 100755 index 0000000..ce1cc19 --- /dev/null +++ b/DBServer/parser.h @@ -0,0 +1,137 @@ +/* ----------------------------------------------------------------------------- + * parser.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#define MAXBUFLEN 2000 + + +/* ---------------------------------------------------------------- */ +/* Data Structure prototypes */ +/* ---------------------------------------------------------------- */ + +/* ---------------------------------------------------------------- */ +/* Configuartion Frame Data Structure */ +/* ---------------------------------------------------------------- */ + +struct cfg_frame { + + unsigned int framesize; + unsigned int idcode; + unsigned long int soc; + unsigned long int fracsec; + unsigned long int time_base; + unsigned int num_pmu; + struct for_each_pmu **pmu; + unsigned int data_rate; + struct cfg_frame *cfgnext; + +}*cfgfirst; + + +struct for_each_pmu{ + + unsigned char stn[17]; + unsigned int idcode; + char data_format[3]; + struct format *fmt; + unsigned int phnmr; + unsigned int annmr; + unsigned int dgnmr; + struct channel_names *cnext; + float **phunit; + float **anunit; + unsigned char **dgunit; + unsigned int fnom; + unsigned int cfg_cnt; +}; + +struct channel_names { + + unsigned char **phnames; + unsigned char **angnames; + unsigned char **phtypes; + unsigned char **antypes; + struct dgnames *first; +}; + +struct dgnames { + + unsigned char **dgn; // Stores 16 digital names for each word + struct dgnames *dg_next; +}; + +// This struct is added to help find out whether the measurements are floating/fixed, polar/rectangular . +struct format{ + + unsigned int freq; + unsigned int analog; + unsigned char phasor; + unsigned char polar; +}; + +struct DataBuff{ + + unsigned char *data; + unsigned int type; +}; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + + +void cfgparser(unsigned char []); + +void cfginsert(struct cfg_frame *); + +int dataparser(unsigned char data[]); + +char* hexTobin(char s); + +int check_statword(unsigned char stat[]); + +void remove_old_cfg(int idcode,unsigned char frame[]); + +unsigned int to_intconvertor(unsigned char array[]); + +unsigned int to_intconvertor1(unsigned char array[]); //Added by gopal -- to_intconvertor1 + +unsigned long int to_long_int_convertor(unsigned char * array); + +unsigned long int to_long_int_convertor1(unsigned char * array); //Added by gopal -- to_long_int_convertor1 + +float decode_ieee_single(const void *v); + +void copy_cbyc(unsigned char dst[],unsigned char *s,int size); + +int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size); + +void* dataWriteInFile(void * temp_buff); + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/recreate.c b/DBServer/recreate.c new file mode 100755 index 0000000..97bde7c --- /dev/null +++ b/DBServer/recreate.c @@ -0,0 +1,645 @@ +/* ----------------------------------------------------------------------------- + * recreate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "recreate.h" + + +/* ---------------------------------------------------------------------*/ +/* Functions defined in recreate.c */ +/* ---------------------------------------------------------------------*/ + +/* 1. recreate_cfg_objects() */ +/* 2. void init_cfgparser() */ + +/* -------------------------------------------------------------------- */ + + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_cfg_objects(): */ +/* It re-creates Configuration Objects from file cfg.bin if the ./server */ +/* program is stopped abruptly. It internally calls init_cfgparser() */ +/* ---------------------------------------------------------------------------- */ + +void recreate_cfg_objects(){ + + /* ---------------------------------------------------------------- */ + /* Initialize Global Mutex Variable from global.h */ + /* ---------------------------------------------------------------- */ + + pthread_mutex_init(&mutex_file, NULL); + pthread_mutex_init(&mutex_cfg, NULL); + pthread_mutex_init(&mutex_MYSQL_CONN_ON_DATA, NULL); + pthread_mutex_init(&mutex_MYSQL_CONN_ON_CFG, NULL); + pthread_mutex_init(&mutex_phasor_buffer,NULL); + + BUFF_LEN = 25000; + phasorBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + frequencyBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + analogBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + digitalBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + delayBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + + memset(phasorBuff,'\0',BUFF_LEN); + memset(frequencyBuff,'\0',BUFF_LEN); + memset(analogBuff,'\0',BUFF_LEN); + memset(digitalBuff,'\0',BUFF_LEN); + memset(delayBuff,'\0',BUFF_LEN); + + static const char filename[] = "cfg.bin"; + + FILE *file = fopen (filename,"rb"); + unsigned char *line,frame_len[2]; + unsigned int framesize; + unsigned long fileLen; + + if (file != NULL) { + + //Get file length + fseek(file, 0, SEEK_END); + fileLen = ftell(file); + fseek(file, 0, SEEK_SET); + printf("FILE LEN LEFT %ld\n",fileLen); + printf("Creating objects for entries in cfg.bin\n"); + + while (fileLen != 0) /* Till the EOF */{ + + fseek (file,2 ,SEEK_CUR); + fread(frame_len, sizeof(unsigned char),2, file); + fseek (file,-4 ,SEEK_CUR); + + framesize = to_intconvertor(frame_len); + line = malloc(framesize*sizeof(unsigned char)); + memset(line,'\0',sizeof(line)); + fread(line, sizeof(unsigned char),framesize,file); + init_cfgparser(line); + free(line); + fileLen -= framesize; + } + fclose (file); + + } else { + perror (filename); /* why didn't the file open? */ + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION init_cfgparser(): */ +/* It is called by recreate_cfg_object() to read the file `cfg.bin` */ +/* and create cfg objects in the memory */ +/* ---------------------------------------------------------------------------- */ + +void init_cfgparser(unsigned char st[]){ + + unsigned char *s; + int cfglen = 0; + int i,j,k,dgchannels, phtype, antype; + struct cfg_frame *cfg; + struct channel_names *cn; + unsigned long int l_phunit,l_anunit; + + unsigned char *sync,*frame_size,*idcode_h,*soc,*fracsec,*time_base,*num_pmu,*stn,*idcode_l,*format,*phnmr,*annmr,*dgnmr; + unsigned char *fnom,*cfg_cnt,*data_rate,*buf; + + sync = malloc(3*sizeof(unsigned char)); + frame_size = malloc(3*sizeof(unsigned char)); + idcode_h= malloc(3*sizeof(unsigned char)); + soc = malloc(5*sizeof(unsigned char)); + fracsec = malloc(5*sizeof(unsigned char)); + time_base = malloc(5*sizeof(unsigned char)); + num_pmu = malloc(3*sizeof(unsigned char)); + stn = malloc(17*sizeof(unsigned char)); + idcode_l = malloc(3*sizeof(unsigned char)); + format = malloc(5*sizeof(unsigned char)); + phnmr = malloc(3*sizeof(unsigned char)); + annmr = malloc(3*sizeof(unsigned char)); + dgnmr = malloc(3*sizeof(unsigned char)); + + fnom = malloc(3*sizeof(unsigned char)); + cfg_cnt = malloc(3*sizeof(unsigned char)); + data_rate = malloc(3*sizeof(unsigned char)); + buf = malloc(9*sizeof(unsigned char)); + + memset(sync,'\0',3); + memset(frame_size,'\0',3); + memset(idcode_h,'\0',3); + memset(soc,'\0',3); + memset(fracsec,'\0',5); + memset(time_base,'\0',5); + memset(num_pmu,'\0',3); + memset(stn,'\0',17); + memset(idcode_l,'\0',3); + memset(format,'\0',3); + memset(phnmr,'\0',3); + memset(annmr,'\0',3); + memset(dgnmr,'\0',3); + + memset(fnom,'\0',3); + memset(cfg_cnt ,'\0',3); + memset(data_rate,'\0',3); + memset(buf,'\0',9); + + + /******************** PARSING BEGINGS *******************/ + + pthread_mutex_lock(&mutex_file); + + cfg = malloc(sizeof(struct cfg_frame)); + if(!cfg) { + printf("No enough memory for cfg\n"); + } + + printf("Inside INIT cfgparser()\n"); + s = st; + + //Copy sync word to file + copy_cbyc (sync,s,2); + sync[2] = '\0'; + s = s + 2; + + // Separate the FRAME SIZE + copy_cbyc (frame_size,(unsigned char *)s,2); + frame_size[2]='\0'; + cfg->framesize = to_intconvertor(frame_size); + printf("FRAME SIZE %d\n",cfg->framesize); + s = s + 2; + cfglen += 2; + + //SEPARATE IDCODE + copy_cbyc (idcode_h,(unsigned char *)s,2); + idcode_h[2] = '\0'; + cfg->idcode = to_intconvertor(idcode_h); + printf("ID Code %d\n",cfg->idcode); + s = s + 2; + cfglen += 2; + + //SEPARATE SOC + copy_cbyc (soc,(unsigned char *)s,4); + soc[4] = '\0'; + sscanf((unsigned int *)soc,"%x", (unsigned int *)&cfg->soc); + printf("SOC %ld\n",cfg->soc); + s =s + 4; + cfglen += 4; + + //SEPARATE FRACSEC + copy_cbyc (fracsec,(unsigned char *)s,4); + fracsec[4] = '\0'; + cfg->fracsec = to_long_int_convertor(fracsec); + printf("FracSec %ld\n",cfg->fracsec); + s = s + 4; + cfglen += 4; + + //SEPARATE TIMEBASE + copy_cbyc (time_base,(unsigned char *)s,4); + time_base[4]='\0'; + cfg->time_base = to_long_int_convertor(time_base); + printf("Time Base %ld\n",cfg->time_base); + s = s + 4; + cfglen += 4; + + //SEPARATE PMU NUM + copy_cbyc (num_pmu,(unsigned char *)s,2); + num_pmu[2] = '\0'; + cfg->num_pmu = to_intconvertor(num_pmu); + printf("Number of PMU's %d\n",cfg->num_pmu); + s = s + 2; + cfglen += 2; + + // Allocate Memeory For Each PMU + cfg->pmu = malloc(cfg->num_pmu* sizeof(struct for_each_pmu *)); + if(!cfg->pmu) { + printf("Not enough memory pmu[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->num_pmu; i++) { + cfg->pmu[i] = malloc(sizeof(struct for_each_pmu)); + } + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jnum_pmu) { + + //SEPARATE STATION NAME + memset(cfg->pmu[j]->stn,'\0',17); + copy_cbyc (cfg->pmu[j]->stn,(unsigned char *)s,16); + cfg->pmu[j]->stn[16] = '\0'; + + printf("STATION NAME %s\n",cfg->pmu[j]->stn); + s = s + 16; + cfglen += 16; + + //SEPARATE IDCODE + copy_cbyc (idcode_l,(unsigned char *)s,2); + idcode_l[2]='\0'; + cfg->pmu[j]->idcode = to_intconvertor(idcode_l); + printf("ID Code %d\n",cfg->pmu[j]->idcode); + s = s + 2; + cfglen += 2; + + //SEPARATE DATA FORMAT + copy_cbyc ((unsigned char *)cfg->pmu[j]->data_format,(unsigned char *)s,2); + cfg->pmu[j]->data_format[2]='\0'; + s = s + 2; + cfglen += 2; + + unsigned char hex = cfg->pmu[j]->data_format[1]; + hex <<= 4; + + // Extra field has been added to identify polar,rectangular,floating/fixed point + cfg->pmu[j]->fmt = malloc(sizeof(struct format)); + if((hex & 0x80) == 0x80) cfg->pmu[j]->fmt->freq = 1; else cfg->pmu[j]->fmt->freq = 0; + if((hex & 0x40) == 0x40 ) cfg->pmu[j]->fmt->analog = 1; else cfg->pmu[j]->fmt->analog = 0; + if((hex & 0x20) == 0x20) cfg->pmu[j]->fmt->phasor = 1; else cfg->pmu[j]->fmt->phasor = 0; + if((hex & 0x10) == 0x10) cfg->pmu[j]->fmt->polar = 1; else cfg->pmu[j]->fmt->polar = 0; + + //SEPARATE PHASORS + copy_cbyc (phnmr,(unsigned char *)s,2); + phnmr[2]='\0'; + cfg->pmu[j]->phnmr = to_intconvertor(phnmr); + printf("Phasors %d\n",cfg->pmu[j]->phnmr); + s = s + 2; + cfglen += 2; + + //SEPARATE ANALOGS + copy_cbyc (annmr,(unsigned char *)s,2); + annmr[2]='\0'; + cfg->pmu[j]->annmr = to_intconvertor(annmr); + printf("Analogs %d\n",cfg->pmu[j]->annmr); + s = s + 2; + cfglen += 2; + + //SEPARATE DIGITALS + copy_cbyc (dgnmr,(unsigned char *)s,2); + dgnmr[2]='\0'; + cfg->pmu[j]->dgnmr = to_intconvertor(dgnmr); + printf("Digitals %d\n",cfg->pmu[j]->dgnmr); + s = s + 2; + cfglen += 2; + + cn = malloc(sizeof(struct channel_names)); + cn->first = NULL; + + ////SEPARATE PHASOR NAMES + if(cfg->pmu[j]->phnmr != 0){ + cn->phtypes = malloc((cfg->pmu[j]->phnmr) * sizeof(unsigned char*)); + cn->phnames = malloc((cfg->pmu[j]->phnmr) * sizeof(char*)); + if(!cn->phnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->phnmr; i++) { + + cn->phnames[i] = malloc(17*sizeof(char)); + memset(cn->phnames[i],'\0',17); + cn->phtypes[i] = malloc(2*sizeof(unsigned char)); + memset(cn->phtypes[i],'\0',2); + + } + + cfg->pmu[j]->phunit = malloc(cfg->pmu[j]->phnmr*sizeof(float*)); + if(!cfg->pmu[j]->phunit) { + printf("Not enough memory cfg.pmu[j]->phunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->phnmr; i++) { + cfg->pmu[j]->phunit[i] = malloc(sizeof(float)); + } + + + i = 0;//Index for PHNAMES + while(ipmu[j]->phnmr){ + + copy_cbyc (cn->phnames[i],(unsigned char *)s,16); + cn->phnames[i][16] = '\0'; + printf("Phnames %s\n",cn->phnames[i]); + s = s + 16; + cfglen += 16; + i++; + } + } + + //SEPARATE ANALOG NAMES + if(cfg->pmu[j]->annmr != 0){ + cn->antypes = malloc((cfg->pmu[j]->annmr)*sizeof(unsigned char*)); + cn->angnames = malloc((cfg->pmu[j]->annmr)*sizeof(char*)); + if(!cn->angnames) { + + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->annmr; i++) { + + cn->angnames[i] = malloc(17*sizeof(char)); + memset(cn->angnames[i],'\0',17); + cn->antypes[i] = malloc(5*sizeof(unsigned char)); + memset(cn->antypes[i],'\0',5); + } + + cfg->pmu[j]->anunit = malloc(cfg->pmu[j]->annmr*sizeof(float*)); + if(!cfg->pmu[j]->anunit) { + printf("Not enough memory cfg.pmu[j]->anunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->annmr; i++) { + cfg->pmu[j]->anunit[i] = malloc(sizeof(float)); + } + + i = 0;//Index for ANGNAMES + + while(ipmu[j]->annmr){ + copy_cbyc (cn->angnames[i],(unsigned char *)s,16); + cn->angnames[i][16]='\0'; + printf("ANGNAMES %s\n",cn->angnames[i]); + s = s + 16; + cfglen += 16; + i++; + } + } + + + if(cfg->pmu[j]->dgnmr != 0){ + + cfg->pmu[j]->dgunit = malloc(cfg->pmu[j]->dgnmr*sizeof(char*)); + if(!cfg->pmu[j]->dgunit) { + + printf("Not enough memory cfg->pmu[j]->dgunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->dgnmr; i++) { + + cfg->pmu[j]->dgunit[i] = malloc(5); + } + } + + int di; //Index for number of dgwords + struct dgnames *q; + i = 0; + + while(i < cfg->pmu[j]->dgnmr) { + + struct dgnames *temp1 = malloc(sizeof(struct dgnames)); + temp1->dgn = malloc(16*sizeof(unsigned char *)); + if(!temp1->dgn) { + + printf("Not enough memory temp1->dgn\n"); + exit(1); + } + + for (di = 0; di < 16; di++) { + + temp1->dgn[di] = malloc(17*sizeof(unsigned char)); + + } + + temp1->dg_next = NULL; + + for(dgchannels = 0;dgchannels < 16;dgchannels++){ + + memset(temp1->dgn[dgchannels],'\0',16); + copy_cbyc (temp1->dgn[dgchannels],(unsigned char *)s,16); + temp1->dgn[dgchannels][16] = '\0'; + s += 16; + cfglen += 16; + k = 0; + printf("%s\n",temp1->dgn[dgchannels]); + } + + if(cn->first == NULL){ + cn->first = q = temp1; + + } else { + + while(q->dg_next!=NULL){ + q = q->dg_next; + } + q->dg_next = temp1; + } + + i++; + } //DGWORD WHILE ENDS + + cfg->pmu[j]->cnext = cn;//Assign to pointers + + ///PHASOR FACTORS + if(cfg->pmu[j]->phnmr != 0){ + + i = 0; + while(i < cfg->pmu[j]->phnmr){ //Separate the Phasor conversion factors + + memset(buf,'\0',9); + copy_cbyc (buf,(unsigned char *)s,1); + buf[1] = '\0'; + s = s + 1; + cfglen += 1; + phtype = to_intconvertor1(buf); + copy_cbyc (buf,(unsigned char *)s,3); + buf[3] = '\0'; + s = s + 3; + cfglen += 3; + l_phunit = to_long_int_convertor1(buf); + + if (phtype == 0) + { + cfg->pmu[j]->cnext->phtypes[i] = "V"; + + if (cfg->pmu[j]->fmt->phasor == 0) + { + *cfg->pmu[j]->phunit[i] = l_phunit * 1e-5; + } + else + { + *cfg->pmu[j]->phunit[i] = 1; + } + } + else if (phtype == 1) + { + cfg->pmu[j]->cnext->phtypes[i] = "I"; + + if (cfg->pmu[j]->fmt->phasor == 0) + { + *cfg->pmu[j]->phunit[i] = l_phunit * 1e-5; + } + else + { + *cfg->pmu[j]->phunit[i] = 1; + } + } + else + { + perror("Invalid first byte in PHUNIT - probably error in PMU"); + } + + printf("Phasor Factor %d = %f\n",i,*cfg->pmu[j]->phunit[i]); + i++; + } + }//if for PHASOR Factors ends + + //ANALOG FACTORS + if(cfg->pmu[j]->annmr != 0){ + + i=0; + while(ipmu[j]->annmr){ //Separate the Phasor conversion factors + + memset(buf,'\0',9); + copy_cbyc (buf,(unsigned char *)s,1); + buf[1] = '\0'; + s = s + 1; + cfglen += 1; + + antype = to_intconvertor1(buf); + switch(antype) + { + case 0 : cfg->pmu[j]->cnext->antypes[i] = "POW"; + break; + case 1 : cfg->pmu[j]->cnext->antypes[i] = "RMS"; + break; + case 2 : cfg->pmu[j]->cnext->antypes[i] = "PEAK"; + break; + default: perror("Invalid first byte in ANUNIT?"); + break; + } + copy_cbyc (buf,(unsigned char *)s,3); + buf[3] = '\0'; + s = s + 3; + cfglen += 3; + l_anunit = to_long_int_convertor1(buf); + + if (cfg->pmu[j]->fmt->analog == 0) + { + *cfg->pmu[j]->anunit[i] = l_anunit * 1e-5; // Assumed factor of 1e5 in iPDC + } + else + { + *cfg->pmu[j]->anunit[i] = 1; + } + + printf("Analog Factor %d = %f\n",i,*cfg->pmu[j]->anunit[i]); + i++; + } + + } // if for ANALOG FActtors ends + + ///INCOMPLETE + if(cfg->pmu[j]->dgnmr != 0){ + + i = 0; + while(i < cfg->pmu[j]->dgnmr ){ //Separate the Phasor conversion factors + + copy_cbyc(cfg->pmu[j]->dgunit[i],s,4); + cfg->pmu[j]->dgunit[i][4] = '\0'; + printf("DGWORD %s\n",cfg->pmu[j]->dgunit[i]); + s += 4; + cfglen += 4; + i++; + } + } //if for Digital Words FActtors ends + + copy_cbyc (fnom,(unsigned char *)s,2); + fnom[2]='\0'; + cfg->pmu[j]->fnom = to_intconvertor(fnom); + printf("FREQUENCY %d\n",cfg->pmu[j]->fnom); + s = s + 2; + cfglen += 2; + + copy_cbyc (cfg_cnt,(unsigned char *)s,2); + cfg_cnt[2] = '\0'; + cfg->pmu[j]->cfg_cnt = to_intconvertor(cfg_cnt); + printf("CFG CHANGE COUNT %d\n",cfg->pmu[j]->cfg_cnt); + s = s + 2; + cfglen += 2; + j++; + }//While for PMU number ends + + copy_cbyc (data_rate,(unsigned char *)s,2); + data_rate[2] = '\0'; + cfg->data_rate = to_intconvertor(data_rate); + printf("Data Rate %d\n",cfg->data_rate); + s += 2; + cfglen += 2; + cfg->cfgnext = NULL; + + // Adjust the configuration object pointers + // Lock the mutex_cfg + pthread_mutex_lock(&mutex_cfg); + + if (cfgfirst == NULL) { // Main if + + cfgfirst = cfg; + + } else { + + struct cfg_frame *temp_cfg = cfgfirst; + + //Check if the configuration frame already exists + while(temp_cfg->cfgnext != NULL){ + + temp_cfg = temp_cfg->cfgnext; + + }// While ends + temp_cfg->cfgnext = cfg; + + } //Main if + + pthread_mutex_unlock(&mutex_cfg); + pthread_mutex_unlock(&mutex_file); + + free(sync); + free(frame_size); + free(idcode_h); + free(soc); + free(fracsec); + free(time_base); + free(num_pmu); + free(stn); + free(idcode_l); + free(format); + free(phnmr); + free(annmr); + free(dgnmr); + free(fnom); + free(cfg_cnt); + free(data_rate); + free(buf); +} + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/recreate.h b/DBServer/recreate.h new file mode 100755 index 0000000..763cd99 --- /dev/null +++ b/DBServer/recreate.h @@ -0,0 +1,38 @@ +/* ----------------------------------------------------------------------------- + * recreate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void recreate_cfg_objects(); + +void init_cfgparser(unsigned char []); + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/CfgFunction.c b/PMUSimulator/CfgFunction.c new file mode 100755 index 0000000..2e99b67 --- /dev/null +++ b/PMUSimulator/CfgFunction.c @@ -0,0 +1,1252 @@ +/* ----------------------------------------------------------------------------- + * CfgFunction.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "CfgFunction.h" +#include "function.h" +#include "PmuGui.h" +#include "ShearedMemoryStructure.h" + +#define max_data_rate 200 +#define MAX_STRING_SIZE 5000 + + +/*----------------------------------------------------------------------------------------*/ +/* Functions in CfgFunction.c */ +/*----------------------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------*/ +/* */ +/* 1. void header_frm_gen(int len); */ +/* 2. void reconfig_cfg_CC(); */ +/* 3. int create_cfg(); */ +/* 4. void show_pmu_details (GtkWidget *widget, gpointer udata); */ +/* */ +/*--------------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ */ +/* global variables */ +/* ------------------------------------------------------------------ */ + +double t1; +int frmt, fdf, af, pf, pn, phnmr, annmr, dgnmr, num_pmu = 1; +int cfg2_frm_size, data_frm_size = 18, data_rate, cfgcnt = 0; +int i, j, n, pmu_id, indx = 0, global_data_frm_size=0, hdrFrmSize=0; +long int soc, fracsec = 0; +long int phunit = 915527, anunit = 1, digunit = 0; + +const long int TB = 16777215; // roundf(powf(2,24) - 1); + +char temp_5[16]; +unsigned char temp[2], temp_1[4], temp_6[16]; +unsigned char cfg2_frm[MAX_STRING_SIZE]; +unsigned char header[MAX_STRING_SIZE]; + +struct timeval tim; +uint16_t chk; + + +/* ------------------------------------------------------------------------*/ +/* FUNCTION header_frm_gen(int len) */ +/* It generates the Header Frame from user given information about PMU and */ +/* store in a PMU Setup File. */ +/* ------------------------------------------------------------------------*/ + +void header_frm_gen(int len) +{ + /* local variables */ + int i, indx = 0; + FILE *fp1; + + memset(header, '\0', sizeof(header)); + + /* Insert the fields in Header Frame: sync word */ + header[indx++] = 0xAA; + header[indx++] = 0x001; + + /* Insert frame size in Header Frame */ + i2c(0, temp); + B_copy(header, temp, indx, 2); + indx = indx + 2; + + /* Insert user given PMU ID in Header Frame */ + i2c(pmu_id, temp); + B_copy(header, temp, indx, 2); + indx = indx + 2; + + /* Insert current SOC value in Header Frame */ + //time_t tm = time(NULL); + gettimeofday(&tim, NULL); + soc = (long) tim.tv_sec; + li2c(soc, temp_1); + B_copy(header, temp_1, indx, 4); + indx = indx + 4; + + /* Insert the time quality fields & fraction of second value in Header Frame */ + //gettimeofday(&tim, NULL); + //t1=tim.tv_sec+(tim.tv_usec/1000000.0); + //fracsec = (t1-soc)*TB; + fracsec = (long) (tim.tv_usec*TB/1e6); + li2c(fracsec, temp_1); + B_copy(header, temp_1, indx, 4); + indx = indx + 4; + + /* Insert the PMU Information given by user in Header Frame */ + for (i = 0; i < len; i++) + { + header[indx+i] = hdr_frame[i]; + } + indx = indx + i; + + /* Calculation & insert the checksum VALUE of Header frame (up to now) */ + chk = compute_CRC(header,indx); + header[indx++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte */ + header[indx++] = (chk ) & ~(~0<<8); /* CHKSUM low byte */ + + /* Insert frame size in Header Frame */ + header[2] = indx>>8;; + header[3] = indx; + + /* Open the PMU Setup File */ + fp1 = fopen(pmuFilePath,"ab"); + + if (fp1 != NULL) + { + hdrFrmSize = indx; + + char buff[15]; + sprintf(buff, "%d", indx); + + /* Write the size of Header Frame & then Header Frame into file */ + fputs("HdrFrame 1 ", fp1); + fputs(buff, fp1); + + fwrite(header, sizeof(unsigned char), indx, fp1); + fputc('\n', fp1); + + fclose(fp1); + + printf("\n-> Size of Header frame is %d Bytes.", indx); + validation_result (" Headre Frame successfully generated."); + } +}; /* end of header_frm_gen() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION reconfig_cfg_CC() */ +/* This function allows user to easy modify the existing Configuration Frame. */ +/* In terms of modification user can add new phasor channels or remove. */ +/* It also provide the option for change Data Rate. Finally replace the new */ +/* Configuration frame with old CFG in PMU Setup File and gives signal to PMU */ +/* serverchange to change the appropriate bit of STAT Word while sending */ +/* Data Frames to connected PDC. */ +/* ---------------------------------------------------------------------------- */ + +void reconfig_cfg_CC() +{ + /* local Variables*/ + unsigned char stn[16]; + int old_data_rate, indx=2; + int j, global_frmt, tmp_k; + FILE *fp1; + + /* Get the Station name from CFG FRM */ + memset(stn, '\0', 16); + strncpy((char *)stn, cfg_info->cfg_STNname, 16); + + /* Get the FORMAT word from CFG FRM */ + global_frmt = frmt; + + /* Ask user's choice what type of modification he wants? */ + if(new_cfg_info->add_remove_choice == 1) /* Add more Phasor/Analog channels in existing CFG as per user's wish */ + { + phnmr = cfg_info->cfg_phnmr_val + new_cfg_info->new_cfg_phnmr_val; + annmr = cfg_info->cfg_annmr_val + new_cfg_info->new_cfg_annmr_val; + } + else if(new_cfg_info->add_remove_choice == 2) /* Remove Phasor/Analog channels from existing CFG as per user's wish */ + { + phnmr = cfg_info->cfg_phnmr_val - new_cfg_info->new_cfg_phnmr_val; + annmr = cfg_info->cfg_annmr_val - new_cfg_info->new_cfg_annmr_val; + } + + /* Calculate the size of new CFG Frame */ + cfg2_frm_size = 0; + cfg2_frm_size = 54 + (16*phnmr) + (16*annmr) + (256*dgnmr) + (4*phnmr) + (4*annmr) + (4*dgnmr); + + /* Calculate the corresponding data frame size */ + global_data_frm_size = data_frm_size; + data_frm_size = 0; + data_frm_size = 18; + + /* Calculate 4/8 bytes for each PHNMR */ + if (cfg_info->cfg_pf == 0) + { + data_frm_size = data_frm_size + (4*phnmr); + } + else + { + data_frm_size = data_frm_size + (8*phnmr); + } + + /* Calculate 2/4 bytes for each ANNMR */ + if (cfg_info->cfg_af == 0) + { + data_frm_size = data_frm_size + (2*annmr); + } + else + { + data_frm_size = data_frm_size + (4*annmr); + } + + /* Calculate 2/4 bytes for both (FREQ + DFREQ) */ + if (cfg_info->cfg_fdf == 0) + { + data_frm_size = data_frm_size + 4; + } + else + { + data_frm_size = data_frm_size + 8; + } + + /* Calculate 2 bytes for each DGNMR */ + data_frm_size = data_frm_size + (2*dgnmr); + printf("\nCFG = %d, Data Frame = %d\n", cfg2_frm_size, data_frm_size); + + /* Insert the fields in new CFG Frame: sync word */ + memset(cfg2_frm,'\0',sizeof(cfg2_frm)); + indx = 0; + cfg2_frm[indx++] = 0xAA; + cfg2_frm[indx++] = 0x31; + + /* Insert frame size in new CFG Frame */ + i2c(cfg2_frm_size, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert user given PMU ID in new CFG Frame */ + i2c(pmu_id, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert current SOC value in new CFG Frame */ + soc = 0; + li2c(soc, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert the time quality fields & fraction of second value in new CFG Frame, here it is static "00000000" */ + li2c(fracsec, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert Time Base for calculating fraction of second in new CFG Frame, here it is static 1000000μs */ + li2c(TB, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert number of PMU in new CFG Frame: static "0001" */ + i2c(num_pmu, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert the station name or PMU name in new CFG Frame */ + B_copy(cfg2_frm, stn, indx, 16); + indx = indx + 16; + + /* Insert again pmu id in new CFG Frame */ + i2c(pmu_id, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert format word in new CFG Frame */ + i2c(global_frmt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of phasor or PHNMR in new CFG Frame */ + i2c(phnmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of analog or ANNMR in new CFG Frame */ + i2c(annmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of Digital status word or DGNMR in new CFG Frame */ + i2c(dgnmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert NEW Phasor channel Names (if any) in new CFG frame */ + if (new_cfg_info->add_remove_choice == 1) + { + /* First Insert old Phasor channels in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_phasor_channels, indx, cfg_info->cfg_phnmr_val*16); + indx = indx + (cfg_info->cfg_phnmr_val*16); + + if (new_cfg_info->new_cfg_phnmr_val > 0) + { + /* Insert New Phasor channels (if any) in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)new_cfg_info->new_cfg_phasor_channels, indx, (new_cfg_info->new_cfg_phnmr_val*16)); + indx = indx + (new_cfg_info->new_cfg_phnmr_val*16); + free(new_cfg_info->new_cfg_phasor_channels); + } + cfg_info->cfg_phnmr_val = cfg_info->cfg_phnmr_val + new_cfg_info->new_cfg_phnmr_val; + + /* First Insert old Analog channels in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_analog_channels, indx, cfg_info->cfg_annmr_val*16); + indx = indx + (cfg_info->cfg_annmr_val*16); + if (new_cfg_info->new_cfg_annmr_val > 0) + { + /* Insert New Analog channels (if any) in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)new_cfg_info->new_cfg_analog_channels, indx, (new_cfg_info->new_cfg_annmr_val*16)); + indx = indx + (new_cfg_info->new_cfg_annmr_val*16); + free(new_cfg_info->new_cfg_analog_channels); + } + cfg_info->cfg_annmr_val = cfg_info->cfg_annmr_val + new_cfg_info->new_cfg_annmr_val; + } + + /* Remove channel Names (from availables) from new CFG frame */ + else if (new_cfg_info->add_remove_choice == 2) + { + /* Remove Phasor channels (if any) in new CFG frame */ + cfg_info->cfg_phnmr_val = cfg_info->cfg_phnmr_val - new_cfg_info->new_cfg_phnmr_val; + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_phasor_channels, indx, cfg_info->cfg_phnmr_val*16); + indx = indx + (cfg_info->cfg_phnmr_val*16); + + /* Remove Analog channels (if any) in new CFG frame */ + cfg_info->cfg_annmr_val = cfg_info->cfg_annmr_val - new_cfg_info->new_cfg_annmr_val; + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_analog_channels, indx, cfg_info->cfg_annmr_val*16); + indx = indx + (cfg_info->cfg_annmr_val*16); + } + + /* Insert Digital channel Names in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_digital_channels, indx, (cfg_info->cfg_dgnmr_val*256)); + indx = indx + (cfg_info->cfg_dgnmr_val*256); + + /* Insert FACTOR VALUES for Phasor, Analog and Digital in new CFG frame */ + for(j=0, tmp_k=0; jcfg_phnmr_val; j++) /* FACTOR VALUES for Phasor */ + { + cfg2_frm[indx++] = phunit_final_val[tmp_k++]; + cfg2_frm[indx++] = phunit_final_val[tmp_k++]; + cfg2_frm[indx++] = phunit_final_val[tmp_k++]; + cfg2_frm[indx++] = phunit_final_val[tmp_k++]; + } + for(j=0, tmp_k=0; jcfg_annmr_val; j++) /* FACTOR VALUES for Phasor */ + { + cfg2_frm[indx++] = anunit_final_val[tmp_k++]; + cfg2_frm[indx++] = anunit_final_val[tmp_k++]; + cfg2_frm[indx++] = anunit_final_val[tmp_k++]; + cfg2_frm[indx++] = anunit_final_val[tmp_k++]; + } + + for(j=0; jcfg_dgnmr_val; j++) /* FACTOR VALUES for Digital */ + { + li2c(digunit, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + } + + /* Insert normal frequency or fnom VALUE in new CFG frame */ + i2c(cfg_info->cfg_fnom, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Data rate change? option for user */ + old_data_rate = data_rate; + if (new_cfg_info->data_rate_choice == 1) + { + data_rate = new_cfg_info->new_data_rate; + cfg_info->cfg_dataRate = new_cfg_info->new_data_rate; + printf("\n-> New Data Rate = %d\n", data_rate); + } + + /* Insert configuration count or cfgcnt VALUE in new CFG frame is any of addition or removal of channel happened??? */ + if ((global_data_frm_size != data_frm_size) || (old_data_rate != data_rate)) + { + cfgcnt = cfgcnt + 1; + printf("\n-> CFG COUNT incremented = %d\n", cfgcnt); + i2c(cfgcnt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + } + else + { + i2c(cfgcnt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + } + + /* Insert Data Rate VALUE in new CFG frame */ + i2c(data_rate, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert current SOC value in new CFG Frame */ + gettimeofday(&tim, NULL); + soc = (long) tim.tv_sec; + li2c(soc, temp_1); + B_copy(cfg2_frm, temp_1, 6, 4); + + /* Insert the time quality fields & fraction of second value in new CFG Frame */ + //gettimeofday(&tim, NULL); + //t1=tim.tv_sec+(tim.tv_usec/1000000.0); + //fracsec = (t1-soc)*TB; + fracsec = (long) (tim.tv_usec*TB/1e6); + li2c(fracsec, temp_1); + B_copy(cfg2_frm, temp_1, 10, 4); + + /* Calculation & insert the checksum VALUE of new CFG frame (up to now) */ + chk = compute_CRC(cfg2_frm,indx); + cfg2_frm[indx++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte */ + cfg2_frm[indx++] = (chk ) & ~(~0<<8); /* CHKSUM low byte */ + + /* Open the PMU Setup File and replace new CFG frame with old CFG if and only if + when last two calculated data frame are not equal or data rate changed */ + if ((global_data_frm_size != data_frm_size) || (old_data_rate != data_rate)) + { + /* Delete the old PMU Setup File and create new PMU Setup File with new CFG frame */ + if (remove(pmuFilePath) == -1) + perror("Error in deleting a file"); + + fp1 = fopen (pmuFilePath,"wb"); + + char buff[50]; + + sprintf(buff, "%d", PMU_uport); + fputs(buff, fp1); + fputc('\n', fp1); + + sprintf(buff, "%d", PMU_tport); + fputs(buff, fp1); + fputc('\n', fp1); + + fputs("CFG 1 ", fp1); + sprintf(buff, "%d", indx); + fputs(buff, fp1); + fputc('\n', fp1); + + fwrite(cfg2_frm, sizeof(unsigned char),indx,fp1); + fputc('\n', fp1); + + if(hdrFrmSize > 0) + { + fputs("HDR 1 ", fp1); + sprintf(buff, "%d", hdrFrmSize); + fputs(buff, fp1); + fputc('\n', fp1); + + fwrite(header, sizeof(unsigned char),hdrFrmSize,fp1); + fputc('\n', fp1); + } + else + { + fputs("HDR 0 0", fp1); + fputc('\n', fp1); + } + + fclose (fp1); + free(new_cfg_info); + validation_result ("Modification in Configuration frame has been successfully updated."); + + /* Give signal to PMU Server for change in configuration frame */ + ShmPTR->cfg_bit_change_info = 1; + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR2); + printf("Configuration frame modification signal sent to PMU Server.\n"); + + /* Set raw data selection as configuration has been changed */ + strcpy(ShmPTR->filePath, "nil"); + ShmPTR->dataFileVar = 0; + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR1); + printf("Set Raw Measurements in Data Frames because configuration of PMU has been changed.\n"); + + } + else /* If CFG is not modified */ + { + validation_result ("No modification has been done in Configuration frame."); + } + + printf("\n-> New configuration frame has been generated of size %d Bytes.\nAnd the new data frame size would be %d Bytes.\n\n[", cfg2_frm_size, data_frm_size); + +} /* end of reconfig_cfg_CC() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION create_cfg() */ +/* It generate the Configuration Frame as per user entered information. */ +/* It write in the file PMU Setup File. */ +/* It will also reload the saved PMU Setup File give by user. */ +/* ---------------------------------------------------------------------------- */ + +int create_cfg() +{ + /* local Variables*/ + int j, a, x1, tmp_k; + int tempi, indx = 0; + char stn[17],*rline = NULL, *d1; + unsigned char cline[MAX_STRING_SIZE]; + + size_t len = 0; + ssize_t read; + FILE *fp1; + + /* Open the saved PMU Setup File and read the CFG frame if any? */ + fp1 = fopen (pmuFilePath,"rb"); + + if (fp1 != NULL) + { + tempi = 1; + while(tempi < 4) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL," "); + tempi = atoi(d1); + + if (tempi == 1) + { + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + /* Copy the full Configuration Frame into 'cline' array */ + memset(cline,'\0',sizeof(cline)); + fread(cline, sizeof(unsigned char), tempi, fp1); + fclose(fp1); + + /* Allocate the memory for ConfigurationFrame object */ + cfg_info = malloc(sizeof(struct ConfigurationFrame)); + cfg_info->cfg_STNname = malloc(17); + + /* Get the CFG size & store globaly */ + temp[0] = cline[2]; + temp[1] = cline[3]; + cfg2_frm_size = c2i(temp); + + /* Get the PMU ID from CFG FRM & store globally */ + temp[0] = cline[4]; + temp[1] = cline[5]; + pmu_id = c2i(temp); + cfg_info->cfg_pmuID = pmu_id; + + /* Get the PMU ID from CFG FRM & store globally */ + temp_1[0] = cline[14]; + temp_1[1] = cline[15]; + temp_1[2] = cline[16]; + temp_1[3] = cline[17]; + //TB = c2li(temp_1); + + /* Get the Station name from CFG FRM & store globally */ + for(a=0; a<16; a++) + { + stn[a] = cline[20+a]; + } + stn[16] = '\0'; + strcpy(cfg_info->cfg_STNname, stn); + + /* Get the FORMAT word from CFG FRM */ + temp[0] = cline[38]; + temp[1] = cline[39]; + frmt = c2i(temp); + + /* Initialize the frmt bits as in his appropriate global variable */ + if(frmt == 15) + { + fdf=1, af=1, pf=1, pn=1; + } + else if(frmt == 14) + { + fdf=1, af=1, pf=1, pn=0; + } + else if(frmt == 13) + { + fdf=1, af=1, pf=0, pn=1; + } + else if(frmt == 12) + { + fdf=1, af=1, pf=0, pn=0; + } + else if(frmt == 11) + { + fdf=1, af=0, pf=1, pn=1; + } + else if(frmt == 10) + { + fdf=1, af=0, pf=1, pn=0; + } + else if(frmt == 9) + { + fdf=1, af=0, pf=0, pn=1; + } + else if(frmt == 8) + { + fdf=1, af=0, pf=0, pn=0; + } + else if(frmt == 7) + { + fdf=0, af=1, pf=1, pn=1; + } + else if(frmt == 6) + { + fdf=0, af=1, pf=1, pn=0; + } + else if(frmt == 5) + { + fdf=0, af=1, pf=0, pn=1; + } + else if(frmt == 4) + { + fdf=0, af=1, pf=0, pn=0; + } + else if(frmt == 3) + { + fdf=0, af=0, pf=1, pn=1; + } + else if(frmt == 2) + { + fdf=0, af=0, pf=1, pn=0; + } + else if(frmt == 1) + { + fdf=0, af=0, pf=0, pn=1; + } + else + { + fdf=0, af=0, pf=0, pn=0; + } + + /* Store FORMAT in global data structure */ + cfg_info->cfg_fdf = fdf; + cfg_info->cfg_af = af; + cfg_info->cfg_pf = pf; + cfg_info->cfg_pn = pn; + + /* Get the PHNMR from CFG FRM & store globally */ + temp[0] = cline[40]; + temp[1] = cline[41]; + phnmr = c2i(temp); + cfg_info->cfg_phnmr_val = phnmr; + + /* Get the ANNMR from CFG FRM & store in globally */ + temp[0] = cline[42]; + temp[1] = cline[43]; + annmr = c2i(temp); + cfg_info->cfg_annmr_val = annmr; + + /* Get the DGNMR from CFG FRM & store globally */ + temp[0] = cline[44]; + temp[1] = cline[45]; + dgnmr = c2i(temp); + cfg_info->cfg_dgnmr_val = dgnmr; + + /* To escape the some of fields in cfg frame */ + indx = 46 + (16*phnmr) + (16*annmr) + (256*dgnmr) + (4*phnmr) + (4*annmr) + (4*dgnmr) + 2; + temp[0] = cline[indx++]; + temp[1] = cline[indx++]; + cfgcnt = c2i(temp); + + /* Get the Data Rate from CFG FRM & store globally */ + temp[0] = cline[indx++]; + temp[1] = cline[indx++]; + data_rate = c2i(temp); + cfg_info->cfg_dataRate = data_rate; + + /* Seprate the Phasor Channels from CFG FRM & store globally */ + cfg_info->cfg_phasor_channels = (char *)malloc((phnmr*16) * sizeof(char)); + + for(x1=0, indx=46; x1< (phnmr*16); x1++,indx++) + { + cfg_info->cfg_phasor_channels[x1] = cline[indx]; + } + + /* Seprate the Analog Channels from CFG FRM & store globally */ + cfg_info->cfg_analog_channels = (char *)malloc((annmr*16) * sizeof(char)); + + for(x1=0, indx; x1< (annmr*16); x1++,indx++) + { + cfg_info->cfg_analog_channels[x1] = cline[indx]; + } + + /* Seprate the Digital Channels from CFG FRM & store globally */ + cfg_info->cfg_digital_channels = (char *)malloc((dgnmr*16*16) * sizeof(char)); + + for(x1=0, indx; x1< (dgnmr*16*16); x1++,indx++) + { + cfg_info->cfg_digital_channels[x1] = cline[indx]; + } + + /* Insert FACTOR VALUES for Phasor, Analog and Digital in new CFG frame */ + for(j=0, tmp_k=0; jcfg_phnmr_val; j++)/* FACTOR VALUES for Phasor */ + { + phunit_final_val[tmp_k++] = cline[indx++]; + phunit_final_val[tmp_k++] = cline[indx++]; + phunit_final_val[tmp_k++] = cline[indx++]; + phunit_final_val[tmp_k++] = cline[indx++]; + } + for(j=0, tmp_k=0; jcfg_annmr_val; j++)/* FACTOR VALUES for Analog */ + { + anunit_final_val[tmp_k++] = cline[indx++]; + anunit_final_val[tmp_k++] = cline[indx++]; + anunit_final_val[tmp_k++] = cline[indx++]; + anunit_final_val[tmp_k++] = cline[indx++]; + } + } + } + } + else /* At the time of creating new PMU Setup File */ + { + /* Store FORMAT bits from global data structure */ + fdf = cfg_info->cfg_fdf; + af = cfg_info->cfg_af; + pf = cfg_info->cfg_pf; + pn = cfg_info->cfg_pn; + + if(fdf==1 && af==1 && pf==1 && pn==1) + { + frmt = 15; + } + else if(fdf==1 && af==1 && pf==1 && pn==0) + { + frmt = 14; + } + else if(fdf==1 && af==1 && pf==0 && pn==1) + { + frmt = 13; + } + else if(fdf==1 && af==1 && pf==0 && pn==0) + { + frmt = 12; + } + else if(fdf==1 && af==0 && pf==1 && pn==1) + { + frmt = 11; + } + else if(fdf==1 && af==0 && pf==1 && pn==0) + { + frmt = 10; + } + else if(fdf==1 && af==0 && pf==0 && pn==1) + { + frmt = 9; + } + else if(fdf==1 && af==0 && pf==0 && pn==0) + { + frmt = 8; + } + else if(fdf==0 && af==1 && pf==1 && pn==1) + { + frmt = 7; + } + else if(fdf==0 && af==1 && pf==1 && pn==0) + { + frmt = 6; + } + else if(fdf==0 && af==1 && pf==0 && pn==1) + { + frmt = 5; + } + else if(fdf==0 && af==1 && pf==0 && pn==0) + { + frmt = 4; + } + else if(fdf==0 && af==0 && pf==1 && pn==1) + { + frmt = 3; + } + else if(fdf==0 && af==0 && pf==1 && pn==0) + { + frmt = 2; + } + else if(fdf==0 && af==0 && pf==0 && pn==1) + { + frmt = 1; + } + else + { + frmt = 0; + } + + /* Accept Number of Phasor values in PHNMR */ + phnmr = cfg_info->cfg_phnmr_val; + + /* Accept Number of Phasor values in ANNMR */ + annmr = cfg_info->cfg_annmr_val; + + /* Accept Number of Phasor values in DGNMR */ + dgnmr = cfg_info->cfg_dgnmr_val; + + /* Calculate the total size of CFG Frame */ + cfg2_frm_size = 54 + (16*phnmr) + (16*annmr) + (4*phnmr) + (4*annmr) + (4*dgnmr) + (256*dgnmr); + + /* Calculate 4/8 bytes for each PHNMR & store globally */ + if (pf == 0) + { + data_frm_size = data_frm_size + (4*phnmr); + } + else + { + data_frm_size = data_frm_size + (8*phnmr); + } + + /* Calculate 2/4 bytes for each ANNMR & store globally */ + if (af == 0) + { + data_frm_size = data_frm_size + (2*annmr); + } + else + { + data_frm_size = data_frm_size + (4*annmr); + } + + /* Calculate 2/4 bytes for both (FREQ + DFREQ) & store globally */ + if (fdf == 0) + { + data_frm_size = data_frm_size + 4; + } + else + { + data_frm_size = data_frm_size + 8; + } + + /* Calculate 2 bytes for each DGNMR & store globally */ + data_frm_size = data_frm_size + (2*dgnmr); + + /* Insert the fields in CFG Frame: sync word */ + memset(cfg2_frm,'\0',sizeof(cfg2_frm)); + cfg2_frm[indx++] = 0xAA; + cfg2_frm[indx++] = 0x31; + + /* Insert frame size in CFG Frame */ + i2c(cfg2_frm_size, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert user given PMU ID in CFG Frame */ + pmu_id = cfg_info->cfg_pmuID; + i2c(pmu_id, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert SOC value in CFG Frame */ + soc = 0; + li2c(soc, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert the time quality fields & fraction of second value in CFG Frame, right now it is '00000000' */ + li2c(fracsec, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert Time Base for calculating fraction of second in CFG Frame, here it is static 1000000μs */ + li2c(TB, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert number of PMU in CFG Frame: Static "0001" */ + i2c(num_pmu, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert the station name or PMU name in CFG Frame */ + strncpy(temp_5, (const char *)cfg_info->cfg_STNname, 16); + B_copy(cfg2_frm, (unsigned char *)temp_5, indx, 16); + indx = indx + 16; + + /* Again insert pmu id in CFG Frame */ + i2c(pmu_id, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert format word in CFG Frame */ + i2c(frmt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of phasor or PHNMR in CFG Frame */ + i2c(phnmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of analog or ANNMR in CFG Frame */ + i2c(annmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of Digital status word or DGNMR in CFG Frame */ + i2c(dgnmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* All channel names or CHNAM fields in CFG frame. */ + /* Insert phasor channel names in CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_phasor_channels, indx, 16*phnmr); + indx = indx + 16*phnmr; + + /* Insert Digital channel names in CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_analog_channels, indx, 16*annmr); + indx = indx + 16*annmr; + + /* Insert Digital channel names in CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_digital_channels, indx, 16*16*dgnmr); + indx = indx + 16*16*dgnmr; + + /* Insert FACTOR VALUES for Phasor, Analog and Digital in CFG frame */ + for(j=0, tmp_k=0; jcfg_fnom, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert configuration count or cfgcnt VALUE in CFG frame */ + i2c(cfgcnt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert Data Rate in CFG frame */ + data_rate = cfg_info->cfg_dataRate; + i2c(data_rate, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert current SOC value in CFG Frame */ + gettimeofday(&tim, NULL); + soc = (long) tim.tv_sec; + li2c(soc, temp_1); + B_copy(cfg2_frm, temp_1, 6, 4); + + /* Insert the time quality fields & fraction of second value in CFG Frame */ + // gettimeofday(&tim, NULL); + // t1=tim.tv_sec+(tim.tv_usec/1000000.0); + // fracsec = (t1-soc)*TB; + fracsec = (long) (tim.tv_usec*TB/1e6); + li2c(fracsec, temp_1); + B_copy(cfg2_frm, temp_1, 10, 4); + + /* Calculation & insert the checksum VALUE of new CFG frame (up to now) */ + chk = compute_CRC(cfg2_frm,indx); + + cfg2_frm[indx++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte */ + cfg2_frm[indx++] = (chk ) & ~(~0<<8); /* CHKSUM low byte */ + + char buff[50]; + + /* Create a new PMU Setup File and save the info with 'pmuPMU-ID.txt' name */ + memset(pmuFilePath, '\0', 200); + strcpy(pmuFilePath, pmuFolderPath); + strcat(pmuFilePath, "/"); + strcat(pmuFilePath, "pmu"); + sprintf(buff, "%d", pmu_id); + strcat(pmuFilePath, buff); + strcat(pmuFilePath, ".bin"); + pmuFilePath[strlen(pmuFilePath)] = '\0'; + + fp1 = fopen (pmuFilePath,"wb"); + + sprintf(buff, "%d", PMU_uport); + fputs(buff, fp1); + fputc('\n', fp1); + + sprintf(buff, "%d", PMU_tport); + fputs(buff, fp1); + fputc('\n', fp1); + + fputs("CFG 1 ", fp1); + sprintf(buff, "%d", indx); + fputs(buff, fp1); + fputc('\n', fp1); + + fwrite(cfg2_frm, sizeof(unsigned char),indx,fp1); + fputc('\n', fp1); + + fclose (fp1); + + printf("\nCFG Frame size = %d-Bytes, ", cfg2_frm_size); + printf("& Data Frame size = %d-Bytes.\n", data_frm_size); + } + + /* Now send a signal for CFG file path to PMU Server process*/ + strcpy(ShmPTR->cfgPath, pmuFilePath); + ShmPTR->dataFileVar = 2; + + p1.pid = ShmPTR->pid; + kill(p1.pid, SIGUSR1); + printf("\nConfiguration file path has been sent to PMU Server through signal.\n"); + + return 0; +} /* end of function() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION show_pmu_details (GtkWidget *widget, gpointer udata) */ +/* It display the details of PMU Server and Configuartion details. */ +/* ---------------------------------------------------------------------------- */ + +void show_pmu_details (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + char tmpBuffer[30]; + GtkWidget *label, *table, *close_but; + + /* Create a new dialog window for the scrolled window to be packed into */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "PMU Properties"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a table of 14 by 2 squares. */ + table = gtk_table_new (16, 2, FALSE); + + /* Set the spacing to 35 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 5); + + /* Pack the table into the scrolled window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "OK" button to the bottom of the dialog */ + close_but = gtk_button_new_with_label ("OK"); + + /* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window */ + label = gtk_label_new (" "); + markup1 = g_markup_printf_escaped ("PMU Server Details"); + gtk_label_set_markup (GTK_LABEL (label), markup1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup1); + + label = gtk_label_new ("UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + /* We have the global variables to hold the port & protocol values */ + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",PMU_uport); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",PMU_tport); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3); + gtk_widget_show (label); + + /* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window */ + label = gtk_label_new (" "); + markup1 = g_markup_printf_escaped ("PMU Configuration Details"); + gtk_label_set_markup (GTK_LABEL (label), markup1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 4, 5); + gtk_widget_show (label); + g_free (markup1); + + label = gtk_label_new ("PMU ID"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + label = gtk_label_new ("Station Name"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 6, 7); + gtk_widget_show (label); + + label = gtk_label_new ("Number of Phasors"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 7, 8); + gtk_widget_show (label); + + label = gtk_label_new ("Number of Analog "); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 8, 9); + gtk_widget_show (label); + + label = gtk_label_new ("Digital Status Word"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 9, 10); + gtk_widget_show (label); + + label = gtk_label_new ("Data Rate"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 10, 11); + gtk_widget_show (label); + + label = gtk_label_new ("Format Word"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 11, 12); + gtk_widget_show (label); + + label = gtk_label_new ("Configuration Count "); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 12, 13); + gtk_widget_show (label); + + label = gtk_label_new ("CFG Frame Size"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 13, 14); + gtk_widget_show (label); + + /* Printing the appropriate values from CFG objects */ + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_pmuID); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 5, 6); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + label = gtk_label_new (cfg_info->cfg_STNname); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 6, 7); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_phnmr_val); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 7, 8); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_annmr_val); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 8, 9); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_dgnmr_val); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 9, 10); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_dataRate); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 10, 11); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",frmt); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 11, 12); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfgcnt); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 12, 13); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg2_frm_size); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 13, 14); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Configuration and Server info of running PMU."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 15, 16); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for OK-button on dialog Window */ + g_signal_connect_swapped (close_but, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (close_but, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_but, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_but); + gtk_widget_show (close_but); + + /* Finally show the PMU Detailed window or new_window */ + gtk_widget_show (new_window); +}; + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/CfgFunction.h b/PMUSimulator/CfgFunction.h new file mode 100755 index 0000000..8563172 --- /dev/null +++ b/PMUSimulator/CfgFunction.h @@ -0,0 +1,91 @@ +/* ----------------------------------------------------------------------------- + * CfgFunction.h + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int PMU_uport; +int PMU_tport; +char *hdr_frame, *markup1; +unsigned char phunit_final_val[500]; +unsigned char anunit_final_val[500]; + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +struct ConfigurationFrame +{ + int cfg_pmuID; + int cfg_fdf; + int cfg_af; + int cfg_pf; + int cfg_pn; + int cfg_phnmr_val; + int cfg_annmr_val; + int cfg_dgnmr_val; + int cfg_fnom; + int cfg_dataRate; + char *cfg_STNname; + char *cfg_phasor_channels; + char *cfg_analog_channels; + char *cfg_digital_channels; +}; +struct ConfigurationFrame *cfg_info; + +struct ConfigurationChange +{ + int add_remove_choice; + int new_cfg_phnmr_val; + int new_cfg_annmr_val; + int data_rate_choice; + int new_data_rate; + char *new_cfg_phasor_channels; + char *new_cfg_analog_channels; +}; +struct ConfigurationChange *new_cfg_info; + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +void header_frm_gen(int len); + +void reconfig_cfg_CC(); + +void show_pmu_details (GtkWidget *widget, gpointer udata); + +int create_cfg(); + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/CfgGuiFunctions.c b/PMUSimulator/CfgGuiFunctions.c new file mode 100755 index 0000000..05d910d --- /dev/null +++ b/PMUSimulator/CfgGuiFunctions.c @@ -0,0 +1,2864 @@ +/* ----------------------------------------------------------------------------- + * CfgGuiFunctions.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include "PmuGui.h" +#include "CfgFunction.h" +#include "CfgGuiFunctions.h" +#include "ShearedMemoryStructure.h" + +#define PHUNIT_VOLTAGE (float)1000*100000/32768 +#define PHUNIT_CURRENT (float)100000/32768 +#define ANUNIT_EACH (float)100000/32768 + +/* -------------------------------------------------------------------------------------- */ +/* Functions in CfgGuiFunctions.c */ +/* -------------------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* */ +/* 1. int validation_cfg_create (); */ +/* 2. int validation_phasor_names(GtkWidget *widget, gpointer udata); */ +/* 3. int validation_analog_names(GtkWidget *widget, gpointer udata); */ +/* 4. int validation_digital_names(GtkWidget *widget, gpointer udata); */ +/* 5. int validation_ph_an_num (GtkButton *but, gpointer udata); */ +/* 6. int validation_new_phasor_names(); */ +/* 7. int validation_new_analog_names(GtkWidget *widget, gpointer udata); */ +/* 8. int validation_new_data_rate (GtkButton *but, gpointer udata); */ +/* 9. int validation_remove_ph_an_num (GtkButton *but, gpointer udata); */ +/* 10. void validation_hdr_frm (GtkWidget *widget, gpointer udata); */ +/* 11. int validation_setup_file_name (GtkWidget *widget, gpointer udata); */ + +/* 12. void cfg_create_function (GtkWidget *widget, gpointer udata); */ +/* 13. void channel_names_for_phasor (); */ +/* 14. void channel_names_for_analog (); */ +/* 15. void channel_names_for_digital (); */ +/* 16. void final_cfg_create (); */ +/* 17. void cfg_create_call(); */ +/* 18. void checkbox_function(GtkWidget *widget, gpointer data); */ + +/* 19. void stat_chng_options(GtkWidget *widget, gpointer udata); */ +/* 20. void cfg_STAT_change (GtkWidget *widget, gpointer udata); */ +/* 21. void Change_pmu_configuration(GtkWidget *widget, gpointer udata); */ +/* 22. void new_phasor_num(GtkWidget *widget, gpointer udata); */ +/* 23. void new_channel_names_for_phasor (); */ +/* 24. void new_channel_names_for_analog (); */ +/* 25. void change_data_rate_option(); */ +/* 26. void enter_new_data_rate(GtkWidget *widget, gpointer udata); */ +/* 27. void remove_phasor_num (GtkWidget *widget, gpointer udata); */ +/* 28. int final_cfg_update_call (GtkButton *but, gpointer udata); */ +/* 29. void hdr_create_function (GtkWidget *widget, gpointer udata); */ +/* */ +/* ---------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_cfg_create () */ +/* It Validates the user enterd details for PMU Simulator Configuration. It */ +/* gives the successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_cfg_create () +{ + /* local variables */ + int i, j; + const char *text, *text1, *text2, *text3, *text4; + const char *text5, *text6, *text7, *text8, *text9, *text10; + char *display_msg, stn[16], c = ' '; + + /* Get the text entries and combo box values filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_id)); + text1 = gtk_entry_get_text(GTK_ENTRY(p_stn)); + text2 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_ff)); + text3 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_af)); + text4 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_pf)); + text5 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_pn)); + text6 = gtk_entry_get_text(GTK_ENTRY(p_phNumber)); + text7 = gtk_entry_get_text(GTK_ENTRY(p_anNumber)); + text8 = gtk_entry_get_text(GTK_ENTRY(p_dgNumber)); + text9 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_drate)); + text10 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_frequency)); + + if(!isNumber((char *)text) || !atoi(text) > 0) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid PMU ID number! Try again "; + validation_result (display_msg); /* Show the unsuccess message to user */ + return 0; + } + else if(strlen(text1) == 0) /* Check text_box entry should not be NULL */ + { + display_msg = " Please enter a PMU Station name! "; + validation_result (display_msg); + return 0; + } + else if(!isNumber((char *)text6) || !atoi(text6) > 0) /* Check text_box entry for valid integer or not? and greater than 1 */ + { + display_msg = " Not a valid Phasor number! Try again "; + validation_result (display_msg); + return 0; + } + else if(!isNumber((char *)text7)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Analog number! Try again "; + validation_result (display_msg); + return 0; + } + else if(!isNumber((char *)text8)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Digital number! Try again "; + validation_result (display_msg); + return 0; + } + else /* Only if all the text_box entries were right */ + { + /* Allocate the memory for the ConfigurationFrame object and assigned couple of fields */ + cfg_info = malloc(sizeof(struct ConfigurationFrame)); + cfg_info->cfg_STNname = malloc(16); + memset(cfg_info->cfg_STNname,'\0',16); + + memset(stn, '\0', 16); + strcpy(stn, text1); + j = strlen(stn); + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + + cfg_info->cfg_pmuID = atoi(text); + strcpy(cfg_info->cfg_STNname, stn); + cfg_info->cfg_phnmr_val = atoi(text6); + cfg_info->cfg_annmr_val = atoi(text7); + cfg_info->cfg_dgnmr_val = atoi(text8); + cfg_info->cfg_dataRate = atoi(text9); + + if(!strcmp(text2, "Fix Point")) + cfg_info->cfg_fdf = 0; + else + cfg_info->cfg_fdf = 1; + + if(!strcmp(text3, "Fix Point")) + cfg_info->cfg_af = 0; + else + cfg_info->cfg_af = 1; + + if(!strcmp(text4, "Fix Point")) + cfg_info->cfg_pf = 0; + else + cfg_info->cfg_pf = 1; + + if(!strcmp(text5, "Rectangular")) + cfg_info->cfg_pn = 0; + else + cfg_info->cfg_pn = 1; + + if(atoi(text10) == 50) + cfg_info->cfg_fnom = 1; + else + cfg_info->cfg_fnom = 0; + + /* Close/destroy the cfg_setup_window */ + gtk_widget_destroy(cfg_setup_window); + + cfg_setup_window = NULL; + + /* Next call for Enter Phasor channels */ + channel_names_for_phasor (); + + return 1; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_phasor_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the user enterd Phasor channel names. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_phasor_names(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int ia, i, j, ia1 = 0; + int k, vtr; + long int li; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20]; + const char *text1; + + /* First get how many Phasor channel we have? */ + vtr = cfg_info->cfg_phnmr_val+1; + memset(stn, '\0', 16); + + /* Allocate the memory for Phasor channel names */ + cfg_info->cfg_phasor_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(cfg_info->cfg_phasor_channels, '\0', sizeof(cfg_info->cfg_phasor_channels)); + + for (ia=1; iacfg_phasor_channels); + display_msg = " Please enter Phasor channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; i< 16 && i< vtr*16; i++, ia1++) + { + /* Copy all phasor name in an array */ + cfg_info->cfg_phasor_channels[ia1] = stn[i]; + } + } + + /* Get the Pahsor maximum values at text entry filled by user */ + for(i=1, k=0; icfg_pf == 1) + { + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "Voltage")) + { + /* Fill the phasor factor values for voltage */ + phunit_final_val[k++] = 0; // 0- Indicating Voltage + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 1; + } + else + { + /* Fill the phasor factor values for current */ + phunit_final_val[k++] = 1; // 1- Indicating Current + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 1; + } + } + else + { + text1 = gtk_entry_get_text(GTK_ENTRY(num_text1[i])); + + if(!isNumber((char *)text1)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Phasor maximum value! Try again "; + validation_result (display_msg); + return 0; + } + else + { + li = atol(text1); + + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "Voltage")) + { + li = li*PHUNIT_VOLTAGE; + + /* Fill the phasor factor values for voltage */ + phunit_final_val[k++] = 0; + phunit_final_val[k++] = li>>16; + phunit_final_val[k++] = li>>8; + phunit_final_val[k++] = li; + } + else + { + li = li*PHUNIT_CURRENT; + + /* Fill the phasor factor values for current */ + phunit_final_val[k++] = 1; + phunit_final_val[k++] = li>>16; + phunit_final_val[k++] = li>>8; + phunit_final_val[k++] = li; + } + } + } + } + + /* Close/destroy the PhasorChWin */ + gtk_widget_destroy(PhasorChWin); + + /* Next call for Enter Analog channels */ + channel_names_for_analog (); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_analog_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the user enterd Analog channel names. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_analog_names(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int ia, i, j, ia1 = 0, vtr, k; + long int li; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20], *text1; + + /* First get how many Analog channel we have? */ + vtr = cfg_info->cfg_annmr_val+1; + memset(stn, '\0', 16); + + /* Allocate the memory for Analog channel names */ + cfg_info->cfg_analog_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(cfg_info->cfg_analog_channels, '\0', sizeof(cfg_info->cfg_analog_channels)); + + for (ia=1; iacfg_analog_channels); + display_msg = " Please enter Analog channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; i< 16 && i< vtr*16; i++, ia1++) + { + /* Copy all phasor name in an array */ + cfg_info->cfg_analog_channels[ia1] = stn[i]; + } + } + + /* Get the Pahsor maximum values at text entry filled by user */ + for(i=1, k=0; icfg_af == 1) + { + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "PMO")) + { + /* Fill the analog factor values for PMO */ + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + else if(!strcmp(text1, "RMS")) + { + /* Fill the analog factor values for RMS */ + anunit_final_val[k++] = 1; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + else + { + /* Fill the analog factor values for PEAK */ + anunit_final_val[k++] = 2; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + } + else + { + text1 = gtk_entry_get_text(GTK_ENTRY(num_text1[i])); + + if(!isNumber((char *)text1)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid analog maximum value! Try again "; + validation_result (display_msg); + return 0; + } + else + { + li = atol(text1); + + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "POW")) + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for PMO */ + anunit_final_val[k++] = 0; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + else if(!strcmp(text1, "RMS")) + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for RMS */ + anunit_final_val[k++] = 1; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + else + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for PEAK */ + anunit_final_val[k++] = 2; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + } + } + } + + /* Close/destroy the AnalogChWin */ + gtk_widget_destroy(AnalogChWin); + + /* Next call for Enter Digital channels */ + channel_names_for_digital (); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_digital_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the user enterd Digital channel names. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_digital_names(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int ia, i, j, ia1 = 0, vtr; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20]; + + /* First get how many Digital channel we have? */ + vtr = cfg_info->cfg_dgnmr_val*16+1; + memset(stn, '\0', 16); + + /* Allocate the memory for Digital channel names */ + cfg_info->cfg_digital_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(cfg_info->cfg_digital_channels, '\0', sizeof(cfg_info->cfg_digital_channels)); + + for (ia=1; iacfg_digital_channels); + display_msg = " Please enter Digital channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; i< 16 && i< vtr*16; i++, ia1++) + { + /* Copy all digital name in an array */ + cfg_info->cfg_digital_channels[ia1] = stn[i]; + } + } + + /* Close/destroy the AnalogChWin */ + gtk_widget_destroy(AnalogChWin); + + /* Next call for finaly create Configuration Frame */ + final_cfg_create (); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_ph_an_num (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd number of phasors (PHNMR) and number of */ +/* analogs (ANNMR) for new CFG. It will go ahead with entered data if all */ +/* entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_ph_an_num (GtkButton *but, gpointer udata) +{ + /* local variables */ + const char *text, *text1; + + /* Get the text entry value filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(phtext)); + text1 = gtk_entry_get_text(GTK_ENTRY(angtext)); + + if(!isNumber((char *)text) || !(atoi(text) >= 0)) + { + validation_result (" Not a valid Phasor number! Try again "); + return 1; + } + if(!isNumber((char *)text1) || !(atoi(text1) >= 0)) + { + validation_result (" Not a valid Analog number! Try again "); + return 1; + } + else + { + /* Next call for Enter New Analog channels */ + new_cfg_info->new_cfg_annmr_val = atoi(text1); + + /* Next call for Enter New Phasor channels */ + new_cfg_info->new_cfg_phnmr_val = atoi(text); + new_channel_names_for_phasor (); + return 0; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_new_phasor_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the New Phasor channel names. It willgo ahead with */ +/* entered data if all entries were right, else it shows the validation */ +/* error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_new_phasor_names() +{ + /* local variables */ + int ia, i, j, ia1 = 0, vtr; + int old_ph_count, k; + long int li; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20], *text1; + + /* First get how many New Phasor channel he wants to add? */ + vtr = new_cfg_info->new_cfg_phnmr_val+1; + memset(stn, '\0', 16); + + /* Allocate the memory for New Phasor channel names */ + new_cfg_info->new_cfg_phasor_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(new_cfg_info->new_cfg_phasor_channels, '\0', sizeof(new_cfg_info->new_cfg_phasor_channels)); + + for (ia=1; ianew_cfg_phasor_channels); + display_msg = " Please enter new Phasor channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; ((i< 16) && (i< vtr*16)); i++, ia1++) + { + /* Copy all phasor name in an array */ + new_cfg_info->new_cfg_phasor_channels[ia1] = stn[i]; + } + } + + /* Get the Pahsor maximum values at text entry filled by user */ + old_ph_count = cfg_info->cfg_phnmr_val; + + for(i=1, k=old_ph_count*4; icfg_pf == 1) + { + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "Voltage")) + { + /* Fill the phasor factor values for voltage */ + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 1; + } + else + { + /* Fill the phasor factor values for current */ + phunit_final_val[k++] = 1; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 1; + } + } + else + { + text1 = gtk_entry_get_text(GTK_ENTRY(num_text1[i])); + + if(!isNumber((char *)text1)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Phasor maximum value! Try again "; + validation_result (display_msg); + return 1; + } + else + { + li = atol(text1); + + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "Voltage")) + { + li = li*PHUNIT_VOLTAGE; + + /* Fill the phasor factor values for voltage */ + phunit_final_val[k++] = 0; + phunit_final_val[k++] = li>>16; + phunit_final_val[k++] = li>>8; + phunit_final_val[k++] = li; + } + else + { + li = li*PHUNIT_CURRENT; + + /* Fill the phasor factor values for current */ + phunit_final_val[k++] = 1; + phunit_final_val[k++] = li>>16; + phunit_final_val[k++] = li>>8; + phunit_final_val[k++] = li; + } + } + } + } + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validate_func(GtkWidget *widget, gpointer udata) */ +/* It will validate the new phasor and analog names. */ +/* ---------------------------------------------------------------------------- */ + +int validate_func(GtkWidget *widget, gpointer udata) +{ + if(!validation_new_phasor_names()) + { + /* Close/destroy the PhasorChWin */ + gtk_widget_destroy(PhasorChWin); + + /* Next call for Enter New Phasor channels */ + new_channel_names_for_analog (); + return 0; + } + return 1; +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_new_analog_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the New Analog channel names. It gives the successful message */ +/* and go ahead with entered data if all entries were right, */ +/* else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_new_analog_names(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int ia, i, j, ia1 = 0; + int k, vtr, old_an_count; + long int li; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20], *text1; + + /* First get how many New Analog channel he wants to add? */ + vtr = new_cfg_info->new_cfg_annmr_val+1; + memset(stn, '\0', 16); + + /* Allocate the memory for New Analog channel names */ + new_cfg_info->new_cfg_analog_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(new_cfg_info->new_cfg_analog_channels, '\0', sizeof(new_cfg_info->new_cfg_analog_channels)); + + for (ia=1; ianew_cfg_analog_channels); + display_msg = " Please enter new Analog channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; i< 16 && i< vtr*16; i++, ia1++) + { + /* Copy all Analog name in an array */ + new_cfg_info->new_cfg_analog_channels[ia1] = stn[i]; + } + } + + /* Get the Analog maximum values at text entry filled by user */ + old_an_count = cfg_info->cfg_annmr_val; + + for(i=1, k=old_an_count*4; icfg_af == 1) + { + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "POW")) + { + /* Fill the analog factor values for POW */ + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + else if(!strcmp(text1, "RMS")) + { + /* Fill the analog factor values for RMS */ + anunit_final_val[k++] = 1; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + else + { + /* Fill the analog factor values for PEAK */ + anunit_final_val[k++] = 2; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + } + else + { + text1 = gtk_entry_get_text(GTK_ENTRY(num_text1[i])); + + if(!isNumber((char *)text1)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Analog maximum value! Try again "; + validation_result (display_msg); + return 0; + } + else + { + li = atol(text1); + + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "POW")) + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for POW */ + anunit_final_val[k++] = 0; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + if(!strcmp(text1, "RMS")) + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for RMS */ + anunit_final_val[k++] = 1; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + else + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for PEAK */ + anunit_final_val[k++] = 2; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + } + } + } + + /* Close/destroy the PhasorChWin */ + gtk_widget_destroy(AnalogChWin); + + /* Next call for Data Rate change option? */ + change_data_rate_option(); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_new_data_rate (GtkButton *but, gpointer udata) */ +/* It checks whether user have changed the old data rate or continue with it. */ +/* ---------------------------------------------------------------------------- */ + +int validation_new_data_rate (GtkButton *but, gpointer udata) +{ + /* Get the combo box value selected by user */ + const char *text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_drate)); + + new_cfg_info->data_rate_choice = 1; + new_cfg_info->new_data_rate = atoi(text); + + /* Close/destroy the CCWin */ + gtk_widget_destroy(CCWin); + + /* Final call to recreate configuration frame */ + reconfig_cfg_CC(); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_remove_ph_an_num (GtkButton *but, gpointer udata) */ +/* It Validates the number of phasor and analog channels for removal in new */ +/* CFG. It gives the successful message and go ahead with entered data if all */ +/* entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_remove_ph_an_num (GtkButton *but, gpointer udata) +{ + /* local variables */ + const char *text, *text1; + + /* Get the text entry value filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(phtext)); + text1 = gtk_entry_get_text(GTK_ENTRY(angtext)); + + /* Atleast one phasor should be present there in CFG Frame */ + if(!isNumber((char *)text) || !(atoi(text) < cfg_info->cfg_phnmr_val)) + { + validation_result (" Not a valid Phasor number within range! Try again "); + return 1; + } + if(!isNumber((char *)text1) || !(atoi(text1) <= cfg_info->cfg_annmr_val)) + { + validation_result (" Not a valid Analog within range! Try again "); + return 1; + } + else + { + /* If Phasor & Analog removal? */ + new_cfg_info->new_cfg_phnmr_val = atoi(text); + new_cfg_info->new_cfg_annmr_val = atoi(text1); + + /* Close/destroy the CCWin */ + gtk_widget_destroy(CCWin); + + change_data_rate_option(); + + return 0; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_hdr_frm (GtkWidget *widget, gpointer udata) */ +/* It Validates the Header frame entered by user. It gives the successful */ +/* message and go ahead with entered data if all entries were right, */ +/* else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +void validation_hdr_frm (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int i, j; + const char *text; + GtkTextBuffer *buffer; + GtkTextIter start; + GtkTextIter end; + GtkTextIter iter; + + /* Obtain iters for the start and end of points of the buffer */ + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (HdrFrm)); + gtk_text_buffer_get_start_iter (buffer, &start); + gtk_text_buffer_get_end_iter (buffer, &end); + + /* Get the text entry value filled by user */ + text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); + //text = gtk_entry_get_text(GTK_ENTRY(HdrFrm)); + i = strlen(text); + + if(i > 0) + { + hdr_frame = (char *)malloc(i * sizeof(char)); + memset(hdr_frame, '\0', sizeof(hdr_frame)); + + for (j=0; jheader_frm_button), FALSE); + } + else + { + validation_result (" Pleas enter proper Header Frame! "); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_setup_file_name (GtkWidget *widget, gpointer udata) */ +/* Validates the setup file name based on check boxes. */ +/* ---------------------------------------------------------------------------- */ + +int validation_setup_file_name (GtkWidget *widget, gpointer udata) +{ + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn1)) == TRUE) + { + gtk_widget_destroy(CCWin); + + memset(pmuFilePath,'\0', 200); + cfg_create_call(); + + return 1; + } + else + { + const char *text = gtk_entry_get_text(GTK_ENTRY(p_id)); + + if(!isNumber((char *)text) || !(atoi(text) > 0) || (cfg_info->cfg_pmuID == atoi(text))) + { + validation_result (" Not a valid PMU ID number! Try again "); + return 0; + } + + cfg_info->cfg_pmuID = atoi(text); + gtk_widget_destroy(CCWin); + final_cfg_create (); + return 1; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfg_create_function (GtkWidget *widget, gpointer udata) */ +/* It shows the configuration window to user with diffrent attributes like, */ +/* PMU ID Code, data rate, Station name, PHNMR, FREQ, etc. */ +/* ---------------------------------------------------------------------------- */ + +void cfg_create_function (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *label, *cancel_button; + GtkWidget *valdbutton, *help_button; + + /* Create a new dialog window for the PMU Configuration Setup window */ + cfg_setup_window = gtk_dialog_new (); + g_signal_connect (cfg_setup_window, "destroy", G_CALLBACK (gtk_widget_destroy), cfg_setup_window); + gtk_window_set_title (GTK_WINDOW (cfg_setup_window), "PMU Configuration Setup"); + gtk_container_set_border_width (GTK_CONTAINER (cfg_setup_window), 10); + //gtk_widget_set_size_request (cfg_setup_window, 350, 600); + + /* Create a table of 11 by 2 squares. */ + table = gtk_table_new (12, 2, FALSE); + + /* Set the spacing to 10 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 10); + gtk_table_set_col_spacings (GTK_TABLE (table), 25); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(cfg_setup_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Next"); + help_button = gtk_button_new_with_label ("Help"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Setup PMU Configuration"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("PMU ID"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("Station Name"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Frequency Format"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("Analog Format"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + label = gtk_label_new ("Phasor Format"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + label = gtk_label_new ("Phasor Notation"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 6, 7); + gtk_widget_show (label); + + label = gtk_label_new ("Number of Phasors"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 7, 8); + gtk_widget_show (label); + + label = gtk_label_new ("Number of Analog"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 8, 9); + gtk_widget_show (label); + + label = gtk_label_new ("Digital Status Word"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 9, 10); + gtk_widget_show (label); + + label = gtk_label_new ("Frequency"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 10, 11); + gtk_widget_show (label); + + label = gtk_label_new ("Data Rate"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 11, 12); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_id, 1, 2, 1, 2); + gtk_widget_show (p_id); + + p_stn = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_stn, 16); + gtk_table_attach_defaults (GTK_TABLE (table), p_stn, 1, 2, 2, 3); + gtk_widget_show (p_stn); + + p_ff = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_ff), "Fix Point"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_ff), "Floating Point"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_ff), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_ff, 1, 2, 3, 4); + gtk_widget_show (p_ff); + + p_af = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_af), "Fix Point"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_af), "Floating Point"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_af), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_af, 1, 2, 4, 5); + gtk_widget_show (p_af); + + p_pf = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_pf), "Fix Point"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_pf), "Floating Point"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_pf), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_pf, 1, 2, 5, 6); + gtk_widget_show (p_pf); + + p_pn = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_pn), "Rectangular"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_pn), "Polar"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_pn), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_pn, 1, 2, 6, 7); + gtk_widget_show (p_pn); + + p_phNumber = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_phNumber, 2); + gtk_table_attach_defaults (GTK_TABLE (table), p_phNumber, 1, 2, 7, 8); + gtk_widget_show (p_phNumber); + + p_anNumber = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_anNumber, 2); + gtk_table_attach_defaults (GTK_TABLE (table), p_anNumber, 1, 2, 8, 9); + gtk_widget_show (p_anNumber); + + p_dgNumber = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_dgNumber, 1); + gtk_table_attach_defaults (GTK_TABLE (table), p_dgNumber, 1, 2, 9, 10); + gtk_widget_show (p_dgNumber); + + p_frequency = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_frequency), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_frequency), "60"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_frequency), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_frequency, 1, 2, 10, 11); + gtk_widget_show (p_frequency); + + p_drate = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "25"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "30"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "60"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "100"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "120"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 1); + gtk_table_attach_defaults (GTK_TABLE (table), p_drate, 1, 2, 11, 12); + gtk_widget_show (p_drate); + + /* Signal handling for buttons on CFG Setuo Window */ + //g_signal_connect (p_frequency, "changed", G_CALLBACK (freq_val), NULL); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (Pmu_Help), NULL); + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (validation_cfg_create), valdbutton); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), cfg_setup_window); + g_signal_connect_swapped (cfg_setup_window, "destroy", G_CALLBACK (gtk_widget_destroy), cfg_setup_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (cfg_setup_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (cfg_setup_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (cfg_setup_window)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the cfg_setup_window */ + gtk_widget_show (cfg_setup_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION freq_val() */ +/* Call at nominal frequency changes, from 50 to 60 or vice versa */ +/* ---------------------------------------------------------------------------- */ +/* +void freq_val() +{ + int i; + const char *tx = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_frequency)); + + if(!strcmp(tx, "50")) + { + for (i=0; i<10; i++) + { + gtk_combo_box_remove_text(GTK_COMBO_BOX(p_drate), i); + } + + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "10"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "25"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "100"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 2); + } + else + { + for (i=0; i<10; i++) + { + gtk_combo_box_remove_text(GTK_COMBO_BOX(p_drate), i); + } + + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "10"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "12"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "15"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "30"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "60"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "120"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 4); + } +}; +*/ + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION channel_names_for_phasor () */ +/* It shows the window for phasor channel names as per PHNMR entred by user. */ +/* ---------------------------------------------------------------------------- */ + +void channel_names_for_phasor () +{ + /* local variables */ + int i, j, jj, temp_local, table_rows = 10; + char line[20]; + GtkWidget *table, *label, *next_button; + GtkWidget *scrolled_window, *cancel_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + PhasorChWin = gtk_dialog_new (); + g_signal_connect (PhasorChWin, "destroy", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + gtk_window_set_title (GTK_WINDOW (PhasorChWin), "Phasor Channels"); + gtk_window_set_resizable (GTK_WINDOW (PhasorChWin), FALSE); + gtk_container_set_border_width (GTK_CONTAINER (PhasorChWin), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 400); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(PhasorChWin)->vbox), scrolled_window, TRUE, FALSE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares. */ + temp_local = cfg_info->cfg_phnmr_val; + if (temp_local >= table_rows) + { + table_rows = temp_local; + } + if(cfg_info->cfg_pf == 0) + table = gtk_table_new (table_rows+1, 6, FALSE); + else + table = gtk_table_new (table_rows+1, 3, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Phasor Channel Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 6, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1, j=1; i<=temp_local; j++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Phasor Ch %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + num_text[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[j], 1, 2, i, i+1); + gtk_widget_show (num_text[j]); + + num_combo[j] = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Voltage"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Current"); + gtk_combo_box_set_active(GTK_COMBO_BOX(num_combo[j]), 0); + gtk_table_attach_defaults (GTK_TABLE (table), num_combo[j], 2, 3, i, i+1); + gtk_widget_show (num_combo[j]); + + if(cfg_info->cfg_pf == 0) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Max Limit %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + + num_text1[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text1[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text1[j], 4, 5, i, i+1); + gtk_widget_show (num_text1[j]); + if(cfg_info->cfg_pf == 1) gtk_widget_set_sensitive(GTK_WIDGET(num_text1[j]), FALSE); + + memset(line,'\0',sizeof(line)); + sprintf(line, "(kV or Amp)"); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 5, 6, i, i+1); + gtk_widget_show (label); + } + i = i+1; + } + + if (temp_local < table_rows) + { + for (jj = i; jj < table_rows; jj++) + { + label = gtk_label_new ("-- "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 6, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Signal handling for buttons on CFG Setuo Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validation_phasor_names), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + g_signal_connect_swapped (PhasorChWin, "destroy", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (PhasorChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (PhasorChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the PhasorChWin */ + gtk_widget_show (PhasorChWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION channel_names_for_analog () */ +/* It shows the window for analog channel names as per ANNMR entred by user. */ +/* ---------------------------------------------------------------------------- */ + +void channel_names_for_analog () +{ + /* Analog is not Mandatory component in CFG, it could be zero */ + if (cfg_info->cfg_annmr_val == 0) + { + /* Next call to digital channel names */ + channel_names_for_digital (); + } + else /* if ANNMR > 0 */ + { + /* local variables */ + int i,temp_local,j,jj,table_rows = 9; + char line[30]; + GtkWidget *table, *scrolled_window; + GtkWidget *label, *next_button, *cancel_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + AnalogChWin = gtk_dialog_new (); + g_signal_connect (AnalogChWin, "destroy", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + gtk_window_set_title (GTK_WINDOW (AnalogChWin), "Analog Channels"); + gtk_container_set_border_width (GTK_CONTAINER (AnalogChWin), 10); + gtk_window_set_resizable (GTK_WINDOW (AnalogChWin), FALSE); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 400); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(AnalogChWin)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table as per phasor numbers and phasor type */ + temp_local = cfg_info->cfg_annmr_val; + if (temp_local >= table_rows) + { + table_rows = temp_local; + } + + if(cfg_info->cfg_af == 0) + table = gtk_table_new (table_rows+1, 5, FALSE); + else + table = gtk_table_new (table_rows+1, 3, FALSE); + + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Analog Channel Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1, j=1; i<=temp_local; j++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Analog Ch %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + num_text[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[j], 1, 2, i, i+1); + gtk_widget_show (num_text[j]); + + num_combo[j] = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "RMS"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "POW"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Peak"); + gtk_combo_box_set_active(GTK_COMBO_BOX(num_combo[j]), 0); + gtk_table_attach_defaults (GTK_TABLE (table), num_combo[j], 2, 3, i, i+1); + gtk_widget_show (num_combo[j]); + + /* Add only in case of phasors are in fix point format */ + if(cfg_info->cfg_af == 0) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Max Value %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i , i+1); + gtk_widget_show (label); + + num_text1[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text1[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text1[j], 4, 5, i , i+1); + gtk_widget_show (num_text1[j]); + if(cfg_info->cfg_af == 1) gtk_widget_set_sensitive(GTK_WIDGET(num_text1[j]), FALSE); + } + i = i+1; + } + + if (temp_local < table_rows) + { + for (jj = i; jj < table_rows; jj++) + { + label = gtk_label_new ("-- "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Signal handling for Next button on Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validation_analog_names), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + g_signal_connect_swapped (AnalogChWin, "destroy", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the AnalogChWin */ + gtk_widget_show (AnalogChWin); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION channel_names_for_digital () */ +/* It shows the window for digital channel names as per DGNMR entred by user. */ +/* ---------------------------------------------------------------------------- */ + +void channel_names_for_digital () +{ + /* Analog is not Mandatory component in CFG, it could be zero */ + if (cfg_info->cfg_dgnmr_val == 0) + { + /* Next call to 'final_cfg_create ()' */ + final_cfg_create (); + } + else /* if DGNMR > 0 */ + { + /* local variables */ + int i; + char line[30]; + GtkWidget *table, *scrolled_window; + GtkWidget *label, *next_button, *cancel_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + AnalogChWin = gtk_dialog_new (); + g_signal_connect (AnalogChWin, "destroy", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + gtk_window_set_title (GTK_WINDOW (AnalogChWin), "Digital Channels"); + gtk_container_set_border_width (GTK_CONTAINER (AnalogChWin), 10); + gtk_window_set_resizable (GTK_WINDOW (AnalogChWin), FALSE); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 550); + + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(AnalogChWin)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares. */ + table = gtk_table_new (cfg_info->cfg_dgnmr_val*16+1, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Digital Channels Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1; icfg_dgnmr_val*16+1; i++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Digital Ch %d : ", i); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + } + + for(i=1; icfg_dgnmr_val*16+1; i++) + { + num_text[i] = gtk_entry_new (); + //gtk_entry_set_max_length (GtkEntry *entry, gint max); + gtk_entry_set_max_length ((GtkEntry *)num_text[i], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[i], 1, 2, i, i+1); + gtk_widget_show (num_text[i]); + } + + /* Signal handling for Next button on Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validation_digital_names), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + g_signal_connect_swapped (AnalogChWin, "response", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the AnalogChWin */ + gtk_widget_show (AnalogChWin); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION final_cfg_create () */ +/* It call the final function for generate configuration frame. */ +/* ---------------------------------------------------------------------------- */ + +void final_cfg_create () +{ + /* local variables */ + char buff[50], tbuff[200]; + FILE *fp1; + + strcpy(pmuFilePath, pmuFolderPath); + strcat(pmuFilePath, "/"); + strcat(pmuFilePath, "pmu"); + sprintf(buff, "%d", cfg_info->cfg_pmuID); + strcat(pmuFilePath, buff); + strcat(pmuFilePath, ".bin"); + pmuFilePath[strlen(pmuFilePath)] = '\0'; + + /* Check whether any PMU Setup File already exist with the same name? */ + fp1 = fopen (pmuFilePath,"rb"); + + if (fp1 != NULL) + { + /* Close the open PMU Setup File */ + fclose(fp1); + + /* local variables */ + GtkWidget *table, *label, *ok; + + /* Create a new dialog window for PMU Server Setup */ + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "Setup Warning!"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 4 by 2 squares. */ + table = gtk_table_new (9, 2, FALSE); + + /* Set the spacing to 50 on x and 5 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + ok = gtk_button_new_with_label ("OK"); + + /* This simply creates a grid of toggle buttons on the table */ + memset(tbuff, '\0', 200); + strcat(tbuff, "Setup File with PMU ID - "); + sprintf(buff, "%d", cfg_info->cfg_pmuID); + strcat(tbuff, buff); + strcat(tbuff, " is already present in system!"); + label = gtk_label_new (tbuff); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 1, 2); + gtk_widget_show (label); + + chkBtn1 = gtk_check_button_new_with_label("Overwrite with new PMU setup"); + gtk_table_attach_defaults (GTK_TABLE (table), chkBtn1, 0, 2, 3, 4); + gtk_widget_show (chkBtn1); + + chkBtn2 = gtk_check_button_new_with_label("Change the PMU ID Code"); + gtk_table_attach_defaults (GTK_TABLE (table), chkBtn2, 0, 2, 4, 5); + gtk_widget_show (chkBtn2); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("New PMU ID"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Create text boxes for user to enter appropriate values */ + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_id, 1, 2, 5, 6); + gtk_widget_show (p_id); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Please give a new PMU ID to save the old PMU Configuration."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 7, 8); + gtk_widget_show (label); + g_free (markup); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 8, 9); + gtk_widget_show (label); + + /* Signal handling for buttons on Setup Warning Window */ + g_signal_connect_swapped (ok, "clicked", G_CALLBACK (validation_setup_file_name), NULL); + g_signal_connect (chkBtn1, "toggled", G_CALLBACK (checkbox_function), "1"); + g_signal_connect (chkBtn2, "toggled", G_CALLBACK (checkbox_function), "2"); + g_signal_connect (CCWin, "destroy", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn2),TRUE); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (ok, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), ok, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (ok); + gtk_widget_show (ok); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); + } + else + { + /* If not matched, call final call to create a new CFG */ + cfg_create_call(); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION checkbox_function(GtkWidget *widget, gpointer data) */ +/* This is called when checkboxes are selected, and do the appropriate */ +/* changes in the other checkbox or widget? */ +/* ---------------------------------------------------------------------------- */ + +void checkbox_function(GtkWidget *widget, gpointer data) +{ + char t[2]; + strcpy(t, (char *) data); + + if(!strcmp(t, "1")) + { + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn1)) == TRUE) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn2),FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), FALSE); + } + else + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn2),TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), TRUE); + gtk_entry_set_text(GTK_ENTRY(p_id), " "); + } + } + else + { + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn2)) == TRUE) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn1),FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), TRUE); + gtk_entry_set_text(GTK_ENTRY(p_id), " "); + } + else + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn1),TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), FALSE); + } + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfg_create_call() */ +/* This is final call for configuration creation. It will call the create_cfg() */ +/* function in CfgFunction.c file and make the setup file also. */ +/* ---------------------------------------------------------------------------- */ + +void cfg_create_call() +{ + /* local variables */ + int ret_val; + + /* To create CFG call 'create_cfg()' */ + ret_val = create_cfg(); + + if(ret_val == 0) + { + /* Enable rest of the buttons on PMU Simulator Window */ + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->manage_data_source), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->header_frm_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->stat_modification_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->cfg_modification_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->pmu_details_button), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->pmu_properties), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_data_source), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_header_frm), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_cfg_modify), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_stat_modify), TRUE); + + /* Disable create CFG buttons on PMU Simulator Window */ + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->create_cfg_button), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_setup_cfg), FALSE); + } + else + { + validation_result (" PMU Simulator Setup has failed! Try again "); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION stat_chng_options(GtkWidget *widget, gpointer udata) */ +/* It provides multiple options to user regarding STAT Word change. User can */ +/* introduce error bit, Configuration modification, etc. */ +/* ---------------------------------------------------------------------------- */ + +void stat_chng_options(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *label; + GtkWidget *ID_butn, *PE_butn, *DS_butn, *chk_butn; + GtkWidget *PT_butn, *CC_butn, *close_butn; + + /* Create a new dialog window for the Configration Modification */ + CCOptionWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCOptionWin), "STAT Word Modification"); + gtk_container_set_border_width (GTK_CONTAINER (CCOptionWin), 10); + + /* Create a table of 7 by 3 squares */ + table = gtk_table_new (10, 3, FALSE); + + /* Set the spacing to 15 on x and 60 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCOptionWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Modification of bits in STAT Word"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + ID_butn = gtk_button_new_with_label ("Set Invalid Data bit (Bit-15)"); + gtk_table_attach_defaults (GTK_TABLE (table), ID_butn, 1, 2, 2, 3); + gtk_widget_show (ID_butn); + + PE_butn = gtk_button_new_with_label ("Set PMU Error bit (Bit-14)"); + gtk_table_attach_defaults (GTK_TABLE (table), PE_butn, 1, 2, 3, 4); + gtk_widget_show (PE_butn); + + DS_butn = gtk_button_new_with_label ("Set Data Sorting bit (Bit-12)"); + gtk_table_attach_defaults (GTK_TABLE (table), DS_butn, 1, 2, 4, 5); + gtk_widget_show (DS_butn); + + PT_butn = gtk_button_new_with_label ("Set PMU Trigger bit (Bit-11)"); + gtk_table_attach_defaults (GTK_TABLE (table), PT_butn, 1, 2, 5, 6); + gtk_widget_show (PT_butn); + + chk_butn = gtk_button_new_with_label ("CheckSum Error in Data Frame"); + gtk_table_attach_defaults (GTK_TABLE (table), chk_butn, 1, 2, 6, 7); + gtk_widget_show (chk_butn); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : The Synchronization Error (Bit-13) handled\ninternaly. CheckSum Error will not change\nany bit in STAT Word."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 9, 10); + gtk_widget_show (label); + g_free (markup); + + /* Add a "close" button to the bottom of the dialog */ + close_butn = gtk_button_new_with_label ("close"); + + /* Signal handling for all buttons on Window */ + g_signal_connect (ID_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "a"); + g_signal_connect (PE_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "b"); + g_signal_connect (DS_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "c"); + g_signal_connect (PT_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "d"); + g_signal_connect (chk_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "e"); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), CCOptionWin); + g_signal_connect_swapped (CCOptionWin, "response", G_CALLBACK (gtk_widget_destroy), CCOptionWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCOptionWin)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the CCOptionWin */ + gtk_widget_show (CCOptionWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfg_STAT_change (GtkWidget *widget, gpointer udata) */ +/* This function change the STAT Word bits according to user's wish. It also */ +/* has option to do CheckSum invalid for next data frame, and its not a STAT */ +/* Word error. */ +/* ---------------------------------------------------------------------------- */ + +void cfg_STAT_change (GtkWidget *widget, gpointer udata) +{ + /* Local variables */ + char find_butn[2]; + + /* For identifing singnal came from which button? */ + strcpy(find_butn,(char *) udata); + + if(!strcmp(find_butn, "a")) + { + validation_result(" STAT WORD CHANGED\nBit 15 of Stat word has been set to 1 for Invalid Data."); + ShmPTR->cfg_bit_change_info = 2; + } + else if(!strcmp(find_butn, "b")) + { + validation_result("STAT WORD CHANGED\nBit 14 of Stat word has been set to 1 for PMU Error."); + ShmPTR->cfg_bit_change_info = 3; + } + else if(!strcmp(find_butn, "c")) + { + validation_result("STAT WORD CHANGED\nBit 12 of Stat word has been set to 1 for Data Sorting."); + ShmPTR->cfg_bit_change_info = 4; + } + else if(!strcmp(find_butn, "d")) + { + validation_result("STAT WORD CHANGED\nBit 11 of Stat word has been set to 1 for PMU Trigger Detected."); + + ShmPTR->cfg_bit_change_info = 5; + } + else if(!strcmp(find_butn, "e")) + { + validation_result("CHECKSUM ERROR\nA data frame with invalid CRC would be sent."); + + ShmPTR->cfg_bit_change_info = 6; + } + + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR2); + printf("STAT word bit changed signal sent to PMU Server Process.\n"); + + /* Close/destroy the CCOptionWin */ + gtk_widget_destroy(CCOptionWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION Change_pmu_configuration(GtkWidget *widget, gpointer udata) */ +/* By this function user have option window to choose Add New Channels or */ +/* Remove Channels?. */ +/* ---------------------------------------------------------------------------- */ + +void Change_pmu_configuration(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table; + GtkWidget *close_butn, *label; + GtkWidget *Addbutton, *Removebutton; + GSList *group; + int ch = 0; + + /* Create a new dialog window for the Option Window */ + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "Operation"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 4 by 2 squares */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Channel Operation"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Add few radio buttons on the dialog window */ + Addbutton = gtk_radio_button_new_with_label (NULL, "Add New Channels"); + gtk_table_attach_defaults (GTK_TABLE (table), Addbutton, 0, 1, 2, 3); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (Addbutton), TRUE); + gtk_widget_show (Addbutton); + + group = gtk_radio_button_group (GTK_RADIO_BUTTON (Addbutton)); + Removebutton = gtk_radio_button_new_with_label (NULL, "Remove Channels"); + gtk_table_attach_defaults (GTK_TABLE (table), Removebutton, 0, 1, 3, 4); + gtk_widget_show (Removebutton); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Both Phasor and Analog channels could be add.\nYou will get the change Data Rate option at the end.\nIt will change the bit-10 from 0 to 1 in STAT Word in data frames."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Add 'Close' buttons on the dialog window */ + close_butn = gtk_button_new_with_label ("Close"); + + /* Signal handling for buttons on Option Window */ + g_signal_connect_swapped (Addbutton, "clicked", G_CALLBACK (new_phasor_num), NULL); + g_signal_connect_swapped (Removebutton, "clicked", G_CALLBACK (remove_phasor_num), NULL); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION new_phasor_num(GtkWidget *widget, gpointer udata) */ +/* It will ask user to number of new phasor channels that he wants to add? */ +/* ---------------------------------------------------------------------------- */ + +void new_phasor_num(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *help_button; + GtkWidget *next_butn, *label, *cancel_button; + + /* Allocate the memory for the ConfigurationChange object */ + new_cfg_info = malloc(sizeof(struct ConfigurationChange)); + new_cfg_info->add_remove_choice = 1; + + /* Create a new dialog window for New Phasor Channels */ + gtk_widget_destroy(CCWin); + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "Add New Phasors"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + //gtk_widget_set_size_request (CCWin, 350, 300); + + /* Create a table of 3 by 3 squares. */ + table = gtk_table_new (3, 3, FALSE); + + /* Set the spacing to 25 on x and 40 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + next_butn = gtk_button_new_with_label ("Next"); + help_button = gtk_button_new_with_label ("Help"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new ("New Phasors"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1); + gtk_widget_show (label); + + label = gtk_label_new ("New Analogs"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + phtext = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), phtext, 1, 2, 0, 1); + gtk_widget_show (phtext); + + angtext = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), angtext, 1, 2, 1, 2); + gtk_widget_show (angtext); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : New channels will be added to existing configuration frame."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for buttons on Window */ + g_signal_connect (next_butn, "clicked", G_CALLBACK (validation_ph_an_num), NULL); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (Pmu_Help), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_butn, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), next_butn, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_butn); + gtk_widget_show (next_butn); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION new_channel_names_for_phasor () */ +/* It shows the window to enter new phasor channel names. */ +/* ---------------------------------------------------------------------------- */ + +void new_channel_names_for_phasor () +{ + /* new_phasor number could be zero? */ + if(new_cfg_info->new_cfg_phnmr_val > 0) + { + /* local variables */ + int i, j, jj, temp_local, table_rows = 10; + char line[20]; + GtkWidget *table, *scrolled_window, *cancel_button; + GtkWidget *label, *next_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + gtk_widget_destroy(CCWin); + PhasorChWin = gtk_dialog_new (); + g_signal_connect (PhasorChWin, "destroy", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + gtk_window_set_title (GTK_WINDOW (PhasorChWin), "New Phasor Channels"); + gtk_window_set_resizable (GTK_WINDOW (PhasorChWin), FALSE); + gtk_container_set_border_width (GTK_CONTAINER (PhasorChWin), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 400); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(PhasorChWin)->vbox), scrolled_window, TRUE, FALSE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares. Based on phasor numbers and phasor type */ + temp_local = new_cfg_info->new_cfg_phnmr_val; + if (temp_local >= table_rows) + { + table_rows = temp_local; + } + if(cfg_info->cfg_pf == 0) + table = gtk_table_new (table_rows+1, 6, FALSE); + else + table = gtk_table_new (table_rows+1, 3, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Phasor Channel Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 6, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1, j=1; i<=temp_local; j++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Phasor Ch %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + num_text[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[j], 1, 2, i, i+1); + gtk_widget_show (num_text[j]); + + num_combo[j] = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Voltage"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Current"); + gtk_combo_box_set_active(GTK_COMBO_BOX(num_combo[j]), 0); + gtk_table_attach_defaults (GTK_TABLE (table), num_combo[j], 2, 3, i, i+1); + gtk_widget_show (num_combo[j]); + + /* Add only in case of phasors are in fix point format */ + if(cfg_info->cfg_pf == 0) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Max Limit %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + + num_text1[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text1[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text1[j], 4, 5, i, i+1); + gtk_widget_show (num_text1[j]); + if(cfg_info->cfg_pf == 1) gtk_widget_set_sensitive(GTK_WIDGET(num_text1[j]), FALSE); + + memset(line,'\0',sizeof(line)); + sprintf(line, "(kV or Amp)"); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 5, 6, i, i+1); + gtk_widget_show (label); + } + i = i+1; + } + + if (temp_local < table_rows) + { + for (jj = i; jj < table_rows; jj++) + { + label = gtk_label_new ("-- "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 6, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Signal handling for Next button on Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validate_func), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + g_signal_connect_swapped (PhasorChWin, "response", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (PhasorChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (PhasorChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the PhasorChWin */ + gtk_widget_show (PhasorChWin); + } + else /* In case of number of new phasors are zero */ + { + gtk_widget_destroy(CCWin); + + new_channel_names_for_analog (); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION new_channel_names_for_analog () */ +/* It shows the window to enter new analog channel names. */ +/* ---------------------------------------------------------------------------- */ + +void new_channel_names_for_analog () +{ + /* new_analog number could be zero? */ + if(new_cfg_info->new_cfg_annmr_val > 0) + { + /* local variables */ + int i,temp_local,j,jj,table_rows = 9; + char line[30]; + GtkWidget *table, *scrolled_window; + GtkWidget *label, *next_button, *cancel_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + AnalogChWin = gtk_dialog_new (); + g_signal_connect (AnalogChWin, "destroy", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + gtk_window_set_title (GTK_WINDOW (AnalogChWin), "New Analog Channels"); + gtk_container_set_border_width (GTK_CONTAINER (AnalogChWin), 10); + gtk_window_set_resizable (GTK_WINDOW (AnalogChWin), FALSE); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 400); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS.*/ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(AnalogChWin)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares. Based on analog numbers and analog types */ + temp_local = new_cfg_info->new_cfg_annmr_val; + if (temp_local >= table_rows) + { + table_rows = temp_local; + } + + if(cfg_info->cfg_af == 0) + table = gtk_table_new (table_rows+1, 5, FALSE); + else + table = gtk_table_new (table_rows+1, 3, FALSE); + + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Analog Channel Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1, j=1; i<=temp_local; j++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Analog Ch %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + num_text[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[j], 1, 2, i, i+1); + gtk_widget_show (num_text[j]); + + num_combo[j] = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "RMS"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "POW"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Peak"); + gtk_combo_box_set_active(GTK_COMBO_BOX(num_combo[j]), 0); + gtk_table_attach_defaults (GTK_TABLE (table), num_combo[j], 2, 3, i, i+1); + gtk_widget_show (num_combo[j]); + + /* Add only in case of analogs are in fix point format */ + if(cfg_info->cfg_af == 0) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Max Value %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i , i+1); + gtk_widget_show (label); + + num_text1[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text1[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text1[j], 4, 5, i , i+1); + gtk_widget_show (num_text1[j]); + if(cfg_info->cfg_af == 1) gtk_widget_set_sensitive(GTK_WIDGET(num_text1[j]), FALSE); + } + i = i+1; + } + + if (temp_local < table_rows) + { + for (jj = i; jj < table_rows; jj++) + { + label = gtk_label_new ("-- "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Signal handling for Next button on Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validation_new_analog_names), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + g_signal_connect_swapped (AnalogChWin, "response", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the AnalogChWin */ + gtk_widget_show (AnalogChWin); + } + else /* if new_phasor < 0 */ + { + /* Next call to data rate change option? */ + change_data_rate_option(); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION change_data_rate_option() */ +/* It will ask user to choose wether he wants to change data rate or not? */ +/* ---------------------------------------------------------------------------- */ + +void change_data_rate_option() +{ + /* local variables */ + GtkWidget *table; + GtkWidget *Addbutton, *Removebutton; + GtkWidget *close_butn, *label; + GSList *group; + + /* Create a new dialog window for PMU Data Rate */ + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "PMU Data Rate "); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 4 by 2 squares */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new ("Do you want to change data rate?"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + + /* Add few radio buttons on the dialog window */ + Addbutton = gtk_radio_button_new_with_label (NULL, "YES"); + gtk_table_attach_defaults (GTK_TABLE (table), Addbutton, 0, 1, 2, 3); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (Addbutton), TRUE); + gtk_widget_show (Addbutton); + + group = gtk_radio_button_group (GTK_RADIO_BUTTON (Addbutton)); + Removebutton = gtk_radio_button_new_with_label (NULL, "NO"); + gtk_table_attach_defaults (GTK_TABLE (table), Removebutton, 0, 1, 3, 4); + gtk_widget_show (Removebutton); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Changed data rate will be mentioned in the new CFG\nand will be informed to communicating PDCs."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Add a "close" button to the bottom of the dialog */ + close_butn = gtk_button_new_with_label ("Close"); + + /* Signal handling for buttons on Data rate Window */ + g_signal_connect_swapped (Addbutton, "clicked", G_CALLBACK (enter_new_data_rate), NULL); + g_signal_connect_swapped (Removebutton, "clicked", G_CALLBACK (final_cfg_update_call), NULL); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION enter_new_data_rate(GtkWidget *widget, gpointer udata) */ +/* If user wants to change data rate then it will show him a window for */ +/* entring new data rate. */ +/* ---------------------------------------------------------------------------- */ + +void enter_new_data_rate(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *cancel_button; + GtkWidget *next_butn, *label; + + /* Create a new dialog window for the New Data Rate */ + gtk_widget_destroy(CCWin); + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "New Frame Rate"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 3 by 3 squares */ + table = gtk_table_new (5, 2, FALSE); + + /* Set the spacing to 25 on x and 40 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 10); + gtk_table_set_col_spacings (GTK_TABLE (table), 5); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "next" button to the bottom of the dialog */ + next_butn = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new ("Select New Data Rate"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1); + gtk_widget_show (label); + + /* Create combo boxe for user with some fixed values */ + p_drate = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "25"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "30"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "60"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "100"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "120"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 3); + gtk_table_attach_defaults (GTK_TABLE (table), p_drate, 1, 2, 0, 1); + gtk_widget_show (p_drate); +/* + if(cfg_info->cfg_fnom == 1) + { + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "10"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "25"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "100"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 2); + } + else + { + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "10"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "12"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "15"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "30"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "60"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "120"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 4); + } +*/ + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Frames would be send as per the new data rate."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 4, 5); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for buttons on Data Rate Window */ + g_signal_connect (next_butn, "clicked", G_CALLBACK (validation_new_data_rate), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_butn, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), next_butn, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_butn); + gtk_widget_show (next_butn); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_phasor_num (GtkWidget *widget, gpointer udata) */ +/* If wish to remove some of phasor channels from CFG then it provides this */ +/* option, but it should be lessthan maximum phasor numbers. */ +/* ---------------------------------------------------------------------------- */ + +void remove_phasor_num (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + char line[50], buff[10]; + GtkWidget *table, *label; + GtkWidget *next_butn, *cancel_button; + + /* Allocate the memory for the ConfigurationChange object */ + new_cfg_info = malloc(sizeof(struct ConfigurationChange)); + new_cfg_info->add_remove_choice = 2; + + /* Create a new dialog window for the Remove Phasor */ + gtk_widget_destroy(CCWin); + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "Phasor Removal"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 5 by 3 squares */ + table = gtk_table_new (3, 3, FALSE); + + /* Set the spacing to 5 on x and 40 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table),8); + gtk_table_set_col_spacings (GTK_TABLE (table),2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "next" button to the bottom of the dialog */ + next_butn = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + /* Create text boxes for user to enter appropriate values */ + label = gtk_label_new ("Phasors to be remove"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1); + gtk_widget_show (label); + + label = gtk_label_new ("Analogs to be remove"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + phtext = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), phtext, 1, 2, 0, 1); + gtk_widget_show (phtext); + + angtext = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), angtext, 1, 2, 1, 2); + gtk_widget_show (angtext); + + memset(line, '\0', 50); + memset(buff, '\0', 10); + strcat(line, "< "); + sprintf(buff,"%d",cfg_info->cfg_phnmr_val); + strcat(line, buff); + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 0, 1); + gtk_widget_show (label); + + memset(line, '\0', 50); + memset(buff, '\0', 10); + strcat(line, "<= "); + sprintf(buff,"%d",cfg_info->cfg_annmr_val); + strcat(line, buff); + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : New channels will be added to existing configuration frame."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for buttons on Window */ + g_signal_connect (next_butn, "clicked", G_CALLBACK (validation_remove_ph_an_num), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_butn, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), next_butn, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_butn); + gtk_widget_show (next_butn); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION final_cfg_update_call (GtkButton *but, gpointer udata) */ +/* It finally call the 'reconfig_cfg_CC()' for recreate configuration frame. */ +/* ---------------------------------------------------------------------------- */ + +int final_cfg_update_call (GtkButton *but, gpointer udata) +{ + new_cfg_info->data_rate_choice = 0; + new_cfg_info->new_data_rate = 0; + + /* Close/destroy the CCWin */ + gtk_widget_destroy(CCWin); + + /* Final call to recreate configuration frame */ + reconfig_cfg_CC(); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION hdr_create_function (GtkWidget *widget, gpointer udata) */ +/* It will take the PMU information and make Header Frame. */ +/* ---------------------------------------------------------------------------- */ + +void hdr_create_function (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *label; + GtkWidget *close_butn, *vald_butn; + + /* Create a new dialog window for the Header Frame Window */ + hdr_frame_window = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (hdr_frame_window), "Header Frame"); + gtk_container_set_border_width (GTK_CONTAINER (hdr_frame_window), 10); + + /* Create a table of 3 by 2 squares */ + table = gtk_table_new (3, 2, FALSE); + + /* Set the spacing to 30 on x */ + gtk_table_set_row_spacings (GTK_TABLE (table), 10); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(hdr_frame_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Header Frame Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Create text boxes for user to enter appropriate values */ + HdrFrm = gtk_text_view_new ();//gtk_entry_new(); + gtk_table_attach_defaults (GTK_TABLE (table), HdrFrm, 0, 1, 1, 2); + gtk_widget_show (HdrFrm); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Header frame includes the information about the PMU, the data sources,\nscaling, algorithms, filtering, or other related information."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + /* Add few buttons at the bottom of the dialog */ + vald_butn = gtk_button_new_with_label ("Create"); + close_butn = gtk_button_new_with_label ("Close"); + + /* Signal handling for buttons on Window */ + g_signal_connect (vald_butn, "clicked", G_CALLBACK (validation_hdr_frm), (gpointer) "2"); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), hdr_frame_window); + g_signal_connect_swapped (hdr_frame_window, "response", G_CALLBACK (gtk_widget_destroy), hdr_frame_window); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (vald_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (hdr_frame_window)->action_area), vald_butn, TRUE, TRUE, 0); + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (hdr_frame_window)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (vald_butn); + gtk_widget_show (vald_butn); + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the hdr_frame_window */ + gtk_widget_show (hdr_frame_window); +}; + +/*************************************** End of Program ***********************************************/ diff --git a/PMUSimulator/CfgGuiFunctions.h b/PMUSimulator/CfgGuiFunctions.h new file mode 100755 index 0000000..3e2d2f9 --- /dev/null +++ b/PMUSimulator/CfgGuiFunctions.h @@ -0,0 +1,105 @@ +/* ----------------------------------------------------------------------------- + * CfgGuiFunctions.h + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +GtkWidget *cfg_setup_window; +GtkWidget *cfg_name; +GtkWidget *setup_close_button; +GtkWidget *p_stn, *p_id, *p_ff; +GtkWidget *p_af, *p_pf, *p_pn; +GtkWidget *p_phNumber; +GtkWidget *p_anNumber; +GtkWidget *p_dgNumber; +GtkWidget *p_drate; +GtkWidget *num_text[50], *num_text1[50]; +GtkWidget *num_combo[50]; +GtkWidget *PhasorChWin; +GtkWidget *AnalogChWin; +GtkWidget *CCWin; +GtkWidget *CCOptionWin; +GtkWidget *phtext, *angtext, *HdrFrm; +GtkWidget *p_frequency; +GtkWidget *hdr_frame_window; +GtkWidget *remove_cfg_window; +GtkWidget *chkBtn1, *chkBtn2; + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +void cfg_create_function (GtkWidget *widget, gpointer udata); +//void freq_val(); +int validation_cfg_create (); + +void channel_names_for_phasor (); +int validation_phasor_names(GtkWidget *widget, gpointer udata); + +void channel_names_for_analog (); +int validation_analog_names(GtkWidget *widget, gpointer udata); + +void channel_names_for_digital (); +int validation_digital_names(GtkWidget *widget, gpointer udata); + +void final_cfg_create (); +void cfg_create_call(); +void checkbox_function(GtkWidget *widget, gpointer data); +int validation_setup_file_name (GtkWidget *widget, gpointer udata); + +void cfg_STAT_change (GtkWidget *widget, gpointer udata); +void stat_chng_options(GtkWidget *widget, gpointer udata); + +void Change_pmu_configuration(GtkWidget *widget, gpointer udata); +void new_phasor_num(GtkWidget *widget, gpointer udata); +int validation_ph_an_num (GtkButton *but, gpointer udata); + +void new_channel_names_for_phasor (); +int validation_new_phasor_names(); +int validate_func(GtkWidget *widget, gpointer udata); + +void new_channel_names_for_analog (); +int validation_new_analog_names(GtkWidget *widget, gpointer udata); + +void remove_phasor_num (GtkWidget *widget, gpointer udata); +int validation_remove_ph_an_num (GtkButton *but, gpointer udata); + +void change_data_rate_option(); +void enter_new_data_rate(GtkWidget *widget, gpointer udata); +int validation_new_data_rate (GtkButton *but, gpointer udata); +int final_cfg_update_call (GtkButton *but, gpointer udata); + +void hdr_create_function (GtkWidget *widget, gpointer udata); +void validation_hdr_frm (GtkWidget *widget, gpointer udata); + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Floating Point - 3 phasors, 2 analogs.csv b/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Floating Point - 3 phasors, 2 analogs.csv new file mode 100755 index 0000000..bb21bc1 --- /dev/null +++ b/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Floating Point - 3 phasors, 2 analogs.csv @@ -0,0 +1,712 @@ +2011-11-29 20:18:29.233,134.8224334717,-169.5159651613,0.1450927705,144.6345149207,202.337310791,70.3263802607,50.0033760071,-7.63032585382462E-05,11.794052124,108.9102172852 +2011-11-29 20:18:29.266,134.8015441895,-169.4483189678,0.0693023801,0.1610450551,202.3217163086,70.3646429804,50.0033760071,2.79396772384644E-08,11.7860412598,108.922706604 +2011-11-29 20:18:29.300,134.78465271,-169.3850440953,0.0458044522,-74.8878606262,202.2794799805,70.4249330602,50.0033836365,0.0005086139,11.7531280518,108.9005584717 +2011-11-29 20:18:29.333,134.7117156982,-169.367558811,0.1078804955,174.3555230185,202.0138702393,70.4346797402,50.0033950806,0.0001780316,11.7698898315,108.9214553833 +2011-11-29 20:18:29.366,134.6603393555,-169.3241324683,0.0502309091,-135.409565805,201.8742523193,70.4780514414,50.00340271,0.00027976,11.7637023926,108.913482666 +2011-11-29 20:18:29.400,134.7460327148,-169.2591910297,0.1367013007,-93.1392803904,202.0541381836,70.5406228044,50.0034065247,0.0001017423,11.7791213989,108.9110870361 +2011-11-29 20:18:29.433,134.7694091797,-169.2105874035,0.1303349286,-94.847551683,202.1423950195,70.5799373732,50.0033950806,-0.0005594781,11.770866394,108.9143066406 +2011-11-29 20:18:29.466,134.7488708496,-169.1920366097,0.0251683109,-49.7269087994,202.1364746094,70.6069166205,50.0033874512,-0.0003051711,11.7586517334,108.9025115967 +2011-11-29 20:18:29.500,134.7640838623,-169.1789636277,0.0830653459,110.7198184838,202.1180877686,70.6408694908,50.0033874512,0.0003051711,11.7677078247,108.8883361816 +2011-11-29 20:18:29.533,134.7208251953,-169.1402774362,0.0719386414,100.8485490576,201.9964599609,70.6924784002,50.0033912659,7.62892886996269E-05,11.7568969727,108.9006271362 +2011-11-29 20:18:29.566,134.7014465332,-169.0792428658,0.0182955861,18.3640769044,202.0995178223,70.749626593,50.0033950806,2.54390761256218E-05,11.7456588745,108.8836669922 +2011-11-29 20:18:29.600,134.7675933838,-168.9990427845,0.1057253778,-109.8865968768,202.2347106934,70.807143616,50.00340271,0.0002288818,11.7769165039,108.9103851318 +2011-11-29 20:18:29.633,134.8114624023,-168.9500293471,0.1741364002,-135.6230365373,202.1170043945,70.8475441849,50.0034103394,0.0002543069,11.7724533081,108.9046630859 +2011-11-29 20:18:29.666,134.7888031006,-168.9464093468,0.1465153247,-155.4737246052,202.0650787354,70.8824669422,50.0034179688,0.000279774,11.8003234863,108.9321670532 +2011-11-29 20:18:29.700,134.7734222412,-168.9167526654,0.1618448496,-179.0984883404,202.1455230713,70.9278398888,50.0034103394,-0.000279732,11.7928085327,108.9172515869 +2011-11-29 20:18:29.733,134.6933288574,-168.863190322,0.07745222,-119.1842875071,202.050567627,70.9634729857,50.0033988953,-0.0004577637,11.7753677368,108.9127655029 +2011-11-29 20:18:29.766,134.6704559326,-168.818384281,0.126095891,-81.0482472952,201.987487793,70.9934643464,50.0033950806,0.0001017144,11.7696075439,108.8991699219 +2011-11-29 20:18:29.800,134.678604126,-168.7711603531,0.108848311,-103.0472279325,202.0768127441,71.0504554448,50.0033988953,-0.0001525925,11.7740325928,108.9075622559 +2011-11-29 20:18:29.833,134.7520904541,-168.7525412574,0.1251616776,-156.9304946721,202.1476135254,71.0946877499,50.0033798218,-0.0005340669,11.7756729126,108.9163131714 +2011-11-29 20:18:29.866,134.7929229736,-168.7290727274,0.1713201255,-142.0740409254,202.2034454346,71.1279780919,50.0033798218,0.0003305962,11.7931900024,108.933807373 +2011-11-29 20:18:29.900,134.6959838867,-168.6730241951,0.1111529693,-62.5422185693,202.2106323242,71.1479632254,50.0033912659,0.0003814744,11.7515258789,108.9044342041 +2011-11-29 20:18:29.933,134.6150970459,-168.6361411736,0.1139465198,30.0007794764,202.0644836426,71.1756459821,50.0033874512,-0.0003814884,11.7733078003,108.9192047119 +2011-11-29 20:18:29.966,134.6213684082,-168.5966626802,0.1800202578,124.1126651442,201.9098052979,71.2584893465,50.0033721924,-0.000534053,11.7767791748,108.9049835205 +2011-11-29 20:18:30.000,134.6870117188,-168.5288525621,0.2006438076,168.9980319165,201.9216461182,71.3419064469,50.0033798218,0.0004069135,11.7890701294,108.9200668335 +2011-11-29 20:18:30.033,134.6818237305,-168.4630368592,0.1549095362,-64.5752107154,201.9330444336,71.3637972032,50.0033912659,0.0004832027,11.7713012695,108.9197845459 +2011-11-29 20:18:30.066,134.6237030029,-168.4238315734,0.2399064302,-25.4937459639,201.948135376,71.3883380728,50.0033874512,-0.0004832167,11.7793045044,108.9100265503 +2011-11-29 20:18:30.100,134.6981811523,-168.4289951964,0.0758340806,64.7152842349,202.085067749,71.3974153942,50.0033836365,0.0002288818,11.7855072021,108.9133453369 +2011-11-29 20:18:30.133,134.7296447754,-168.3838749668,0.0666584298,125.1205141978,202.1620025635,71.4213756979,50.00340271,0.0005849171,11.7632980347,108.921005249 +2011-11-29 20:18:30.166,134.7190704346,-168.3001231872,0.066609405,-121.4367472916,202.2138214111,71.5091982702,50.0033950806,-0.0007629348,11.7996673584,108.9293212891 +2011-11-29 20:18:30.200,134.8034820557,-168.2203329173,0.2367471904,-148.5384051635,202.3042449951,71.6099230699,50.0033721924,-0.0007120706,11.7717208862,108.9134674072 +2011-11-29 20:18:30.233,134.8206634521,-168.2139398602,0.226904124,-169.3587068859,202.2487945557,71.6174294478,50.0033721924,0.0004577637,11.7743301392,108.919921875 +2011-11-29 20:18:30.266,134.7584991455,-168.2660268828,0.1117278636,159.3766039799,202.0735778809,71.5556025754,50.0033950806,0.0005849171,11.7784500122,108.9136886597 +2011-11-29 20:18:30.300,134.7873687744,-168.2091723882,0.0597603396,-106.502019577,202.1817321777,71.6104353341,50.0033874512,-0.0003560493,11.7743301392,108.9007797241 +2011-11-29 20:18:30.333,134.7945861816,-168.1141644568,0.1495974064,-62.1187946521,202.4531555176,71.696256661,50.0033988953,0.0006612204,11.7691955566,108.9086456299 +2011-11-29 20:18:30.366,134.8035736084,-168.0930591723,0.096420832,171.811578081,202.3246765137,71.7291986634,50.0034217834,0.000534053,11.7803955078,108.9164123535 +2011-11-29 20:18:30.400,134.8062286377,-168.079835926,0.2849707007,150.6752141865,202.0523681641,71.7627007412,50.0034141541,-0.0003814604,11.7672576904,108.9037399292 +2011-11-29 20:18:30.433,134.728515625,-168.0440867159,0.1319861859,148.8217214102,202.1294403076,71.7697494965,50.0033912659,-0.0007374957,11.7591705322,108.8994903564 +2011-11-29 20:18:30.466,134.6993560791,-168.0027367507,0.0599027015,169.1915584965,202.2049713135,71.7973502909,50.0033988953,0.0003560493,11.7801132202,108.9189376831 +2011-11-29 20:18:30.500,134.7456359863,-167.9492290487,0.1175718755,173.4509327648,202.1370849609,71.9225271678,50.0033798218,-0.0009918446,11.7780609131,108.9150085449 +2011-11-29 20:18:30.533,134.7556304932,-167.9005707811,0.0389445201,82.44644849,202.1036682129,71.9703180014,50.0033607483,-0.0003814744,11.7730331421,108.9063491821 +2011-11-29 20:18:30.566,134.7534332275,-167.8605458726,0.0232568569,-58.5460114897,202.1315307617,71.9305594703,50.0033721924,0.0007120706,11.7905578613,108.9191055298 +2011-11-29 20:18:30.600,134.781036377,-167.8150158315,0.1436795145,-135.767522359,202.1632537842,71.9648880011,50.00340271,0.0010681059,11.785118103,108.9164505005 +2011-11-29 20:18:30.633,134.7587280273,-167.7896348486,0.0994106531,-151.6603070481,202.1341247559,72.0262640809,50.0034103394,-5.08641824126244E-05,11.7581481934,108.9181213379 +2011-11-29 20:18:30.666,134.6957092285,-167.7810151499,0.0991883427,138.6410102636,202.0322418213,72.0757146505,50.0034103394,1.39698386192322E-08,11.7942276001,108.9186935425 +2011-11-29 20:18:30.700,134.6871948242,-167.7184642774,0.083424814,112.3871291319,202.075012207,72.1456626178,50.0034103394,-5.08641824126244E-05,11.7826690674,108.9184265137 +2011-11-29 20:18:30.733,134.7311401367,-167.6461598949,0.0603959188,59.2860215051,202.0905609131,72.1868691491,50.0034065247,-0.0002288818,11.7780838013,108.9258651733 +2011-11-29 20:18:30.766,134.7288513184,-167.6102330999,0.0666521117,140.921159635,201.9429016113,72.2306438315,50.0034065247,0,11.7804946899,108.9035797119 +2011-11-29 20:18:30.800,134.7057189941,-167.5554686431,0.1903870851,-147.0027737324,201.9218139648,72.2891307413,50.0034065247,0.0001271535,11.7651519775,108.9016189575 +2011-11-29 20:18:30.833,134.7625579834,-167.5144738477,0.1911585331,-113.1810976418,202.0932769775,72.288468213,50.0034065247,0,11.790184021,108.9146728516 +2011-11-29 20:18:30.866,134.7877807617,-167.498381922,0.0497270934,-97.5609058025,202.2779541016,72.3078454597,50.0034103394,0.0003051851,11.783241272,108.9332809448 +2011-11-29 20:18:30.900,134.719543457,-167.4414181443,0.0959455147,135.544311777,202.2464752197,72.3816798046,50.0034141541,-0.0002288818,11.7758407593,108.9098815918 +2011-11-29 20:18:30.933,134.6839752197,-167.3783618379,0.0350519009,128.5353492356,202.0845336914,72.4507944888,50.0033798218,-0.0008901022,11.7990570068,108.9278869629 +2011-11-29 20:18:30.966,134.6943511963,-167.3387877219,0.1081242189,-88.1916757708,201.9718017578,72.491673171,50.0033683777,-0.0002543209,11.7816390991,108.914932251 +2011-11-29 20:18:31.000,134.7009124756,-167.3141717201,0.0082966676,-175.4406761531,201.9728546143,72.5127852857,50.0033760071,0.0002288818,11.7679290771,108.9032211304 +2011-11-29 20:18:31.033,134.6902160645,-167.2848838689,0.0977809727,25.8015672218,202.0949249268,72.5215415882,50.0033760071,-2.54390761256218E-05,11.7752609253,108.9061660767 +2011-11-29 20:18:31.066,134.7153778076,-167.2337940539,0.0955304205,-64.7005515168,202.2023925781,72.578580498,50.0033760071,-2.79396772384644E-08,11.7786941528,108.9007720947 +2011-11-29 20:18:31.100,134.7046966553,-167.1974437872,0.1050107405,-92.6661122055,202.1512908936,72.6228128031,50.0033874512,0.0002543349,11.7736358643,108.9249420166 +2011-11-29 20:18:31.133,134.6782989502,-167.1698498229,0.0768977627,-11.9338883716,202.0171813965,72.6216585011,50.0033836365,-0.000279732,11.7939682007,108.9260406494 +2011-11-29 20:18:31.166,134.7247009277,-167.1614623506,0.1715258956,91.2748573131,202.0719451904,72.6636709947,50.0033836365,0.0001780177,11.7806625366,108.9173583984 +2011-11-29 20:18:31.200,134.7617034912,-167.1086649883,0.2102522403,129.3795469566,202.2709503174,72.755789756,50.0033912659,7.62892886996269E-05,11.7805557251,108.9205780029 +2011-11-29 20:18:31.233,134.7189331055,-167.0413193231,0.0248604342,-168.0532118487,202.2695617676,72.7813551541,50.0033836365,-0.0002288818,11.7999649048,108.9226608276 +2011-11-29 20:18:31.266,134.6730804443,-167.0016222637,0.0362494811,-26.5984914961,202.1249084473,72.8092018353,50.0033836365,0.0001017004,11.7742843628,108.9201889038 +2011-11-29 20:18:31.300,134.7223358154,-166.9603269399,0.1349045485,139.6828326781,202.1561584473,72.8501898005,50.0033950806,0.0002543069,11.7782974243,108.9056549072 +2011-11-29 20:18:31.333,134.8051300049,-166.9278152395,0.1664902717,138.9865905149,202.2486724854,72.8554558764,50.0033950806,-5.08781522512436E-05,11.7762527466,108.9155273438 +2011-11-29 20:18:31.366,134.8708343506,-166.8810557644,0.0942825526,176.2316120589,202.2861480713,72.9062724838,50.0033760071,-0.0006866455,11.7629623413,108.9013900757 +2011-11-29 20:18:31.400,134.8437652588,-166.8443503278,0.1503423601,162.1740308979,202.1686706543,72.9923260371,50.0033760071,0.0003051851,11.787902832,108.9233932495 +2011-11-29 20:18:31.433,134.7200775146,-166.8283130437,0.1823710799,129.163644677,201.948928833,73.029004153,50.0033798218,0,11.7675247192,108.9170761108 +2011-11-29 20:18:31.466,134.6050567627,-166.7654616429,0.130270496,0.5457648249,201.9873199463,73.0529234755,50.0033950806,0.000534053,11.7709121704,108.90234375 +2011-11-29 20:18:31.500,134.6272277832,-166.7088803558,0.3081825972,-16.3638833267,202.140411377,73.1114513665,50.00340271,0.0003306102,11.7889862061,108.91796875 +2011-11-29 20:18:31.533,134.7216644287,-166.6597029938,0.1359220892,-47.4541018814,202.0629730225,73.1682990309,50.0034141541,0.0004323525,11.7646865845,108.8986206055 +2011-11-29 20:18:31.566,134.7438964844,-166.6152384623,0.1055927128,-152.1283389308,202.0192108154,73.199028052,50.0034332275,0.0003051851,11.7787017822,108.9136047363 +2011-11-29 20:18:31.600,134.7142791748,-166.5635612511,0.0949059576,-154.825362068,202.0703735352,73.2484786216,50.0034065247,-0.0009663915,11.7951202393,108.9265670776 +2011-11-29 20:18:31.633,134.817276001,-166.4982373218,0.2221906185,-124.7820100225,202.2247924805,73.3291568161,50.0033760071,-0.0006866455,11.7474517822,108.9035949707 +2011-11-29 20:18:31.666,134.884979248,-166.4681981499,0.2723530531,-133.6475819048,202.2952728271,73.3692636869,50.0033760071,0.0001780316,11.793258667,108.9327392578 +2011-11-29 20:18:31.700,134.7557220459,-166.4568600358,0.0874619931,-121.635888287,202.2000274658,73.3760460647,50.0033798218,-0.0001525925,11.7782669067,108.9287796021 +2011-11-29 20:18:31.733,134.6260375977,-166.4203321842,0.1133208722,9.4597795571,202.1197052002,73.4283926345,50.0033798218,0,11.7778930664,108.9112243652 +2011-11-29 20:18:31.766,134.7039031982,-166.372739426,0.0676515698,94.8038179817,202.1496734619,73.4693464488,50.0033836365,0.0002034288,11.7976379395,108.9184112549 +2011-11-29 20:18:31.800,134.8201293945,-166.3255564792,0.2120327652,-174.9573992881,202.1255645752,73.4906976201,50.0033912659,0.0003306102,11.7724075317,108.9098892212 +2011-11-29 20:18:31.833,134.7403869629,-166.2756004757,0.2075133771,-142.5582876772,202.1139831543,73.5290423021,50.0033950806,0,11.7647781372,108.8980407715 +2011-11-29 20:18:31.866,134.5975646973,-166.2256308117,0.1797547489,-80.1426939849,202.1083068848,73.5746543054,50.0033950806,-2.54111364483833E-05,11.7855987549,108.9058074951 +2011-11-29 20:18:31.900,134.6386260986,-166.1799505065,0.1479940861,-69.1760124799,202.2281341553,73.6189207614,50.0033912659,-0.0002543069,11.7895126343,108.928894043 +2011-11-29 20:18:31.933,134.7091522217,-166.1387371451,0.0489395112,-61.9942734733,202.204498291,73.6780565392,50.0033760071,-0.0006612344,11.7737960815,108.9143981934 +2011-11-29 20:18:31.966,134.6456298828,-166.109162426,0.1335384101,30.6746664305,202.0961914063,73.7477176386,50.0033607483,0,11.7469787598,108.8932800293 +2011-11-29 20:18:32.000,134.6671905518,-166.0859397828,0.0623375848,45.4995988542,202.0775146484,73.7559343562,50.003364563,0.0003051711,11.7669372559,108.9108581543 +2011-11-29 20:18:32.033,134.7414855957,-166.0628127622,0.0508997552,-129.79596993,202.050994873,73.7501901671,50.0033912659,0.0003306102,11.7669219971,108.9158325195 +2011-11-29 20:18:32.066,134.7391204834,-166.0135807587,0.1144944206,-100.4569333313,202.046661377,73.8040462087,50.0033912659,0.0002034567,11.782119751,108.9234771729 +2011-11-29 20:18:32.100,134.7500762939,-165.9906313231,0.0357705615,-58.9408032539,202.1491699219,73.8518848536,50.0034179688,0.0007883878,11.756401062,108.9061813354 +2011-11-29 20:18:32.133,134.82081604,-165.9479836219,0.1116574705,67.8054120795,202.3647613525,73.8868007807,50.0034370422,0.0004832167,11.7687149048,108.9043045044 +2011-11-29 20:18:32.166,134.8270568848,-165.8511998414,0.0978476554,161.1638869008,202.3099975586,73.973721768,50.0034294128,-0.0003814604,11.7715988159,108.9138870239 +2011-11-29 20:18:32.200,134.7667541504,-165.7968861771,0.2567587197,-148.4723299134,202.1715698242,74.0638666047,50.0034141541,-0.0003051991,11.7677841187,108.9048461914 +2011-11-29 20:18:32.233,134.7483520508,-165.792911007,0.2051653415,-125.5847075142,202.1719207764,74.0470438488,50.0034065247,-0.0003051851,11.7776947021,108.9069213867 +2011-11-29 20:18:32.266,134.7303466797,-165.7594704008,0.1532536,-71.5523923865,202.2077026367,74.0367302631,50.0033798218,-0.0009409664,11.7617263794,108.8991775513 +2011-11-29 20:18:32.300,134.688949585,-165.7224234548,0.0293897931,-107.6627965661,202.1138153076,74.0829569834,50.0033493042,-0.0007629488,11.7846755981,108.9178390503 +2011-11-29 20:18:32.333,134.6743927002,-165.7024793024,0.0897390097,124.7442117557,202.0773010254,74.1285894773,50.0033493042,0,11.7896194458,108.9227600098 +2011-11-29 20:18:32.366,134.6895294189,-165.6595857144,0.0458155908,-159.6815172849,202.1174316406,74.1490937052,50.0033721924,0.0009663915,11.7593688965,108.9072952271 +2011-11-29 20:18:32.400,134.6852111816,-165.5918985397,0.1096128747,-111.8864079639,202.0882110596,74.211118653,50.0033836365,0.000279732,11.7767715454,108.9169082642 +2011-11-29 20:18:32.433,134.7213134766,-165.5628019339,0.054535985,-79.6505583646,202.154586792,74.2437191459,50.00340271,0.0007629627,11.7818374634,108.9169311523 +2011-11-29 20:18:32.466,134.7651977539,-165.5492098574,0.1286593974,-174.6766921736,202.1805725098,74.2617166944,50.0034217834,0.000534053,11.7805938721,108.9138793945 +2011-11-29 20:18:32.500,134.7492523193,-165.4953196649,0.2289061546,-161.4176147681,202.1427307129,74.3477702477,50.0034141541,-0.0004577637,11.7642974854,108.9009094238 +2011-11-29 20:18:32.533,134.7688140869,-165.4549669073,0.131089583,-167.9339157646,202.2225799561,74.3969066286,50.0033988953,-0.0004068995,11.7806243896,108.9117889404 +2011-11-29 20:18:32.566,134.7589263916,-165.4231792069,0.0948160142,123.3637622225,202.2283172607,74.435626971,50.00340271,0.0002288679,11.7765731812,108.913848877 +2011-11-29 20:18:32.600,134.7152862549,-165.3821570907,0.1120574027,146.3185390417,202.2238311768,74.4714581434,50.0033798218,-0.0009918166,11.7603149414,108.9041671753 +2011-11-29 20:18:32.633,134.7539978027,-165.2968070468,0.188980639,-134.2053351524,202.1230926514,74.5237159208,50.0033683777,-0.0001780177,11.7878723145,108.9258575439 +2011-11-29 20:18:32.666,134.8057556152,-165.2369199482,0.1806704849,-126.7916292613,202.1176147461,74.5889920387,50.0033836365,0.0007883739,11.7643890381,108.9097671509 +2011-11-29 20:18:32.700,134.7784881592,-165.2223306641,0.0301558599,163.8141095818,202.2628479004,74.5928647559,50.0033874512,-0.0003305962,11.7604751587,108.9105987549 +2011-11-29 20:18:32.733,134.6609344482,-165.1897779825,0.0625008196,62.138397295,202.196105957,74.6077272476,50.003364563,-0.0006612064,11.7515945435,108.8908004761 +2011-11-29 20:18:32.766,134.6501464844,-165.1390023562,0.0032847053,-83.0411735516,202.1112518311,74.6657565347,50.0033760071,0.0008392381,11.7850570679,108.9185180664 +2011-11-29 20:18:32.800,134.779083252,-165.10231058,0.1332431585,-179.1212055496,202.125579834,74.7059180471,50.0033950806,0.0005594781,11.7792129517,108.9228591919 +2011-11-29 20:18:32.833,134.8428497314,-165.0791562387,0.1221353561,177.3503287431,202.231262207,74.7275151052,50.0033988953,-0.0004068995,11.76512146,108.9092102051 +2011-11-29 20:18:32.866,134.8453521729,-165.0392952547,0.1134274676,167.85431674,202.3348083496,74.7950656761,50.0033798218,-0.0004577637,11.7680358887,108.9015960693 +2011-11-29 20:18:32.900,134.848236084,-164.9791486089,0.18787314,161.5034565856,202.2967376709,74.8628211527,50.0033988953,0.0009918306,11.7611694336,108.9047164917 +2011-11-29 20:18:32.933,134.7936248779,-164.9522103428,0.1112930328,159.7579744224,202.19871521,74.866659719,50.0034217834,0.0001017144,11.7634124756,108.904838562 +2011-11-29 20:18:32.966,134.7298736572,-164.9396837759,0.0496879742,128.0910590905,202.1852874756,74.8938575323,50.0033988953,-0.0005849171,11.7817459106,108.9066390991 +2011-11-29 20:18:33.000,134.7444763184,-164.9036340374,0.1254227459,157.9576048591,202.2581939697,74.972090519,50.0033760071,-0.0004831888,11.7902755737,108.9223937988 +2011-11-29 20:18:33.033,134.7482452393,-164.8470254296,0.2068149447,-174.4236609856,202.2681274414,75.0059272762,50.0033988953,0.000813785,11.7630233765,108.9197921753 +2011-11-29 20:18:33.066,134.7265930176,-164.7819610476,0.2179476768,-152.4457241612,202.2308197021,75.0381725992,50.0034179688,0.000279732,11.7756347656,108.9063262939 +2011-11-29 20:18:33.100,134.8150482178,-164.726049119,0.2098569125,-129.2039291327,202.320602417,75.0913046408,50.00340271,-0.0006103422,11.7699890137,108.9146575928 +2011-11-29 20:18:33.133,134.8708343506,-164.6809562101,0.1772757769,-105.271847866,202.3301086426,75.1451948333,50.0033950806,-0.0001017004,11.8055496216,108.935508728 +2011-11-29 20:18:33.166,134.768737793,-164.6612169634,0.0632076338,156.8134252297,202.0765228271,75.2040642338,50.0034065247,0.0003306242,11.7782669067,108.9094924927 +2011-11-29 20:18:33.200,134.6920013428,-164.6235553003,0.1796914637,136.9721491626,202.0647888184,75.2294110658,50.0033950806,-0.0006866455,11.7698287964,108.9141921997 +2011-11-29 20:18:33.233,134.6973419189,-164.5946089586,0.1668328643,125.4736076571,202.1951293945,75.2385088778,50.0033798218,-0.0001271535,11.7836303711,108.9251861572 +2011-11-29 20:18:33.266,134.6754455566,-164.540677785,0.1221094579,78.20181377,202.2401428223,75.3161612985,50.0033874512,0.0003306102,11.7813949585,108.9153747559 +2011-11-29 20:18:33.300,134.6802520752,-164.4882492529,0.0849476531,50.457715135,202.2150878906,75.3557149239,50.00340271,0.0005086139,11.7857437134,108.9223480225 +2011-11-29 20:18:33.333,134.7559509277,-164.467745025,0.0371315889,159.7477974406,202.1168518066,75.3320005071,50.0033950806,-0.0004577497,11.7882385254,108.9227600098 +2011-11-29 20:18:33.366,134.7503662109,-164.417269927,0.1461791247,-114.7582976042,202.1208648682,75.3526345086,50.0033988953,0.0003814744,11.768447876,108.8964691162 +2011-11-29 20:18:33.400,134.6984100342,-164.3649233572,0.1945338994,-112.1854336457,202.0830535889,75.429699533,50.0034179688,0.0003814744,11.7840118408,108.9081573486 +2011-11-29 20:18:33.433,134.7460784912,-164.3746358862,0.1197025478,145.6389898608,202.1585540771,75.4726819135,50.0034103394,-0.0006103702,11.7366714478,108.9043731689 +2011-11-29 20:18:33.466,134.7147827148,-164.36719098,0.2006149143,98.0487315734,202.2359466553,75.4747992721,50.0033874512,-0.0006866455,11.7754821777,108.9074859619 +2011-11-29 20:18:33.500,134.7143096924,-164.2923321067,0.1159531549,59.5055574454,202.2961425781,75.5207459547,50.0033607483,-0.0003560493,11.7578735352,108.9059677124 +2011-11-29 20:18:33.533,134.7562561035,-164.2088945158,0.0198720824,-20.7373763957,202.2211151123,75.5880301482,50.003364563,5.08502125740051E-05,11.7658157349,108.9020767212 +2011-11-29 20:18:33.566,134.7349700928,-164.1760139852,0.0175287537,-99.670027237,202.1244506836,75.6122568292,50.003364563,0,11.7922668457,108.9155731201 +2011-11-29 20:18:33.600,134.6799163818,-164.1552911912,0.0296518002,9.7003465036,202.1844329834,75.6424530955,50.0033836365,0.0009918306,11.7694015503,108.9142990112 +2011-11-29 20:18:33.633,134.695892334,-164.096141753,0.0686378479,-5.9337870325,202.3030548096,75.7055025717,50.0034332275,0.0009918166,11.7821350098,108.9119873047 +2011-11-29 20:18:33.666,134.7987823486,-164.0667309584,0.0397295207,147.5365393556,202.3248138428,75.7455274803,50.0034332275,-2.79396772384644E-08,11.7738037109,108.9206390381 +2011-11-29 20:18:33.700,134.8126678467,-164.0374021262,0.1011244953,167.2430694508,202.296585083,75.7961186914,50.0034255981,-0.0003560213,11.7863464355,108.9205169678 +2011-11-29 20:18:33.733,134.759185791,-164.0189059739,0.1059787869,143.8537013551,202.2293243408,75.8239926934,50.0034179688,-2.54390761256218E-05,11.7775878906,108.9146957397 +2011-11-29 20:18:33.766,134.7437286377,-163.9863942734,0.1550430655,132.2346753127,202.1365356445,75.8602678281,50.0034103394,-0.0004323386,11.8264770508,108.9302597046 +2011-11-29 20:18:33.800,134.706817627,-163.8983394747,0.0685942397,130.2544395478,202.0716705322,75.957966854,50.0033760071,-0.0009409525,11.7464752197,108.8960113525 +2011-11-29 20:18:33.833,134.6802520752,-163.8248876203,0.0733544976,-14.0976965696,202.1639099121,76.0041389328,50.0033760071,0.0005086418,11.7760314941,108.9214782715 +2011-11-29 20:18:33.866,134.7329711914,-163.8283983375,0.1022025347,-85.076884113,202.2783966064,75.9629528921,50.0034141541,0.0010681199,11.7982711792,108.9394226074 +2011-11-29 20:18:33.900,134.7387695313,-163.8175519971,0.0756518617,-117.9051706605,202.3426513672,75.9898091959,50.0034255981,-0.0001780177,11.7732620239,108.9139404297 +2011-11-29 20:18:33.933,134.7136535645,-163.736668897,0.0210026484,35.4538249248,202.2837219238,76.0859441085,50.0033760071,-0.0015767198,11.7626800537,108.9135894775 +2011-11-29 20:18:33.966,134.7252807617,-163.6539553061,0.0488383248,104.8914882915,202.1305389404,76.1811910965,50.0033721924,0.0004831888,11.7481842041,108.8981933594 +2011-11-29 20:18:34.000,134.7636566162,-163.6283557571,0.0358877219,161.9342639373,202.106842041,76.2128626836,50.00340271,0.0006357953,11.7913589478,108.9102859497 +2011-11-29 20:18:34.033,134.7949676514,-163.5788095649,0.1125329658,-56.6989575834,202.2606964111,76.2285789489,50.0033798218,-0.0008392381,11.7852020264,108.9181671143 +2011-11-29 20:18:34.066,134.7140960693,-163.5316129577,0.0828156695,-68.4467053709,202.199005127,76.2866287267,50.0033493042,-0.0007120846,11.7867431641,108.9157180786 +2011-11-29 20:18:34.100,134.6399841309,-163.5370361279,0.1269385666,127.3450794897,202.1083526611,76.3335589565,50.0033683777,0.0009409525,11.7792739868,108.9228591919 +2011-11-29 20:18:34.133,134.6613616943,-163.5189907681,0.1049878374,134.7563948147,202.0841674805,76.3343171075,50.0033988953,0.0007120846,11.7503356934,108.8929595947 +2011-11-29 20:18:34.166,134.735458374,-163.460961481,0.0939195231,179.3661088125,202.0900421143,76.3639464681,50.0033988953,-0.0001017423,11.7975006104,108.9252624512 +2011-11-29 20:18:34.200,134.7007751465,-163.4276301578,0.1151335984,121.3637052486,202.1410980225,76.3960483572,50.0033950806,0.0001017144,11.7823257446,108.917388916 +2011-11-29 20:18:34.233,134.651184082,-163.4046397411,0.1276842207,105.8167671881,202.0353851318,76.4363669639,50.0033988953,0.0002034428,11.7592544556,108.9166564941 +2011-11-29 20:18:34.266,134.6968383789,-163.3698877386,0.1406074017,143.6472657177,202.1134033203,76.4844378352,50.0034065247,7.62892886996269E-05,11.7868118286,108.9137115479 +2011-11-29 20:18:34.300,134.7418670654,-163.317909999,0.059841767,142.0797782843,202.3025360107,76.5256511967,50.0034065247,0.0001017423,11.7790756226,108.9201049805 +2011-11-29 20:18:34.333,134.7531433105,-163.2855349023,0.1122234166,48.66631361,202.2786102295,76.5258492722,50.0034179688,0.0002288818,11.7952651978,108.9225311279 +2011-11-29 20:18:34.366,134.7572937012,-163.2314124833,0.0817365199,138.451431533,202.1609039307,76.5656214637,50.0034179688,0,11.7892684937,108.9206542969 +2011-11-29 20:18:34.400,134.7566833496,-163.1506386662,0.2066543102,-169.2542186519,202.1748046875,76.670410226,50.0034141541,-0.0001525786,11.7960128784,108.9314956665 +2011-11-29 20:18:34.433,134.7145233154,-163.0937978319,0.1403826326,-152.0971659475,202.1581115723,76.7436981558,50.0033912659,-0.0008392381,11.7707366943,108.9166564941 +2011-11-29 20:18:34.466,134.6585235596,-163.0870769258,0.0856863111,-112.8696341855,202.0853729248,76.7256254752,50.0033683777,-0.0003560493,11.7463684082,108.8980255127 +2011-11-29 20:18:34.500,134.7442932129,-163.0662585092,0.1240338758,-147.4618580672,202.2496185303,76.7407133631,50.0033683777,0,11.7565917969,108.9018707275 +2011-11-29 20:18:34.533,134.8587493896,-162.9751437857,0.2169630229,-148.9071124352,202.3663330078,76.8537256731,50.003364563,-2.79396772384644E-08,11.7757492065,108.9208831787 +2011-11-29 20:18:34.566,134.8060150146,-162.9142731398,0.2065442204,-161.1047238022,202.2419128418,76.9128819415,50.003364563,0.0001525646,11.7730865479,108.8979949951 +2011-11-29 20:18:34.600,134.7059020996,-162.9231114046,0.1493121237,150.0243654604,202.1651916504,76.8880883548,50.0033874512,0.0009155553,11.7918548584,108.9437332153 +2011-11-29 20:18:34.633,134.6365966797,-162.9167593286,0.1368422806,103.3235364052,202.0907592773,76.9116661678,50.0033988953,-0.0002034428,11.7642440796,108.9123153687 +2011-11-29 20:18:34.666,134.5773773193,-162.8680737402,0.1241775826,59.4443521203,202.0487670898,76.9809106256,50.0033721924,-0.0007120846,11.770904541,108.9137496948 +2011-11-29 20:18:34.700,134.5954437256,-162.7951136595,0.0131280441,-111.2218032369,202.1301727295,77.0286126668,50.0033836365,0.0008646771,11.764503479,108.91822052 +2011-11-29 20:18:34.733,134.7041931152,-162.7663449027,0.1801652163,-165.2506213077,202.1792755127,77.0520197251,50.0034141541,0.0006357953,11.7809295654,108.9195861816 +2011-11-29 20:18:34.766,134.7378845215,-162.7454035428,0.188690424,174.3628859624,202.1072540283,77.0845177651,50.0033950806,-0.0007120986,11.7545013428,108.8906707764 +2011-11-29 20:18:34.800,134.6867980957,-162.7251725224,0.1166008264,129.5163010042,202.138168335,77.1081433895,50.0033912659,0.0003814884,11.8030548096,108.928604126 +2011-11-29 20:18:34.833,134.6901855469,-162.682552142,0.0441596881,78.7631801876,202.2227783203,77.1197068997,50.0034065247,0,11.7925796509,108.9210357666 +2011-11-29 20:18:34.866,134.7968597412,-162.598062702,0.0608316101,-171.5508424396,202.3348236084,77.1855772441,50.0033988953,-0.0003560213,11.7862701416,108.9172515869 +2011-11-29 20:18:34.900,134.8657684326,-162.5360582447,0.1744561493,-156.1394494832,202.4206390381,77.2692743822,50.0033683777,-0.0009155273,11.7575683594,108.9031066895 +2011-11-29 20:18:34.933,134.7811584473,-162.5179719038,0.1408860087,-158.9023293044,202.3192749023,77.2828527983,50.0033683777,0.0003306242,11.7829666138,108.9094009399 +2011-11-29 20:18:34.966,134.716293335,-162.4898725055,0.0829108506,-164.80588037,202.2449035645,77.3255483108,50.0033798218,0.0001271535,11.7385406494,108.8974761963 +2011-11-29 20:18:35.000,134.7002563477,-162.4524703896,0.0555278771,131.888753552,202.1312103271,77.3966300895,50.0033950806,0.0007120706,11.7943954468,108.9192504883 +2011-11-29 20:18:35.033,134.7080993652,-162.4157103115,0.0682803169,34.1839971355,202.1895446777,77.3787554844,50.0034294128,0.0010172417,11.7832641602,108.9266662598 +2011-11-29 20:18:35.066,134.6999359131,-162.3754668369,0.049672313,-85.4425861015,202.2559814453,77.3712900876,50.0034332275,0,11.7675094604,108.9106750488 +2011-11-29 20:18:35.100,134.680267334,-162.3332289471,0.1187935993,-144.7068329636,202.1940002441,77.4402818284,50.0034255981,-0.0004068995,11.7794723511,108.9192276001 +2011-11-29 20:18:35.133,134.760925293,-162.2900211704,0.1141022891,-136.8065034148,202.2197265625,77.523562325,50.0033950806,-0.0010426668,11.7835769653,108.9260559082 +2011-11-29 20:18:35.166,134.8073425293,-162.2378931667,0.1400380731,-146.7045540128,202.2675018311,77.5985373115,50.0033721924,-0.0003814744,11.770614624,108.9145965576 +2011-11-29 20:18:35.200,134.7281036377,-162.1781699926,0.1549102217,-174.4885477828,202.1491241455,77.6698239959,50.0033721924,0,11.7702331543,108.9203109741 +2011-11-29 20:18:35.233,134.6944274902,-162.1402078012,0.0769574717,-169.9065426988,202.0553436279,77.7084418854,50.0033874512,0.0005594781,11.7734298706,108.9285736084 +2011-11-29 20:18:35.266,134.7548980713,-162.0916997977,0.15074417,-136.4375912374,202.1979980469,77.7297520757,50.00340271,0.0006357813,11.7644958496,108.9062576294 +2011-11-29 20:18:35.300,134.7930297852,-162.0462517189,0.1985771805,-170.4440512657,202.321105957,77.7757055884,50.0034179688,-2.79396772384644E-08,11.76902771,108.8959197998 +2011-11-29 20:18:35.333,134.8242340088,-162.0082622068,0.1733834893,153.9689656291,202.3746643066,77.8403874798,50.0034179688,-7.62892886996269E-05,11.7728729248,108.9195556641 +2011-11-29 20:18:35.366,134.7969970703,-161.9698765436,0.034623675,112.9225066798,202.2707366943,77.8689718215,50.0033874512,-0.0007120706,11.7464599609,108.9064483643 +2011-11-29 20:18:35.400,134.7587280273,-161.9503831837,0.0381100737,-126.9583541789,202.1031494141,77.8837455207,50.0033874512,0,11.7730941772,108.919883728 +2011-11-29 20:18:35.433,134.7606048584,-161.9021347274,0.0290505309,-114.0169010603,202.2265777588,77.9076102016,50.0033874512,5.08502125740051E-05,11.7838745117,108.9103546143 +2011-11-29 20:18:35.466,134.784286499,-161.8386276285,0.0898261145,167.5172469045,202.3139343262,77.9707416401,50.0033721924,-0.0004068855,11.7765960693,108.9187011719 +2011-11-29 20:18:35.500,134.7738342285,-161.7737544918,0.2114211768,-170.1364468663,202.1834869385,78.0877154599,50.0033721924,0.0001017144,11.7941589355,108.9271850586 +2011-11-29 20:18:35.533,134.675567627,-161.7371993194,0.0617153235,-148.1613650609,202.1043395996,78.113390141,50.0033950806,0.000534039,11.7529754639,108.9014892578 +2011-11-29 20:18:35.566,134.6022491455,-161.7528404526,0.1211414114,41.6951493355,202.0643310547,78.0698818359,50.0033874512,-0.0003814884,11.752243042,108.9142684937 +2011-11-29 20:18:35.600,134.6011505127,-161.7330055832,0.1315233558,57.1132392924,201.9939727783,78.0990467437,50.0033874512,0.0001271674,11.7611236572,108.908493042 +2011-11-29 20:18:35.633,134.6655883789,-161.6682553899,0.0381600745,50.9399367356,202.0675506592,78.1500204455,50.0034179688,0.001093545,11.7743530273,108.9119644165 +2011-11-29 20:18:35.666,134.7576293945,-161.6131221029,0.1193244159,-173.9403704603,202.2328796387,78.2123664122,50.0034255981,0,11.7710342407,108.9120025635 +2011-11-29 20:18:35.700,134.8315582275,-161.5887383276,0.3148454726,-174.5512079382,202.313079834,78.2375219989,50.0034103394,-0.0006103562,11.7580108643,108.9149398804 +2011-11-29 20:18:35.733,134.8184509277,-161.5512679098,0.2707233131,-154.2418453468,202.290222168,78.2436759994,50.0034141541,0.0003051711,11.776008606,108.9127578735 +2011-11-29 20:18:35.766,134.7516326904,-161.4886350751,0.1379662901,-117.1735617777,202.3079071045,78.3088906456,50.0034065247,-0.0005849311,11.7791824341,108.9274902344 +2011-11-29 20:18:35.800,134.6771087646,-161.4416023925,0.1267182976,104.2117888464,202.2276153564,78.414082389,50.0033912659,-0.0005086279,11.7609481812,108.9148101807 +2011-11-29 20:18:35.833,134.6946868896,-161.3781635955,0.1721171439,105.8723854185,202.21434021,78.4656366568,50.0033874512,0.0003560493,11.7744445801,108.9101715088 +2011-11-29 20:18:35.866,134.7263793945,-161.3349148376,0.1033174619,-156.1084404244,202.1803894043,78.4508971086,50.0034065247,0.0004577637,11.7823257446,108.9126281738 +2011-11-29 20:18:35.900,134.7148895264,-161.3152165721,0.1289021969,-130.6590462939,202.1926727295,78.4818242052,50.0034103394,-0.0001525925,11.7649230957,108.9052734375 +2011-11-29 20:18:35.933,134.6376800537,-161.2716672859,0.0537871681,-52.6509161982,202.1445007324,78.5819342878,50.0033950806,-0.0004068995,11.7714538574,108.9084854126 +2011-11-29 20:18:35.966,134.6202087402,-161.2129413194,0.1639854312,-18.3951269444,202.1566925049,78.6424019526,50.0033760071,-0.0006103562,11.7739105225,108.9050979614 +2011-11-29 20:18:36.000,134.691696167,-161.1561687871,0.1217822731,-47.5995370994,202.1675415039,78.6706925961,50.0033760071,-1.39698386192322E-08,11.7781524658,108.9181137085 +2011-11-29 20:18:36.033,134.7517700195,-161.121362143,0.0968797579,-111.7964065612,202.1486206055,78.6921052391,50.0033683777,-2.54390761256218E-05,11.775062561,108.9193115234 +2011-11-29 20:18:36.066,134.7429656982,-161.0764331587,0.1024669558,-94.6050663071,202.1840209961,78.7500320735,50.0033607483,-0.0002288818,11.7828521729,108.9166870117 +2011-11-29 20:18:36.100,134.7108764648,-161.0253570041,0.0646226332,-26.4052193407,202.2999572754,78.8328959285,50.0033874512,0.0010426808,11.7905044556,108.91381073 +2011-11-29 20:18:36.133,134.6978607178,-150.9955363982,0.1483157873,17.9617104604,202.2986297607,78.8383600798,50.0033988953,0.0001780037,11.7728271484,108.9080352783 +2011-11-29 20:18:36.166,134.7162475586,-150.9918754168,0.143864572,3.3657900107,202.2518615723,78.8089083041,50.0033988953,2.54251062870026E-05,11.7731018066,108.9122772217 +2011-11-29 20:18:36.200,134.7219390869,-150.9461131493,0.1135220826,-57.6719521816,202.2559967041,78.8311747208,50.0033950806,-7.62753188610077E-05,11.7768554688,108.9065322876 +2011-11-29 20:18:36.233,134.775390625,-150.8925508058,0.1018223539,-120.5725097955,202.3141174316,78.8847165737,50.00340271,0.0001271395,11.7682952881,108.9102249146 +2011-11-29 20:18:36.266,134.8208770752,-150.8726476346,0.1153751165,171.502512021,202.4161529541,78.9515089936,50.0034065247,2.54251062870026E-05,11.7555847168,108.9004974365 +2011-11-29 20:18:36.300,134.7667694092,-150.8499987273,0.160578236,174.0318266933,202.3248291016,78.9968272988,50.00340271,-0.0001017144,11.7701187134,108.9157104492 +2011-11-29 20:18:36.333,134.7205200195,-150.795971931,0.136921823,-129.1945854339,202.0892028809,78.9893892228,50.0034065247,0.0001780316,11.7804946899,108.9165420532 +2011-11-29 20:18:36.366,134.7395935059,-150.7307982659,0.1769560426,-99.1697500313,202.0307006836,79.0225497912,50.0034141541,0.0002288958,11.7788696289,108.9142150879 +2011-11-29 20:18:36.400,134.737411499,-150.6698046766,0.1233531609,-94.5592972094,202.1538391113,79.1081388917,50.0034065247,-0.0005086279,11.7685317993,108.9146118164 +2011-11-29 20:18:36.433,134.69090271,-150.6249439942,0.111702852,-27.7860240437,202.2061309814,79.1686407073,50.0033874512,-0.0005340669,11.7828903198,108.9197311401 +2011-11-29 20:18:36.466,134.7082519531,-150.6041665587,0.0622628257,-4.8175966646,202.1891326904,79.2036932382,50.0033760071,-0.0003051851,11.7657546997,108.919303894 +2011-11-29 20:18:36.500,134.748916626,-150.5705073865,0.1749843806,-120.9841516364,202.1865234375,79.2256113152,50.0033721924,-7.63032585382462E-05,11.7713088989,108.9196929932 +2011-11-29 20:18:36.533,134.7115020752,-150.5528581777,0.1519946456,-125.5559797385,202.1789398193,79.2574741477,50.0033721924,0,11.7867431641,108.9214630127 +2011-11-29 20:18:36.566,134.7803955078,-150.5355231576,0.0509760492,174.1212885111,202.3546447754,79.3138505291,50.0033760071,0.0003814604,11.7683029175,108.9243927002 +2011-11-29 20:18:36.600,134.8391571045,-150.4715516058,0.077448085,-107.0988005255,202.5014190674,79.3423255878,50.00340271,0.0008901022,11.7685623169,108.9199295044 +2011-11-29 20:18:36.633,134.7234954834,-150.3688938626,0.1580817103,-72.7647987755,202.2940216064,79.4358786888,50.0034103394,0,11.8068847656,108.9297637939 +2011-11-29 20:18:36.666,134.6461029053,-150.2950458573,0.1944588274,-65.9260103973,202.1041717529,79.5124382792,50.0034103394,-7.63032585382462E-05,11.7704544067,108.9225692749 +2011-11-29 20:18:36.700,134.6596221924,-150.2987614802,0.0875200406,-92.5495550273,202.1480712891,79.5082103921,50.0033950806,-0.0004831888,11.7606811523,108.9115753174 +2011-11-29 20:18:36.733,134.7589569092,-150.3438270683,0.109084934,-170.3765689967,202.1987457275,79.4805822769,50.0033988953,0.0001780177,11.7691879272,108.9108276367 +2011-11-29 20:18:36.766,134.8256988525,-150.3106186886,0.0789236948,-163.2455646353,202.2766876221,79.5403259416,50.0033950806,-0.0001780177,11.7783584595,108.92137146 +2011-11-29 20:18:36.800,134.7864227295,-150.2267439656,0.1562705189,166.7734119831,202.2233886719,79.6346918352,50.0033874512,-0.0002543209,11.7833251953,108.9214401245 +2011-11-29 20:18:36.833,134.7356262207,-150.169602603,0.1916223019,166.4542235828,202.1785888672,79.6717729322,50.0033950806,0.0003051711,11.7919616699,108.9260253906 +2011-11-29 20:18:36.866,134.6631317139,-150.1155348255,0.0775945485,-150.750935662,202.1928405762,79.7121530106,50.0033988953,5.08641824126244E-05,11.7776107788,108.904335022 +2011-11-29 20:18:36.900,134.6146697998,-150.0667809352,0.07820566,-35.6995034142,202.157043457,79.7413862202,50.0033912659,-0.0003560353,11.7724227905,108.9131622314 +2011-11-29 20:18:36.933,134.7396240234,-150.0417141409,0.1143516004,-44.8481593168,202.2801818848,79.7381692011,50.0033798218,-0.000279732,11.7727355957,108.9136047363 +2011-11-29 20:18:36.966,134.7952575684,-150.0249665171,0.0408340804,15.9196427005,202.4622192383,79.7953515448,50.0033760071,-7.63032585382462E-05,11.7807693481,108.9220352173 +2011-11-29 20:18:37.000,134.7595825195,-159.9965529301,0.1501219273,111.1084220966,202.4285430908,79.8810909095,50.0033721924,0,11.7744445801,108.9234695435 +2011-11-29 20:18:37.033,134.7493438721,-159.9480449267,0.1500513256,92.3830350153,202.3400421143,79.9461962727,50.0033798218,0.0004323386,11.7976379395,108.914642334 +2011-11-29 20:18:37.066,134.7560272217,-159.8791146576,0.0710950792,-15.320281648,202.3115997314,79.9858182,50.0033950806,0.0002288539,11.7722244263,108.9122619629 +2011-11-29 20:18:37.100,134.7656555176,-159.8171921625,0.1608465165,-94.5479317747,202.3856506348,79.9993283142,50.0034065247,0.0004069135,11.7701339722,108.9093856812 +2011-11-29 20:18:37.133,134.6812896729,-159.7753231029,0.0893111452,-29.2806623869,202.3395843506,79.9981603519,50.0034179688,0.0003560213,11.7878189087,108.9186401367 +2011-11-29 20:18:37.166,134.6441040039,-159.7399563834,0.145976454,28.5758859023,202.1477813721,80.0676575267,50.0034103394,-0.0004323386,11.7732086182,108.9188995361 +2011-11-29 20:18:37.200,134.6740570068,-159.6982922295,0.099530071,33.136037796,202.1912841797,80.1199631153,50.0033988953,-0.0001779897,11.7464828491,108.902305603 +2011-11-29 20:18:37.233,134.6808624268,-159.6868721532,0.0574505441,62.3430297625,202.2279205322,80.1012142461,50.0033950806,-0.0001271674,11.7772750854,108.9098052979 +2011-11-29 20:18:37.266,134.6808166504,-159.6704660388,0.0623938516,108.7509549839,202.2336273193,80.1180916435,50.0033836365,-0.0004831888,11.7641830444,108.9032287598 +2011-11-29 20:18:37.300,134.7102355957,-159.5885720706,0.0882130042,-76.3186554837,202.3133087158,80.2262886701,50.0033798218,-5.08781522512436E-05,11.7593841553,108.9036407471 +2011-11-29 20:18:37.333,134.7139434814,-159.515325122,0.2824039161,-50.5407067651,202.2900085449,80.3054983739,50.0033874512,0.0004323246,11.7756271362,108.9103088379 +2011-11-29 20:18:37.366,134.7419433594,-159.4977442151,0.2006050795,-55.5479989913,202.3203735352,80.3033468644,50.0033988953,0.00027976,11.7751083374,108.9130554199 +2011-11-29 20:18:37.400,134.7505950928,-159.5181938014,0.0473733544,102.7836509325,202.3843994141,80.2943515052,50.0033950806,-0.0001525786,11.7630233765,108.9026565552 +2011-11-29 20:18:37.433,134.68309021,-159.4739341756,0.125001654,76.330724428,202.2720794678,80.3492184148,50.0033950806,-2.5453045964241E-05,11.7725753784,108.9065246582 +2011-11-29 20:18:37.466,134.692565918,-159.3879284336,0.1253381819,-5.8748173136,202.2184143066,80.4303132508,50.0033874512,-0.0002034428,11.7545166016,108.9058532715 +2011-11-29 20:18:37.500,134.7101593018,-159.3577663182,0.1691512465,-53.059556171,202.2173461914,80.4616774795,50.0033950806,7.62892886996269E-05,11.7729797363,108.9157104492 +2011-11-29 20:18:37.533,134.6652069092,-159.3660445075,0.0715622306,-9.4208363797,202.1908416748,80.4571354037,50.0033912659,-0.0001525786,11.7705917358,108.9088287354 +2011-11-29 20:18:37.566,134.7009124756,-159.3275768821,0.0336652063,-32.8383610765,202.2059173584,80.4896744249,50.0033836365,0,11.7841186523,108.9185333252 +2011-11-29 20:18:37.600,134.772277832,-159.2610508396,0.1639339775,-116.0894331715,202.3365325928,80.5723743554,50.0033760071,-0.0003560493,11.7776107788,108.9149017334 +2011-11-29 20:18:37.633,134.8306121826,-159.2266540069,0.2428865582,-127.2831979758,202.4151153564,80.6133623206,50.0033760071,0,11.7585601807,108.9130630493 +2011-11-29 20:18:37.666,134.7405090332,-159.1824080415,0.1089276671,-134.9217127134,202.1821594238,80.6715008908,50.0033721924,0,11.761428833,108.9050140381 +2011-11-29 20:18:37.700,134.650100708,-159.1131089421,0.0590605699,138.2746252562,202.0925750732,80.720288932,50.0033683777,-0.0001271674,11.7725296021,108.9109115601 +2011-11-29 20:18:37.733,134.628692627,-159.0514733151,0.0676034763,18.4066938697,202.1913299561,80.731442631,50.0033874512,0.0008392381,11.7725067139,108.9236450195 +2011-11-29 20:18:37.766,134.6715545654,-159.0046591985,0.1007048339,-54.5512285046,202.2430419922,80.7881946728,50.00340271,0.0003051711,11.7372665405,108.8796157837 +2011-11-29 20:18:37.800,134.72265625,-158.9824884045,0.0652759075,-150.5314133821,202.2202758789,80.869262188,50.0034103394,0.0002034567,11.7655715942,108.9155883789 +2011-11-29 20:18:37.833,134.7367095947,-158.9654948938,0.0941890255,126.293175716,202.139541626,80.9269909469,50.0034065247,-0.0002034567,11.7664413452,108.9113464355 +2011-11-29 20:18:37.866,134.6955566406,-158.8959089265,0.0290705077,-117.6435880757,202.1318969727,80.9903682722,50.00340271,-0.0002288958,11.7673721313,108.9281463623 +2011-11-29 20:18:37.900,134.7431030273,-158.82887745,0.182022512,-98.2686841552,202.3955383301,80.9798975922,50.0033988953,5.08502125740051E-05,11.7591552734,108.9013061523 +2011-11-29 20:18:37.933,134.7813415527,-158.7861341262,0.2146588415,-111.3263461123,202.4386291504,80.9822130263,50.00340271,7.63032585382462E-05,11.7832489014,108.9240570068 +2011-11-29 20:18:37.966,134.7178497314,-158.7483358593,0.1565297693,-123.1326696021,202.2177276611,81.0364515585,50.0033950806,-0.0003306242,11.774269104,108.9103469849 +2011-11-29 20:18:38.000,134.7046508789,-158.7357819716,0.1204173937,-152.4012049882,202.074005127,81.0763945048,50.0033912659,0,11.7748794556,108.9128570557 +2011-11-29 20:18:38.033,134.728515625,-158.7267661219,0.0827944055,-156.4432562975,202.0936279297,81.1311179804,50.0033950806,0.0001017144,11.7731628418,108.9204559326 +2011-11-29 20:18:38.066,134.7312316895,-158.6765778919,0.0359580554,-120.4416843522,202.1300506592,81.2006902873,50.0034065247,2.54390761256218E-05,11.7844161987,108.9239044189 +2011-11-29 20:18:38.100,134.7095947266,-158.6169776612,0.0839281008,-122.7589489715,202.1022644043,81.2320681764,50.0033988953,-0.0004323386,11.7828521729,108.9276885986 +2011-11-29 20:18:38.133,134.6962127686,-158.5820753945,0.1227663979,-149.6268914303,202.0832977295,81.2369585918,50.0033836365,-0.0005340669,11.7168655396,108.8934249878 +2011-11-29 20:18:38.166,134.743637085,-158.5575823362,0.093999818,-173.0224203567,202.1764221191,81.2556391592,50.0033760071,0.000279746,11.7818908691,108.9241714478 +2011-11-29 20:18:38.200,134.7323303223,-158.5067793891,0.0411538556,33.8391477145,202.2415008545,81.300008068,50.0033950806,0.0002543349,11.7730102539,108.9110412598 +2011-11-29 20:18:38.233,134.7108154297,-158.4602248198,0.0644780174,92.9500909806,202.2968597412,81.346043543,50.0033836365,-0.0003560353,11.7816619873,108.9165725708 +2011-11-29 20:18:38.266,134.6897583008,-158.4359639878,0.1382803619,104.1747897117,202.3964538574,81.3940392823,50.0033874512,0.0004323386,11.7863998413,108.9233779907 +2011-11-29 20:18:38.300,134.7026672363,-158.3887263995,0.1475995779,82.8690732751,202.4562683105,81.4379505685,50.0033950806,1.39698386192322E-08,11.7680892944,108.9129638672 +2011-11-29 20:18:38.333,134.73046875,-158.3208206588,0.087883763,-8.6038048824,202.3672790527,81.4631812873,50.0033950806,7.63172283768654E-05,11.7674026489,108.9094085693 +2011-11-29 20:18:38.366,134.7516937256,-158.2729546931,0.1744945198,-67.4064607301,202.3070831299,81.4721493257,50.0033950806,0,11.7838592529,108.9206008911 +2011-11-29 20:18:38.400,134.7576904297,-158.2378885019,0.2177632004,-96.7351495922,202.2839508057,81.5253291786,50.0033988953,0.0001525925,11.7718276978,108.9054412842 +2011-11-29 20:18:38.433,134.7113037109,-158.205144575,0.1205437854,-103.9325092414,202.2230682373,81.6069840901,50.00340271,2.54251062870026E-05,11.7805633545,108.9156646729 +2011-11-29 20:18:38.466,134.6243438721,-158.1599970246,0.0149959587,40.7574360795,202.1462097168,81.6647948112,50.0034065247,0,11.7702484131,108.9123001099 +2011-11-29 20:18:38.500,134.6171722412,-158.1220211728,0.0637553558,69.9287744585,202.1313476563,81.7290737215,50.00340271,-0.0002288539,11.7621154785,108.9034576416 +2011-11-29 20:18:38.533,134.7271881104,-158.1178137763,0.0565765575,100.9877209921,202.222076416,81.7378231938,50.0033912659,-0.0002034567,11.7664794922,108.9010925293 +2011-11-29 20:18:38.566,134.7572021484,-158.0876106798,0.0471885093,21.0792546844,202.2964477539,81.7408899488,50.0033950806,2.54251062870026E-05,11.7771377563,108.8993301392 +2011-11-29 20:18:38.600,134.7246856689,-158.0210163354,0.0784630924,-90.352706643,202.2476501465,81.7857506312,50.0033950806,0,11.7776412964,108.9073562622 +2011-11-29 20:18:38.633,134.7450561523,-157.9572906704,0.1652958095,-112.8724823743,202.1917266846,81.8580003723,50.0033912659,0,11.7563247681,108.9095840454 +2011-11-29 20:18:38.666,134.7016601563,-157.9374694614,0.0402029455,-108.1286564486,202.2358093262,81.9104767157,50.0033836365,-0.0004323106,11.7742919922,108.9198532104 +2011-11-29 20:18:38.700,134.5825042725,-157.9276886305,0.2119918466,33.4225574015,202.2510986328,81.9337335098,50.0033912659,0.0002543069,11.7663116455,108.9172363281 +2011-11-29 20:18:38.733,134.5727081299,-157.9142468183,0.1915941983,41.4770306595,202.1038360596,81.9480837372,50.0033912659,5.08781522512436E-05,11.7563323975,108.8990478516 +2011-11-29 20:18:38.766,134.6298980713,-157.8750551928,0.0654268712,115.5541649067,202.0010681152,81.9685128331,50.0033988953,0.0001780037,11.7688598633,108.9119567871 +2011-11-29 20:18:38.800,134.6527252197,-157.814116245,0.0863623098,108.5584665927,202.1622161865,82.0295132525,50.0034141541,0.000559492,11.7751083374,108.9134750366 +2011-11-29 20:18:38.833,134.6612243652,-157.7449127684,0.1515554488,44.9151498122,202.3025054932,82.0915655211,50.0034141541,0,11.7694702148,108.9157485962 +2011-11-29 20:18:38.866,134.6530303955,-157.6909406135,0.1743898243,13.4230582947,202.3125457764,82.1475525818,50.0034103394,-0.0003814744,11.7750473022,108.9157714844 +2011-11-29 20:18:38.900,134.674911499,-157.6383481569,0.1927174181,3.3674721582,202.4317779541,82.1814166597,50.0033912659,-0.0005086139,11.7637405396,108.8886947632 +2011-11-29 20:18:38.933,134.7459869385,-157.5915340404,0.0571935177,27.1515336207,202.4242706299,82.2226641721,50.003364563,-0.0009663776,11.7910690308,108.9139709473 +2011-11-29 20:18:38.966,134.7545928955,-157.5647596988,0.0960649326,-135.0578110628,202.3026123047,82.254868514,50.003364563,0,11.7750473022,108.9122009277 +2011-11-29 20:18:39.000,134.7261657715,-157.5515637733,0.0560979135,-131.9567549154,202.2404632568,82.2638775335,50.0033912659,0.001373291,11.7956161499,108.9255752563 +2011-11-29 20:18:39.033,134.674118042,-157.5040666378,0.0551699549,-29.2821855191,202.152633667,82.3139291598,50.0033912659,-0.0004831888,11.7804641724,108.9166183472 +2011-11-29 20:18:39.066,134.6964111328,-157.435833048,0.0900994614,-116.394728967,202.1481781006,82.3764663718,50.0033912659,0.0004069135,11.7779846191,108.911239624 +2011-11-29 20:18:39.100,134.7173309326,-157.3651132694,0.1511427164,-86.2146911759,202.2864837646,82.4174270163,50.0034217834,0.0010426668,11.7788238525,108.9156494141 +2011-11-29 20:18:39.133,134.7283935547,-157.3729406662,0.0786082298,-25.4200909114,202.4187774658,82.4066284872,50.0034179688,-0.0007629488,11.7831420898,108.9188766479 +2011-11-29 20:18:39.166,134.7352294922,-157.3929804412,0.1845038235,91.167404777,202.4317016602,82.4202069032,50.0033912659,-0.0009409664,11.7730026245,108.9121246338 +2011-11-29 20:18:39.200,134.6986999512,-157.3280526629,0.171293065,123.1363442439,202.277053833,82.4871769081,50.0033760071,-0.0001525925,11.7850646973,108.9112167358 +2011-11-29 20:18:39.233,134.6657409668,-157.2376346187,0.0727209374,-116.7709631073,202.0845947266,82.5439835914,50.0033912659,0.0006612064,11.7610549927,108.9106903076 +2011-11-29 20:18:39.266,134.6753692627,-157.2030602011,0.0426415615,-134.678380394,202.0566253662,82.5890901607,50.0033874512,-0.000559506,11.7677612305,108.9033889771 +2011-11-29 20:18:39.300,134.7642364502,-157.1834985393,0.2124240398,142.1624918751,202.23387146,82.624559333,50.0033683777,-0.000559492,11.7911682129,108.9246673584 +2011-11-29 20:18:39.333,134.7706298828,-157.136151668,0.1887208372,127.0139519187,202.279083252,82.6907985076,50.0033721924,0.000559506,11.7480697632,108.903137207 +2011-11-29 20:18:39.366,134.7398071289,-157.100443439,0.1037463397,128.0675085982,202.2068023682,82.7639771544,50.0033950806,0.0006612064,11.7503585815,108.9021148682 +2011-11-29 20:18:39.400,134.8003845215,-157.0600633607,0.0911201984,177.6355847636,202.2670135498,82.8036468931,50.00340271,-0.0001017423,11.7537765503,108.9038696289 +2011-11-29 20:18:39.433,134.8237762451,-157.0155305273,0.1137414277,178.264604205,202.2506866455,82.8393141409,50.0034103394,0.0004323386,11.76537323,108.9154434204 +2011-11-29 20:18:39.466,134.7436218262,-156.9849859213,0.1817761362,125.3056259847,202.2383117676,82.8590738782,50.0034179688,0,11.7873687744,108.9196929932 +2011-11-29 20:18:39.500,134.6875915527,-156.9540998059,0.2754449844,98.6791921847,202.3603210449,82.8837376913,50.00340271,-0.000813799,11.8016204834,108.9375610352 +2011-11-29 20:18:39.533,134.7150268555,-156.907094444,0.1875057966,94.6058312882,202.3509063721,82.939041733,50.0033874512,-0.0001017144,11.7657699585,108.92578125 +2011-11-29 20:18:39.566,134.7206115723,-156.8527261382,0.0496733226,130.5454192668,202.1530151367,83.0002265676,50.0033912659,-5.08502125740051E-05,11.7868423462,108.9227752686 +2011-11-29 20:18:39.600,134.6899261475,-156.7805310387,0.0800142661,-157.2343151468,202.146774292,83.0648811382,50.0033836365,-0.0001525925,11.7833862305,108.9223937988 +2011-11-29 20:18:39.633,134.6804656982,-156.7481422816,0.0436520539,-167.1708880117,202.2189941406,83.0811028375,50.0033912659,0.0005849171,11.7750091553,108.9070129395 +2011-11-29 20:18:39.666,134.6875,-156.7390854508,0.0469127484,150.3639508041,202.1802215576,83.1013270277,50.00340271,0.0001780177,11.7559661865,108.9021759033 +2011-11-29 20:18:39.700,134.7135009766,-156.6800316352,0.0156053193,9.037426272,202.2780303955,83.1421305778,50.0034103394,0.0002034567,11.7828598022,108.9216537476 +2011-11-29 20:18:39.733,134.7740783691,-156.6181228006,0.0978960171,-29.6287083364,202.3872833252,83.1847987695,50.0034141541,-1.39698386192322E-08,11.7762451172,108.9254455566 +2011-11-29 20:18:39.766,134.7691497803,-156.5744369107,0.0548111536,-85.9410806279,202.3369903564,83.2500475666,50.0033988953,-0.0008392241,11.7494049072,108.9102630615 +2011-11-29 20:18:39.800,134.7658996582,-156.5336333606,0.1665652096,-121.7189980289,202.3106536865,83.2827095313,50.0033912659,0.0003306102,11.7788467407,108.927116394 +2011-11-29 20:18:39.833,134.7778930664,-156.4981027165,0.1322962046,-120.7963760758,202.3412322998,83.338375573,50.0034065247,0.0003814604,11.7773361206,108.914855957 +2011-11-29 20:18:39.866,134.7375030518,-156.4679952426,0.0602958016,149.0470630113,202.2129669189,83.3999224076,50.0034217834,0.0004831888,11.7903671265,108.9311981201 +2011-11-29 20:18:39.900,134.7284088135,-156.4727353939,0.1376226693,121.414412573,202.1714019775,83.3771232362,50.0034332275,0.0004577637,11.7649993896,108.9094924927 +2011-11-29 20:18:39.933,134.6734924316,-156.4476822601,0.1248818338,90.5577694125,202.1211090088,83.3786053872,50.0034332275,0,11.7777404785,108.9141235352 +2011-11-29 20:18:39.966,134.6500091553,-156.3704601413,0.0978360698,66.8289818962,202.090713501,83.4726502619,50.0034065247,-0.0010681059,11.7799835205,108.9339141846 +2011-11-29 20:18:40.000,134.6811218262,-156.2952734189,0.0485065766,-65.8217338993,202.097946167,83.5451595501,50.0033760071,-0.0008392381,11.7743148804,108.9165725708 +2011-11-29 20:18:40.033,134.6671142578,-156.2548933405,0.0945940614,-85.9574525914,201.9947357178,83.5786889487,50.0033760071,0,11.7837295532,108.9153594971 +2011-11-29 20:18:40.066,134.6767272949,-156.2264114517,0.0760143772,-122.9851238557,202.0511779785,83.6182630648,50.0033721924,7.62892886996269E-05,11.7677993774,108.921081543 +2011-11-29 20:18:40.100,134.7007293701,-156.1886131848,0.0964606404,-177.6168700453,202.2456207275,83.6621197095,50.0033836365,7.63032585382462E-05,11.7396697998,108.8919754028 +2011-11-29 20:18:40.133,134.7051696777,-156.1577953713,0.1002500206,137.3080032244,202.2971954346,83.6709443139,50.0033874512,0.0001525786,11.7814102173,108.915184021 +2011-11-29 20:18:40.166,134.723815918,-156.1213768026,0.0971610099,107.7021999274,202.2568206787,83.7135305433,50.0033912659,7.62892886996269E-05,11.7785263062,108.905960083 +2011-11-29 20:18:40.200,134.7310180664,-156.055315213,0.0983870849,101.9259772482,202.2744445801,83.8033611913,50.0033874512,-0.0002034567,11.7856521606,108.915687561 +2011-11-29 20:18:40.233,134.7640838623,-155.9978050202,0.029127432,65.4048464731,202.3522796631,83.8383112693,50.0033836365,0.0001271674,11.7587432861,108.91355896 +2011-11-29 20:18:40.266,134.7327728271,-155.9704979239,0.0970433131,52.886646517,202.3075714111,83.8396431562,50.0033874512,7.62892886996269E-05,11.7740020752,108.9220581055 +2011-11-29 20:18:40.300,134.6737060547,-155.9431088653,0.132908076,124.801885873,202.0939178467,83.8827962914,50.0034065247,0.0007883599,11.7727966309,108.9197692871 +2011-11-29 20:18:40.333,134.7059783936,-155.9017998812,0.1692603081,-174.098393717,202.0995483398,83.9541239569,50.0034179688,0.0001780316,11.7861633301,108.9252319336 +2011-11-29 20:18:40.366,134.7266235352,-155.8705312752,0.0645465702,176.7844748911,202.229309082,83.981028072,50.0034065247,-0.0003814884,11.7903442383,108.9161376953 +2011-11-29 20:18:40.400,134.7720947266,-155.8154526297,0.0320686214,128.8237608035,202.3261871338,84.0177608294,50.00340271,2.54251062870026E-05,11.7646179199,108.907081604 +2011-11-29 20:18:40.433,134.8078613281,-155.7493363986,0.0544594228,-102.8403688233,202.3780212402,84.0738844938,50.00340271,0,11.7628326416,108.9018707275 +2011-11-29 20:18:40.466,134.8226623535,-155.692522885,0.1777125746,-119.8518428758,202.4632263184,84.1079944585,50.0033836365,-0.0008646632,11.7680435181,108.9225158691 +2011-11-29 20:18:40.500,134.868270874,-155.6822776013,0.2303971797,-149.2662711025,202.4543457031,84.1157877043,50.0033836365,0,11.7668991089,108.9110183716 +2011-11-29 20:18:40.533,134.7557678223,-155.7142975281,0.0791226104,134.8319640277,202.2174224854,84.119496497,50.0033721924,-0.0005086139,11.7692565918,108.9091186523 +2011-11-29 20:18:40.566,134.687789917,-155.6771549594,0.0825629681,87.5782223305,202.2333984375,84.1719455197,50.0033569336,-0.0005340669,11.765411377,108.9067840576 +2011-11-29 20:18:40.600,134.6926422119,-155.5887040097,0.0735448301,-165.2445560997,202.3746490479,84.2378978263,50.0033721924,0.0010681199,11.7420501709,108.8954086304 +2011-11-29 20:18:40.633,134.6954345703,-155.5157029478,0.1475223601,-110.8027916219,202.2942047119,84.2798078671,50.0033988953,0.0004831888,11.7639923096,108.9195480347 +2011-11-29 20:18:40.666,134.7453765869,-155.4357624138,0.226041913,-97.3577964671,202.2542419434,84.3361569277,50.0033721924,-0.0009918027,11.7661361694,108.9237365723 +2011-11-29 20:18:40.700,134.8535003662,-155.3952320712,0.2754724324,-130.9805706189,202.3320465088,84.3935646677,50.0033683777,0.0005086279,11.7669830322,108.9008026123 +2011-11-29 20:18:40.733,134.8515167236,-155.4197797711,0.196094051,-150.4482606607,202.3654022217,84.4061117252,50.0033950806,0.0008646632,11.7632293701,108.9108657837 +2011-11-29 20:18:40.766,134.7228546143,-155.4005459584,0.0909693167,137.4862165203,202.2662658691,84.4436162939,50.0034065247,5.08502125740051E-05,11.78465271,108.9261474609 +2011-11-29 20:18:40.800,134.6081085205,-155.3280639909,0.0676980987,23.359267452,202.1061553955,84.4978411657,50.0034065247,-0.0002543209,11.7691726685,108.9225921631 +2011-11-29 20:18:40.833,134.594909668,-155.2589424765,0.2618276179,-10.3301198272,202.0442199707,84.5345466023,50.0034065247,0.0002543209,11.7692489624,108.9112319946 +2011-11-29 20:18:40.866,134.6648254395,-155.2196005869,0.2542935014,-10.3349154737,202.1622161865,84.5755209072,50.0034179688,0.000279746,11.7569046021,108.9038391113 +2011-11-29 20:18:40.900,134.7518005371,-155.1900805093,0.0644170046,-145.8374888184,202.4243164063,84.6149515892,50.0034065247,-0.0004323246,11.7850952148,108.9338378906 +2011-11-29 20:18:40.933,134.7995605469,-155.1526237519,0.1554074436,-179.1590721183,202.5410308838,84.6619228002,50.0033836365,-0.0004831888,11.7955932617,108.9221725464 +2011-11-29 20:18:40.966,134.7221069336,-155.1017934841,0.0459256545,75.5766237323,202.4159698486,84.694666727,50.0033721924,-0.0002034567,11.7700958252,108.9072265625 +2011-11-29 20:18:41.000,134.6624450684,-155.0675469156,0.1439167112,114.9695553552,202.2284240723,84.7653933359,50.0033874512,0.000279732,11.7663116455,108.9047851563 +2011-11-29 20:18:41.033,134.7215118408,-155.0492146879,0.2483582795,145.5017030585,202.1583099365,84.8153083584,50.0033874512,2.5453045964241E-05,11.7766113281,108.9142837524 +2011-11-29 20:18:41.066,134.755645752,-155.027303441,0.097258985,155.997149322,202.211517334,84.7928165454,50.0033950806,0.0003814744,11.7636108398,108.9150314331 +2011-11-29 20:18:41.100,134.7515411377,-154.9678124933,0.024211362,-88.9067555957,202.3748321533,84.799626244,50.0034141541,0.0006357674,11.7720565796,108.9140548706 +2011-11-29 20:18:41.133,134.7322692871,-154.9452045672,0.1179030389,105.3342074931,202.3914337158,84.8448625869,50.0034217834,0,11.7910003662,108.9355010986 +2011-11-29 20:18:41.166,134.7382659912,-154.9437429067,0.2110021859,111.4015464951,202.3725585938,84.8786788535,50.0034065247,-0.0006866455,11.8018112183,108.9446105957 +2011-11-29 20:18:41.200,134.6704101563,-154.8617123348,0.1362928599,69.1090697959,202.3252563477,84.9365510463,50.0033950806,-7.62753188610077E-05,11.7819366455,108.9292221069 +2011-11-29 20:18:41.233,134.6262512207,-154.7834930084,0.1864733398,18.2179791581,202.2193145752,85.0082953534,50.0033874512,-0.0004323386,11.7785720825,108.9214553833 +2011-11-29 20:18:41.266,134.6722717285,-154.7525659118,0.1370951384,13.4818423178,202.2602233887,85.0344208269,50.0033798218,0,11.7962799072,108.9330368042 +2011-11-29 20:18:41.300,134.7080383301,-154.7372662881,0.0598000363,20.5850324414,202.3056335449,85.0366816195,50.0033874512,0.0004323386,11.7690429688,108.9185943604 +2011-11-29 20:18:41.333,134.7066955566,-154.6827203974,0.1445643604,-25.6916250819,202.2525939941,85.0952095105,50.00340271,0,11.7643814087,108.9058074951 +2011-11-29 20:18:41.366,134.6741790771,-154.6128202414,0.2068198174,-16.8185263311,202.2876434326,85.1790978939,50.0033912659,-0.0005086279,11.7678985596,108.9100494385 +2011-11-29 20:18:41.400,134.6716003418,-154.5658012192,0.1243391708,-23.2250815556,202.2881622314,85.2365192943,50.0033798218,7.63032585382462E-05,11.7673950195,108.9071044922 +2011-11-29 20:18:41.433,134.7057342529,-154.5413764627,0.1134059578,-78.3659432157,202.2781219482,85.2838729958,50.0033874512,0.0002288818,11.7863616943,108.9109191895 +2011-11-29 20:18:41.466,134.7790222168,-154.4988790257,0.1926959902,-106.1858159694,202.3787231445,85.3162549227,50.0033874512,0,11.7692871094,108.9065170288 +2011-11-29 20:18:41.500,134.7562561035,-154.4582940416,0.1238667741,-128.5303631975,202.3886413574,85.3598930013,50.0033683777,-0.0006357813,11.7668304443,108.925201416 +2011-11-29 20:18:41.533,134.7096252441,-154.4169167556,0.0497312769,4.1587177705,202.3314666748,85.4076565141,50.0033683777,0,11.7526092529,108.9104309082 +2011-11-29 20:18:41.566,134.7501068115,-154.3930384143,0.0602616258,75.7403092157,202.2909698486,85.4410902901,50.0033912659,0.0008646492,11.7629241943,108.9104156494 +2011-11-29 20:18:41.600,134.7784881592,-154.3681628654,0.1330206692,156.3733834623,202.271774292,85.499071766,50.0034103394,0.0003560213,11.7723999023,108.9222412109 +2011-11-29 20:18:41.633,134.7330169678,-154.321321428,0.0758437738,164.9866071755,202.2585296631,85.535503995,50.0033988953,-0.0006866455,11.7752456665,108.9170608521 +2011-11-29 20:18:41.666,134.7467346191,-154.2489760643,0.1045479998,-120.1841179186,202.3195037842,85.5762597338,50.0033798218,-0.0001780037,11.7905654907,108.9289321899 +2011-11-29 20:18:41.700,134.7456665039,-154.200509042,0.160201624,-96.9351443613,202.2417907715,85.6271992846,50.0033950806,0.0006103422,11.7789001465,108.9252090454 +2011-11-29 20:18:41.733,134.7665557861,-154.1642270771,0.1503203213,-72.7429694909,202.346786499,85.656965249,50.0033950806,-0.0005086418,11.7685241699,108.9113006592 +2011-11-29 20:18:41.766,134.7881469727,-154.1156644321,0.132433638,-43.6976856681,202.5795135498,85.6803108356,50.0033760071,-2.5453045964241E-05,11.7709274292,108.9076385498 +2011-11-29 20:18:41.800,134.7022247314,-154.0833029958,0.1331664026,-9.2212616673,202.4610290527,85.732281745,50.0033798218,7.62892886996269E-05,11.7869644165,108.9273300171 +2011-11-29 20:18:41.833,134.6435089111,-154.0564740128,0.0073276451,6.5755635597,202.2114257813,85.7742942386,50.00340271,0.000279746,11.7691497803,108.9097290039 +2011-11-29 20:18:41.866,134.6224365234,-154.013443821,0.1199463829,84.6434949498,202.1355285645,85.8233486572,50.0034065247,0.0002034567,11.7810745239,108.9196853638 +2011-11-29 20:18:41.900,134.6667175293,-153.9612884965,0.1940672547,64.8146771477,202.2714080811,85.8798206613,50.0034103394,5.08641824126244E-05,11.792175293,108.9354400635 +2011-11-29 20:18:41.933,134.7656707764,-153.9125755873,0.1228558719,19.3303608418,202.4282226563,85.9320442877,50.0034065247,-7.62753188610077E-05,11.7689590454,108.909614563 +2011-11-29 20:18:41.966,134.8261108398,-153.8678924898,0.168599695,-52.5819005517,202.5654449463,85.97473297,50.0033950806,-0.0004068995,11.7891616821,108.9218597412 +2011-11-29 20:18:42.000,134.7808380127,-153.841145469,0.1176332161,-76.8727614103,202.4199829102,85.9957016507,50.0033912659,5.08641824126244E-05,11.7780303955,108.915763855 +2011-11-29 20:18:42.033,134.7581939697,-153.810600863,0.0610621236,-139.47854172,202.2053527832,86.0270453888,50.0033950806,7.62753188610077E-05,11.7815322876,108.9165496826 +2011-11-29 20:18:42.066,134.7676086426,-153.7704256903,0.1081344038,-84.3041574914,202.3021697998,86.0426796918,50.0033798218,-0.0003814744,11.7822341919,108.9270477295 +2011-11-29 20:18:42.100,134.8624572754,-153.7254693852,0.2114848644,-116.0299422239,202.5532073975,86.0673161842,50.0033760071,5.08502125740051E-05,11.7855606079,108.9287185669 +2011-11-29 20:18:42.133,134.8675079346,-153.7016047043,0.1913362443,-139.4024534127,202.4571228027,86.1080514324,50.0033950806,0.0005594781,11.7536087036,108.9038467407 +2011-11-29 20:18:42.166,134.7385559082,-153.6649675695,0.101163581,-141.8349843044,202.18019104,86.1672077008,50.00340271,0,11.7698516846,108.928894043 +2011-11-29 20:18:42.200,134.7018585205,-153.5914747341,0.2044645995,-123.3694586003,202.1836547852,86.2271426107,50.0033950806,-0.000279746,11.7713928223,108.9223861694 +2011-11-29 20:18:42.233,134.7814331055,-153.5289511824,0.3035290241,-120.5370201326,202.383102417,86.2517722729,50.0033988953,7.62892886996269E-05,11.7964019775,108.9220123291 +2011-11-29 20:18:42.266,134.8200836182,-153.496658048,0.2331630886,-109.9243063512,202.5321807861,86.2794277088,50.0033988953,0,11.7711715698,108.9158782959 +2011-11-29 20:18:42.300,134.7299346924,-153.4931883119,0.0373257846,-58.8474755491,202.4102783203,86.3299232974,50.0033798218,-0.0004323665,11.808013916,108.9254150391 +2011-11-29 20:18:42.333,134.6224517822,-153.4616601587,0.1619272977,75.354417188,202.076675415,86.3876725468,50.0033798218,0,11.802192688,108.9336166382 +2011-11-29 20:18:42.366,134.6728668213,-153.4046827207,0.1101614684,109.5622448535,202.0001983643,86.4571424009,50.0033874512,0.000559506,11.7839813232,108.9097900391 +2011-11-29 20:18:42.400,134.7679290771,-153.3525137358,0.078026861,-130.9792319018,202.2978973389,86.4927618374,50.0033988953,-0.0001017284,11.7793960571,108.9228439331 +2011-11-29 20:18:42.433,134.7493133545,-153.3302883002,0.1194841638,-73.5409951332,202.3692169189,86.493868328,50.0033988953,1.39698386192322E-08,11.7874908447,108.9253997803 +2011-11-29 20:18:42.466,134.7184448242,-153.3082267892,0.183031559,-76.2950981613,202.3005981445,86.503362291,50.0033950806,0.0003051572,11.7512893677,108.9144439697 +2011-11-29 20:18:42.500,134.6681060791,-153.257997578,0.1059410796,-76.4185606607,202.3044433594,86.5516244076,50.0033988953,-0.0002034567,11.7945175171,108.924911499 +2011-11-29 20:18:42.533,134.7147521973,-153.1920452714,0.0842255726,-103.3736290126,202.3193511963,86.6219138844,50.0033683777,-0.0009918166,11.7769699097,108.91015625 +2011-11-29 20:18:42.566,134.7369537354,-153.1373217958,0.1040268168,-109.6229037635,202.246383667,86.7046479658,50.0033607483,0.0002034288,11.7813415527,108.9281921387 +2011-11-29 20:18:42.600,134.6891479492,-153.1115036807,0.0805980414,-57.8495780812,202.2533111572,86.7226045331,50.0033760071,0.0003305962,11.7647857666,108.9031677246 +2011-11-29 20:18:42.633,134.7186431885,-153.1092087372,0.1012736261,-86.2105179303,202.2967834473,86.6902977384,50.0033912659,0.0004323106,11.7718811035,108.9115600586 +2011-11-29 20:18:42.666,134.7843780518,-153.0306752221,0.1858794093,-129.9743744711,202.3423461914,86.7757775558,50.0033912659,7.63032585382462E-05,11.775428772,108.9178924561 +2011-11-29 20:18:42.700,134.7904663086,-152.942429178,0.0958134085,-135.8574486296,202.3694458008,86.8990214892,50.0034103394,0.0003814744,11.7494277954,108.9124679565 +2011-11-29 20:18:42.733,134.6834869385,-152.9268836675,0.0624641702,24.2386918737,202.1978302002,86.9267179063,50.0034179688,0.000279732,11.7865753174,108.9280548096 +2011-11-29 20:18:42.766,134.6974487305,-152.9419100836,0.067499727,162.075102438,202.1490783691,86.9135424714,50.0034217834,1.39698386192322E-08,11.7759017944,108.9108657837 +2011-11-29 20:18:42.800,134.8069458008,-152.8864626079,0.2150471509,-166.9105212005,202.3898162842,86.9500908136,50.0034141541,-0.0004323246,11.798614502,108.9273223877 +2011-11-29 20:18:42.833,134.81300354,-152.8099098477,0.0876007527,-75.6985767599,202.560256958,86.9883876843,50.0033988953,-0.0006103562,11.7689056396,108.9300003052 +2011-11-29 20:18:42.866,134.7479248047,-152.7872062989,0.2181064337,-28.4030701635,202.392074585,86.9891458353,50.0033836365,-0.0004323386,11.7557373047,108.9005203247 +2011-11-29 20:18:42.900,134.7347869873,-152.7431515788,0.1024229825,-75.5003783306,202.35546875,87.0294166307,50.0033798218,-0.0001525925,11.7905960083,108.9244995117 +2011-11-29 20:18:42.933,134.7722930908,-152.6902176127,0.1747537702,-147.7518815598,202.4282836914,87.0967486355,50.0033760071,-7.63032585382462E-05,11.8031539917,108.9366455078 +2011-11-29 20:18:42.966,134.763458252,-152.650547874,0.1360649914,-118.5859629358,202.3986206055,87.1676186783,50.0033798218,0.0002288818,11.7508468628,108.9097137451 +2011-11-29 20:18:43.000,134.7554016113,-152.6444690057,0.118851617,-115.0652736262,202.3354644775,87.2068786057,50.0033874512,0.0003306242,11.7524871826,108.9007873535 +2011-11-29 20:18:43.033,134.7252349854,-152.634770137,0.1285763085,131.5047739773,202.2749633789,87.2315765697,50.0033874512,1.39698386192322E-08,11.7874908447,108.9216461182 +2011-11-29 20:18:43.066,134.7059783936,-152.5827104352,0.1675840616,102.6442740922,202.2278289795,87.247292835,50.0033798218,-0.0003051711,11.7684020996,108.9022903442 +2011-11-29 20:18:43.100,134.65965271,-152.5340931487,0.071462974,40.0038954593,202.2253265381,87.2577976659,50.0033760071,0.0001271395,11.7506484985,108.909614563 +2011-11-29 20:18:43.133,134.69090271,-152.4964724667,0.0852345079,58.307432982,202.2906799316,87.2958418196,50.0033836365,0.0001780037,11.775390625,108.9304504395 +2011-11-29 20:18:43.166,134.7795257568,-152.4432516327,0.1178958565,112.6049165438,202.3601226807,87.3847708826,50.00340271,0.0007120846,11.7657775879,108.9189376831 +2011-11-29 20:18:43.200,134.8017730713,-152.3818755528,0.1506919265,-173.9460121966,202.3481140137,87.4837266633,50.00340271,-0.0003306102,11.7623748779,108.9036102295 +2011-11-29 20:18:43.233,134.7667999268,-152.3363045307,0.225970611,-153.1851604407,202.3450927734,87.5157602505,50.00340271,0.0001017423,11.7944869995,108.9120788574 +2011-11-29 20:18:43.266,134.7314453125,-152.3020443018,0.2101606131,-161.7488516221,202.2988128662,87.5512977248,50.0034179688,0.0003051851,11.7625808716,108.9077682495 +2011-11-29 20:18:43.300,134.7435455322,-152.2748464885,0.19272089,171.3453357079,202.3381652832,87.6140876538,50.0034065247,-0.0002543209,11.7669677734,108.9128723145 +2011-11-29 20:18:43.333,134.7812805176,-152.2483316942,0.1476919949,164.7460205922,202.372177124,87.6291072398,50.00340271,-0.0002288818,11.7666473389,108.9106063843 +2011-11-29 20:18:43.366,134.746383667,-152.1903433881,0.0873135179,-83.458429808,202.2980041504,87.6393525235,50.00340271,0,11.7926712036,108.9352798462 +2011-11-29 20:18:43.400,134.7128601074,-152.1383793089,0.2168589234,-77.1296653156,202.3057403564,87.6750812431,50.0034103394,0.0004577637,11.7658920288,108.9100570679 +2011-11-29 20:18:43.433,134.7460021973,-152.0997340986,0.1948777139,-90.5612391486,202.3621826172,87.6989937354,50.0034065247,-0.0003560493,11.7437667847,108.9025192261 +2011-11-29 20:18:43.466,134.7021331787,-152.0867020977,0.0112930275,46.8075083632,202.3208007813,87.7260139637,50.0033836365,-0.0007883878,11.7909240723,108.9377441406 +2011-11-29 20:18:43.500,134.5964508057,-152.0556383973,0.1639538705,52.485939809,202.1834411621,87.7848150623,50.003364563,-0.0003560493,11.7865142822,108.9313812256 +2011-11-29 20:18:43.533,134.6204833984,-151.9950546194,0.1416492015,-7.5464104903,202.0970306396,87.837339217,50.0033760071,0.0006103562,11.7742004395,108.915397644 +2011-11-29 20:18:43.566,134.7360076904,-151.9255642748,0.1068310291,-109.7495081499,202.1527557373,87.9005457876,50.0033912659,0.0001525786,11.7680053711,108.9146270752 +2011-11-29 20:18:43.600,134.7833862305,-151.8789687242,0.1684230864,-169.8733069983,202.2683563232,87.9640597167,50.0033760071,-0.0005086279,11.7859191895,108.9189300537 +2011-11-29 20:18:43.633,134.7754058838,-151.8759497806,0.1104474589,157.1154561948,202.2754364014,87.9607402447,50.0033836365,0.000534053,11.7408676147,108.8938446045 +2011-11-29 20:18:43.666,134.7388458252,-151.835993174,0.0816327929,142.2427192771,202.2074127197,87.9884503222,50.00340271,0.0005594781,11.762588501,108.9201507568 +2011-11-29 20:18:43.700,134.6904296875,-151.773783811,0.1040294245,173.8307732449,202.264465332,88.0458375716,50.0033988953,-0.0004577637,11.7603225708,108.9237365723 +2011-11-29 20:18:43.733,134.6193847656,-151.7248113547,0.1117637306,-86.6654631705,202.2624969482,88.0953564431,50.0033798218,-0.000534053,11.7786254883,108.92137146 +2011-11-29 20:18:43.766,134.5744476318,-151.6787348985,0.1515857428,-48.3743776645,202.1436157227,88.1504897301,50.0033874512,0.0005340669,11.7867660522,108.921257019 +2011-11-29 20:18:43.800,134.6831817627,-151.6442151225,0.1014171019,-175.2169464766,202.1700286865,88.2019278847,50.00340271,0.0002543209,11.7920455933,108.9167404175 +2011-11-29 20:18:43.833,134.7441864014,-151.6028514968,0.1419478357,146.0946317803,202.3056640625,88.2458938124,50.0033950806,-0.0003051711,11.7767105103,108.92527771 +2011-11-29 20:18:43.866,134.7205657959,-151.567074966,0.0547821969,94.2916152657,202.3064727783,88.2732350597,50.0034065247,0.0006358232,11.7594070435,108.9155731201 +2011-11-29 20:18:43.900,134.7177581787,-151.5152884717,0.1392075866,-18.0417466171,202.3805541992,88.2868407965,50.0034217834,0.0001525925,11.7779464722,108.9258422852 +2011-11-29 20:18:43.933,134.7096557617,-151.4799627333,0.1845961958,-17.5156103151,202.3767852783,88.3319951771,50.0034217834,-1.39698386192322E-08,11.7858276367,108.9328842163 +2011-11-29 20:18:43.966,134.7762145996,-151.4634473359,0.0804610997,-136.3500418726,202.3385925293,88.3706335572,50.0033874512,-0.0013224408,11.7760162354,108.9230575562 +2011-11-29 20:18:44.000,134.7941436768,-151.4450604666,0.1705620438,-157.2871534902,202.2035522461,88.3629017831,50.0033760071,5.08502125740051E-05,11.7528610229,108.8876113892 +2011-11-29 20:18:44.033,134.7136993408,-151.4021532183,0.0442956798,-1.0645358884,202.1844940186,88.3749502368,50.0033798218,0,11.7874984741,108.9204330444 +2011-11-29 20:18:44.066,134.7111358643,-151.3437687612,0.0739261806,-4.0665785186,202.1938171387,88.4531559028,50.0033721924,-0.0003560493,11.7830734253,108.9288330078 +2011-11-29 20:18:44.100,134.7422180176,-151.3116122306,0.0561677814,12.4307376762,202.2258911133,88.5107412277,50.0033798218,0.000534053,11.7649078369,108.9060974121 +2011-11-29 20:18:44.133,134.7281646729,-151.287938795,0.1143635586,43.9292495715,202.2843780518,88.533861418,50.0033988953,0.0007120706,11.7716217041,108.9180145264 +2011-11-29 20:18:44.166,134.7301330566,-151.2440889805,0.0454457663,-16.1575689251,202.3351135254,88.5614895332,50.00340271,-0.0002543069,11.7707214355,108.919052124 +2011-11-29 20:18:44.200,134.7536773682,-151.1968240714,0.0925513059,150.9045602769,202.3674926758,88.6230841791,50.0033836365,-0.0005086418,11.7929077148,108.918006897 +2011-11-29 20:18:44.233,134.7168273926,-151.1259813494,0.1645302474,123.7318411169,202.2472839355,88.7230303373,50.0033798218,0.000279732,11.7539749146,108.9025115967 +2011-11-29 20:18:44.266,134.7218170166,-151.0568188538,0.0870875046,90.5609386203,202.3177032471,88.7800760772,50.0033988953,0.0004832027,11.7665328979,108.9118881226 +2011-11-29 20:18:44.300,134.768081665,-151.0140891904,0.0917426348,9.1813212823,202.4943847656,88.7957308708,50.0033912659,-0.0004323386,11.7603378296,108.9161911011 +2011-11-29 20:18:44.333,134.7150726318,-151.018009719,0.132144779,15.2514879827,202.4049072266,88.8107914379,50.0033760071,-0.0003814884,11.7702636719,108.9178695679 +2011-11-29 20:18:44.366,134.5744476318,-151.0148951527,0.2021651864,45.7268938894,202.1295928955,88.8467250631,50.00340271,0.0009409525,11.7660217285,108.9187774658 +2011-11-29 20:18:44.400,134.5909729004,-150.9512377896,0.1213496327,44.3476840356,202.1221618652,88.891346689,50.0034065247,-0.0007120706,11.7686538696,108.9081192017 +2011-11-29 20:18:44.433,134.686920166,-150.8714475198,0.0281964988,149.0347550104,202.2240905762,88.9417056737,50.0033607483,-0.0012461375,11.787689209,108.9276199341 +2011-11-29 20:18:44.466,134.6960601807,-150.8412034421,0.1557296962,112.4627939675,202.2109832764,88.9854325448,50.0033760071,0.0011698343,11.7523117065,108.8995132446 +2011-11-29 20:18:44.500,134.6698608398,-150.8082409492,0.1204229817,95.0388447911,202.210647583,89.0100963579,50.0034217834,0.0012715766,11.7645339966,108.9227828979 +2011-11-29 20:18:44.533,134.6867218018,-150.7709890975,0.0973708779,-52.1593748044,202.1360626221,89.0317002462,50.0034103394,-0.0008392381,11.7549133301,108.8939361572 +2011-11-29 20:18:44.566,134.76222229,-150.7418651708,0.0759391934,-88.9733226194,202.2412261963,89.0796140233,50.0033836365,-0.0002288818,11.7802429199,108.9165344238 +2011-11-29 20:18:44.600,134.7519378662,-150.6811174684,0.1592244208,-156.0823627621,202.3314208984,89.1489882547,50.0033874512,0.0002034428,11.7536773682,108.8992843628 +2011-11-29 20:18:44.633,134.6801605225,-150.6392484087,0.1437509209,-143.4848028381,202.2668762207,89.174020898,50.0033874512,-0.0002543069,11.7488632202,108.8985671997 +2011-11-29 20:18:44.666,134.6676177979,-150.6150831995,0.0362857729,157.3157993036,202.2705383301,89.2146195424,50.0033760071,0,11.7865600586,108.9287567139 +2011-11-29 20:18:44.700,134.6898956299,-150.5788831969,0.0973593742,68.5785007011,202.3316040039,89.2621098477,50.0033798218,7.62753188610077E-05,11.762878418,108.9155578613 +2011-11-29 20:18:44.733,134.7665252686,-150.5485708173,0.0845773295,41.2632696441,202.3072509766,89.2860360003,50.00340271,0.0006866455,11.7973709106,108.9262542725 +2011-11-29 20:18:44.766,134.8052825928,-150.4941342096,0.086912781,-41.5930721584,202.3694000244,89.3231717389,50.0034103394,2.54251062870026E-05,11.7798156738,108.9229202271 +2011-11-29 20:18:44.800,134.776763916,-150.4320887712,0.0729341283,-90.3379192835,202.4706573486,89.395715178,50.0034103394,-1.39698386192322E-08,11.7773742676,108.9253311157 +2011-11-29 20:18:44.833,134.7384033203,-150.4167618267,0.0866294876,118.3630665424,202.3032684326,89.421854312,50.0033988953,-0.0001780177,11.7803192139,108.9196472168 +2011-11-29 20:18:44.866,134.7169647217,-150.3976236367,0.1200720519,83.8780424797,202.1879272461,89.4223870667,50.0033912659,-0.0003306102,11.778175354,108.9108886719 +2011-11-29 20:18:44.900,134.7059020996,-150.3390206136,0.1968485564,94.0327852471,202.3366851807,89.5111180543,50.0033798218,-0.0003560493,11.7824020386,108.9120635986 +2011-11-29 20:18:44.933,134.6353912354,-150.277439628,0.2543467581,80.7568304441,202.3519134521,89.6002725135,50.0033683777,-0.0003051711,11.7572937012,108.9188079834 +2011-11-29 20:18:44.966,134.577255249,-150.2192464163,0.0954119042,21.5723516538,202.188583374,89.6203942508,50.0033798218,0.0004068995,11.7618026733,108.9117584229 +2011-11-29 20:18:45.000,134.6401519775,-150.1467917696,0.2492560744,-59.781066786,202.2110290527,89.6561776118,50.0033874512,-0.0002543209,11.779045105,108.924369812 +2011-11-29 20:18:45.033,134.7345581055,-150.0971362943,0.1965187192,-78.2182950164,202.2691040039,89.7128545216,50.0033798218,2.54111364483833E-05,11.7844009399,108.907119751 +2011-11-29 20:18:45.066,134.7899780273,-150.0725066322,0.0747506246,-148.4260485516,202.4236907959,89.7317604852,50.0034103394,0.001093545,11.7841033936,108.911315918 +2011-11-29 20:18:45.100,134.7608642578,-150.0578490462,0.0931568071,143.286467805,202.4172058105,89.7424702218,50.0034255981,0,11.7735214233,108.9178314209 +2011-11-29 20:18:45.133,134.7211761475,-150.0255149307,0.0898812041,161.1285065209,202.2468414307,89.801906528,50.0033836365,-0.0015258836,11.7507705688,108.9143753052 +2011-11-29 20:18:45.166,134.6316070557,-149.9778402103,0.0124164009,8.8252191247,202.1706848145,89.8516166448,50.0033721924,0.0006866455,11.7552261353,108.9092025757 +2011-11-29 20:18:45.200,134.5969390869,-149.9415309246,0.1367984712,16.4385168038,202.3015899658,89.862818155,50.0034141541,0.0009663776,11.7680511475,108.9084472656 +2011-11-29 20:18:45.233,134.6768951416,-149.9002765821,0.187798664,7.6283565387,202.3805541992,89.8896539682,50.0034065247,-0.0004577497,11.7840805054,108.9152679443 +2011-11-29 20:18:45.266,134.712890625,-149.8470284273,0.0921579972,19.2010346249,202.3908843994,89.9814312201,50.0033950806,0,11.7730026245,108.9135894775 +2011-11-29 20:18:45.300,134.7002716064,-149.7970997445,0.0556700379,-178.1852100861,202.4139251709,90.0323434502,50.0033950806,0.0001017284,11.7957000732,108.9233627319 +2011-11-29 20:18:45.333,134.7132568359,-149.7475535522,0.0913944766,-85.5294319568,202.404006958,90.0483943947,50.00340271,-0.0002034428,11.7432098389,108.9039077759 +2011-11-29 20:18:45.366,134.696685791,-149.7209294748,0.0744585618,-29.2208162694,202.3307342529,90.0686322453,50.0033950806,0,11.7769393921,108.9136581421 +2011-11-29 20:18:45.400,134.7206268311,-149.6935404163,0.0217460152,-139.0068898371,202.3504638672,90.123758702,50.0033836365,-0.0004831748,11.7697753906,108.9178314209 +2011-11-29 20:18:45.433,134.7084350586,-149.648829998,0.0324872136,-54.2944133918,202.3072052002,90.1949087826,50.0033836365,0.0001271674,11.7875518799,108.9319839478 +2011-11-29 20:18:45.466,134.6843261719,-149.6257576189,0.0316454209,77.5270593818,202.1468353271,90.2108982555,50.0033912659,0.0002543209,11.8047637939,108.9437942505 +2011-11-29 20:18:45.500,134.6840667725,-149.6021524852,0.0813834444,123.5008987607,202.1306152344,90.2370510498,50.00340271,0.0002543069,11.770614624,108.9129867554 +2011-11-29 20:18:45.533,134.6519622803,-149.5480164058,0.0481467694,-41.6800887684,202.1430969238,90.27135909,50.0033988953,-0.0003814744,11.7769012451,108.9245910645 +2011-11-29 20:18:45.566,134.6429443359,-149.5077592708,0.0746480376,-40.3148364062,202.1439819336,90.2888375441,50.0033836365,-0.0003560213,11.7531814575,108.9060974121 +2011-11-29 20:18:45.600,134.654876709,-149.463390362,0.0664435178,24.7237582482,202.298828125,90.3437181141,50.0033950806,0.0009409525,11.7602539063,108.9095687866 +2011-11-29 20:18:45.633,134.6300354004,-149.399159263,0.1234369278,28.6661946635,202.3077087402,90.4074574394,50.0034332275,0.0009918166,11.78881073,108.9199295044 +2011-11-29 20:18:45.666,134.6519622803,-149.3424413722,0.097935468,-17.7196007449,202.2429199219,90.4636289151,50.0033950806,-0.0018056296,11.7519836426,108.9191131592 +2011-11-29 20:18:45.700,134.694732666,-149.2903680099,0.1009075493,-112.0007180098,202.2584991455,90.5273819009,50.0033531189,-0.0008138129,11.7733688354,108.9195785522 +2011-11-29 20:18:45.733,134.7135009766,-149.2641537439,0.1067470089,-154.9299186038,202.3343505859,90.5587939409,50.0033874512,0.0012970157,11.7753067017,108.9226837158 +2011-11-29 20:18:45.766,134.6959381104,-149.2731559332,0.0946026817,153.5176677099,202.2583312988,90.5550168462,50.0034103394,2.54390761256218E-05,11.7591323853,108.9119186401 +2011-11-29 20:18:45.800,134.6962127686,-149.2619680834,0.1091969758,122.4366869861,202.246887207,90.5959570001,50.0033721924,-0.0012970017,11.7618713379,108.9092559814 +2011-11-29 20:18:45.833,134.6522674561,-149.189417814,0.0531143025,46.6927133739,202.2242889404,90.6472039095,50.0033531189,2.79396772384644E-08,11.7599563599,108.9102020264 +2011-11-29 20:18:45.866,134.6009368896,-149.1459504901,0.0758183151,1.7385883678,202.161239624,90.6466916453,50.0033798218,0.0009154994,11.7750167847,108.9187774658 +2011-11-29 20:18:45.900,134.6339874268,-149.1182335825,0.038683001,48.071499756,202.2641906738,90.6827277233,50.0033950806,0.0001780177,11.7886657715,108.9300918579 +2011-11-29 20:18:45.933,134.6654205322,-149.0789873155,0.0577097312,-145.6785093353,202.2571868896,90.7233946697,50.0033874512,-0.0004577637,11.7534332275,108.9007644653 +2011-11-29 20:18:45.966,134.7108001709,-149.0093057256,0.1632880419,-106.6654523434,202.322265625,90.7853581458,50.0033874512,0.000279732,11.7692337036,108.9257278442 +2011-11-29 20:18:46.000,134.7744445801,-148.973324289,0.2019471228,-126.4889289376,202.3198852539,90.823853092,50.0034103394,0.0009409525,11.7702407837,108.9133682251 +2011-11-29 20:18:46.033,134.7618560791,-148.9516042875,0.2368354648,-157.4050152345,202.1580810547,90.859923321,50.0034332275,0.0003814744,11.7728118896,108.9052124023 +2011-11-29 20:18:46.066,134.7008056641,-148.8894768868,0.081386283,-179.6252188688,202.1275787354,90.9578750639,50.0034217834,-0.0004069135,11.7822952271,108.9176330566 +2011-11-29 20:18:46.100,134.7369232178,-148.8234289575,0.0589309186,-39.9940463265,202.339630127,91.0168878983,50.0034179688,7.63032585382462E-05,11.7958450317,108.9350280762 +2011-11-29 20:18:46.133,134.7622375488,-148.8022963522,0.095948033,-107.9498420961,202.3565368652,91.0089717091,50.0034179688,-1.39698386192322E-08,11.7909088135,108.9253463745 +2011-11-29 20:18:46.166,134.6938476563,-148.7820789923,0.1135404259,-141.8869893648,202.2513580322,91.0274268802,50.0034103394,-0.0004832167,11.7897644043,108.926612854 +2011-11-29 20:18:46.200,134.6739196777,-148.7202247992,0.0733036101,-140.106714218,202.2656097412,91.0908178659,50.0034065247,0,11.7691192627,108.9086532593 +2011-11-29 20:18:46.233,134.6906433105,-148.6635615498,0.0899165869,39.9734089099,202.3379211426,91.1500902475,50.00340271,-0.0002543069,11.7677993774,108.9134597778 +2011-11-29 20:18:46.266,134.7536621094,-148.6356807176,0.1150506437,14.0571320761,202.3620452881,91.1816388913,50.0033874512,-0.000559492,11.7464141846,108.8977127075 +2011-11-29 20:18:46.300,134.7343597412,-148.6110783762,0.0878530964,-51.3754739934,202.2057800293,91.2036662513,50.0033721924,-0.0004068995,11.7897720337,108.9198074341 +2011-11-29 20:18:46.333,134.6753692627,-148.5680345241,0.0557210669,-7.9480256135,202.1563873291,91.2544077267,50.0033683777,-5.08641824126244E-05,11.7805633545,108.9139709473 +2011-11-29 20:18:46.366,134.6445770264,-148.5115351993,0.1584796607,3.7546971401,202.3202667236,91.3183724483,50.0033683777,0,11.7503890991,108.9113845825 +2011-11-29 20:18:46.400,134.6819915771,-148.4435611566,0.1105148271,-16.992300004,202.3824615479,91.3715659615,50.0033683777,7.62892886996269E-05,11.7719421387,108.919303894 +2011-11-29 20:18:46.433,134.6990356445,-148.4031947386,0.093611002,-56.1676098471,202.2568817139,91.3906221893,50.0033950806,0.0008392241,11.8024368286,108.936706543 +2011-11-29 20:18:46.466,134.7233428955,-148.3783601708,0.1377227902,-79.5890388508,202.2057342529,91.4218224934,50.0033988953,1.39698386192322E-08,11.794593811,108.9169158936 +2011-11-29 20:18:46.500,134.7425994873,-148.3638118679,0.1625577211,-140.8661492914,202.195892334,91.4573736281,50.00340271,5.08641824126244E-05,11.7673797607,108.9123916626 +2011-11-29 20:18:46.533,134.7405548096,-148.3548233389,0.1842510849,170.6077435794,202.2069549561,91.4721200065,50.0033950806,-2.54251062870026E-05,11.7704620361,108.9152450562 +2011-11-29 20:18:46.566,134.7182769775,-148.31406077,0.1821564138,129.8233999697,202.2593231201,91.5217891421,50.0033950806,0,11.7592010498,108.9108276367 +2011-11-29 20:18:46.600,134.6922149658,-148.2483816709,0.0977247804,116.6196470964,202.2337799072,91.5729199383,50.0033988953,7.62753188610077E-05,11.8073348999,108.9315185547 +2011-11-29 20:18:46.633,134.6917266846,-148.1875383458,0.0746720359,-86.757766347,202.1311645508,91.6062922425,50.0033988953,0,11.787322998,108.9224090576 +2011-11-29 20:18:46.666,134.633895874,-148.1157940387,0.1103536785,-14.9937132283,202.1872253418,91.6843134934,50.0033950806,-7.63032585382462E-05,11.7684783936,108.9214859009 +2011-11-29 20:18:46.700,134.6790771484,-148.073487847,0.0566342101,-20.4876476042,202.3769683838,91.7720677639,50.0034065247,0.0002543069,11.7813720703,108.9168395996 +2011-11-29 20:18:46.733,134.7729034424,-148.04435026,0.1310273707,-127.8245587694,202.3834228516,91.8362373911,50.0033874512,-0.0008646632,11.8143005371,108.9395065308 +2011-11-29 20:18:46.766,134.7297058105,-148.0132455785,0.0988285989,-102.4521203803,202.2160949707,91.8534494678,50.0033798218,7.62892886996269E-05,11.7697601318,108.9092788696 +2011-11-29 20:18:46.800,134.633392334,-147.9667046695,0.1173108667,-68.2172383356,202.1251525879,91.8529030527,50.0034065247,0.0009409664,11.7637252808,108.9085769653 +2011-11-29 20:18:46.833,134.6470031738,-147.9323761388,0.1894122362,-81.6087052978,202.1819152832,91.8579778833,50.0034103394,-0.0001525925,11.755607605,108.900138855 +2011-11-29 20:18:46.866,134.7203826904,-147.9033478348,0.2019614279,-79.6639523656,202.2761230469,91.8832700738,50.0033874512,-0.0006866455,11.7956314087,108.9242477417 +2011-11-29 20:18:46.900,134.6785583496,-147.8484877554,0.0789105818,-51.1771867716,202.2713165283,91.9838924206,50.0034065247,0.0008138129,11.7773666382,108.909072876 +2011-11-29 20:18:46.933,134.707824707,-147.8020834502,0.0435027741,165.5181324967,202.2725067139,92.0501794065,50.0034294128,0.0006611925,11.7945556641,108.9334335327 +2011-11-29 20:18:46.966,134.8170013428,-147.7495866162,0.1738254428,-163.7266695001,202.3580932617,92.0730673704,50.0034179688,-0.0006866595,11.7731628418,108.9198150635 +2011-11-29 20:18:47.000,134.827255249,-147.6999311409,0.1881670803,-161.0109999464,202.3788757324,92.1397641677,50.0034065247,-7.62892886996269E-05,11.7833938599,108.9217987061 +2011-11-29 20:18:47.033,134.7173156738,-147.662201176,0.0231053121,75.8672004701,202.2570648193,92.1941188131,50.0033874512,-0.0010172417,11.789352417,108.9312286377 +2011-11-29 20:18:47.066,134.5740966797,-147.6491418543,0.1951939166,33.419179873,201.9758605957,92.2133936069,50.0033874512,0.0001017284,11.7789230347,108.9205245972 +2011-11-29 20:18:47.100,134.5737762451,-147.675779592,0.1858285069,50.6280512242,202.0484924316,92.1821386613,50.0033912659,0.0001271535,11.763343811,108.9041442871 +2011-11-29 20:18:47.133,134.6703491211,-147.6461502314,0.08275415,70.1054304712,202.4007263184,92.170465868,50.003364563,-0.0008646632,11.778678894,108.9125900269 +2011-11-29 20:18:47.166,134.7465667725,-147.5306380722,0.089062579,-97.368192015,202.4677886963,92.2834508572,50.0033683777,0.0007629488,11.7697372437,108.9160308838 +2011-11-29 20:18:47.200,134.7343139648,-147.4355208578,0.0718538463,-125.7978777182,202.3409576416,92.4223086031,50.0034179688,0.0014750054,11.778793335,108.9402618408 +2011-11-29 20:18:47.233,134.7476806641,-147.4047986669,0.0540898889,-165.2750870453,202.3402099609,92.4306687546,50.00340271,-0.0010681199,11.7553253174,108.8983230591 +2011-11-29 20:18:47.266,134.7838439941,-147.3806197972,0.1578145176,-110.3090918883,202.3689880371,92.4121316212,50.0033721924,-0.000813799,11.7513427734,108.896812439 +2011-11-29 20:18:47.300,134.758392334,-147.3174951889,0.2561130524,-87.2549563072,202.4426879883,92.4389674344,50.0033874512,0.0007629488,11.771232605,108.9191207886 +2011-11-29 20:18:47.333,134.7578735352,-147.2919776022,0.1624657661,-56.437211074,202.5214691162,92.4777697391,50.0033950806,0,11.7811279297,108.9107284546 +2011-11-29 20:18:47.366,134.7072601318,-147.286158281,0.1151265055,-23.265698983,202.3269042969,92.5238803462,50.0033721924,-0.0007375237,11.7752685547,108.9146575928 +2011-11-29 20:18:47.400,134.7164306641,-147.2386748059,0.100984998,-83.2353558297,202.222366333,92.5867727281,50.0033760071,0.0003051572,11.763671875,108.9102401733 +2011-11-29 20:18:47.433,134.7741546631,-147.1950162367,0.0959449038,-121.4272943098,202.2574462891,92.6262990328,50.0033950806,0.0003051711,11.7710876465,108.9331359863 +2011-11-29 20:18:47.466,134.7418365479,-147.1732006125,0.0569143109,-68.4824955622,202.2925109863,92.6611671485,50.0033721924,-0.001093559,11.7690429688,108.9187316895 +2011-11-29 20:18:47.500,134.6800384521,-147.1337631003,0.1023973748,-38.8166412419,202.2374572754,92.6896831883,50.0033531189,-0.0001525646,11.8075408936,108.9253082275 +2011-11-29 20:18:47.533,134.6877288818,-147.0951861918,0.0866918862,-30.214188737,202.220703125,92.6830442444,50.0033798218,0.0009409525,11.7517700195,108.9197235107 +2011-11-29 20:18:47.566,134.6420593262,-147.073780379,0.1355481595,46.9944847918,202.2495117188,92.7237453417,50.0033874512,-0.0002288818,11.7660751343,108.9106063843 +2011-11-29 20:18:47.600,134.6185302734,-147.0440690561,0.185611248,65.350683073,202.3340911865,92.7850257989,50.0033683777,-0.0003051711,11.7685623169,108.9112243652 +2011-11-29 20:18:47.633,134.6816864014,-146.9998504114,0.1078797579,49.9427974187,202.3219146729,92.822796745,50.0033912659,0.000813799,11.7880401611,108.9129486084 +2011-11-29 20:18:47.666,134.7412872314,-146.9643744088,0.1616576165,33.8141423919,202.3481903076,92.8510737282,50.0034065247,0.00027976,11.7852401733,108.9166488647 +2011-11-29 20:18:47.700,134.7479248047,-146.8947064793,0.0466296487,135.9132922563,202.3667907715,92.9207484879,50.0034065247,-0.0001780316,11.7822265625,108.9146270752 +2011-11-29 20:18:47.733,134.6833953857,-146.8188777191,0.0981492922,-139.3658572591,202.1865234375,92.9876092097,50.00340271,-0.000279732,11.7720947266,108.9034957886 +2011-11-29 20:18:47.766,134.6651000977,-146.7775140935,0.0898040533,-56.1008174272,202.1206512451,93.0238160425,50.0033988953,0,11.7680892944,108.8955078125 +2011-11-29 20:18:47.800,134.7364959717,-146.7678425457,0.0480953343,-112.4975118191,202.3002929688,93.0646674039,50.0033874512,-0.0007120706,11.7844161987,108.9167022705 +2011-11-29 20:18:47.833,134.7746276855,-146.7422293363,0.0848153904,-134.1345607323,202.4050750732,93.0825829901,50.0033798218,0.0002034567,11.7848510742,108.9346160889 +2011-11-29 20:18:47.866,134.7068939209,-146.6994860125,0.1135640591,17.8674265291,202.3598632813,93.109623709,50.0033798218,0,11.7579803467,108.9061431885 +2011-11-29 20:18:47.900,134.6504364014,-146.6639963495,0.1936088204,46.0584176113,202.3663482666,93.1732605815,50.0033912659,7.62892886996269E-05,11.7807235718,108.9242401123 +2011-11-29 20:18:47.933,134.6873626709,-146.6011449488,0.0372895561,-19.3476975694,202.4325256348,93.2504827003,50.0033760071,-0.0003814604,11.7903213501,108.9333724976 +2011-11-29 20:18:47.966,134.7282104492,-146.55822404,0.1047452539,-111.7093421398,202.3450164795,93.2818810799,50.0033798218,0.000279732,11.7559738159,108.9136581421 +2011-11-29 20:18:48.000,134.6791992188,-146.5302612456,0.0228358824,17.1908040843,202.1817626953,93.3169541013,50.0033988953,0.0003814744,11.7735366821,108.9181900024 +2011-11-29 20:18:48.033,134.6366424561,-146.4739258453,0.1299930513,35.1253133163,202.2069244385,93.3708169731,50.0033912659,-0.0003305962,11.7920684814,108.9176483154 +2011-11-29 20:18:48.066,134.6262207031,-146.4469465981,0.1018220559,62.8810027823,202.2994689941,93.3936707861,50.0033836365,0.0002034428,11.7527084351,108.90675354 +2011-11-29 20:18:48.100,134.6806182861,-146.3977828964,0.0085496632,127.0118208997,202.4425048828,93.4198372408,50.0034217834,0.0011698483,11.7735671997,108.915687561 +2011-11-29 20:18:48.133,134.8227386475,-146.3677027433,0.1013273671,-153.7949460694,202.5034790039,93.4334771285,50.0034217834,0,11.7761611938,108.90259552 +2011-11-29 20:18:48.166,134.842666626,-146.3510644025,0.0984089822,-163.7646590122,202.3586120605,93.4730580748,50.0033950806,-0.0015767477,11.8005142212,108.9276351929 +2011-11-29 20:18:48.200,134.7916870117,-146.3172003246,0.0524356887,-170.8069665371,202.3604888916,93.5214158141,50.0033836365,0.0002034428,11.7829284668,108.9206085205 +2011-11-29 20:18:48.233,134.7757415771,-146.2607966224,0.0969044641,171.5293410041,202.4856262207,93.5638244587,50.00340271,0.0004068995,11.7865219116,108.9267883301 +2011-11-29 20:18:48.266,134.7046661377,-146.1833969188,0.0766429156,107.0994220727,202.4759063721,93.624783897,50.00340271,2.54251062870026E-05,11.7761993408,108.9016342163 +2011-11-29 20:18:48.300,134.6695861816,-146.1572919358,0.0859208032,62.1259868413,202.3972015381,93.6412446529,50.0034294128,0.0011189701,11.7620162964,108.9070510864 +2011-11-29 20:18:48.333,134.7456207275,-146.1298209149,0.0535333157,-144.5442744614,202.3156890869,93.6790292594,50.0034294128,0,11.7803497314,108.9212722778 +2011-11-29 20:18:48.366,134.7682037354,-146.0570930606,0.1587524712,-135.0607617045,202.1800689697,93.7641470768,50.0034217834,-0.0003814744,11.7711486816,108.9207763672 +2011-11-29 20:18:48.400,134.706451416,-146.0131066424,0.0136338109,-172.1385802177,202.1568908691,93.8173610807,50.0034217834,0,11.7791366577,108.9180526733 +2011-11-29 20:18:48.433,134.7175750732,-145.9857039234,0.1031325758,74.9306312708,202.2845153809,93.8598311969,50.0034179688,-0.0002288958,11.7607574463,108.9171447754 +2011-11-29 20:18:48.466,134.7944946289,-145.9628091293,0.1073912308,151.7356030536,202.3488311768,93.8626315745,50.0033988953,-0.0006357813,11.7794265747,108.9254455566 +2011-11-29 20:18:48.500,134.8117523193,-145.9537386381,0.1978236139,173.8717680403,202.2914123535,93.8547222154,50.0033988953,7.63032585382462E-05,11.7794723511,108.9176330566 +2011-11-29 20:18:48.533,134.7405853271,-145.9076075405,0.0980280414,154.8639116557,202.3161315918,93.9126422196,50.00340271,-0.0001271674,11.7581634521,108.909942627 +2011-11-29 20:18:48.566,134.7382202148,-145.8298799877,0.1550034732,105.9356466306,202.4766540527,94.0022338109,50.0033798218,-0.0006357953,11.7857894897,108.9325256348 +2011-11-29 20:18:48.600,134.7249908447,-145.7592285109,0.1689590812,114.3666067459,202.4568328857,94.0781786843,50.0033607483,-0.0005086418,11.7824401855,108.9271774292 +2011-11-29 20:18:48.633,134.730758667,-145.7175370362,0.1530346125,-133.1985242877,202.2964630127,94.1042290258,50.0033721924,0.0005086279,11.7819976807,108.9236755371 +2011-11-29 20:18:48.666,134.7240447998,-145.7126876019,0.2191665024,-111.7225858766,202.215423584,94.0839297036,50.0033836365,0.0004069135,11.7755355835,108.9189987183 +2011-11-29 20:18:48.700,134.7238006592,-145.6882901662,0.1046591327,-151.6121268937,202.4025421143,94.1169400078,50.0033874512,-2.54251062870026E-05,11.775138855,108.9306106567 +2011-11-29 20:18:48.733,134.7633514404,-145.6228979351,0.0779430568,161.3242734029,202.5701751709,94.190132315,50.0033912659,0.0001525786,11.7697906494,108.9288024902 +2011-11-29 20:18:48.766,134.7168731689,-145.5513448734,0.0053528538,-70.1381470774,202.4192810059,94.255736282,50.0033988953,0.0002288818,11.7888031006,108.927444458 +2011-11-29 20:18:48.800,134.614654541,-145.4861848687,0.0920841545,22.2713788267,202.2844390869,94.3457035337,50.0033988953,-0.0001525786,11.7614593506,108.9063415527 +2011-11-29 20:18:48.833,134.6338500977,-145.4803792079,0.134134829,38.2219161803,202.253326416,94.3469261376,50.0033950806,-0.0002288818,11.7814559937,108.9249191284 +2011-11-29 20:18:48.866,134.6911468506,-145.4785487172,0.095066227,179.1504250989,202.087677002,94.344631194,50.0033721924,-0.0006866734,11.8002700806,108.923614502 +2011-11-29 20:18:48.900,134.6913452148,-145.4179512789,0.3374626637,-157.4511599925,202.0110473633,94.3962879147,50.0033836365,0.0005086139,11.7989120483,108.9249420166 +2011-11-29 20:18:48.933,134.6837463379,-145.3892644843,0.2313407063,-166.0204655894,202.1318969727,94.4214161807,50.0033988953,0.0004069135,11.7762680054,108.9191055298 +2011-11-29 20:18:48.966,134.6390380859,-145.3917643336,0.2014813721,77.0478942908,202.256362915,94.4632510893,50.0033988953,-0.0001525925,11.7678527832,108.9027404785 +2011-11-29 20:18:49.000,134.5872344971,-145.3451414623,0.2777602375,62.3612527072,202.2150421143,94.5274070562,50.0033988953,5.08641824126244E-05,11.766418457,108.8983154297 +2011-11-29 20:18:49.033,134.654800415,-145.2750090799,0.0362205133,-118.0293025185,202.2287597656,94.546934567,50.0034065247,0.0003051851,11.7841033936,108.9281616211 +2011-11-29 20:18:49.066,134.7463684082,-145.2312002466,0.1987242252,-107.1145099606,202.3629455566,94.5508209447,50.0033874512,-0.0007629348,11.7749786377,108.9203414917 +2011-11-29 20:18:49.100,134.7957611084,-145.1694689969,0.1715686172,-100.3545419655,202.5438995361,94.6132283831,50.0033874512,0,11.790222168,108.9292755127 +2011-11-29 20:18:49.133,134.7828979492,-145.1197315593,0.1009549499,-99.1103478761,202.4598236084,94.6713601231,50.0033683777,-0.0004069135,11.775177002,108.9150390625 +2011-11-29 20:18:49.166,134.6707000732,-145.0980115578,0.0547622368,83.8896401409,202.1910552979,94.717211183,50.0033836365,0.0007375097,11.7841110229,108.9226226807 +2011-11-29 20:18:49.200,134.5754699707,-145.0619208382,0.1321964562,51.3818943712,202.2004547119,94.7556173367,50.0034103394,0.0008646492,11.7744064331,108.9128723145 +2011-11-29 20:18:49.233,134.6629638672,-145.0255022695,0.0515657663,-52.4027788408,202.3451538086,94.7703705454,50.0034332275,0.0004832027,11.7580490112,108.9179229736 +2011-11-29 20:18:49.266,134.6841125488,-144.9730737375,0.0419591442,-100.5717488113,202.290802002,94.8272455306,50.0034065247,-0.0010681059,11.7682495117,108.9172286987 +2011-11-29 20:18:49.300,134.6608734131,-144.9259317718,0.0430693105,105.7048818593,202.3259735107,94.8967905167,50.00340271,0,11.7702331543,108.9285049438 +2011-11-29 20:18:49.333,134.669418335,-144.8977367509,0.1359689385,-0.5370330684,202.3809204102,94.9086887062,50.0033988953,-0.0004068855,11.7610931396,108.9157943726 +2011-11-29 20:18:49.366,134.7094726563,-144.8557584083,0.2471664846,-8.9881003534,202.3615570068,94.9578455777,50.0033607483,-0.0011952734,11.7772979736,108.9212188721 +2011-11-29 20:18:49.400,134.713394165,-144.7973466305,0.1981086731,-0.2372776502,202.3953857422,95.0331825642,50.0033531189,-2.79396772384644E-08,11.7862243652,108.9134902954 +2011-11-29 20:18:49.433,134.762588501,-144.7649305527,0.0183586869,-58.4852706174,202.47706604,95.052744226,50.0033607483,0.0004068995,11.7690887451,108.9136047363 +2011-11-29 20:18:49.466,134.8002624512,-144.755299986,0.2026698291,163.6159794544,202.3556976318,95.0801947563,50.0033683777,0.000279732,11.7634353638,108.9109954834 +2011-11-29 20:18:49.500,134.7202758789,-144.6928174154,0.1449938267,146.2779813784,202.1575775146,95.1639328755,50.0033836365,0.0004068995,11.787689209,108.926574707 +2011-11-29 20:18:49.533,134.6783905029,-144.6356623925,0.0935936943,-3.8410930567,202.3033447266,95.2078305013,50.0034103394,0.0008646632,11.7851104736,108.9231948853 +2011-11-29 20:18:49.566,134.6621246338,-144.6267421654,0.1890183389,-19.2458030998,202.4230041504,95.197530576,50.0034065247,-0.000534053,11.7788696289,108.9290618896 +2011-11-29 20:18:49.600,134.6830291748,-144.575133256,0.1112581417,-27.0746273982,202.426071167,95.2278907669,50.0033874512,-0.0004577637,11.7940216064,108.9293136597 +2011-11-29 20:18:49.633,134.7404174805,-144.4998645714,0.0634215027,-33.178678667,202.4344024658,95.2723211475,50.00340271,0.0006357813,11.791885376,108.932723999 +2011-11-29 20:18:49.666,134.6878662109,-144.4612466818,0.1708692461,-17.3297045188,202.3429260254,95.3200231886,50.0034065247,-0.0001525786,11.7876205444,108.9351806641 +2011-11-29 20:18:49.700,134.6460723877,-144.4339805666,0.1673256159,-23.4709615355,202.3905181885,95.3845070046,50.0033950806,-0.0002543069,11.7864761353,108.9228363037 +2011-11-29 20:18:49.733,134.7031402588,-144.4062909798,0.0396951661,157.9861687102,202.4162597656,95.4641879914,50.0033988953,0.0003051572,11.7647171021,108.9159469604 +2011-11-29 20:18:49.766,134.6845703125,-144.3687932412,0.1228523627,111.2977617706,202.3764953613,95.5018155036,50.0033988953,0,11.777381897,108.9196929932 +2011-11-29 20:18:49.800,134.5976104736,-144.2993438777,0.1289612204,35.0629741797,202.3630218506,95.5144718441,50.0034065247,5.08641824126244E-05,11.7762908936,108.9041290283 +2011-11-29 20:18:49.833,134.6532897949,-144.2306321747,0.1887485981,-2.3486314093,202.4730834961,95.5460682992,50.00340271,-5.08641824126244E-05,11.7634429932,108.9141387939 +2011-11-29 20:18:49.866,134.7106018066,-144.2228047779,0.0984557793,-18.7549071589,202.3972473145,95.5703223009,50.0034179688,0.0004068995,11.783203125,108.9225234985 +2011-11-29 20:18:49.900,134.722869873,-144.1933256814,0.0534633994,-121.0534097546,202.2914581299,95.6362267962,50.0034179688,-0.0001017144,11.7800521851,108.9161758423 +2011-11-29 20:18:49.933,134.74269104,-144.128534507,0.1083601564,-117.7591685368,202.4386444092,95.6994538574,50.0034065247,-0.0006357813,11.7726593018,108.9097976685 +2011-11-29 20:18:49.966,134.7355041504,-144.1020470334,0.0349652283,135.1093926514,202.5159454346,95.7211670288,50.0034065247,-1.39698386192322E-08,11.7825469971,108.9272460938 +2011-11-29 20:18:50.000,134.6635131836,-144.0582245397,0.2474317402,71.0861500134,202.3685302734,95.779667599,50.0033988953,-0.0005086279,11.7734603882,108.9188995361 +2011-11-29 20:18:50.033,134.6217651367,-143.9879965346,0.24467282,39.1117566405,202.3133850098,95.8432839809,50.0033760071,-0.0004323106,11.7399291992,108.8946228027 +2011-11-29 20:18:50.066,134.6271362305,-143.9662218915,0.0669736043,-5.5262936777,202.3824462891,95.8441036036,50.0033950806,0.0008900883,11.7667236328,108.9061813354 +2011-11-29 20:18:50.100,134.6648254395,-143.9605391741,0.1065603346,135.9624013164,202.4306182861,95.8466717548,50.0033950806,0,11.7649688721,108.9161071777 +2011-11-29 20:18:50.133,134.6793212891,-143.9255412848,0.2478156984,100.2708516576,202.3521575928,95.88296738,50.0033836365,0,11.7919464111,108.9186630249 +2011-11-29 20:18:50.166,134.673538208,-143.8638510163,0.1342519671,47.9532623512,202.3788909912,95.9334766289,50.0033950806,0.0005594781,11.7857284546,108.9306488037 +2011-11-29 20:18:50.200,134.6997070313,-143.8145370504,0.1661091894,-47.6721078593,202.4813537598,95.9671016502,50.0033950806,-0.0001017284,11.7793579102,108.916885376 +2011-11-29 20:18:50.233,134.7318878174,-143.78527652,0.0569524989,-57.0896444039,202.4426422119,96.0281157301,50.00340271,0.0003306242,11.7749938965,108.9223022461 +2011-11-29 20:18:50.266,134.730178833,-143.7515490459,0.0566772632,71.5969935218,202.3501281738,96.0856942248,50.0034103394,0,11.7865982056,108.924446106 +2011-11-29 20:18:50.300,134.7313232422,-143.6864983243,0.062985152,-3.1416910772,202.4154815674,96.1419066816,50.0033950806,-0.0008392381,11.8011779785,108.9234695435 +2011-11-29 20:18:50.333,134.688369751,-143.6513911519,0.0922055319,-47.0886013834,202.4389038086,96.1877304208,50.0033683777,-0.0006866455,11.7955856323,108.9221496582 +2011-11-29 20:18:50.366,134.6586303711,-143.6488503216,0.0475633331,-26.496866819,202.3235321045,96.1836801186,50.0033760071,0.0003306102,11.7557601929,108.9191207886 +2011-11-29 20:18:50.400,134.6773223877,-143.6041535636,0.0565749444,-115.6790344251,202.2571716309,96.2160210643,50.0033798218,0.0002288679,11.7665405273,108.9205322266 +2011-11-29 20:18:50.433,134.6737518311,-143.5169320479,0.068840161,-151.1817703345,202.3083343506,96.3200175246,50.00340271,0.0008646632,11.7553634644,108.9099273682 +2011-11-29 20:18:50.466,134.6887664795,-143.4599546099,0.1255174428,-154.5200389517,202.3377532959,96.3648508863,50.0034141541,0,11.7542190552,108.9053955078 +2011-11-29 20:18:50.500,134.6695251465,-143.4088921156,0.2275063246,-119.0095712681,202.2876281738,96.3769198306,50.0034103394,-0.00027976,11.7674789429,108.9042510986 +2011-11-29 20:18:50.533,134.6008758545,-143.3737303018,0.163122341,-62.5674424579,202.245010376,96.3966727377,50.0033874512,-0.0007120986,11.7690505981,108.9103927612 +2011-11-29 20:18:50.566,134.5975189209,-143.39352419,0.0549490489,59.0844967737,202.2095031738,96.4014265493,50.0033760071,-0.0001271395,11.7731323242,108.9300918579 +2011-11-29 20:18:50.600,134.7165222168,-143.3736756603,0.1541348547,163.072678887,202.2798919678,96.4575160628,50.0033760071,0,11.7557296753,108.9074172974 +2011-11-29 20:18:50.633,134.8175354004,-143.3069310517,0.1091192737,-151.2826795493,202.38331604,96.4989684809,50.0033760071,0.0003051711,11.7891235352,108.9226989746 +2011-11-29 20:18:50.666,134.7528076172,-143.2752253136,0.0592862926,-66.2854969137,202.3510742188,96.5061470097,50.0033912659,0.0004831888,11.7681503296,108.9203414917 +2011-11-29 20:18:50.700,134.6198272705,-143.2386428204,0.1108612418,-3.4056603862,202.3314361572,96.5663551272,50.00340271,0.0001780316,11.7644348145,108.9184036255 +2011-11-29 20:18:50.733,134.5877838135,-143.1989184402,0.0893390477,22.8255257344,202.2876739502,96.633864717,50.0033874512,-0.0006357813,11.7897491455,108.9276199341 +2011-11-29 20:18:50.766,134.6578674316,-143.1425830399,0.0035184934,-49.7708303309,202.2744598389,96.7196450628,50.0033798218,1.39698386192322E-08,11.7984161377,108.940246582 +2011-11-29 20:18:50.800,134.7144012451,-143.0638582795,0.0121316835,-120.5837659473,202.4463195801,96.7933974454,50.0033950806,0.0006103562,11.7613601685,108.9029464722 +2011-11-29 20:18:50.833,134.6995239258,-142.9899419723,0.1091507301,-22.1345598923,202.4413604736,96.8299048065,50.0033950806,-0.0004577637,11.7961349487,108.932975769 +2011-11-29 20:18:50.866,134.6758880615,-142.9622933666,0.1462489516,-2.153912321,202.3790893555,96.8748064701,50.0033912659,0.0004323386,11.7687988281,108.9149475098 +2011-11-29 20:18:50.900,134.6743469238,-142.9480592523,0.0418543257,-17.2325621533,202.3367004395,96.8813497914,50.0034179688,0.0007629488,11.7628479004,108.9092254639 +2011-11-29 20:18:50.933,134.6603088379,-142.929740685,0.1340715885,-108.6810753185,202.2308349609,96.8577036765,50.0034255981,-0.0003814884,11.7576828003,108.9053115845 +2011-11-29 20:18:50.966,134.7394104004,-142.850018717,0.1857624799,-107.9084101686,202.4384613037,96.9466463998,50.0033988953,-0.0007629488,11.7721939087,108.9213943481 +2011-11-29 20:18:51.000,134.8355255127,-142.7992021096,0.2173338532,-110.6086639853,202.5502624512,97.0219287449,50.0033836365,-0.000534053,11.7540817261,108.90675354 +2011-11-29 20:18:51.033,134.7668609619,-142.8113052048,0.1251070946,-118.3238066151,202.287979126,96.9871904028,50.0033874512,0.0001271674,11.7557601929,108.9056396484 +2011-11-29 20:18:51.066,134.6770629883,-142.7759794664,0.0438984111,49.1295063037,202.2270965576,96.9999491961,50.0033836365,-0.0001271814,11.7660369873,108.9105300903 +2011-11-29 20:18:51.100,134.6996459961,-142.7261327458,0.0283191279,142.3320718118,202.3483581543,97.0675065972,50.0033836365,0.0002543349,11.7671051025,108.9009094238 +2011-11-29 20:18:51.133,134.7100524902,-142.6933068567,0.0654056296,-149.4399491528,202.3444976807,97.1020195431,50.0034103394,0.0009918166,11.7781982422,108.9207000732 +2011-11-29 20:18:51.166,134.6824798584,-142.6454272306,0.1052939892,-102.5714779361,202.2608337402,97.1430211687,50.0034103394,0,11.7760162354,108.9239349365 +2011-11-29 20:18:51.200,134.708190918,-142.5955668496,0.0866399407,-124.9954397737,202.3582611084,97.2280365333,50.00340271,-0.0003560213,11.755607605,108.9067993164 +2011-11-29 20:18:51.233,134.7178039551,-142.5614978661,0.0970959738,15.5133352373,202.4427337646,97.2838801599,50.00340271,0,11.7940979004,108.9283676147 +2011-11-29 20:18:51.266,134.6973876953,-142.5038100883,0.1760911793,-1.5842572553,202.5053863525,97.3139193319,50.0033950806,-0.0004323386,11.7912368774,108.916267395 +2011-11-29 20:18:51.300,134.7002563477,-142.4524880469,0.1319283694,-45.4650654177,202.5149383545,97.3229625024,50.0033721924,-0.0007374957,11.7593765259,108.9055633545 +2011-11-29 20:18:51.333,134.6763305664,-142.451190311,0.0403235517,9.3237281652,202.3020629883,97.3580969954,50.0033798218,0.0006103562,11.7912826538,108.932800293 +2011-11-29 20:18:51.366,134.6486358643,-142.4278583848,0.1360694021,93.6705188437,202.2250823975,97.4467186999,50.0033988953,0.0004577637,11.7644348145,108.9221343994 +2011-11-29 20:18:51.400,134.663772583,-142.3503220773,0.2416366786,137.2614486551,202.1971893311,97.5410572727,50.0033874512,-0.0007375097,11.786529541,108.9219284058 +2011-11-29 20:18:51.433,134.626449585,-142.2960903753,0.1006844714,-173.7808718829,202.0933227539,97.5634739536,50.0033836365,0.0003560353,11.7684249878,108.9043121338 +2011-11-29 20:18:51.466,134.58253479,-142.2429241828,0.2438559383,-48.7781442973,202.2218933105,97.5701060673,50.0033950806,0.0001780316,11.7812423706,108.9212493896 +2011-11-29 20:18:51.500,134.5654296875,-142.2057952745,0.20550704,-2.9224560921,202.3251037598,97.597174107,50.0033836365,-0.0006357953,11.7715988159,108.9239883423 +2011-11-29 20:18:51.533,134.647354126,-142.2227068229,0.1771603823,72.011463061,202.2385253906,97.6008145978,50.0033836365,0,11.7530670166,108.9041900635 +2011-11-29 20:18:51.566,134.759185791,-142.1899765564,0.1061625332,64.4560990464,202.3603515625,97.6576759226,50.0033836365,1.39698386192322E-08,11.7905502319,108.9303512573 +2011-11-29 20:18:51.600,134.7649078369,-142.1197485513,0.0783282965,-15.4112922111,202.516204834,97.7294202297,50.0033798218,-0.0001271814,11.7550582886,108.9082260132 +2011-11-29 20:18:51.633,134.7400970459,-142.044384244,0.1448116899,-49.4395183448,202.4942016602,97.7760909123,50.0033836365,0.0003306102,11.7757568359,108.9163208008 +2011-11-29 20:18:51.666,134.7031860352,-141.9924748063,0.2260224372,-40.0162956677,202.4787445068,97.7881871773,50.00340271,0.0004323386,11.7921600342,108.933380127 +2011-11-29 20:18:51.700,134.6638031006,-141.963432842,0.1773700267,-40.559917254,202.4117431641,97.8269689914,50.0033721924,-0.0009663915,11.7627105713,108.9194946289 +2011-11-29 20:18:51.733,134.6632537842,-141.9373415193,0.0725853965,-174.8075449378,202.3718109131,97.8906536752,50.0033531189,-0.0001525786,11.7825317383,108.9292831421 +2011-11-29 20:18:51.766,134.7111968994,-141.9135997818,0.1914256066,143.2973141454,202.406463623,97.9527537552,50.0033798218,0.0007883599,11.7688598633,108.8980102539 +2011-11-29 20:18:51.800,134.7366638184,-141.881798421,0.107946299,161.8552659694,202.3865661621,97.9774039079,50.0033798218,-0.0001780177,11.7749633789,108.9276275635 +2011-11-29 20:18:51.833,134.7282714844,-141.8322932099,0.0971782953,-126.4943384474,202.3571014404,97.983510097,50.0033798218,0,11.7899093628,108.9279937744 +2011-11-29 20:18:51.866,134.7197265625,-141.7647562994,0.1580851823,-89.7950148671,202.3091583252,98.0467781393,50.00340271,0.0007120706,11.7847442627,108.9327316284 +2011-11-29 20:18:51.900,134.7045898438,-141.712532673,0.1215962172,-99.4811588461,202.2964477539,98.1001902186,50.0034065247,0.0001525646,11.7751846313,108.9298019409 +2011-11-29 20:18:51.933,134.7018280029,-141.6691609718,0.0758190304,-146.4427801827,202.3174743652,98.1287677301,50.0034065247,7.63172283768654E-05,11.7483139038,108.9019470215 +2011-11-29 20:18:51.966,134.670425415,-141.6373322902,0.0667638481,-118.9101510346,202.30809021,98.1654595063,50.0034179688,0.0003305962,11.7890319824,108.9278717041 +2011-11-29 20:18:52.000,134.6514434814,-141.6190956851,0.1316514909,-111.1096651911,202.2302093506,98.218489095,50.0034255981,-0.0002288818,11.7954940796,108.9407196045 +2011-11-29 20:18:52.033,134.7433776855,-141.5861058715,0.2035604417,-136.1779620866,202.3863830566,98.2538763051,50.0034179688,-0.0002034567,11.7771072388,108.9167633057 +2011-11-29 20:18:52.066,134.8018188477,-141.5158368853,0.1331965923,-133.8018758782,202.6400146484,98.2875696283,50.0034103394,0.0001525925,11.7702407837,108.9159164429 +2011-11-29 20:18:52.100,134.6839904785,-141.4731345426,0.0750998929,39.3418554683,202.5393066406,98.3325669145,50.0034217834,-7.62753188610077E-05,11.7780303955,108.9248428345 +2011-11-29 20:18:52.133,134.5988464355,-141.4851829963,0.1621936113,66.1009588627,202.2993621826,98.3375188017,50.0033836365,-0.0011444092,11.7703094482,108.9249572754 +2011-11-29 20:18:52.166,134.6152038574,-141.438846993,0.084248811,24.7419521646,202.2398376465,98.3821814086,50.0033569336,-0.0005086139,11.7762145996,108.9095535278 +2011-11-29 20:18:52.200,134.6396484375,-141.3538521189,0.0324700326,156.7467216023,202.357208252,98.4716227358,50.0033798218,0.0008646492,11.7796478271,108.9358978271 +2011-11-29 20:18:52.233,134.626373291,-141.3134447198,0.1681789309,148.789469257,202.3395843506,98.5431143259,50.00340271,0.0003814744,11.7818069458,108.911819458 +2011-11-29 20:18:52.266,134.5793457031,-141.2802909816,0.1272907257,145.8310137991,202.2795715332,98.6083494626,50.0033988953,-2.54251062870026E-05,11.7765350342,108.9239807129 +2011-11-29 20:18:52.300,134.6320648193,-141.2176035054,0.0372724608,-56.1346712598,202.4463653564,98.6222352372,50.00340271,5.08641824126244E-05,11.7729415894,108.9172592163 +2011-11-29 20:18:52.333,134.7293548584,-141.1733438795,0.1639405936,-57.4880220175,202.5245056152,98.6320912002,50.00340271,-1.39698386192322E-08,11.7686920166,108.9125747681 +2011-11-29 20:18:52.366,134.7384490967,-141.1478672739,0.1427245587,-99.151253879,202.452041626,98.6789941092,50.0033836365,-0.0004068715,11.7964553833,108.9230728149 +2011-11-29 20:18:52.400,134.7460327148,-141.1102329316,0.1604990661,-155.3517237662,202.3828735352,98.6967252803,50.0033836365,0,11.7791595459,108.9180908203 +2011-11-29 20:18:52.433,134.7197113037,-141.0990860629,0.1772147268,152.3006919243,202.3374633789,98.7146203759,50.0033836365,-0.0001271674,11.7732772827,108.92212677 +2011-11-29 20:18:52.466,134.6947937012,-141.09537044,0.1231890097,111.3798333237,202.3685913086,98.7541261901,50.0033721924,-0.0004323386,11.7647171021,108.9057769775 +2011-11-29 20:18:52.500,134.6923065186,-141.0445401722,0.1360786259,4.3055851938,202.4182281494,98.7849986451,50.0033798218,0.0005086558,11.7445831299,108.9017944336 +2011-11-29 20:18:52.533,134.683380127,-140.9595999396,0.061337024,-13.7179004857,202.3392181396,98.8470714043,50.0034065247,0.0003814744,11.8035736084,108.937461853 +2011-11-29 20:18:52.566,134.6307678223,-140.8897407648,0.0529339015,143.4467313636,202.2561950684,98.9011528422,50.0033836365,-0.0007629348,11.7750854492,108.9013824463 +2011-11-29 20:18:52.600,134.5936584473,-140.8590322343,0.0998956338,45.5704176706,202.2537841797,98.9497701287,50.003364563,-0.0003560353,11.7754821777,108.9163513184 +2011-11-29 20:18:52.633,134.6430969238,-140.8529670263,0.2049354017,50.5567440493,202.2873382568,98.9954231131,50.0033683777,0.000279732,11.7844009399,108.9157791138 +2011-11-29 20:18:52.666,134.6849822998,-140.8303727606,0.1968348473,91.7457237243,202.3167724609,99.026903455,50.0033912659,0.0007120706,11.7791824341,108.9064331055 +2011-11-29 20:18:52.700,134.6368560791,-140.7685868693,0.0148719521,-107.4788595717,202.3361358643,99.0647017218,50.0033912659,-0.0003051572,11.8029937744,108.9275894165 +2011-11-29 20:18:52.733,134.618927002,-140.7124153936,0.1779539287,-48.7080187451,202.3322143555,99.1026297623,50.0034065247,0.0007883739,11.7885437012,108.9274597168 +2011-11-29 20:18:52.766,134.6310119629,-140.7041781854,0.0942293406,49.7364437435,202.2001037598,99.1442324445,50.0034179688,0,11.7632446289,108.9132385254 +2011-11-29 20:18:52.800,134.6205596924,-140.6543861064,0.0887866691,114.2085356779,202.0562133789,99.2022480713,50.0034179688,-2.54251062870026E-05,11.7479248047,108.894241333 +2011-11-29 20:18:52.833,134.7195281982,-140.5841854221,0.1190064102,-119.9684068842,202.0743865967,99.2188317706,50.0033988953,-0.0002288818,11.7503585815,108.9071731567 +2011-11-29 20:18:52.866,134.7460174561,-140.5579574957,0.086130023,-147.9519514609,202.2487182617,99.2459203009,50.00340271,0.0001780316,11.7915267944,108.930519104 +2011-11-29 20:18:52.900,134.6868133545,-140.4994227745,0.0283244438,120.0697668915,202.471572876,99.3269673256,50.0033836365,-0.0006612204,11.7764892578,108.9233551025 +2011-11-29 20:18:52.933,134.6552886963,-140.4838909243,0.0414993092,110.678338745,202.3578796387,99.3486258554,50.0033874512,0.0003814744,11.7756271362,108.9135894775 diff --git a/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Integer Point - 3 phasors, 2 analogs.csv b/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Integer Point - 3 phasors, 2 analogs.csv new file mode 100755 index 0000000..3a84342 --- /dev/null +++ b/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Integer Point - 3 phasors, 2 analogs.csv @@ -0,0 +1,148 @@ +2011-11-29 20:13:29.333,-176.0126346642,134.5806,75.6246993793,0.21362,63.9707378264,201.65728,50.003,0,108.8879394531,11.7365341187 +2011-11-29 20:13:29.366,-175.9610684626,134.5806,0,0,63.9879265602,201.65728,50.013,0,108.9138717651,11.763130188 +2011-11-29 20:13:29.400,-175.9037726831,134.36698,-163.9747913885,0.21362,64.0566814956,201.44366,50.003,0,108.9136047363,11.7515029907 +2011-11-29 20:13:29.433,-175.8579360595,134.36698,-169.1600594344,0.21362,64.1368955869,201.44366,50.003,0,108.8927993774,11.7216720581 +2011-11-29 20:13:29.466,-175.8178290138,134.36698,20.3342721492,0.21362,64.1884617885,201.44366,50.023,0,108.911491394,11.7508773804 +2011-11-29 20:13:29.500,-175.7548036564,134.36698,-9.6944458936,0.21362,64.1999209444,201.44366,50.003,0,108.9076538086,11.7556915283 +2011-11-29 20:13:29.533,-175.7032374548,134.36698,-57.1639992202,0.21362,64.2056505224,201.65728,50.003,0,108.9187164307,11.7559356689 +2011-11-29 20:13:29.566,-175.7204261887,134.5806,-148.3445027373,0.21362,64.2113801003,201.44366,50.003,0,108.8839187622,11.7135696411 +2011-11-29 20:13:29.600,-175.6975078769,134.5806,170.1741947318,0.21362,64.2400279901,201.44366,50.003,0,108.8941726685,11.7240066528 +2011-11-29 20:13:29.633,-175.6001050517,134.5806,0,0,64.3145125034,201.65728,50.003,0,108.9003219604,11.7472000122 +2011-11-29 20:13:29.666,-175.5428092722,134.5806,0,0,64.4061857507,201.65728,50.003,0,108.9094619751,11.7481307983 +2011-11-29 20:13:29.700,-175.5370796942,134.5806,110.5235586807,0.21362,64.4462927963,201.65728,50.003,0,108.8987350464,11.7291107178 +2011-11-29 20:13:29.733,-175.4855134927,134.5806,133.1611211664,0.21362,64.4462927963,201.65728,50.013,0,108.8821258545,11.7249679565 +2011-11-29 20:13:29.766,-175.4167585573,134.5806,-180,0,64.480670264,201.65728,50.003,0,108.8932952881,11.7100372314 +2011-11-29 20:13:29.800,-175.3709219336,134.36698,0,0,64.5666139333,201.44366,50.003,0,108.9089889526,11.7340240479 +2011-11-29 20:13:29.833,-175.3537331998,134.5806,180,0,64.6124505569,201.65728,50.023,0,108.9287338257,11.779296875 +2011-11-29 20:13:29.866,-175.3480036218,134.5806,85.1472579344,0.21362,64.6468280246,201.65728,50.003,0,108.9014053345,11.7508850098 +2011-11-29 20:13:29.900,-175.3136261541,134.5806,87.1354214835,0.21362,64.6812054923,201.65728,50.003,0,108.9190063477,11.751739502 +2011-11-29 20:13:29.933,-175.2391416408,134.5806,180,0,64.7041238041,201.65728,50.003,0,108.9239959717,11.7580108643 +2011-11-29 20:13:29.966,-175.1589275494,134.5806,-131.6886196329,0.21362,64.7728787395,201.44366,50.003,0,108.9025039673,11.7300491333 +2011-11-29 20:13:30.000,-175.1360092376,134.36698,0,0,64.8072562072,201.44366,50.003,0,108.8948974609,11.7199401855 +2011-11-29 20:13:30.033,-175.1073613479,134.36698,-24.0756865514,0.21362,64.8244449411,201.44366,50.003,0,108.914352417,11.7551956177 +2011-11-29 20:13:30.066,-175.0844430361,134.36698,-1.0771606548,0.21362,64.8702815647,201.44366,50.003,0,108.8997802734,11.7267532349 +2011-11-29 20:13:30.100,-175.0443359904,134.36698,28.9973940116,0.21362,64.9275773442,201.44366,50.003,0,108.90184021,11.7450714111 +2011-11-29 20:13:30.133,-174.9927697889,134.36698,41.2128542038,0.21362,64.956225234,201.65728,50.003,0,108.888381958,11.7264480591 +2011-11-29 20:13:30.166,-174.975581055,134.5806,73.2068174839,0.21362,64.956225234,201.65728,50.003,0,108.9130172729,11.7457275391 +2011-11-29 20:13:30.200,-174.981310633,134.5806,68.71482837,0.21362,64.9963322796,201.65728,50.023,0,108.9168930054,11.7412948608 +2011-11-29 20:13:30.233,-174.9068261196,134.36698,43.2926910001,0.42724,65.0593576371,201.65728,50.003,0,108.9072189331,11.7397460938 +2011-11-29 20:13:30.266,-174.8151528724,134.36698,11.2815389861,0.21362,65.1166534166,201.8709,50.003,0,108.9203796387,11.7424621582 +2011-11-29 20:13:30.300,-174.7750458267,134.36698,-13.9114152658,0.21362,65.1510308843,201.65728,50.003,0,108.9011764526,11.7237167358 +2011-11-29 20:13:30.333,-174.7635866708,134.5806,-180,0,65.1567604623,201.65728,50.003,0,108.8972167969,11.7298049927 +2011-11-29 20:13:30.366,-174.7292092031,134.5806,-172.5118625359,0.21362,65.1968675079,201.65728,50.003,0,108.9020690918,11.7188644409 +2011-11-29 20:13:30.400,-174.6318063779,134.36698,180,0,65.311459067,201.44366,50.003,0,108.9084701538,11.755065918 +2011-11-29 20:13:30.433,-174.5974289102,134.36698,4.8930595704,0.21362,65.3572956906,201.44366,50.003,0,108.9114151001,11.7544631958 +2011-11-29 20:13:30.466,-174.5859697543,134.36698,4.0336228777,0.21362,65.3802140024,201.44366,50.003,0,108.9236755371,11.7743911743 +2011-11-29 20:13:30.500,-174.5401331307,134.36698,0,0,65.4031323142,201.65728,50.003,0,108.9143829346,11.7374343872 +2011-11-29 20:13:30.533,-174.4942965071,134.36698,-110.6266910839,0.21362,65.4031323142,201.44366,50.003,0,108.9093093872,11.7520065308 +2011-11-29 20:13:30.566,-174.4599190394,134.36698,-91.5414669281,0.21362,65.4604280937,201.44366,50.003,0,108.8863220215,11.7292785645 +2011-11-29 20:13:30.600,-174.4312711496,134.5806,0,0,65.5349126071,201.65728,50.003,0,108.9136352539,11.7587661743 +2011-11-29 20:13:30.633,-174.385434526,134.5806,180,0,65.5750196527,201.65728,50.003,0,108.9194641113,11.7368621826 +2011-11-29 20:13:30.666,-174.3166795906,134.5806,-58.3786697459,0.21362,65.5979379645,201.65728,50.003,0,108.906539917,11.7529907227 +2011-11-29 20:13:30.700,-174.2593838111,134.36698,-38.6803807493,0.21362,65.6495041661,201.44366,50.003,0,108.8889389038,11.7196731567 +2011-11-29 20:13:30.733,-174.2421950772,134.36698,-10.3877248257,0.21362,65.6838816338,201.44366,50.003,0,108.9009399414,11.7405395508 +2011-11-29 20:13:30.766,-174.2479246552,134.36698,13.1321926644,0.21362,65.7297182574,201.44366,50.003,0,108.9118347168,11.7527008057 +2011-11-29 20:13:30.800,-174.2135471875,134.36698,72.9146090083,0.21362,65.7927436149,201.65728,50.003,0,108.8994216919,11.7378005981 +2011-11-29 20:13:30.833,-174.15052183,134.5806,135.0060452667,0.21362,65.7984731928,201.65728,50.003,0,108.9074707031,11.7389831543 +2011-11-29 20:13:30.866,-174.0703077387,134.5806,-180,0,65.8557689723,201.65728,50.003,0,108.9048156738,11.7374267578 +2011-11-29 20:13:30.900,-174.035930271,134.36698,-6.9728963667,0.21362,65.9245239078,201.44366,50.003,0,108.8948974609,11.7451858521 +2011-11-29 20:13:30.933,-174.030200693,134.36698,44.3125558754,0.21362,65.9417126416,201.44366,50.013,0,108.9101638794,11.742477417 +2011-11-29 20:13:30.966,-174.0072823812,134.5806,74.008958397,0.21362,65.9531717975,201.44366,50.003,0,108.9067382813,11.752532959 +2011-11-29 20:13:31.000,-173.9327978679,134.5806,180,0,66.010467577,201.44366,50.003,0,108.9275817871,11.7403259277 +2011-11-29 20:13:31.033,-173.8697725104,134.5806,-180,0,66.0448450447,201.44366,50.003,0,108.8905029297,11.7253417969 +2011-11-29 20:13:31.066,-173.8468541986,134.5806,-180,0,66.0448450447,201.44366,50.003,0,108.902961731,11.7606658936 +2011-11-29 20:13:31.100,-173.8124767309,134.5806,-145.0499954153,0.21362,66.1078704022,201.65728,50.003,0,108.9350814819,11.7690734863 +2011-11-29 20:13:31.133,-173.7838288411,134.5806,-150.9801085949,0.21362,66.1537070258,201.65728,50.003,0,108.8904266357,11.7325057983 +2011-11-29 20:13:31.166,-173.7265330616,134.5806,-142.1852064397,0.21362,66.1823549156,201.65728,50.003,0,108.9011459351,11.7200393677 +2011-11-29 20:13:31.200,-173.6978851719,134.5806,-146.9292969833,0.21362,66.2224619612,201.44366,50.003,0,108.9155426025,11.748085022 +2011-11-29 20:13:31.233,-173.686426016,134.5806,-165.8540929565,0.21362,66.2625690069,201.44366,50.003,0,108.8983917236,11.7314758301 +2011-11-29 20:13:31.266,-173.6463189703,134.5806,180,0,66.2854873187,201.65728,50.003,0,108.9117965698,11.7448654175 +2011-11-29 20:13:31.300,-173.5947527687,134.36698,40.5596823173,0.21362,66.3427830982,201.65728,50.003,0,108.9150619507,11.740814209 +2011-11-29 20:13:31.333,-173.5145386774,134.5806,32.1486618848,0.21362,66.4115380336,201.65728,50.003,0,108.9213027954,11.7776947021 +2011-11-29 20:13:31.366,-173.4801612097,134.5806,180,0,66.4401859234,201.8709,50.003,0,108.911567688,11.7540054321 +2011-11-29 20:13:31.400,-173.4858907877,134.5806,96.3142053615,0.21362,66.4516450793,201.65728,50.003,0,108.8943328857,11.7307891846 +2011-11-29 20:13:31.433,-173.4171358522,134.5806,115.1129506197,0.21362,66.5261295926,201.65728,50.003,0,108.9193572998,11.7556304932 +2011-11-29 20:13:31.466,-173.325462605,134.5806,156.8815738848,0.21362,66.600614106,201.65728,50.003,0,108.9143371582,11.7476043701 +2011-11-29 20:13:31.500,-173.2738964035,134.5806,-103.7340088084,0.21362,66.6349915737,201.65728,50.003,0,108.9296188354,11.7811965942 +2011-11-29 20:13:31.533,-173.2624372476,134.5806,0,0,66.6808281973,201.65728,50.003,0,108.9038543701,11.7516937256 +2011-11-29 20:13:31.566,-173.2738964035,134.5806,91.4154162131,0.21362,66.7037465091,201.65728,50.003,0,108.9060440063,11.7289657593 +2011-11-29 20:13:31.600,-173.2395189358,134.5806,130.6458364457,0.21362,66.7323943989,201.65728,50.023,0,108.9095306396,11.7495727539 +2011-11-29 20:13:31.633,-173.1593048444,134.5806,-177.679941848,0.21362,66.7896901784,201.65728,50.003,0,108.9005889893,11.7152404785 +2011-11-29 20:13:31.666,-173.1077386429,134.5806,180,0,66.8240676461,201.65728,50.003,0,108.9095993042,11.7536087036 +2011-11-29 20:13:31.700,-173.096279487,134.5806,152.1833199647,0.21362,66.8240676461,201.65728,50.003,0,108.8984603882,11.745262146 +2011-11-29 20:13:31.733,-173.0676315972,134.5806,-168.4954283921,0.21362,66.8183380682,201.65728,50.003,0,108.9105911255,11.7517623901 +2011-11-29 20:13:31.766,-173.0275245516,134.5806,-150.3326662864,0.21362,66.8699042697,201.65728,50.003,0,108.8968276978,11.7229309082 +2011-11-29 20:13:31.800,-172.97595835,134.5806,162.9205490455,0.21362,66.9787662508,201.65728,50.013,0,108.9060516357,11.7373962402 +2011-11-29 20:13:31.833,-172.9072034146,134.5806,173.3712992286,0.21362,66.9959549846,201.65728,50.003,0,108.9111785889,11.7592010498 +2011-11-29 20:13:31.866,-172.8441780571,134.5806,-97.4028251722,0.21362,67.0074141405,201.65728,50.003,0,108.9011764526,11.7418670654 +2011-11-29 20:13:31.900,-172.7983414335,134.5806,-180,0,67.0933578098,201.65728,50.003,0,108.9156951904,11.7429122925 +2011-11-29 20:13:31.933,-172.7525048099,134.5806,-180,0,67.1678423232,201.65728,50.003,0,108.9110641479,11.7357025146 +2011-11-29 20:13:31.966,-172.7295864981,134.5806,180,0,67.2136789468,201.44366,50.003,0,108.9058990479,11.7597198486 +2011-11-29 20:13:32.000,-172.7066681863,134.36698,-180,0,67.2423268366,201.44366,50.003,0,108.9004440308,11.7531585693 +2011-11-29 20:13:32.033,-172.6837498745,134.36698,-180,0,67.2652451484,201.44366,50.003,0,108.9179382324,11.7482147217 +2011-11-29 20:13:32.066,-172.6608315627,134.5806,136.6332454048,0.21362,67.2996226161,201.65728,50.003,0,108.897026062,11.7359390259 +2011-11-29 20:13:32.100,-172.6321836729,134.5806,113.3253222989,0.21362,67.3397296617,201.8709,50.003,0,108.9043884277,11.7489089966 +2011-11-29 20:13:32.133,-172.5748878934,134.5806,78.8619109218,0.21362,67.3683775515,201.65728,50.003,0,108.9048614502,11.7295837402 +2011-11-29 20:13:32.166,-172.4946738021,134.5806,-41.9691584933,0.21362,67.4084845971,201.65728,50.003,0,108.9082183838,11.7468185425 +2011-11-29 20:13:32.200,-172.4316484446,134.36698,-67.3626479735,0.21362,67.4944282664,201.65728,50.003,0,108.8976287842,11.7283477783 +2011-11-29 20:13:32.233,-172.4030005549,134.5806,-101.0640254831,0.21362,67.5230761562,201.65728,50.003,0,108.8935165405,11.7223968506 +2011-11-29 20:13:32.266,-172.3686230872,134.5806,-106.2492935291,0.21362,67.5230761562,201.65728,50.003,0,108.9143981934,11.7584228516 +2011-11-29 20:13:32.300,-172.3399751974,134.5806,-180,0,67.5803719357,201.65728,50.013,0,108.9077529907,11.7412948608 +2011-11-29 20:13:32.333,-172.3113273076,134.5806,103.0178115645,0.21362,67.6204789813,201.65728,50.003,0,108.8983154297,11.722442627 +2011-11-29 20:13:32.366,-172.2540315281,134.5806,137.4296567401,0.21362,67.6319381372,201.65728,50.003,0,108.9174499512,11.7483978271 +2011-11-29 20:13:32.400,-172.2081949045,134.5806,156.6008245652,0.21362,67.7006930727,201.65728,50.003,0,108.9036331177,11.7333908081 +2011-11-29 20:13:32.433,-172.1680878589,134.5806,0,0,67.7866367419,201.65728,50.003,0,108.9125976563,11.7383499146 +2011-11-29 20:13:32.466,-172.1451695471,134.5806,0,0,67.8324733655,201.65728,50.003,0,108.903213501,11.7393264771 +2011-11-29 20:13:32.500,-172.1222512353,134.36698,-180,0,67.8324733655,201.44366,50.003,0,108.8937988281,11.7263641357 +2011-11-29 20:13:32.533,-172.0764146116,134.5806,-151.1577255114,0.21362,67.8496620994,201.44366,50.003,0,108.8905029297,11.7281799316 +2011-11-29 20:13:32.566,-172.030577988,134.5806,-180,0,67.901228301,201.65728,50.003,0,108.9139480591,11.7747497559 +2011-11-29 20:13:32.600,-171.9962005203,134.5806,72.4505131943,0.21362,67.9642536584,201.65728,50.003,0,108.9020004272,11.7306900024 +2011-11-29 20:13:32.633,-171.9331751629,134.5806,95.9475123726,0.21362,68.010090282,201.65728,50.003,0,108.9188613892,11.7590103149 +2011-11-29 20:13:32.666,-171.8930681172,134.5806,-163.1153546958,0.21362,68.0272790159,201.65728,50.003,0,108.9086380005,11.7376327515 +2011-11-29 20:13:32.700,-171.8758793833,134.5806,-142.7753529687,0.21362,68.0673860615,201.65728,50.003,0,108.9081268311,11.748878479 +2011-11-29 20:13:32.733,-171.8415019156,134.36698,4.944625772,0.21362,68.0731156395,201.44366,50.003,0,108.91065979,11.7453613281 +2011-11-29 20:13:32.766,-171.7899357141,134.5806,54.4710975831,0.21362,68.1074931072,201.44366,50.003,0,108.9273452759,11.7584686279 +2011-11-29 20:13:32.800,-171.7440990905,134.5806,148.8773534868,0.21362,68.1762480426,201.65728,50.003,0,108.907989502,11.736907959 +2011-11-29 20:13:32.833,-171.6982624669,134.5806,-163.9346843428,0.21362,68.1991663544,201.65728,50.023,0,108.8904876709,11.7105636597 +2011-11-29 20:13:32.866,-171.6295075314,134.5806,-131.2703604424,0.21362,68.2564621339,201.65728,50.003,0,108.9077758789,11.7397537231 +2011-11-29 20:13:32.900,-171.5779413299,134.5806,-180,0,68.3309466473,201.65728,50.003,0,108.9225234985,11.7581100464 +2011-11-29 20:13:32.933,-171.566482174,134.5806,117.2672719294,0.21362,68.3424058032,201.44366,50.003,0,108.90234375,11.7471923828 +2011-11-29 20:13:32.966,-171.566482174,134.5806,93.66141077,0.21362,68.3481353812,201.44366,50.003,0,108.9211044312,11.7570877075 +2011-11-29 20:13:33.000,-171.5378342842,134.5806,0,0,68.371053693,201.65728,50.003,0,108.9114532471,11.7417144775 +2011-11-29 20:13:33.033,-171.4576201929,134.5806,-58.837035982,0.21362,68.4512677843,201.65728,50.003,0,108.9160079956,11.7567901611 +2011-11-29 20:13:33.066,-171.4003244134,134.5806,180,0,68.5544001874,201.8709,50.003,0,108.9047088623,11.7457122803 +2011-11-29 20:13:33.100,-171.3945948354,134.5806,116.7573394918,0.21362,68.5887776551,201.65728,50.003,0,108.9108657837,11.7477493286 +2011-11-29 20:13:33.133,-171.3602173677,134.5806,80.718294178,0.21362,68.5887776551,201.44366,50.003,0,108.8870925903,11.7159347534 +2011-11-29 20:13:33.166,-171.2971920103,134.5806,94.2458277211,0.21362,68.6288847008,201.44366,50.003,0,108.9074172974,11.7379837036 +2011-11-29 20:13:33.200,-171.2398962307,134.5806,123.8219091057,0.21362,68.7033692141,201.65728,50.003,0,108.898147583,11.7231369019 +2011-11-29 20:13:33.233,-171.211248341,134.5806,0,0,68.7033692141,201.65728,50.003,0,108.9351043701,11.7723083496 +2011-11-29 20:13:33.266,-171.1883300292,134.36698,2.6814424812,0.21362,68.7262875259,201.44366,50.003,0,108.9193115234,11.7568054199 +2011-11-29 20:13:33.300,-171.1138455158,134.36698,11.8946038269,0.21362,68.8236903511,201.65728,50.003,0,108.9076004028,11.7498626709 +2011-11-29 20:13:33.333,-171.0622793143,134.5806,0,0,68.8637973968,201.65728,50.003,0,108.9183044434,11.7508468628 +2011-11-29 20:13:33.366,-171.0279018466,134.5806,-37.6605158739,0.21362,68.8752565527,201.65728,50.013,0,108.90574646,11.7345962524 +2011-11-29 20:13:33.400,-170.9935243788,134.5806,-61.7132841135,0.21362,68.9153635983,201.65728,50.003,0,108.9196243286,11.7567825317 +2011-11-29 20:13:33.433,-170.9247694434,134.5806,-95.3573658436,0.21362,68.9841185338,201.65728,50.003,0,108.8988342285,11.7327575684 +2011-11-29 20:13:33.466,-170.8846623978,134.5806,0,0,69.0414143133,201.65728,50.003,0,108.8976593018,11.7327880859 +2011-11-29 20:13:33.500,-170.8674736639,134.5806,0,0,69.0643326251,201.65728,50.003,0,108.9175796509,11.7495727539 +2011-11-29 20:13:33.533,-170.8445553521,134.5806,-180,0,69.0643326251,201.44366,50.003,0,108.9033126831,11.7451553345 +2011-11-29 20:13:33.566,-170.8330961962,134.5806,86.957804567,0.21362,69.070062203,201.44366,50.003,0,108.9139862061,11.743927002 +2011-11-29 20:13:33.600,-170.8101778844,134.5806,79.7098884586,0.21362,69.1158988266,201.65728,50.003,0,108.9191970825,11.7429580688 +2011-11-29 20:13:33.633,-170.7471525269,134.5806,103.900166569,0.21362,69.184653762,201.8709,50.003,0,108.8771896362,11.7264099121 +2011-11-29 20:13:33.666,-170.6898567474,134.5806,180,0,69.2648678534,201.8709,50.003,0,108.893951416,11.7269821167 +2011-11-29 20:13:33.700,-170.62683139,134.5806,-180,0,69.3164340549,201.65728,50.003,0,108.918006897,11.7542648315 +2011-11-29 20:13:33.733,-170.5809947663,134.5806,-180,0,69.3164340549,201.44366,50.003,0,108.9091415405,11.7450790405 +2011-11-29 20:13:33.766,-170.5638060325,134.36698,-180,0,69.3221636329,201.44366,50.003,0,108.8977355957,11.7231826782 +2011-11-29 20:13:33.800,-170.5236989868,134.5806,-180,0,69.3909185683,201.65728,50.003,0,108.8998260498,11.7425537109 +2011-11-29 20:13:33.833,-170.4664032073,134.5806,-144.0645080077,0.21362,69.4367551919,201.65728,50.003,0,108.9008636475,11.7437667847 +2011-11-29 20:13:33.866,-170.4492144735,134.5806,153.2203735739,0.21362,69.4768622376,201.65728,50.003,0,108.9086456299,11.7290802002 +2011-11-29 20:13:33.900,-170.4205665837,134.5806,136.8738876788,0.21362,69.5513467509,201.65728,50.003,0,108.9125442505,11.7729415894 +2011-11-29 20:13:33.933,-170.3288933365,134.5806,180,0,69.6143721084,201.65728,50.013,0,108.9029083252,11.7062072754 +2011-11-29 20:13:33.966,-170.2887862908,134.5806,0,0,69.6372904202,201.44366,50.003,0,108.8963928223,11.7113418579 +2011-11-29 20:13:34.000,-170.2945158688,134.36698,49.4920943434,0.21362,69.6315608422,201.44366,50.003,0,108.9042053223,11.7478179932 +2011-11-29 20:13:34.033,-170.2429496672,134.5806,43.2583135324,0.21362,69.6773974659,201.44366,50.003,0,108.9077529907,11.7573471069 +2011-11-29 20:13:34.066,-170.1799243098,134.5806,0,0,69.7461524013,201.44366,50.003,0,108.9167327881,11.7492446899 +2011-11-29 20:13:34.100,-170.145546842,134.5806,0,0,69.774800291,201.65728,50.003,0,108.8961868286,11.7382736206 +2011-11-29 20:13:34.133,-170.1283581082,134.5806,180,0,69.7633411351,201.65728,50.003,0,108.8978805542,11.7284317017 +2011-11-29 20:13:34.166,-170.0997102184,134.5806,-180,0,69.774800291,201.65728,50.003,0,108.9037780762,11.7450485229 +2011-11-29 20:13:34.200,-170.036684861,134.5806,180,0,69.8607439603,201.44366,50.003,0,108.9142456055,11.7521057129 +2011-11-29 20:13:34.233,-169.9736595035,134.5806,129.4770025437,0.21362,69.9466876296,201.44366,50.023,0,108.9125061035,11.7442016602 diff --git a/PMUSimulator/DataDir/50Hz_measurement_files/Rect - Integer Point - 3 phasors, 2 analogs.csv b/PMUSimulator/DataDir/50Hz_measurement_files/Rect - Integer Point - 3 phasors, 2 analogs.csv new file mode 100755 index 0000000..abb910a --- /dev/null +++ b/PMUSimulator/DataDir/50Hz_measurement_files/Rect - Integer Point - 3 phasors, 2 analogs.csv @@ -0,0 +1,581 @@ +2011-11-29 19:59:41.333,-144.2882488,134166.76221621,180,0.21362,95.1669489197,201.6220884654,50.003,0,97.1605606079,108.8662872314 +2011-11-29 19:59:41.366,-144.2491587664,134164.942969119,180,0.21362,95.2274017294,201.6414389117,50.003,0,97.1727600098,108.8741531372 +2011-11-29 19:59:41.400,-144.2068962754,134168.540518895,180,0.21362,95.293442253,201.4483038595,50.003,0,97.1526794434,108.8799057007 +2011-11-29 19:59:41.433,-144.1678057152,134166.851241233,0,0,95.3539348416,201.4681240076,50.003,0,97.1575317383,108.8589401245 +2011-11-29 19:59:41.466,-144.1255460713,134170.589301778,0,0,95.3539348416,201.4681240076,50.003,0,97.1708602905,108.8584594727 +2011-11-29 19:59:41.500,-144.0841617369,134161.615219975,0,0,95.3539348416,201.4681240076,50.003,0,97.1524353027,108.8847961426 +2011-11-29 19:59:41.533,-144.041902842,134165.497742137,0,0,95.4144154617,201.4881686884,50.003,0,97.1456222534,108.8779830933 +2011-11-29 19:59:41.566,-144.005107375,134171.479211599,0,0,95.4748839819,201.508437835,50.003,0,97.1670150757,108.8718185425 +2011-11-29 19:59:41.600,-143.962853936,134175.498256946,0,0,95.5353402713,201.5289313796,50.003,0,97.1424026489,108.8986740112 +2011-11-29 19:59:41.633,-143.921460443,134166.799388069,0,0,95.5353402713,201.5289313796,50.003,0,97.1590423584,108.8726882935 +2011-11-29 19:59:41.666,-143.8792081037,134170.962883454,0,0,95.5957841991,201.5496492538,50.003,0,97.1589355469,108.8755187988 +2011-11-29 19:59:41.700,-143.840114839,134169.797155253,0,0,95.716634447,201.5917577133,50.003,0,97.1447982788,108.8520965576 +2011-11-29 19:59:41.733,-143.8010209132,134168.693889759,0,0.21362,95.7226885098,201.3792012354,50.003,0,97.1604156494,108.8694000244 +2011-11-29 19:59:41.766,-143.7587730339,134173.065354235,0,0,95.7226885098,201.3792012354,50.003,0,97.1587524414,108.8766021729 +2011-11-29 19:59:41.800,-143.7196794499,134172.092055856,90,0.21362,95.7770405062,201.6131481583,50.003,0,97.1608428955,108.8963241577 +2011-11-29 19:59:41.833,-143.6774353553,134176.603965256,180,0.21362,95.8374336819,201.6347626517,50.003,0,97.142868042,108.8790740967 +2011-11-29 19:59:41.866,-143.6360242864,134168.388084949,-90,0.42724,95.8978138441,201.6566011217,50.003,0,97.1536483765,108.8727722168 +2011-11-29 19:59:41.900,-143.5937819065,134173.04442652,-90,0.21362,95.8978138441,201.6566011217,50.003,0,97.1532287598,108.8821258545 +2011-11-29 19:59:41.933,-143.5523646821,134164.970145553,0,0,95.8978138441,201.6566011217,50.003,0,97.1376190186,108.8727493286 +2011-11-29 19:59:41.966,-143.5132675436,134164.326656088,-90,0.21362,95.9644871013,201.4661987073,50.003,0,97.1612930298,108.8745727539 +2011-11-29 19:59:42.000,-143.4764969973,134171.102820135,-90,0.21362,96.0917526792,201.2986270906,50.003,0,97.1406021118,108.8658599854 +2011-11-29 19:59:42.033,-143.4319320364,134168.681395194,0,0,96.0917526792,201.2986270906,50.003,0,97.1444320679,108.8821563721 +2011-11-29 19:59:42.066,-143.3928355162,134168.230340622,90,0.21362,96.0853070282,201.5110421027,50.003,0,97.1426925659,108.8840103149 +2011-11-29 19:59:42.100,-143.3506019728,134173.306491253,0,0.21362,96.0853070282,201.5110421027,50.003,0,97.1467971802,108.8726882935 +2011-11-29 19:59:42.133,-143.3115065852,134172.985391605,-90,0.21362,96.1456966946,201.5337997054,50.003,0,97.1567840576,108.866104126 +2011-11-29 19:59:42.166,-143.2700729313,134165.389036794,180,0.21362,96.2060726568,201.5567811439,50.003,0,97.1658935547,108.8693084717 +2011-11-29 19:59:42.200,-143.2278432684,134170.677074824,180,0.21362,96.3267829515,201.6034152213,50.003,0,97.1363677979,108.8723602295 +2011-11-29 19:59:42.233,-143.1887469391,134170.552130969,0,0,96.3267829515,201.6034152213,50.003,0,97.1538238525,108.8650360107 +2011-11-29 19:59:42.266,-143.1496505552,134170.489658998,-90,0.21362,96.3267829515,201.6034152213,50.003,0,97.1483917236,108.8839645386 +2011-11-29 19:59:42.300,-143.1050803159,134168.663590437,-90,0.21362,96.3334802806,201.3910976388,50.003,0,97.1638565063,108.8836288452 +2011-11-29 19:59:42.333,-143.0659834039,134168.734809451,0,0,96.3938771643,201.4147750553,50.003,0,97.1505737305,108.8585357666 +2011-11-29 19:59:42.366,-143.0268865516,134168.868501182,0,0,96.4542597825,201.4386762268,50.003,0,97.1700973511,108.8736038208 +2011-11-29 19:59:42.400,-142.9846680146,134174.576201693,0,0,96.5146280064,201.4628010736,50.003,0,97.1529846191,108.8689727783 +2011-11-29 19:59:42.433,-142.9432171066,134167.53345208,0,0,96.574981707,201.4871495155,50.003,0,97.1615142822,108.8869934082 +2011-11-29 19:59:42.466,-142.9010017765,134173.385516633,0,0,96.5819446552,201.2749360108,50.003,0,97.1631088257,108.9048461914 +2011-11-29 19:59:42.500,-142.8650233937,134168.2556422,90,0.21362,96.7027334382,201.3243553921,50.003,0,97.1630172729,108.8676757813 +2011-11-29 19:59:42.533,-142.8228117617,134174.242611036,0,0,96.7631054606,201.3494004921,50.003,0,97.1463394165,108.854019165 +2011-11-29 19:59:42.566,-142.7813524623,134167.474102373,90,0.21362,96.6956450242,201.5365168594,50.003,0,97.142539978,108.865814209 +2011-11-29 19:59:42.600,-142.742256075,134168.062600412,90,0.21362,96.748818344,201.7736738354,50.003,0,97.1609573364,108.8795166016 +2011-11-29 19:59:42.633,-142.6976807346,134166.978687479,0,0.21362,96.816248707,201.5867776015,50.003,0,97.1533279419,108.8818054199 +2011-11-29 19:59:42.666,-142.6554763934,134173.25432823,0,0.21362,96.8765278656,201.6122427886,50.003,0,97.1426773071,108.8528900146 +2011-11-29 19:59:42.700,-142.6163823661,134174.043955532,0,0.21362,96.8765278656,201.6122427886,50.003,0,97.164604187,108.881362915 +2011-11-29 19:59:42.733,-142.5749129145,134167.62528789,0,0.21362,96.8765278656,201.6122427886,50.003,0,97.1471252441,108.8760681152 +2011-11-29 19:59:42.766,-142.5358177785,134168.543642539,90,0.21362,96.8765278656,201.6122427886,50.003,0,97.1599655151,108.868637085 +2011-11-29 19:59:42.800,-142.4967231959,134169.524463352,0,0,96.9970401786,201.663842372,50.003,0,97.1474227905,108.8768005371 +2011-11-29 19:59:42.833,-142.4552467444,134163.308624461,-90,0.21362,97.0572730784,201.6899765972,50.003,0,97.1506118774,108.8864746094 +2011-11-29 19:59:42.866,-142.4130530318,134170.002376627,0,0,96.9970401786,201.663842372,50.003,0,97.1487579346,108.8761444092 +2011-11-29 19:59:42.900,-142.3715729177,134163.928378295,0,0,97.0572730784,201.6899765972,50.003,0,97.1480484009,108.8860855103 +2011-11-29 19:59:42.933,-142.3324783899,134165.171625844,0,0,97.1174903041,201.7163336626,50.003,0,97.1491851807,108.8600692749 +2011-11-29 19:59:42.966,-142.2933846047,134166.47733574,180,0.21362,97.1852800969,201.5309692977,50.003,0,97.1640777588,108.8804397583 +2011-11-29 19:59:43.000,-142.2542915988,134167.84550616,180,0.21362,97.2531946127,201.3458875664,50.003,0,97.1632995605,108.8935317993 +2011-11-29 19:59:43.033,-142.2097140084,134167.650589582,-135,0.3021043012,97.2531946127,201.3458875664,50.003,0,97.1572723389,108.872253418 +2011-11-29 19:59:43.066,-142.1706222587,134169.152439486,-90,0.21362,97.3057595333,201.5848534344,50.003,0,97.1592712402,108.868637085 +2011-11-29 19:59:43.100,-142.1315314022,134170.716744473,0,0,97.3659749683,201.6121296171,50.003,0,97.1526947021,108.8811569214 +2011-11-29 19:59:43.133,-142.086954727,134170.745481535,0,0,97.3737663613,201.4002743841,50.003,0,97.1536560059,108.8487014771 +2011-11-29 19:59:43.166,-142.0478653713,134172.443456118,180,0.21362,97.3737663613,201.4002743841,50.003,0,97.1671447754,108.8970489502 +2011-11-29 19:59:43.200,-142.0063704176,134166.988683258,180,0.21362,97.48635664,201.6673497592,50.003,0,97.1545639038,108.8803100586 +2011-11-29 19:59:43.233,-141.9672810446,134168.815399342,0,0,97.48635664,201.6673497592,50.003,0,97.1641311646,108.8821105957 +2011-11-29 19:59:43.266,-141.9257817546,134163.497299822,-90,0.21362,97.5545006024,201.4835257478,50.003,0,97.145866394,108.8701477051 +2011-11-29 19:59:43.300,-141.8836164608,134171.10375721,-90,0.21362,97.6749063679,201.5401396743,50.003,0,97.1462020874,108.88331604 +2011-11-29 19:59:43.333,-141.8445300762,134173.126575592,0,0,97.6749063679,201.5401396743,50.003,0,97.142364502,108.8635864258 +2011-11-29 19:59:43.366,-141.8030273816,134168.016682664,0,0,97.6668042618,201.7518480378,50.003,0,97.1460723877,108.8735046387 +2011-11-29 19:59:43.400,-141.7639413701,134170.168240248,0,0,97.7269196639,201.7804585764,50.003,0,97.1483764648,108.8705215454 +2011-11-29 19:59:43.433,-141.7224347531,134165.195053765,0,0,97.7350837543,201.5687802626,50.003,0,97.1462402344,108.8747634888 +2011-11-29 19:59:43.466,-141.6833492695,134167.475351841,0,0,97.803487287,201.3859992662,50.003,0,97.1564407349,108.858505249 +2011-11-29 19:59:43.500,-141.6387731128,134168.320614131,0,0,97.7952439757,201.5976431414,50.003,0,97.1579742432,108.8791732788 +2011-11-29 19:59:43.533,-141.5996900226,134170.734548958,90,0.21362,97.855386907,201.6267282153,50.003,0,97.1472930908,108.8657226563 +2011-11-29 19:59:43.566,-141.560608357,134173.210911088,135,0.3021043012,97.915512423,201.6560353881,50.003,0,97.1746368408,108.8845672607 +2011-11-29 19:59:43.600,-141.5190954592,134168.582688091,180,0.21362,97.9840495513,201.4740130473,50.003,0,97.1542053223,108.8653030396 +2011-11-29 19:59:43.633,-141.4800147117,134171.18778162,0,0,97.9756203991,201.685564563,50.003,0,97.1440124512,108.8623962402 +2011-11-29 19:59:43.666,-141.4384984699,134166.696306418,0,0,98.0357107105,201.7153156425,50.003,0,97.1391601563,108.8735351563 +2011-11-29 19:59:43.700,-141.3963634622,134175.142179449,0,0,98.1644523378,201.5640259803,50.003,0,97.1470184326,108.87840271 +2011-11-29 19:59:43.733,-141.35484571,134170.792647786,180,0.21362,98.1730849264,201.3525734046,50.003,0,97.1436004639,108.8637542725 +2011-11-29 19:59:43.766,-141.3133252876,134166.51357057,180,0.21362,98.1730849264,201.3525734046,50.003,0,97.1549224854,108.8487548828 +2011-11-29 19:59:43.800,-141.2742482326,134169.447309872,90,0.21362,98.1644523378,201.5640259803,50.003,0,97.1692199707,108.8696670532 +2011-11-29 19:59:43.833,-141.232124645,134178.175991921,90,0.21362,98.2245505789,201.5944740861,50.003,0,97.1523132324,108.8698730469 +2011-11-29 19:59:43.866,-141.1906027211,134174.105176442,0,0,98.2245505789,201.5944740861,50.003,0,97.1693572998,108.868927002 +2011-11-29 19:59:43.900,-141.152123191,134164.361954377,0,0,98.2846306027,201.6251439225,50.003,0,97.1690063477,108.8721923828 +2011-11-29 19:59:43.933,-141.1130492264,134167.553131187,0,0,98.3446922853,201.6560353881,50.003,0,97.1612091064,108.8774032593 +2011-11-29 19:59:43.966,-141.068479069,134169.437314277,0,0.21362,98.4047355032,201.6871483812,50.003,0,97.1595840454,108.8792572021 +2011-11-29 19:59:44.000,-141.0294086329,134172.762058226,90,0.21362,98.4737011108,201.5071923038,50.003,0,97.165687561,108.8862609863 +2011-11-29 19:59:44.033,-140.9878791961,134169.035303295,90,0.21362,98.4826608581,201.2959067255,50.003,0,97.1542510986,108.8827056885 +2011-11-29 19:59:44.066,-140.9463474739,134165.379040896,0,0,98.5337685334,201.5387811263,50.003,0,97.1725387573,108.8737411499 +2011-11-29 19:59:44.100,-140.9072789997,134168.898800458,0,0,98.5247660519,201.7500385393,50.003,0,97.1617660522,108.8791351318 +2011-11-29 19:59:44.133,-140.865745101,134165.379353268,0,0,98.5847531368,201.7818154972,50.003,0,97.1501617432,108.8582229614 +2011-11-29 19:59:44.166,-140.8266787988,134169.027806575,180,0.21362,98.6538465775,201.6026229849,50.003,0,97.1574020386,108.8806762695 +2011-11-29 19:59:44.200,-140.785142888,134165.645181428,135,0.3021043012,98.7138569533,201.6348758105,50.003,0,97.1441345215,108.8570556641 +2011-11-29 19:59:44.233,-140.7460789123,134169.422320882,90,0.21362,98.7138569533,201.6348758105,50.003,0,97.1560211182,108.8855209351 +2011-11-29 19:59:44.266,-140.7045411539,134166.176523797,90,0.21362,98.7230628526,201.4237241673,50.003,0,97.1674957275,108.8739547729 +2011-11-29 19:59:44.300,-140.6630014075,134163.001245489,0,0,98.8431484161,201.4889613749,50.003,0,97.1586151123,108.8799743652 +2011-11-29 19:59:44.333,-140.6209181225,134172.781736566,0,0,98.8431484161,201.4889613749,50.003,0,97.1572570801,108.8792724609 +2011-11-29 19:59:44.366,-140.5793785083,134169.748426844,0,0,98.8937720273,201.7329605975,50.003,0,97.1682815552,108.8765029907 +2011-11-29 19:59:44.400,-140.5433403984,134168.035736969,0,0,98.9537046276,201.7660972716,50.003,0,97.1553039551,108.8807830811 +2011-11-29 19:59:44.433,-140.4987807773,134170.957573354,0,0,98.9631557164,201.5550830977,50.003,0,97.1482467651,108.8891601563 +2011-11-29 19:59:44.466,-140.459726964,134175.191842946,0,0.21362,98.9726266149,201.3440744195,50.003,0,97.1551818848,108.8756408691 +2011-11-29 19:59:44.500,-140.4181846586,134172.432211324,0,0,99.0326618773,201.3775016918,50.003,0,97.1510162354,108.8777160645 +2011-11-29 19:59:44.533,-140.3766406661,134169.743116695,0,0,99.0830837781,201.6220884654,50.003,0,97.1447219849,108.8905944824 +2011-11-29 19:59:44.566,-140.33509503,134167.124563303,0,0,99.1430177908,201.6559222412,50.003,0,97.1340026855,108.8702087402 +2011-11-29 19:59:44.600,-140.2960454641,134171.620084813,0,0,99.2029316299,201.6899765972,50.003,0,97.152130127,108.8807373047 +2011-11-29 19:59:44.633,-140.2544988987,134169.138383149,90,0.21362,99.2029316299,201.6899765972,50.003,0,97.1584014893,108.8794937134 +2011-11-29 19:59:44.666,-140.2129508181,134166.727230922,135,0.3021043012,99.2628251747,201.7242514216,50.003,0,97.1588439941,108.8943786621 +2011-11-29 19:59:44.700,-140.1739053461,134171.417677133,180,0.21362,99.3226983046,201.7587466021,50.003,0,97.1608734131,108.8545227051 +2011-11-29 19:59:44.733,-140.1323565853,134169.143380958,0,0,99.3325358585,201.5479511475,50.003,0,97.1581802368,108.8549575806 +2011-11-29 19:59:44.766,-140.0908064377,134166.93964146,0,0.21362,99.3924493408,201.582702873,50.003,0,97.1713943481,108.8742370605 +2011-11-29 19:59:44.800,-140.0517654147,134171.824991042,0,0,99.4523421037,201.6176749456,50.003,0,97.1452026367,108.8734817505 +2011-11-29 19:59:44.833,-140.0102148361,134169.758110055,180,0.21362,99.4423828389,201.8283975786,50.003,0,97.1702957153,108.8597717285 +2011-11-29 19:59:44.866,-139.9686629992,134167.761792023,180,0.21362,99.4423828389,201.8283975786,50.003,0,97.1493835449,108.8867721558 +2011-11-29 19:59:44.900,-139.9296267798,134172.842020989,90,0.21362,99.5122140271,201.6528672504,50.003,0,97.146697998,108.864692688 +2011-11-29 19:59:44.933,-139.8880747612,134170.982562058,90,0.21362,99.5720649912,201.6882796724,50.003,0,97.1599884033,108.8801422119 +2011-11-29 19:59:44.966,-139.8465216127,134169.193671401,-45,0.3021043012,99.6318948765,201.7239120954,50.003,0,97.1522750854,108.8712844849 +2011-11-29 19:59:45.000,-139.804967378,134167.475351841,-90,0.21362,99.6917035637,201.7597644031,50.003,0,97.1517181396,108.8824386597 +2011-11-29 19:59:45.033,-139.7659374706,134172.816720276,0,0,99.6318948765,201.7239120954,50.003,0,97.1571502686,108.8837127686 +2011-11-29 19:59:45.066,-139.7273663379,134165.316878888,0,0,99.6917035637,201.7597644031,50.003,0,97.1704711914,108.8791503906 +2011-11-29 19:59:45.100,-139.6858094975,134163.800929152,0,0,99.811256868,201.8321282026,50.003,0,97.1574020386,108.8654403687 +2011-11-29 19:59:45.133,-139.6412723941,134168.284067424,0,0,99.8710012479,201.8686394582,50.003,0,97.1453094482,108.8835830688 +2011-11-29 19:59:45.166,-139.6022494358,134173.886530207,0,0,99.8814061204,201.6581851675,50.003,0,97.1674804688,108.8703155518 +2011-11-29 19:59:45.200,-139.560693968,134172.583078899,0,0,99.9411892427,201.6949541609,50.003,0,97.1544570923,108.8787384033 +2011-11-29 19:59:45.233,-139.522111589,134165.406841986,90,0.21362,99.9411892427,201.6949541609,50.003,0,97.1545791626,108.8906402588 +2011-11-29 19:59:45.266,-139.4805527779,134164.239503637,0,0,99.951676388,201.484544939,50.003,0,97.1675720215,108.8887252808 +2011-11-29 19:59:45.300,-139.4415355452,134170.098271439,0,0,100.0712978031,201.5588187805,50.003,0,97.1471557617,108.8903808594 +2011-11-29 19:59:45.333,-139.3999775485,134169.067789076,90,0.21362,100.0712978031,201.5588187805,50.003,0,97.153427124,108.8887329102 +2011-11-29 19:59:45.366,-139.3584189354,134168.107893413,45,0.3021043012,100.0712978031,201.5588187805,50.003,0,97.1553039551,108.8861999512 +2011-11-29 19:59:45.400,-139.3168597494,134167.218585966,0,0,100.12040699,201.8065776996,50.003,0,97.1544799805,108.8711166382 +2011-11-29 19:59:45.433,-139.2753000344,134166.399868139,0,0,100.1908305698,201.6339705384,50.003,0,97.1804275513,108.8857879639 +2011-11-29 19:59:45.466,-139.2362926903,134172.585890095,90,0.21362,100.1908305698,201.6339705384,50.003,0,97.1690979004,108.8721237183 +2011-11-29 19:59:45.500,-139.1947342085,134171.904017294,90,0.21362,100.1908305698,201.6339705384,50.003,0,97.1575698853,108.8747177124 +2011-11-29 19:59:45.533,-139.1531753261,134171.292733968,0,0,100.2505634158,201.6718753299,50.003,0,97.1634750366,108.882522583 +2011-11-29 19:59:45.566,-139.1145718471,134164.759293763,0,0,100.3211452867,201.4998321895,50.003,0,97.1780853271,108.8699951172 +2011-11-29 19:59:45.600,-139.0755716272,134171.201525384,180,0.21362,100.440618204,201.5768170087,50.003,0,97.175163269,108.8798904419 +2011-11-29 19:59:45.633,-139.0340121055,134170.792647786,180,0.21362,100.5003203183,201.6156379039,50.003,0,97.1504821777,108.8626785278 +2011-11-29 19:59:45.666,-138.9924523524,134170.454362322,180,0.21362,100.5003203183,201.6156379039,50.003,0,97.1605453491,108.865486145 +2011-11-29 19:59:45.700,-138.9508924116,134170.186669527,180,0.21362,100.5003203183,201.6156379039,50.003,0,97.1673812866,108.8854064941 +2011-11-29 19:59:45.733,-138.9093323269,134169.989569823,0,0,100.559999381,201.6546776209,50.003,0,97.1601638794,108.8744430542 +2011-11-29 19:59:45.766,-138.8677721418,134169.863063521,0,0,100.6084836047,201.9039010274,50.003,0,97.1636505127,108.873588562 +2011-11-29 19:59:45.800,-138.8291548969,134163.779999992,0,0,100.6196552762,201.6939360329,50.003,0,97.1630401611,108.8719787598 +2011-11-29 19:59:45.833,-138.7901686466,134170.677074824,0,0,100.630850231,201.4839787223,50.003,0,97.1654815674,108.8935546875 +2011-11-29 19:59:45.866,-138.7486086834,134170.752978159,0,0,100.6905427708,201.5234968305,50.003,0,97.150428772,108.869758606 +2011-11-29 19:59:45.900,-138.7070487891,134170.899474597,0,0,100.7388971009,201.77310843,50.003,0,97.1605682373,108.8745574951 +2011-11-29 19:59:45.933,-138.6654890075,134171.116563908,180,0.21362,100.7984827998,201.813022158,50.003,0,97.1629333496,108.8883285522 +2011-11-29 19:59:45.966,-138.6268632384,134165.35280166,0,0,100.8580448698,201.8531540666,50.003,0,97.1509399414,108.876449585 +2011-11-29 19:59:46.000,-138.5853019301,134165.706093799,0,0,100.8580448698,201.8531540666,50.003,0,97.1595458984,108.8640823364 +2011-11-29 19:59:46.033,-138.5463291841,134172.991638687,45,0.3021043012,100.9290770647,201.6837544698,50.003,0,97.159828186,108.8817520142 +2011-11-29 19:59:46.066,-138.5047705163,134173.481721379,90,0.21362,100.9290770647,201.6837544698,50.003,0,97.1656951904,108.8906097412 +2011-11-29 19:59:46.100,-138.4632121739,134174.042393774,0,0,100.9290770647,201.6837544698,50.003,0,97.1555633545,108.8874206543 +2011-11-29 19:59:46.133,-138.4216542008,134174.673654986,-90,0.21362,100.9886510965,201.7243645302,50.003,0,97.1655044556,108.8772277832 +2011-11-29 19:59:46.166,-138.3800966405,134175.375504021,-90,0.21362,101.1077269088,201.8062385118,50.003,0,97.1730804443,108.870010376 +2011-11-29 19:59:46.200,-138.3414603816,134170.062349938,0,0,101.1077269088,201.8062385118,50.003,0,97.148109436,108.8778152466 +2011-11-29 19:59:46.233,-138.2999018743,134170.900411674,90,0.21362,101.1077269088,201.8062385118,50.003,0,97.155632019,108.8938980103 +2011-11-29 19:59:46.266,-138.2583439081,134171.809060844,0,0,101.1672284615,201.8475021678,50.003,0,97.1577835083,108.8692398071 +2011-11-29 19:59:46.300,-138.2167865266,134172.788296013,0,0,101.286158293,201.9306821428,50.003,0,97.1510009766,108.8820800781 +2011-11-29 19:59:46.333,-138.1781432495,134167.733054323,0,0,101.2980330392,201.7211974657,50.003,0,97.1550598145,108.8745422363 +2011-11-29 19:59:46.366,-138.1365852527,134168.848509904,180,0.21362,101.3575203198,201.763157036,50.003,0,97.1707611084,108.8675079346 +2011-11-29 19:59:46.400,-138.0950279687,134170.034549813,0,0,101.3575203198,201.763157036,50.003,0,97.1679763794,108.870262146 +2011-11-29 19:59:46.433,-138.0534714413,134171.291172178,0,0.21362,101.3575203198,201.763157036,50.003,0,97.1478271484,108.874458313 +2011-11-29 19:59:46.466,-138.0148217736,134166.49389131,0,0,101.416982799,201.8053340084,50.003,0,97.1645355225,108.8804473877 +2011-11-29 19:59:46.500,-137.9732649626,134167.886738476,0,0,101.4764203643,201.8477282468,50.003,0,97.1485061646,108.8867797852 +2011-11-29 19:59:46.533,-137.9317090363,134169.350165145,90,0.21362,101.5358329036,201.8903396143,50.003,0,97.1586151123,108.8763885498 +2011-11-29 19:59:46.566,-137.8930545706,134164.745236965,90,0.21362,101.5479692412,201.6810392995,50.003,0,97.1665039063,108.8824691772 +2011-11-29 19:59:46.600,-137.8514986079,134166.344891104,0,0,101.6074156758,201.7239120954,50.003,0,97.1452026367,108.8826751709 +2011-11-29 19:59:46.633,-137.8099436581,134168.015120836,0,0.21362,101.6074156758,201.7239120954,50.003,0,97.1723709106,108.8647537231 +2011-11-29 19:59:46.666,-137.7683897647,134169.755923523,0,0,101.6074156758,201.7239120954,50.003,0,97.1499481201,108.8761825562 +2011-11-29 19:59:46.700,-137.7297300045,134165.409028588,0,0,101.6668367832,201.7670019509,50.003,0,97.1522369385,108.8996047974 +2011-11-29 19:59:46.733,-137.6881764065,134167.286057338,180,0.21362,101.7856025709,201.8538322838,50.003,0,97.1596679688,108.8877868652 +2011-11-29 19:59:46.766,-137.6466239931,134169.233653852,90,0.21362,101.8449470289,201.8975724813,50.003,0,97.1501922607,108.8746795654 +2011-11-29 19:59:46.800,-137.6079602523,134165.079163608,90,0.21362,101.832516303,202.1066485559,50.003,0,97.1698608398,108.8734283447 +2011-11-29 19:59:46.833,-137.5664083816,134167.162984532,0,0,101.8449470289,201.8975724813,50.003,0,97.1686019897,108.8869857788 +2011-11-29 19:59:46.866,-137.5248578235,134169.31736707,180,0.21362,101.9167809658,201.7325081821,50.003,0,97.175201416,108.8725357056 +2011-11-29 19:59:46.900,-137.4833086216,134171.542307824,0,0,102.0354578513,201.8211622325,50.003,0,97.1568527222,108.9067764282 +2011-11-29 19:59:46.933,-137.4446406833,134167.645904084,0,0,102.0354578513,201.8211622325,50.003,0,97.1685791016,108.8748397827 +2011-11-29 19:59:46.966,-137.4030923558,134170.007062043,90,0.21362,102.0354578513,201.8211622325,50.003,0,97.1631622314,108.874130249 +2011-11-29 19:59:47.000,-137.3644217016,134166.237435927,90,0.21362,102.094757077,201.8658137454,50.003,0,97.1704711914,108.8943023682 +2011-11-29 19:59:47.033,-137.3228744115,134168.734809451,90,0.21362,102.1540300118,201.9106813924,50.003,0,97.158454895,108.8682098389 +2011-11-29 19:59:47.066,-137.2813286899,134171.302729425,0,0,102.1668058778,201.701854671,50.003,0,97.1708908081,108.8618392944 +2011-11-29 19:59:47.100,-137.2426551032,134167.72555753,0,0,102.2261108748,201.7469849737,50.003,0,97.1410446167,108.8822555542 +2011-11-29 19:59:47.133,-137.2011106662,134170.429685879,0,0,102.2261108748,201.7469849737,50.003,0,97.1762008667,108.883354187 +2011-11-29 19:59:47.166,-137.1595679256,134173.204351663,45,0.3021043012,102.2853892814,201.7923313242,50.003,0,97.1480941772,108.8746948242 +2011-11-29 19:59:47.200,-137.1182312802,134163.110889898,90,0.21362,102.3446409888,201.8378935768,50.003,0,97.1662521362,108.8816223145 +2011-11-29 19:59:47.233,-137.079350547,134172.730510404,0,0,102.3446409888,201.8378935768,50.003,0,97.162399292,108.8959960938 +2011-11-29 19:59:47.266,-137.0378111626,134175.711902991,180,0.21362,102.4169020321,201.6750431689,50.003,0,97.1620407104,108.8957977295 +2011-11-29 19:59:47.300,-136.9964662549,134165.824170009,0,0,102.4169020321,201.6750431689,50.003,0,97.1614837646,108.8746185303 +2011-11-29 19:59:47.333,-136.9549266392,134168.946279721,0,0,102.4761582597,201.7210843553,50.003,0,97.1415863037,108.8640823364 +2011-11-29 19:59:47.366,-136.9162443725,134165.885082299,-90,0.21362,102.5353873806,201.7673412046,50.003,0,97.1747283936,108.880859375 +2011-11-29 19:59:47.400,-136.8747067043,134169.143380958,-135,0.3021043012,102.5353873806,201.7673412046,50.003,0,97.1539154053,108.8753967285 +2011-11-29 19:59:47.433,-136.8331710753,134172.472192809,-135,0.3021043012,102.6078272377,201.6053392112,50.003,0,97.1671066284,108.889541626 +2011-11-29 19:59:47.466,-136.7916375291,134175.871512606,0,0,102.667059925,201.6520752083,50.003,0,97.1522903442,108.878036499 +2011-11-29 19:59:47.500,-136.750274974,134166.399868139,0,0,102.7854426532,201.746193301,50.003,0,97.1749572754,108.8946838379 +2011-11-29 19:59:47.533,-136.711587597,134163.662234358,0,0,102.7262650992,201.6990266217,50.003,0,97.1705932617,108.8945465088 +2011-11-29 19:59:47.566,-136.6700545295,134167.267940029,-90,0.21362,102.7129110262,201.9074042444,50.003,0,97.1629943848,108.8936309814 +2011-11-29 19:59:47.600,-136.6285237161,134170.944141923,-90,0.21362,102.7720306449,201.954522257,50.003,0,97.1537628174,108.8744430542 +2011-11-29 19:59:47.633,-136.5869952003,134174.690834246,180,0.21362,102.8311226207,202.0018551856,50.003,0,97.1554489136,108.8798217773 +2011-11-29 19:59:47.666,-136.5483070767,134172.211375871,180,0.21362,102.84459248,201.7935750954,50.003,0,97.155090332,108.8964920044 +2011-11-29 19:59:47.700,-136.5096175409,134169.793094553,180,0.21362,102.9037144733,201.8411718534,50.003,0,97.1556015015,108.8784484863 +2011-11-29 19:59:47.733,-136.4680921098,134173.741598792,0,0,102.97642188,201.6808130336,50.003,0,97.1578140259,108.8704452515 +2011-11-29 19:59:47.766,-136.4267068007,134164.817082805,0,0,103.0355455901,201.7288888218,50.003,0,97.1774978638,108.8749923706 +2011-11-29 19:59:47.800,-136.3851823349,134168.906297185,0,0,103.0355455901,201.7288888218,50.003,0,97.1641540527,108.86743927 +2011-11-29 19:59:47.833,-136.3464890997,134166.745973042,0,0,103.0946410634,201.7771793134,50.003,0,97.1746826172,108.8771896362 +2011-11-29 19:59:47.866,-136.3049677374,134170.971317142,0,0,103.0946410634,201.7771793134,50.003,0,97.1656799316,108.8888092041 +2011-11-29 19:59:47.900,-136.2607460708,134168.652345326,135,0.3021043012,103.1399219919,202.0337054718,50.003,0,97.1633148193,108.8795623779 +2011-11-29 19:59:47.933,-136.2220508784,134166.688809568,180,0.21362,103.2717570102,201.9233374646,50.003,0,97.1432495117,108.8764038086 +2011-11-29 19:59:47.966,-136.1805335479,134171.125309945,0,0,103.2856866716,201.7154287561,50.003,0,97.1741104126,108.8765182495 +2011-11-29 19:59:48.000,-136.141837951,134169.288629703,0,0,103.3587414068,201.5567811439,50.003,0,97.1464157104,108.8779144287 +2011-11-29 19:59:48.033,-136.1003241389,134173.861229691,180,0.21362,103.3447255224,201.7646271592,50.003,0,97.1520767212,108.8712692261 +2011-11-29 19:59:48.066,-136.058915352,134165.558966947,180,0.21362,103.3307384857,201.9724852233,50.003,0,97.1639633179,108.8844451904 +2011-11-29 19:59:48.100,-136.0202165996,134163.914633786,180,0.21362,103.3896912008,202.0218469094,50.003,0,97.1706771851,108.8776245117 +2011-11-29 19:59:48.133,-135.9759883162,134162.110342295,-90,0.21362,103.4178088018,201.6062446119,50.003,0,97.166847229,108.8987045288 +2011-11-29 19:59:48.166,-135.9344781529,134166.964318545,-90,0.21362,103.4910068812,201.4481905959,50.003,0,97.1578369141,108.8697814941 +2011-11-29 19:59:48.200,-135.8957784004,134165.5167968,0,0,103.5500734125,201.4981336633,50.003,0,97.1602935791,108.8926544189 +2011-11-29 19:59:48.233,-135.8542722545,134170.506838793,90,0.21362,103.5948363341,201.7559193502,50.003,0,97.1831207275,108.8863143921 +2011-11-29 19:59:48.266,-135.8155727148,134169.18617469,90,0.21362,103.5948363341,201.7559193502,50.003,0,97.1601028442,108.8939971924 +2011-11-29 19:59:48.300,-135.7768724308,134167.926721317,90,0.21362,103.6537869489,201.8062385118,50.003,0,97.1725692749,108.8904724121 +2011-11-29 19:59:48.333,-135.7326426689,134166.562300154,90,0.21362,103.6537869489,201.8062385118,50.003,0,97.1533508301,108.8808670044 +2011-11-29 19:59:48.366,-135.693940909,134165.434018326,0,0,103.6537869489,201.8062385118,50.003,0,97.1742553711,108.8695373535 +2011-11-29 19:59:48.400,-135.6524425547,134170.766409609,0,0,103.7127081107,201.8567711987,50.003,0,97.1594161987,108.8768386841 +2011-11-29 19:59:48.433,-135.6137413893,134169.76498201,0,0.21362,103.7715997171,201.9075172504,50.003,0,97.1606674194,108.8860855103 +2011-11-29 19:59:48.466,-135.5695108022,134168.69545158,0,0,103.9038529422,201.8022812796,50.003,0,97.1637420654,108.8857650757 +2011-11-29 19:59:48.500,-135.5308084799,134167.825202363,90,0.21362,103.9773577954,201.6464176736,50.003,0,97.1440887451,108.8716430664 +2011-11-29 19:59:48.533,-135.4893647817,134150.487208926,0,0.21362,103.9627119637,201.8537192477,50.003,0,97.1617355347,108.8857727051 +2011-11-29 19:59:48.566,-135.4478733463,134166.166527957,0,0.21362,103.9627119637,201.8537192477,50.003,0,97.1526031494,108.8983459473 +2011-11-29 19:59:48.600,-135.4091696204,134165.488683362,0,0,104.0215409331,201.9053701258,50.003,0,97.1523590088,108.8954696655 +2011-11-29 19:59:48.633,-135.3649363357,134164.78896922,0,0,104.0803397493,201.9572337505,50.003,0,97.1382904053,108.8748550415 +2011-11-29 19:59:48.666,-135.3262318529,134164.242315007,-90,0.21362,104.1539239792,201.8021682147,50.003,0,97.1546630859,108.8759994507 +2011-11-29 19:59:48.700,-135.284748695,134170.19822687,-90,0.21362,104.1391083117,202.009309958,50.003,0,97.1573410034,108.8554000854 +2011-11-29 19:59:48.733,-135.2460455021,134169.778413559,0,0,104.1539239792,201.8021682147,50.003,0,97.1549301147,108.8920211792 +2011-11-29 19:59:48.766,-135.2018130088,134169.373592337,0,0.21362,104.2127186168,201.8545104987,50.003,0,97.1770095825,108.8757171631 +2011-11-29 19:59:48.800,-135.163109378,134169.084969052,0,0.21362,104.2714827087,201.9070652261,50.003,0,97.1589736938,108.8961181641 +2011-11-29 19:59:48.833,-135.1244055984,134168.857568452,0,0.21362,104.3302161552,201.959832231,50.003,0,97.1777877808,108.8807220459 +2011-11-29 19:59:48.866,-135.0801725704,134168.672648998,0,0,104.3452315792,201.7528658736,50.003,0,97.1533432007,108.885017395 +2011-11-29 19:59:48.900,-135.0414685907,134168.576440803,90,0.21362,104.3452315792,201.7528658736,50.003,0,97.151763916,108.8871154785 +2011-11-29 19:59:48.933,-135,134175.015053306,90,0.21362,104.4039905329,201.8058993235,50.003,0,97.1535949707,108.8810272217 +2011-11-29 19:59:48.966,-134.9585314093,134168.576440803,0,0,104.46271855,201.8591449064,50.003,0,97.1497192383,108.8802337646 +2011-11-29 19:59:49.000,-134.9170668636,134175.155610459,180,0.21362,104.5214155315,201.9126024545,50.003,0,97.1803283691,108.8870620728 +2011-11-29 19:59:49.033,-134.8755944016,134168.857568452,180,0.21362,104.5214155315,201.9126024545,50.003,0,97.1559677124,108.9035339355 +2011-11-29 19:59:49.066,-134.836890622,134169.084969052,180,0.21362,104.6540430771,201.813474393,50.003,0,97.1585159302,108.8765563965 +2011-11-29 19:59:49.100,-134.7981869912,134169.373592337,0,0,104.6387159942,202.0201527722,50.003,0,97.1576309204,108.8868713379 +2011-11-29 19:59:49.133,-134.7539544979,134169.778413559,0,0,104.7127022451,201.8676222062,50.003,0,97.1569824219,108.8935546875 +2011-11-29 19:59:49.166,-134.715251305,134170.19822687,0,0.21362,104.7868002643,201.7154287561,50.003,0,97.1657485962,108.8825836182 +2011-11-29 19:59:49.200,-134.6737681471,134164.242315007,0,0,104.8454520821,201.7700552136,50.003,0,97.1635513306,108.8671875 +2011-11-29 19:59:49.233,-134.6323168121,134171.303978858,0,0,104.8299259185,201.9765520882,50.003,0,97.1441497803,108.8607635498 +2011-11-29 19:59:49.266,-134.5936145549,134171.916199202,0,0.21362,104.8454520821,201.7700552136,50.003,0,97.1509246826,108.8773651123 +2011-11-29 19:59:49.300,-134.5521266537,134166.166527957,0,0.21362,104.9040720887,201.8248929902,50.003,0,97.1450042725,108.8864212036 +2011-11-29 19:59:49.333,-134.5134233366,134166.905593323,0,0.21362,104.8884902297,202.031333815,50.003,0,97.1531219482,108.8955078125 +2011-11-29 19:59:49.366,-134.4719814678,134174.238862822,0,0,104.9040720887,201.8248929902,50.003,0,97.1499633789,108.8846588135 +2011-11-29 19:59:49.400,-134.4304891978,134168.69545158,0,0.21362,104.9626601875,201.8799419139,50.003,0,97.1544113159,108.8768615723 +2011-11-29 19:59:49.433,-134.3917873952,134169.626918106,0,0,105.021216282,201.9352018119,50.003,0,97.1561355591,108.8838424683 +2011-11-29 19:59:49.466,-134.3475574453,134170.766409609,0,0,105.0955208442,201.7844162366,50.003,0,97.1446380615,108.9010467529 +2011-11-29 19:59:49.500,-134.3088568753,134171.829051681,0,0,105.1540680503,201.8401544629,50.003,0,97.1651000977,108.8954696655 +2011-11-29 19:59:49.533,-134.2673573311,134166.562300154,-45,0.3021043012,105.1540680503,201.8401544629,50.003,0,97.1473083496,108.8869018555 +2011-11-29 19:59:49.566,-134.2258545504,134161.365940033,0,0,105.1540680503,201.8401544629,50.003,0,97.1590270996,108.8726043701 +2011-11-29 19:59:49.600,-134.1844272852,134169.18617469,0,0,105.271065204,201.9522626513,50.003,0,97.1599197388,108.8806152344 +2011-11-29 19:59:49.633,-134.1429221694,134164.130484899,180,0.21362,105.271065204,201.9522626513,50.003,0,97.1477279663,108.8688430786 +2011-11-29 19:59:49.666,-134.1042215996,134165.5167968,180,0.21362,105.345549252,201.8026204739,50.003,0,97.1417999268,108.8843841553 +2011-11-29 19:59:49.700,-134.0628028304,134173.542942546,0,0,105.4040214518,201.8592579394,50.003,0,97.1451263428,108.871383667 +2011-11-29 19:59:49.733,-134.0212946048,134168.693577395,-45,0.3021043012,105.4463163677,202.1220016403,50.003,0,97.1863861084,108.8955535889 +2011-11-29 19:59:49.766,-133.9825967228,134170.272256313,-90,0.21362,105.4463163677,202.1220016403,50.003,0,97.1583557129,108.8755645752 +2011-11-29 19:59:49.800,-133.941084648,134165.558966947,180,0.21362,105.5208671662,201.9731630398,50.003,0,97.1568908691,108.87449646 +2011-11-29 19:59:49.833,-133.9023868619,134167.264503987,0,0,105.6118483401,201.6189197943,50.003,0,97.1486968994,108.8946914673 +2011-11-29 19:59:49.866,-133.858162049,134169.288629703,0,0,105.5955277954,201.8246668857,50.003,0,97.1601715088,108.8856735229 +2011-11-29 19:59:49.900,-133.8194664521,134171.125309945,0,0,105.5955277954,201.8246668857,50.003,0,97.1415786743,108.899520874 +2011-11-29 19:59:49.933,-133.7779491216,134166.688809568,0,0,105.7122844545,201.9399473556,50.003,0,97.1699523926,108.8838119507 +2011-11-29 19:59:49.966,-133.7392539292,134168.652345326,0,0,105.770612688,201.9979017855,50.003,0,97.1632614136,108.877532959 +2011-11-29 19:59:50.000,-133.6977332427,134164.351958402,0,0,105.803616241,201.5867776015,50.003,0,97.1470718384,108.873008728 +2011-11-29 19:59:50.033,-133.6590386065,134166.442350377,0,0,105.803616241,201.5867776015,50.003,0,97.1551742554,108.874130249 +2011-11-29 19:59:50.066,-133.6148176651,134168.906297185,-90,0.21362,105.7870976545,201.7923313242,50.003,0,97.1576538086,108.88671875 +2011-11-29 19:59:50.100,-133.5732931993,134164.817082805,-135,0.3021043012,105.8289074014,202.0560654386,50.003,0,97.1747741699,108.8970184326 +2011-11-29 19:59:50.133,-133.5346007557,134167.104259397,135,0.3021043012,105.8871685028,202.1144381342,50.003,0,97.1519851685,108.8864517212 +2011-11-29 19:59:50.166,-133.4930733489,134163.151186539,0,0,105.903762585,201.9089863225,50.003,0,97.1449661255,108.890914917 +2011-11-29 19:59:50.200,-133.4516929233,134172.211375871,0,0,106.0202923021,202.0264774785,50.003,0,97.1641159058,108.8765106201 +2011-11-29 19:59:50.233,-133.4101647197,134168.399017717,-90,0.21362,106.0370290846,201.8211622325,50.003,0,97.1718597412,108.8908157349 +2011-11-29 19:59:50.266,-133.3714762839,134170.944141923,-90,0.21362,106.0537999534,201.6158642428,50.003,0,97.1608047485,108.8951339722 +2011-11-29 19:59:50.300,-133.3299454705,134167.267940029,0,0,106.0952973076,201.8802809778,50.003,0,97.1695632935,108.9012069702 +2011-11-29 19:59:50.333,-133.2912582865,134169.9399044,0,0,106.1535313539,201.9396083919,50.003,0,97.1474456787,108.8887176514 +2011-11-29 19:59:50.366,-133.249725026,134166.399868139,0,0,106.1535313539,201.9396083919,50.003,0,97.1648254395,108.8924407959 +2011-11-29 19:59:50.400,-133.2081895956,134162.930335809,180,0.21362,106.2117311331,201.999144291,50.003,0,97.1532211304,108.8642272949 +2011-11-29 19:59:50.433,-133.1695037007,134165.794807152,180,0.21362,106.2698965557,202.0588884908,50.003,0,97.1606750488,108.8718948364 +2011-11-29 19:59:50.466,-133.1252932957,134169.143380958,-135,0.3021043012,106.3450693218,201.9138454849,50.003,0,97.1511001587,108.8875579834 +2011-11-29 19:59:50.500,-133.0837556275,134165.885082299,-90,0.21362,106.4203500351,201.769150548,50.003,0,97.1553573608,108.8751449585 +2011-11-29 19:59:50.533,-133.0450733608,134168.946279721,-90,0.21362,106.4203500351,201.769150548,50.003,0,97.1585159302,108.8797836304 +2011-11-29 19:59:50.566,-133.0035337451,134165.824170009,-90,0.21362,106.4203500351,201.769150548,50.003,0,97.155960083,108.8935928345 +2011-11-29 19:59:50.600,-132.9648533474,134169.012188408,-45,0.3021043012,106.4613352347,202.0344960178,50.003,0,97.1582794189,108.9132080078 +2011-11-29 19:59:50.633,-132.9233119472,134166.026273758,0,0.21362,106.5194160136,202.0951329771,50.003,0,97.1628875732,108.876373291 +2011-11-29 19:59:50.666,-132.8846335701,134169.34110663,90,0.21362,106.5366540323,201.8903396143,50.003,0,97.1601867676,108.8673324585 +2011-11-29 19:59:50.700,-132.8430905482,134166.491392356,90,0.21362,106.6528180073,202.0123595583,50.003,0,97.1408843994,108.8819885254 +2011-11-29 19:59:50.733,-132.7988893338,134170.429685879,-90,0.21362,106.6528180073,202.0123595583,50.003,0,97.1601715088,108.874786377 +2011-11-29 19:59:50.766,-132.7573448968,134167.72555753,0,0,106.7108472674,202.0736806395,50.003,0,97.1613769531,108.8790740967 +2011-11-29 19:59:50.800,-132.7213237234,134164.576555276,0,0,106.7108472674,202.0736806395,50.003,0,97.1674423218,108.8837280273 +2011-11-29 19:59:50.833,-132.6771255885,134168.734809451,0,0.21362,106.7863286428,201.9306821428,50.003,0,97.1595153809,108.8886871338 +2011-11-29 19:59:50.866,-132.6355782984,134166.237435927,0,0,106.8443406102,201.9924798539,50.003,0,97.1515045166,108.8850784302 +2011-11-29 19:59:50.900,-132.5969076442,134170.007062043,180,0.21362,106.9023170326,202.0544845121,50.003,0,97.1613922119,108.8899993896 +2011-11-29 19:59:50.933,-132.5553593167,134167.645904084,0,0,106.9023170326,202.0544845121,50.003,0,97.143196106,108.8863067627 +2011-11-29 19:59:50.966,-132.5138095487,134165.355300635,0,0,106.9779405987,201.9123764481,50.003,0,97.1649856567,108.8787841797 +2011-11-29 19:59:51.000,-132.4751421765,134169.31736707,180,0.21362,107.0358987744,201.9748575711,50.003,0,97.1530532837,108.8786468506 +2011-11-29 19:59:51.033,-132.4335916184,134167.162984532,0,0,107.0358987744,201.9748575711,50.003,0,97.1544570923,108.8701934814 +2011-11-29 19:59:51.066,-132.3949271922,134171.251815056,-90,0.21362,107.018162899,202.1791139072,50.003,0,97.1756515503,108.8956451416 +2011-11-29 19:59:51.100,-132.3533760069,134169.233653852,0,0,107.0760321723,202.2417382621,50.003,0,97.1697998047,108.8745269775 +2011-11-29 19:59:51.133,-132.3118235935,134167.286057338,0,0,107.1338655592,202.3045687996,50.003,0,97.1496505737,108.8660125732 +2011-11-29 19:59:51.166,-132.2702699955,134165.409028588,0,0,107.1517073201,202.1004392567,50.003,0,97.1587219238,108.8966827393 +2011-11-29 19:59:51.200,-132.2287152567,134163.602570563,0,0,107.2274882265,201.9594933007,50.003,0,97.1484832764,108.8849029541 +2011-11-29 19:59:51.233,-132.190056342,134168.015120836,0,0,107.2673715605,202.2268455786,50.003,0,97.1644515991,108.8706741333 +2011-11-29 19:59:51.266,-132.1485013921,134166.344891104,0,0,107.2853550286,202.0228633849,50.003,0,97.1667861938,108.8750762939 +2011-11-29 19:59:51.300,-132.1069454294,134164.745236965,0,0,107.3431854802,202.0864394095,50.003,0,97.1574859619,108.894569397 +2011-11-29 19:59:51.333,-132.0653884977,134163.216160942,-135,0.3021043012,107.3431854802,202.0864394095,50.003,0,97.1604690552,108.8674545288 +2011-11-29 19:59:51.366,-132.0267350374,134167.886738476,180,0.21362,107.3612580385,201.8825413892,50.003,0,97.1684875488,108.8800430298 +2011-11-29 19:59:51.400,-131.9851782264,134166.49389131,0,0,107.4769147142,202.010439445,50.003,0,97.1538314819,108.8863372803 +2011-11-29 19:59:51.433,-131.9465285587,134171.291172178,0,0.21362,107.5346880329,202.0746968543,50.003,0,97.1460876465,108.8734359741 +2011-11-29 19:59:51.466,-131.9049720313,134170.034549813,0,0,107.5346880329,202.0746968543,50.003,0,97.1538391113,108.8756256104 +2011-11-29 19:59:51.500,-131.8634147473,134168.848509904,0,0,107.5346880329,202.0746968543,50.003,0,97.1713104248,108.8965759277 +2011-11-29 19:59:51.533,-131.8218567505,134167.733054323,0,0,107.6107438791,201.935540783,50.003,0,97.1534042358,108.8829803467 +2011-11-29 19:59:51.566,-131.7802980845,134166.68818483,0,0,107.6684958219,202.0002738348,50.003,0,97.1479644775,108.8718795776 +2011-11-29 19:59:51.600,-131.7416560919,134171.809060844,180,0.21362,107.7262107035,202.0652119846,50.003,0,97.1542434692,108.8691864014 +2011-11-29 19:59:51.633,-131.7026990665,134164.06488619,0,0,107.7262107035,202.0652119846,50.003,0,97.1664581299,108.8798980713 +2011-11-29 19:59:51.666,-131.6585396184,134170.062349938,0,0,107.7262107035,202.0652119846,50.003,0,97.1656799316,108.9002761841 +2011-11-29 19:59:51.700,-131.6169806139,134169.294876957,0,0,107.7838884427,202.1303550346,50.003,0,97.1622695923,108.8806533813 +2011-11-29 19:59:51.733,-131.5780157829,134161.749231181,90,0.21362,107.8415289584,202.1957027868,50.003,0,97.1611633301,108.8821640015 +2011-11-29 19:59:51.766,-131.5393803753,134167.189535782,0,0,107.9177492146,202.0579851184,50.003,0,97.1522750854,108.8906478882 +2011-11-29 19:59:51.800,-131.4978199205,134166.624461584,0,0,107.994073306,201.9206255159,50.003,0,97.1535186768,108.885055542 +2011-11-29 19:59:51.833,-131.4562591374,134166.129980663,90,0.21362,108.0517051773,201.9867188922,50.003,0,97.1591033936,108.8721466064 +2011-11-29 19:59:51.866,-131.4146980699,134165.706093799,0,0,108.0329469432,202.1898347673,50.003,0,97.1572265625,108.8883285522 +2011-11-29 19:59:51.900,-131.3731367616,134165.35280166,0,0,108.1092992865,202.0530164979,50.003,0,97.1603088379,108.8840484619 +2011-11-29 19:59:51.933,-131.3315752563,134165.070104805,0,0.21362,108.1092992865,202.0530164979,50.003,0,97.157699585,108.8916625977 +2011-11-29 19:59:51.966,-131.2900135977,134164.858003679,0,0.21362,108.1857549664,201.9165575246,50.003,0,97.1643371582,108.9079208374 +2011-11-29 19:59:52.000,-131.2513913166,134170.752978159,-45,0.3021043012,108.3008566383,202.0503062898,50.003,0,97.170211792,108.8901977539 +2011-11-29 19:59:52.033,-131.2124072255,134163.789683633,-90,0.42724,108.281854252,202.2531326808,50.003,0,97.1667327881,108.8997650146 +2011-11-29 19:59:52.066,-131.1737880997,134169.807150821,-90,0.21362,108.3008566383,202.0503062898,50.003,0,97.1690979004,108.8810501099 +2011-11-29 19:59:52.100,-131.1322278582,134169.863063521,0,0,108.3008566383,202.0503062898,50.003,0,97.170753479,108.8821868896 +2011-11-29 19:59:52.133,-131.0906676731,134169.989569823,0,0.21362,108.3583502328,202.1174861483,50.003,0,97.1581726074,108.8782730103 +2011-11-29 19:59:52.166,-131.0491075884,134170.186669527,0,0,108.3583502328,202.1174861483,50.003,0,97.1632843018,108.8746337891 +2011-11-29 19:59:52.200,-131.0075476476,134170.454362322,0,0,108.4158055629,202.184869387,50.003,0,97.1628417969,108.8712463379 +2011-11-29 19:59:52.233,-130.9659878945,134170.792647786,90,0.21362,108.4349488229,201.9822003758,50.003,0,97.1456756592,108.8899459839 +2011-11-29 19:59:52.266,-130.9269895519,134164.28417318,90,0.21362,108.569130731,201.9152015093,50.003,0,97.1612548828,108.8977279663 +2011-11-29 19:59:52.300,-130.8883839131,134170.752041081,0,0,108.5498466225,202.1177119253,50.003,0,97.1746368408,108.8907852173 +2011-11-29 19:59:52.333,-130.8468246739,134171.292733968,0,0,108.5498466225,202.1177119253,50.003,0,97.1508712769,108.8670883179 +2011-11-29 19:59:52.366,-130.8052657915,134171.904017294,0,0,108.6265727891,201.9833300144,50.003,0,97.1577148438,108.892074585 +2011-11-29 19:59:52.400,-130.7637073097,134172.585890095,0,0,108.6839760524,202.0516613984,50.003,0,97.1575088501,108.8847808838 +2011-11-29 19:59:52.433,-130.7221492721,134173.338351293,0,0,108.7413404452,202.1201954556,50.003,0,97.1483459473,108.8847503662 +2011-11-29 19:59:52.466,-130.6831402506,134167.218585966,0,0,108.798665892,202.18893198,50.003,0,97.1460723877,108.8751068115 +2011-11-29 19:59:52.500,-130.6415810646,134168.107893413,0,0,108.8755295501,202.0557266697,50.003,0,97.1656494141,108.8922424316 +2011-11-29 19:59:52.533,-130.6025669044,134162.116589883,90,0.21362,108.8755295501,202.0557266697,50.003,0,97.1601791382,108.8859863281 +2011-11-29 19:59:52.566,-130.5610067344,134163.142752359,0,0,108.8951459909,201.8536062116,50.003,0,97.1379928589,108.8833236694 +2011-11-29 19:59:52.600,-130.5194472221,134164.239503637,0,0,108.9524944811,201.9228854757,50.003,0,97.1658706665,108.8758621216 +2011-11-29 19:59:52.633,-130.477888411,134165.406841986,0,0,108.9900860135,202.1943486436,50.003,0,97.1637878418,108.8795394897 +2011-11-29 19:59:52.666,-130.436330345,134166.644765563,0,0,109.0098035752,201.9923668955,50.003,0,97.1775512695,108.8851928711 +2011-11-29 19:59:52.700,-130.3977505642,134173.886530207,0,0,109.0868806948,201.8601622012,50.003,0,97.1629257202,108.8756561279 +2011-11-29 19:59:52.733,-130.3587276059,134168.284067424,-90,0.21362,109.1441611248,201.930117177,50.003,0,97.1670227051,108.8845367432 +2011-11-29 19:59:52.766,-130.3171716518,134169.724374994,-90,0.21362,109.1441611248,201.930117177,50.003,0,97.1654663086,108.8692321777 +2011-11-29 19:59:52.800,-130.2781441753,134164.250436743,0,0,109.2014018239,202.0002738348,50.003,0,97.1692962646,108.893081665 +2011-11-29 19:59:52.833,-130.2336031084,134159.913984501,135,0.3021043012,109.2586027193,202.0706319646,50.003,0,97.150062561,108.8865661621 +2011-11-29 19:59:52.866,-130.195032622,134167.475351841,116.5650511771,0.4776688414,109.3157637386,202.141191356,50.003,0,97.1507110596,108.8729934692 +2011-11-29 19:59:52.900,-130.1534783873,134169.193671401,90,0.21362,109.3157637386,202.141191356,50.003,0,97.1658096313,108.8874130249 +2011-11-29 19:59:52.933,-130.1119252388,134170.982562058,90,0.21362,109.3358118963,201.9396083919,50.003,0,97.1715393066,108.879486084 +2011-11-29 19:59:52.966,-130.0698980585,134159.942411492,45,0.3021043012,109.3929829316,202.010439445,50.003,0,97.184211731,108.883392334 +2011-11-29 19:59:53.000,-130.0313370008,134167.761792023,0,0,109.4501138323,202.0814714886,50.003,0,97.1458358765,108.8887634277 +2011-11-29 19:59:53.033,-129.9897851639,134169.758110055,0,0,109.4703020095,201.8800549353,50.003,0,97.1659393311,108.8893890381 +2011-11-29 19:59:53.066,-129.950745053,134164.806462118,0,0,109.5072045272,202.1527043111,50.003,0,97.1641540527,108.885887146 +2011-11-29 19:59:53.100,-129.9091935623,134166.93964146,0,0,109.5642549454,202.2241377002,50.003,0,97.156539917,108.8809204102 +2011-11-29 19:59:53.133,-129.8676434147,134169.143380958,0,0,109.5845426172,202.0228633849,50.003,0,97.1690368652,108.8894271851 +2011-11-29 19:59:53.166,-129.8285987341,134164.386631936,-90,0.21362,109.6048707518,201.8216144492,50.003,0,97.1728363037,108.8854522705 +2011-11-29 19:59:53.200,-129.7870491819,134166.727230922,0,0,109.6416022623,202.0945684711,50.003,0,97.1687316895,108.8924179077 +2011-11-29 19:59:53.233,-129.7455011013,134169.138383149,0,0,109.719048681,201.9653680127,50.003,0,97.1709136963,108.8887405396 +2011-11-29 19:59:53.266,-129.7064522058,134164.576555276,0,0,109.719048681,201.9653680127,50.003,0,97.1594543457,108.8840866089 +2011-11-29 19:59:53.300,-129.66490497,134167.124563303,0,0,109.7760766026,202.037545238,50.003,0,97.1669692993,108.8912353516 +2011-11-29 19:59:53.333,-129.6233593339,134169.743116695,0,0,109.7760766026,202.037545238,50.003,0,97.1558074951,108.8780899048 +2011-11-29 19:59:53.366,-129.5843065786,134165.37622955,0,0,109.8536306067,201.9089863225,50.003,0,97.1815414429,108.8883056641 +2011-11-29 19:59:53.400,-129.5427620365,134168.131633187,-90,0.21362,109.8900100132,202.1824995034,50.003,0,97.1588363647,108.8701095581 +2011-11-29 19:59:53.433,-129.5037062461,134163.893392268,0,0,109.9469153648,202.2552761136,50.003,0,97.1452102661,108.8714828491 +2011-11-29 19:59:53.466,-129.4621629624,134166.785643853,0,0,110.0244939852,202.1275329806,50.003,0,97.1631393433,108.8776550293 +2011-11-29 19:59:53.500,-129.4176011273,134163.934938174,90,0.21362,110.0813661792,202.2007807432,50.003,0,97.1567840576,108.8885650635 +2011-11-29 19:59:53.533,-129.3785402835,134159.896490965,0,0.21362,110.0813661792,202.2007807432,50.003,0,97.1786651611,108.8834838867 +2011-11-29 19:59:53.566,-129.3369985926,134163.001245489,0,0,110.1021705833,202.0001608807,50.003,0,97.1651382446,108.8806762695 +2011-11-29 19:59:53.600,-129.2954588461,134166.176523797,0,0,110.1590503785,202.0736806395,50.003,0,97.1673049927,108.8728561401 +2011-11-29 19:59:53.633,-129.2563950954,134162.333068648,0,0,110.1949867647,202.3478732848,50.003,0,97.1736297607,108.8905639648 +2011-11-29 19:59:53.666,-129.214857112,134165.645181428,0,0,110.1949867647,202.3478732848,50.003,0,97.147895813,108.8899383545 +2011-11-29 19:59:53.700,-129.1757909549,134161.930411619,0,0,110.2726856133,202.2213169549,50.003,0,97.1635665894,108.888671875 +2011-11-29 19:59:53.733,-129.134254899,134165.379353268,180,0.21362,110.3504816322,202.0951329771,50.003,0,97.162612915,108.9020462036 +2011-11-29 19:59:53.766,-129.0927210003,134168.898800458,90,0.21362,110.4283747164,201.9693220495,50.003,0,97.1719665527,108.8745956421 +2011-11-29 19:59:53.800,-129.0536525261,134165.379040896,90,0.21362,110.4851434125,202.0439823295,50.003,0,97.1499252319,108.9010162354 +2011-11-29 19:59:53.833,-129.0121208039,134169.035303295,0,0,110.4639640609,202.2441074515,50.003,0,97.163230896,108.8866882324 +2011-11-29 19:59:53.866,-128.9730503123,134165.644244314,0,0,110.4639640609,202.2441074515,50.003,0,97.145690918,108.8915252686 +2011-11-29 19:59:53.900,-128.931520931,134169.437314277,0,0,110.5206424933,202.3188918818,50.003,0,97.1562423706,108.8820343018 +2011-11-29 19:59:53.933,-128.8924485767,134166.174961947,0,0,110.5985547551,202.1938972605,50.003,0,97.1613235474,108.8911209106 +2011-11-29 19:59:53.966,-128.8509217006,134170.104831016,0,0,110.619872649,201.9939483081,50.003,0,97.1549682617,108.8787689209 +2011-11-29 19:59:54.000,-128.8088010037,134161.23317797,0,0,110.6765632616,202.0692769833,50.003,0,97.1621627808,108.8814239502 +2011-11-29 19:59:54.033,-128.7672751144,134165.305008753,0,0,110.7332115675,202.1448033341,50.003,0,97.1583633423,108.8851623535 +2011-11-29 19:59:54.066,-128.7281977615,134162.304954542,-90,0.21362,110.7117976037,202.3446032176,50.003,0,97.156867981,108.885055542 +2011-11-29 19:59:54.100,-128.6866747124,134166.51357057,0,0,110.7332115675,202.1448033341,50.003,0,97.1624221802,108.884765625 +2011-11-29 19:59:54.133,-128.6475959666,134163.642242304,180,0.21362,110.7898175035,202.2205271391,50.003,0,97.1695480347,108.9019088745 +2011-11-29 19:59:54.166,-128.6060759219,134167.987632652,0,0,110.867933058,202.0968264857,50.003,0,97.1622161865,108.8821182251 +2011-11-29 19:59:54.200,-128.5639388201,134159.53756059,0,0,110.9461441525,201.9735019472,50.003,0,97.1586837769,108.8825454712 +2011-11-29 19:59:54.233,-128.522420281,134164.024902198,0,0,110.9810277546,202.2494098225,50.003,0,97.1760482788,108.8699493408 +2011-11-29 19:59:54.266,-128.4833374937,134161.415921011,0,0,110.9810277546,202.2494098225,50.003,0,97.1738204956,108.8874816895 +2011-11-29 19:59:54.300,-128.4418222938,134166.040018051,180,0.21362,110.9810277546,202.2494098225,50.003,0,97.1625976563,108.8957824707 +2011-11-29 19:59:54.333,-128.4027385837,134163.559775049,0,0,111.0375110254,202.3259966565,50.003,0,97.1613235474,108.8880615234 +2011-11-29 19:59:54.366,-128.3612268873,134168.320614131,0,0.21362,111.0592485536,202.1266299149,50.003,0,97.1561508179,108.8849868774 +2011-11-29 19:59:54.400,-128.3221424089,134165.969109977,0,0,111.1375642932,202.0042271884,50.003,0,97.1584091187,108.8774261475 +2011-11-29 19:59:54.433,-128.2775652469,134165.195053765,0,0,111.1940564815,202.0813585799,50.003,0,97.174041748,108.8816299438 +2011-11-29 19:59:54.466,-128.2384784528,134162.97719243,0,0,111.2505055071,202.158686274,50.003,0,97.1560134888,108.8838348389 +2011-11-29 19:59:54.500,-128.1969726184,134168.016682664,0,0,111.2505055071,202.158686274,50.003,0,97.1864395142,108.8949966431 +2011-11-29 19:59:54.533,-128.1554699238,134173.126575592,0,0,111.3289240768,202.037206438,50.003,0,97.1517028809,108.9061584473 +2011-11-29 19:59:54.566,-128.1163835392,134171.10375721,-45,0.3021043012,111.3289240768,202.037206438,50.003,0,97.1628341675,108.8843078613 +2011-11-29 19:59:54.600,-128.0742182454,134163.497299822,-45,0.3021043012,111.3853336126,202.1150025847,50.003,0,97.1712646484,108.8524856567 +2011-11-29 19:59:54.633,-128.0351278887,134161.604286654,0,0.21362,111.4416996853,202.1929944913,50.003,0,97.1585769653,108.8591156006 +2011-11-29 19:59:54.666,-127.9936295824,134166.988683258,0,0,111.4980222362,202.2711819314,50.003,0,97.1622467041,108.8606338501 +2011-11-29 19:59:54.700,-127.9545391633,134165.224416753,180,0.21362,111.5543012068,202.3495646782,50.003,0,97.1585998535,108.8716583252 +2011-11-29 19:59:54.733,-127.9099606616,134165.120084403,0,0,111.5543012068,202.3495646782,50.003,0,97.1658096313,108.8775558472 +2011-11-29 19:59:54.766,-127.8708686589,134163.489490417,0,0,111.5543012068,202.3495646782,50.003,0,97.1712646484,108.882598877 +2011-11-29 19:59:54.800,-127.8317757242,134161.921352603,0,0,111.6328268633,202.2295534208,50.003,0,97.1639556885,108.8818130493 +2011-11-29 19:59:54.833,-127.7902859916,134167.650589582,0,0,111.7114456278,202.1099224732,50.003,0,97.1689987183,108.8870849609 +2011-11-29 19:59:54.866,-127.7511933848,134166.211196859,180,0.21362,111.7114456278,202.1099224732,50.003,0,97.1695175171,108.8840179443 +2011-11-29 19:59:54.900,-127.7066153953,134166.47733574,180,0.21362,111.7338702883,201.9114724202,50.003,0,97.168006897,108.8642120361 +2011-11-29 19:59:54.933,-127.6675216101,134165.171625844,0,0,111.7338702883,201.9114724202,50.003,0,97.1670761108,108.9022369385 +2011-11-29 19:59:54.966,-127.6284270823,134163.928378295,-90,0.21362,111.8464002737,202.0700673902,50.003,0,97.1837463379,108.8925933838 +2011-11-29 19:59:55.000,-127.5893318481,134162.747594831,0,0,111.9587533264,202.2294405948,50.003,0,97.1668624878,108.899230957 +2011-11-29 19:59:55.033,-127.5447532556,134163.308624461,90,0.21362,111.9587533264,202.2294405948,50.003,0,97.154045105,108.8806991577 +2011-11-29 19:59:55.066,-127.5056571656,134162.261533857,90,0.21362,111.9587533264,202.2294405948,50.003,0,97.1542205811,108.8844604492 +2011-11-29 19:59:55.100,-127.4641822215,134168.543642539,0,0,111.9814074161,202.031333815,50.003,0,97.1625366211,108.8894348145 +2011-11-29 19:59:55.133,-127.4250870855,134167.62528789,-90,0.21362,112.0375634719,202.1113900741,50.003,0,97.159286499,108.8927383423 +2011-11-29 19:59:55.166,-127.3828847619,134161.210686502,90,0.21362,112.1164655855,201.9937223928,50.003,0,97.1561737061,108.8901977539 +2011-11-29 19:59:55.200,-127.3414153689,134167.700880585,90,0.21362,112.1725783663,202.0742452039,50.003,0,97.1520233154,108.8684539795 +2011-11-29 19:59:55.233,-127.3023192654,134166.978687479,0,0,112.1497419598,202.2720843516,50.003,0,97.1672134399,108.87940979 +2011-11-29 19:59:55.266,-127.257743925,134168.062600412,0,0,112.2057642831,202.352721908,50.003,0,97.1569061279,108.8838043213 +2011-11-29 19:59:55.300,-127.2186475377,134167.474102373,0,0.21362,112.261741921,202.4335527679,50.003,0,97.1694946289,108.877494812 +2011-11-29 19:59:55.333,-127.1795508255,134166.948075401,0,0,112.261741921,202.4335527679,50.003,0,97.1713867188,108.8931045532 +2011-11-29 19:59:55.366,-127.140453825,134166.484520233,0,0,112.2846696071,202.2358715783,50.003,0,97.16771698,108.891242981 +2011-11-29 19:59:55.400,-127.0958798551,134167.863311025,0,0,112.3636660155,202.1194052447,50.003,0,97.1463241577,108.8821563721 +2011-11-29 19:59:55.433,-127.0567828934,134167.53345208,0,0,112.4427533653,202.0033235716,50.003,0,97.1465606689,108.8655776978 +2011-11-29 19:59:55.466,-127.0176857576,134167.266065824,0,0,112.4755785622,202.2823490986,50.003,0,97.1540145874,108.8921279907 +2011-11-29 19:59:55.500,-126.9731134484,134168.868501182,-90,0.21362,112.5314671448,202.3641100777,50.003,0,97.1471710205,108.8960037231 +2011-11-29 19:59:55.533,-126.9340165961,134168.734809451,-90,0.21362,112.5314671448,202.3641100777,50.003,0,97.1634063721,108.8915939331 +2011-11-29 19:59:55.566,-126.8949196841,134168.663590437,-90,0.21362,112.5873105314,202.4460634471,50.003,0,97.1835021973,108.8673858643 +2011-11-29 19:59:55.600,-126.8558227487,134168.65484424,0,0.21362,112.6663976914,202.3310713428,50.003,0,97.1632843018,108.8747787476 +2011-11-29 19:59:55.633,-126.8135957693,134163.222408479,0,0,112.6663976914,202.3310713428,50.003,0,97.1823577881,108.8849411011 +2011-11-29 19:59:55.666,-126.7744973014,134163.34361064,180,0.21362,112.6663976914,202.3310713428,50.003,0,97.1611480713,108.8890838623 +2011-11-29 19:59:55.700,-126.7299270687,134165.389036794,180,0.21362,112.7455746477,202.2164651809,50.003,0,97.1539840698,108.8994369507 +2011-11-29 19:59:55.733,-126.6908293689,134165.643931943,-90,0.21362,112.8248412505,202.102245618,50.003,0,97.1744003296,108.8707122803 +2011-11-29 19:59:55.766,-126.6517318359,134165.961300716,0,0,112.904197348,201.9884133097,50.003,0,97.1494750977,108.889289856 +2011-11-29 19:59:55.800,-126.609496068,134150.881123582,0,0,112.9599920337,202.0716481947,50.003,0,97.1737213135,108.8829040527 +2011-11-29 19:59:55.833,-126.5680679636,134168.681395194,0,0,112.9599920337,202.0716481947,50.003,0,97.1567077637,108.8770446777 +2011-11-29 19:59:55.866,-126.5258299517,134163.745638677,45,0.3021043012,112.936387279,202.2683618421,50.003,0,97.1740264893,108.9014892578 +2011-11-29 19:59:55.900,-126.4867324564,134164.326656088,45,0.3021043012,112.9920915093,202.3517070895,50.003,0,97.1633987427,108.8757171631 +2011-11-29 19:59:55.933,-126.4476353179,134164.970145553,90,0.21362,113.0157407211,202.155074544,50.003,0,97.1692276001,108.8884124756 +2011-11-29 19:59:55.966,-126.4053918329,134150.242300261,0,0,113.0951829994,202.0421754473,50.003,0,97.1511535645,108.8882598877 +2011-11-29 19:59:56.000,-126.3639757136,134168.388084949,0,0.21362,113.1508837974,202.1260654969,50.003,0,97.1445465088,108.8763427734 +2011-11-29 19:59:56.033,-126.3248804657,134169.227718958,45,0.3021043012,113.206538326,202.2101464171,50.003,0,97.1686477661,108.8985748291 +2011-11-29 19:59:56.066,-126.2857857253,134170.12981988,90,0.21362,113.206538326,202.2101464171,50.003,0,97.1611557007,108.900970459 +2011-11-29 19:59:56.100,-126.2435383741,134165.681416483,0,0,113.2304126595,202.013827868,50.003,0,97.1548614502,108.8809204102 +2011-11-29 19:59:56.133,-126.2012882442,134161.305962835,180,0.21362,113.2621465381,202.29441797,50.003,0,97.1534805298,108.8781204224 +2011-11-29 19:59:56.166,-126.1621921462,134162.405540537,0,0,113.3177083868,202.3788799174,50.003,0,97.1620025635,108.9016799927 +2011-11-29 19:59:56.200,-126.1199383963,134158.170554998,0,0,113.4212825942,202.0714223663,50.003,0,97.1482009888,108.8701324463 +2011-11-29 19:59:56.233,-126.078539557,134166.799388069,0,0.21362,113.4212825942,202.0714223663,50.003,0,97.1569366455,108.8866729736 +2011-11-29 19:59:56.266,-126.0362846182,134162.708859959,0,0,113.3972299186,202.2674594053,50.003,0,97.1673736572,108.872253418 +2011-11-29 19:59:56.300,-125.9971904818,134164.072070812,0,0,113.5323485609,202.2416254428,50.003,0,97.1594848633,108.8888473511 +2011-11-29 19:59:56.333,-125.958097158,134165.497742137,-90,0.21362,113.5565353332,202.0457891955,50.003,0,97.1800765991,108.8734893799 +2011-11-29 19:59:56.366,-125.9190046833,134166.985871945,-45,0.3021043012,113.6120416406,202.1312580836,50.003,0,97.1493682861,108.8722305298 +2011-11-29 19:59:56.400,-125.8767451463,134163.170866289,0,0.21362,113.6432273266,202.4125871936,50.003,0,97.1727752686,108.8737335205 +2011-11-29 19:59:56.433,-125.8353639263,134172.211063515,45,0.3021043012,113.6985963977,202.4983519717,50.003,0,97.1650314331,108.8755340576 +2011-11-29 19:59:56.466,-125.7953904767,134161.114472956,90,0.21362,113.6675009754,202.2169165137,50.003,0,97.1680755615,108.8761672974 +2011-11-29 19:59:56.500,-125.756298725,134162.862549868,180,0.21362,113.691821641,202.0212821986,50.003,0,97.1696929932,108.8909378052 +2011-11-29 19:59:56.533,-125.7140334771,134159.328574576,-90,0.21362,113.7472772497,202.1072130282,50.003,0,97.1583175659,108.8901977539 +2011-11-29 19:59:56.566,-125.6726622447,134168.643911493,-90,0.21362,113.7472772497,202.1072130282,50.003,0,97.157081604,108.8854980469 +2011-11-29 19:59:56.600,-125.6303966828,134165.25440448,0,0,113.778278551,202.3888010365,50.003,0,97.1822662354,108.8975372314 +2011-11-29 19:59:56.633,-125.5913084876,134167.266065824,0,0,113.8580468587,202.2796419631,50.003,0,97.1639556885,108.8804931641 +2011-11-29 19:59:56.666,-125.5522214826,134169.340169542,0,0,113.937901151,202.1708753864,50.003,0,97.1505889893,108.8835754395 +2011-11-29 19:59:56.700,-125.5099532235,134166.158718707,0,0,113.9932105692,202.2576451445,50.003,0,97.1790924072,108.8581161499 +2011-11-29 19:59:56.733,-125.4676829827,134163.050288726,0,0,113.9932105692,202.2576451445,50.003,0,97.1486206055,108.8765487671 +2011-11-29 19:59:56.766,-125.4285967805,134165.32187684,90,0.21362,114.0731459219,202.1495439574,50.003,0,97.1672363281,108.8773803711 +2011-11-29 19:59:56.800,-125.3863244559,134162.353998034,45,0.3021043012,114.1284029303,202.2367741561,50.003,0,97.1610794067,108.8828582764 +2011-11-29 19:59:56.833,-125.3472394866,134164.755545283,0,0.21362,114.1284029303,202.2367741561,50.003,0,97.1972503662,108.8884429932 +2011-11-29 19:59:56.866,-125.3049652486,134161.92822496,0,0,114.1836122402,202.3241922929,50.003,0,97.1837997437,108.875831604 +2011-11-29 19:59:56.900,-125.26588167,134164.459727464,180,0.21362,114.2387738111,202.4117981243,50.003,0,97.1591644287,108.8805007935 +2011-11-29 19:59:56.933,-125.2236056889,134161.772972079,-90,0.21362,114.2938876026,202.4995914066,50.003,0,97.1670913696,108.893409729 +2011-11-29 19:59:56.966,-125.1845236586,134164.43442517,0,0,114.3738866014,202.3929722709,50.003,0,97.1730804443,108.8729705811 +2011-11-29 19:59:57.000,-125.142246105,134161.888240332,0,0,114.3738866014,202.3929722709,50.003,0,97.171546936,108.9037704468 +2011-11-29 19:59:57.033,-125.1031657805,134164.679638556,0,0,114.3988676151,202.1984110461,50.003,0,97.1695251465,108.899848938 +2011-11-29 19:59:57.066,-125.060886825,134162.274029019,0,0,114.4539697741,202.2867481164,50.003,0,97.1380767822,108.8764648438 +2011-11-29 19:59:57.100,-125.0218083639,134165.195366137,0,0,114.4539697741,202.2867481164,50.003,0,97.1440734863,108.8976669312 +2011-11-29 19:59:57.133,-124.9795281769,134162.930335809,0,0,114.5341369402,202.1809195656,50.003,0,97.1693191528,108.8798980713 +2011-11-29 19:59:57.166,-124.9372465852,134150.738364796,0,0,114.5341369402,202.1809195656,50.003,0,97.1678695679,108.8772735596 +2011-11-29 19:59:57.200,-124.8981704888,134163.85715673,0,0,114.6143879176,202.07548724,50.003,0,97.175994873,108.8855743408 +2011-11-29 19:59:57.233,-124.8590962272,134167.038349773,0,0,114.5891845722,202.2697154899,50.003,0,97.1767120361,108.879737854 +2011-11-29 19:59:57.266,-124.8168140888,134165.054486177,-90,0.21362,114.6694289185,202.1645551976,50.003,0,97.1649246216,108.8866958618 +2011-11-29 19:59:57.300,-124.774530723,134163.14368949,0,0,114.724421391,202.2538095568,50.003,0,97.1566314697,108.8917999268 +2011-11-29 19:59:57.333,-124.7354593049,134166.522316907,0,0.21362,114.724421391,202.2538095568,50.003,0,97.1647186279,108.8768463135 +2011-11-29 19:59:57.366,-124.6931753078,134164.752109177,0,0.21362,114.7497566321,202.0597918592,50.003,0,97.162727356,108.8742141724 +2011-11-29 19:59:57.400,-124.6541064652,134168.260640042,0,0,114.8047420465,202.1493182159,50.003,0,97.1680297852,108.8798294067 +2011-11-29 19:59:57.433,-124.6118220073,134166.631021332,0,0,114.8596787288,202.239030583,50.003,0,97.1591033936,108.8679962158 +2011-11-29 19:59:57.466,-124.5749745599,134162.731038799,180,0.21362,114.914566643,202.328928713,50.003,0,97.1684875488,108.8740386963 +2011-11-29 19:59:57.500,-124.53268746,134161.238176074,180,0.21362,114.9949550824,202.2253788156,50.003,0,97.1475372314,108.8726577759 +2011-11-29 19:59:57.533,-124.4903994419,134159.818394794,0,0,115.0497863759,202.315734124,50.003,0,97.177406311,108.8779373169 +2011-11-29 19:59:57.566,-124.4513347572,134163.650676452,0,0,115.0497863759,202.315734124,50.003,0,97.1702423096,108.8703231812 +2011-11-29 19:59:57.600,-124.4090467034,134162.371491249,0,0,115.1045686652,202.4062745524,50.003,0,97.1501235962,108.8773956299 +2011-11-29 19:59:57.633,-124.3699851441,134166.333645799,0,0,115.1302489473,202.2128544829,50.003,0,97.1458892822,108.8874282837 +2011-11-29 19:59:57.666,-124.3276972251,134165.195053765,0,0,115.1850229941,202.3036665243,50.003,0,97.1630401611,108.8974227905 +2011-11-29 19:59:57.700,-124.2876112015,134156.565180327,180,0.21362,115.2397478379,202.3946632874,50.003,0,97.1670532227,108.8887481689 +2011-11-29 19:59:57.733,-124.2485516539,134150.72118375,90,0.21362,115.2655588179,202.2014577944,50.003,0,97.1507492065,108.8830108643 +2011-11-29 19:59:57.766,-124.2072964979,134172.510924862,0,0.21362,115.3202749936,202.2927261155,50.003,0,97.1583251953,108.880897522 +2011-11-29 19:59:57.800,-124.1672050336,134164.078318309,0,0,115.3202749936,202.2927261155,50.003,0,97.1677093506,108.8694458008 +2011-11-29 19:59:57.833,-124.1249150029,134163.290194237,0,0,115.4008831875,202.1911889408,50.003,0,97.1616363525,108.8890609741 +2011-11-29 19:59:57.866,-124.0858626481,134167.705878448,0,0,115.4555408695,202.2829130806,50.003,0,97.1804656982,108.8902740479 +2011-11-29 19:59:57.900,-124.0435733479,134167.058341321,0,0,115.5101489558,202.3748211375,50.003,0,97.162727356,108.8739013672 +2011-11-29 19:59:57.933,-124.0012836624,134166.483895494,0,0,115.5362205484,202.1820480939,50.003,0,97.1711578369,108.8679580688 +2011-11-29 19:59:57.966,-123.9589936379,134165.982541906,-90,0.21362,115.5623418997,201.9893169933,50.003,0,97.1614303589,108.8739624023 +2011-11-29 19:59:58.000,-123.9221295626,134163.065907587,-90,0.21362,115.5623418997,201.9893169933,50.003,0,97.1431350708,108.8888931274 +2011-11-29 19:59:58.033,-123.8798382268,134162.701362886,-90,0.21362,115.5623418997,201.9893169933,50.003,0,97.1537857056,108.8983459473 +2011-11-29 19:59:58.066,-123.8375466842,134162.40991384,180,0.21362,115.6169806065,202.0815843973,50.003,0,97.1659469604,108.8904647827 +2011-11-29 19:59:58.100,-123.7985040889,134167.284183134,180,0.21362,115.6715693921,202.1740354067,50.003,0,97.1497192383,108.8815078735 +2011-11-29 19:59:58.133,-123.7583864888,134159.521628932,0,0,115.7523995828,202.0742452039,50.003,0,97.1625518799,108.8768844604 +2011-11-29 19:59:58.166,-123.7193459845,134164.522202242,0,0.21362,115.8333094844,201.9748575711,50.003,0,97.1608352661,108.8717575073 +2011-11-29 19:59:58.200,-123.6770548768,134164.50814542,0,0.21362,115.8614066922,202.2602397655,50.003,0,97.1608276367,108.8765563965 +2011-11-29 19:59:58.233,-123.6347637834,134164.567184065,0,0,115.8614066922,202.2602397655,50.003,0,97.1676330566,108.8694610596 +2011-11-29 19:59:58.266,-123.5957294743,134169.76498201,0,0,115.8878276395,202.068034909,50.003,0,97.1521453857,108.8916854858 +2011-11-29 19:59:58.300,-123.5556011846,134162.334942921,0,0,115.9702131112,202.4469650878,50.003,0,97.1585769653,108.8986282349 +2011-11-29 19:59:58.333,-123.5133095876,134162.603900896,0,0,116.0245409899,202.540601153,50.003,0,97.1677703857,108.8965911865 +2011-11-29 19:59:58.366,-123.4742795284,134167.995441796,0,0,116.0510801618,202.3486626035,50.003,0,97.1569519043,108.8877639771 +2011-11-29 19:59:58.400,-123.4341441033,134150.764604934,180,0.21362,116.0776697234,202.1567675504,50.003,0,97.161529541,108.8999023438 +2011-11-29 19:59:58.433,-123.3918523829,134161.243486559,0,0,116.1053969272,202.4425695515,50.003,0,97.1603851318,108.8806762695 +2011-11-29 19:59:58.466,-123.3495609875,134161.795463454,0,0.21362,116.1863310491,202.3449415028,50.003,0,97.1730651855,108.9012145996 +2011-11-29 19:59:58.500,-123.3105374708,134167.448175914,45,0.3021043012,116.2405858612,202.4393010138,50.003,0,97.1746368408,108.8605804443 +2011-11-29 19:59:58.533,-123.2682484304,134168.140691784,90,0.21362,116.2673431456,202.2477175916,50.003,0,97.1575622559,108.8795013428 +2011-11-29 19:59:58.566,-123.2281022544,134161.247859899,180,0.21362,116.2941511649,202.0561783614,50.003,0,97.1482009888,108.8838043213 +2011-11-29 19:59:58.600,-123.1912241398,134159.432599045,180,0.21362,116.4026639515,202.2457997127,50.003,0,97.156829834,108.8981933594 +2011-11-29 19:59:58.633,-123.1489333129,134150.331329611,0,0,116.375778408,202.4371595295,50.003,0,97.1731033325,108.8786621094 +2011-11-29 19:59:58.666,-123.1066430757,134161.303151403,180,0.21362,116.375778408,202.4371595295,50.003,0,97.1512374878,108.8828887939 +2011-11-29 19:59:58.700,-123.0643534741,134162.348062835,180,0.21362,116.4026639515,202.2457997127,50.003,0,97.1615982056,108.874130249 +2011-11-29 19:59:58.733,-123.0253426839,134168.455555733,0,0,116.456843979,202.3408820422,50.003,0,97.1549530029,108.8856430054 +2011-11-29 19:59:58.766,-122.9851845428,134161.961337221,0,0,116.5109730624,202.4361451343,50.003,0,97.1742858887,108.8965072632 +2011-11-29 19:59:58.800,-122.9428962228,134163.216160942,0,0,116.5921030068,202.3405437502,50.003,0,97.1489715576,108.8876876831 +2011-11-29 19:59:58.833,-122.9038913296,134169.517279021,0,0,116.5921030068,202.3405437502,50.003,0,97.1713790894,108.8796539307 +2011-11-29 19:59:58.866,-122.8637277475,134163.222408479,0,0,116.727361733,202.3413330974,50.003,0,97.1679153442,108.9044113159 +2011-11-29 19:59:58.900,-122.8214410891,134164.687135518,90,0.21362,116.727361733,202.3413330974,50.003,0,97.1602401733,108.9035568237 +2011-11-29 19:59:58.933,-122.7812722541,134158.527614704,90,0.21362,116.6733094885,202.2453484444,50.003,0,97.1509399414,108.8897857666 +2011-11-29 19:59:58.966,-122.7422737812,134165.086348176,0,0,116.7545922893,202.1505597907,50.003,0,97.1467895508,108.8860855103 +2011-11-29 19:59:59.000,-122.6999891643,134166.760966736,0,0,116.8086312002,202.2468150626,50.003,0,97.1661834717,108.8651580811 +2011-11-29 19:59:59.033,-122.6598154943,134150.800841308,180,0.21362,116.8899765001,202.1527043111,50.003,0,97.1562805176,108.8912353516 +2011-11-29 19:59:59.066,-122.6175306221,134162.617957918,180,0.21362,116.916554617,202.4398645586,50.003,0,97.1646957397,108.8951416016 +2011-11-29 19:59:59.100,-122.5752469184,134164.50814542,0,0,116.8626186502,202.3432500708,50.003,0,97.159362793,108.8843536377 +2011-11-29 19:59:59.133,-122.5329644291,134166.471400723,0,0,116.9439501946,202.2494098225,50.003,0,97.1580886841,108.8925857544 +2011-11-29 19:59:59.166,-122.4960812033,134165.703907201,0,0,117.0253570826,202.1559774825,50.003,0,97.1645431519,108.8975982666 +2011-11-29 19:59:59.200,-122.4538003113,134167.803961464,0,0,117.079264962,202.2531326808,50.003,0,97.1678619385,108.8884811401 +2011-11-29 19:59:59.233,-122.4136164481,134162.248101555,90,0.21362,117.079264962,202.2531326808,50.003,0,97.1650466919,108.9010162354 +2011-11-29 19:59:59.266,-122.3734292765,134156.758238659,90,0.21362,117.1331210278,202.3504667489,50.003,0,97.1731033325,108.8864440918 +2011-11-29 19:59:59.300,-122.3344513093,134163.96680044,90,0.21362,117.2145739935,202.2579835752,50.003,0,97.1670379639,108.8754882813 +2011-11-29 19:59:59.333,-122.292172612,134166.346140583,0,0,117.2961013175,202.1659095404,50.003,0,97.1810455322,108.8871078491 +2011-11-29 19:59:59.366,-122.2519818186,134161.055745173,0,0,117.2961013175,202.1659095404,50.003,0,97.1683578491,108.8793869019 +2011-11-29 19:59:59.400,-122.2130117407,134168.457742286,0,0,117.2961013175,202.1659095404,50.003,0,97.1613616943,108.897102356 +2011-11-29 19:59:59.433,-122.1728185161,134163.297378901,0,0,117.4035980834,202.3621933019,50.003,0,97.1722106934,108.8907623291 +2011-11-29 19:59:59.466,-122.1305426865,134165.955990417,0,0.21362,117.457268209,202.4606019138,50.003,0,97.1649475098,108.8854522705 +2011-11-29 19:59:59.500,-122.0882685553,134168.687642477,0,0,117.4851688136,202.2710691285,50.003,0,97.1559066772,108.8938980103 +2011-11-29 19:59:59.533,-122.0480707276,134163.732206524,180,0.21362,117.4851688136,202.2710691285,50.003,0,97.1580963135,108.8761749268 +2011-11-29 19:59:59.566,-122.0078699501,134158.842813602,90,0.21362,117.4851688136,202.2710691285,50.003,0,97.169128418,108.8963851929 +2011-11-29 19:59:59.600,-121.9655962056,134161.786404428,0,0.21362,117.5388233496,202.3697475483,50.003,0,97.1566238403,108.8784561157 +2011-11-29 19:59:59.633,-121.9266426924,134169.644410373,0,0,117.6204515862,202.2793035687,50.003,0,97.1657791138,108.8881988525 +2011-11-29 19:59:59.666,-121.8864393814,134164.954526913,0,0,117.6204515862,202.2793035687,50.003,0,97.1750717163,108.8861083984 +2011-11-29 19:59:59.700,-121.8441703546,134168.107893413,-90,0.21362,117.6485301316,202.0900523661,50.003,0,97.1716537476,108.8746643066 +2011-11-29 19:59:59.733,-121.8039637622,134163.553527528,0,0,117.7021526855,202.1892705257,50.003,0,97.1612319946,108.9004211426 +2011-11-29 19:59:59.766,-121.7616962988,134166.849367023,0,0,117.7839264122,202.0996489686,50.003,0,97.1667633057,108.8891830444 +2011-11-29 19:59:59.800,-121.7214865914,134162.430530835,0,0,117.7557225911,202.2886656071,50.003,0,97.1659469604,108.8894958496 +2011-11-29 19:59:59.833,-121.681274255,134158.077775549,-90,0.21362,117.837479774,202.1993137911,50.003,0,97.1578903198,108.8782424927 +2011-11-29 19:59:59.866,-121.6390082108,134161.585543816,0,0,117.972792665,202.2104849273,50.003,0,97.1689834595,108.8957824707 +2011-11-29 19:59:59.900,-121.6021232027,134162.165633444,0,0,118.026223273,202.3107718337,50.003,0,97.1633148193,108.8907318115 +2011-11-29 19:59:59.933,-121.5598605775,134165.810113323,0,0.21362,118.026223273,202.3107718337,50.003,0,97.1668395996,108.8931274414 +2011-11-29 19:59:59.966,-121.51964421,134161.722991235,0,0,118.026223273,202.3107718337,50.003,0,97.1632156372,108.8823699951 +2011-11-29 20:00:00.000,-121.4773837521,134165.509924627,0,0,118.0546766226,202.1222274123,50.003,0,97.1730041504,108.8860244751 +2011-11-29 20:00:00.033,-121.4371648441,134161.558366696,0,0,118.0831830987,201.9337329305,50.003,0,97.1589202881,108.8872680664 +2011-11-29 20:00:00.066,-121.3949067286,134165.487746247,0,0,118.1080898515,202.2227837473,50.003,0,97.1499252319,108.8810882568 +2011-11-29 20:00:00.100,-121.3546854467,134161.671760849,-90,0.21362,118.2147568763,202.4244228654,50.003,0,97.1751480103,108.8851470947 +2011-11-29 20:00:00.133,-121.3178022047,134162.680433555,0,0,118.2966588208,202.3373863303,50.003,0,97.1443634033,108.8663330078 +2011-11-29 20:00:00.166,-121.2755480625,134166.815943599,45,0.3021043012,118.2966588208,202.3373863303,50.003,0,97.1742706299,108.903137207 +2011-11-29 20:00:00.200,-121.2332965481,134171.024418128,45,0.3021043012,118.2966588208,202.3373863303,50.003,0,97.1682891846,108.8765640259 +2011-11-29 20:00:00.233,-121.1930725293,134167.474102373,0,0.21362,118.3498945014,202.4387374675,50.003,0,97.1636886597,108.899597168 +2011-11-29 20:00:00.266,-121.1528464015,134163.989916196,0,0,118.4318484119,202.3523836358,50.003,0,97.1545944214,108.8760223389 +2011-11-29 20:00:00.300,-121.1126182041,134150.57186475,0,0,118.4318484119,202.3523836358,50.003,0,97.1567687988,108.8878555298 +2011-11-29 20:00:00.333,-121.0703700492,134165.061670746,0,0,118.4318484119,202.3523836358,50.003,0,97.1704940796,108.884475708 +2011-11-29 20:00:00.366,-121.030140134,134161.779219684,0,0,118.5138721318,202.266444159,50.003,0,97.1675796509,108.9068145752 +2011-11-29 20:00:00.400,-120.9878951856,134166.411425808,180,0.21362,118.567017213,202.3685073182,50.003,0,97.1589508057,108.8912811279 +2011-11-29 20:00:00.433,-120.9476637192,134163.264579346,0,0,118.5959654139,202.1809195656,50.003,0,97.1707229614,108.882598877 +2011-11-29 20:00:00.466,-120.9107849901,134164.886741996,-90,0.21362,118.6490914541,202.283251469,50.003,0,97.1641921997,108.8653106689 +2011-11-29 20:00:00.500,-120.8671952236,134157.169345768,-90,0.21362,118.7021637247,202.3857571085,50.003,0,97.1677322388,108.8824920654 +2011-11-29 20:00:00.533,-120.8249546647,134162.082852902,-90,0.21362,118.7551822163,202.4884362202,50.003,0,97.1568832397,108.88230896 +2011-11-29 20:00:00.566,-120.7847182813,134159.203932539,0,0,118.7551822163,202.4884362202,50.003,0,97.158416748,108.8909759521 +2011-11-29 20:00:00.600,-120.7424814497,134164.259807976,0,0,118.7842875552,202.3011852464,50.003,0,97.1597824097,108.9033355713 +2011-11-29 20:00:00.633,-120.7022440114,134161.516507672,135,0.3021043012,118.8664799091,202.2170293467,50.003,0,97.1782150269,108.8862075806 +2011-11-29 20:00:00.666,-120.6620049474,134158.839377344,0,0,118.8664799091,202.2170293467,50.003,0,97.1726455688,108.8806228638 diff --git a/PMUSimulator/DataDir/50Hz_measurement_files/Rect Floating Point - 3 phasors, 2 analogs.csv b/PMUSimulator/DataDir/50Hz_measurement_files/Rect Floating Point - 3 phasors, 2 analogs.csv new file mode 100755 index 0000000..d959d96 --- /dev/null +++ b/PMUSimulator/DataDir/50Hz_measurement_files/Rect Floating Point - 3 phasors, 2 analogs.csv @@ -0,0 +1,439 @@ +2011-11-29 19:40:43.633,-95.0310743232,134161.730967817,144.6209026086,202.1741503424,24.7951722724,201.0948560874,50.0033798218,-0.0014368678,97.1672668457,11.7199020386 +2011-11-29 19:40:43.666,-94.9904572707,134162.222746533,144.6706160271,201.9811511642,24.7884525562,201.0386165045,50.003364563,0,97.1768341064,11.6947250366 +2011-11-29 19:40:43.700,-94.9484913082,134161.379156871,144.7633064276,202.0314571126,24.7527349645,200.9489535604,50.0033798218,0.0009155273,97.1564178467,11.7217178345 +2011-11-29 19:40:43.733,-94.907366856,134150.635667951,144.7676405372,202.1212960972,24.8216331728,201.0496115566,50.0034065247,0.0005213264,97.1714477539,11.7051925659 +2011-11-29 19:40:43.766,-94.8670899705,134162.4825921,144.7824524451,202.1468254967,24.9063055163,201.2645329261,50.0033874512,-0.0007375237,97.1837844849,11.6851348877 +2011-11-29 19:40:43.800,-94.8266379063,134163.702365177,144.8516040282,202.2346686741,24.9307552785,201.3175790007,50.00340271,0.0005976297,97.1774597168,11.7053833008 +2011-11-29 19:40:43.833,-94.7850190031,134162.517929697,144.8824993131,202.2376580829,24.9790511725,201.1612151129,50.0034255981,0.0004577637,97.194480896,11.6948776245 +2011-11-29 19:40:43.866,-94.74508973,134161.638699808,144.9240956101,202.1826863895,25.0447174712,200.9130145547,50.0033950806,-0.0011316827,97.1801147461,11.7219772339 +2011-11-29 19:40:43.900,-94.7058129128,134162.486906616,144.9811914484,202.205017683,25.0691587949,201.0001207642,50.0033607483,-0.0009282399,97.1677017212,11.6936264038 +2011-11-29 19:40:43.933,-94.6638690923,134163.782027835,144.9631209332,202.1431445004,25.081942998,201.291458323,50.0033950806,0.0012206985,97.1804656982,11.6960754395 +2011-11-29 19:40:43.966,-94.6220197946,134162.9564704,144.986687662,202.1038830972,25.105064665,201.189658547,50.0034255981,0.000699372,97.17628479,11.6816558838 +2011-11-29 19:40:44.000,-94.5808373626,134161.199078223,145.0537365439,202.1257600723,25.1484111906,201.0232102429,50.0034141541,-0.0006357813,97.1669235229,11.7047042847 +2011-11-29 19:40:44.033,-94.5401579804,134161.3132107,145.0988863586,202.0957344387,25.2339007635,201.0445621051,50.0034294128,0.0007629348,97.184753418,11.6997299194 +2011-11-29 19:40:44.066,-94.498989481,134161.62425985,145.1486237194,201.9645690389,25.261110344,201.0552224405,50.0034408569,0.0005086418,97.1720581055,11.7031707764 +2011-11-29 19:40:44.100,-94.4587847011,134150.707273445,145.2195621017,201.9400402392,25.2850707501,201.0637865312,50.0034179688,-0.0007629488,97.1693267822,11.7102813721 +2011-11-29 19:40:44.133,-94.4192600376,134150.120553969,145.2767963294,202.035486901,25.3552110354,201.0625841924,50.0033874512,-0.0012588222,97.1715621948,11.7076644897 +2011-11-29 19:40:44.166,-94.3781150607,134162.347329085,145.2994004596,202.136051787,25.3936239362,201.0597587381,50.0033836365,5.08641824126244E-05,97.1907501221,11.691734314 +2011-11-29 19:40:44.200,-94.337040445,134163.417617171,145.3234992055,202.0637450357,25.422067516,201.0716968655,50.0033950806,0.0001525925,97.1713409424,11.6921691895 +2011-11-29 19:40:44.233,-94.2963398144,134162.710900816,145.3395725473,202.0257498896,25.4673359443,201.256156586,50.0033836365,-0.0004323386,97.1721038818,11.7059249878 +2011-11-29 19:40:44.266,-94.2548432443,134150.679829932,145.3469560809,202.0398242763,25.4990424519,201.316615875,50.0034103394,0.0012333971,97.1785430908,11.7187728882 +2011-11-29 19:40:44.300,-94.2130117063,134150.447644123,145.3828690279,202.0266798601,25.5184274769,201.1924472067,50.0034370422,0.0008010864,97.1839828491,11.6969528198 +2011-11-29 19:40:44.333,-94.1728782862,134162.378687192,145.4253222978,201.988632841,25.5537299123,201.1205511141,50.0034255981,-0.0006357534,97.175453186,11.6959915161 +2011-11-29 19:40:44.366,-94.133777282,134163.030477833,145.5162987705,202.0788180691,25.6114414969,201.1899770996,50.0033988953,-0.0011062576,97.1768341064,11.7010345459 +2011-11-29 19:40:44.400,-94.0928938137,134161.37818328,145.6282292682,202.1137942269,25.6729760154,201.2070766817,50.00340271,0.0006230548,97.176361084,11.7106018066 +2011-11-29 19:40:44.433,-94.050808563,134150.111967316,145.6345967967,202.0495947778,25.7291457745,201.2897378958,50.0034141541,0.0001780316,97.1847610474,11.6962127686 +2011-11-29 19:40:44.466,-94.0094375344,134162.058495589,145.6379051427,202.0712667289,25.7344019736,201.2562059503,50.0033988953,-0.0005722046,97.1832427979,11.7029342651 +2011-11-29 19:40:44.500,-93.9688489711,134164.092241769,145.710651974,202.1138281414,25.7637537997,201.0835457434,50.0034103394,0.0008265115,97.1794128418,11.692779541 +2011-11-29 19:40:44.533,-93.9281617816,134165.550782778,145.7378252131,202.0793797171,25.7971812652,201.13050609,50.0034217834,0.0001652911,97.1799087524,11.6959228516 +2011-11-29 19:40:44.566,-93.8877303209,134165.065932838,145.7710763305,202.0247136645,25.8423937108,201.0863276811,50.0034065247,-0.0008010864,97.1574859619,11.7195129395 +2011-11-29 19:40:44.600,-93.8471452129,134162.47828073,145.8129581692,202.1107099031,25.9326781705,201.0355881657,50.0033836365,-0.0003560353,97.1762466431,11.6885147095 +2011-11-29 19:40:44.633,-93.8064295825,134161.378531962,145.8363868748,202.2534170587,25.9779934519,201.1887018578,50.0033836365,0,97.1653823853,11.7189559937 +2011-11-29 19:40:44.666,-93.7653691895,134162.031628747,145.8701760448,202.2553950572,25.9891544306,201.2958548044,50.0033874512,0.00027976,97.1782073975,11.6996002197 +2011-11-29 19:40:44.700,-93.7247840171,134162.872974943,145.9502519742,202.1963318514,26.0454380945,201.1920753409,50.0033874512,-0.0001907302,97.1775588989,11.693687439 +2011-11-29 19:40:44.733,-93.6841384954,134162.879988519,146.0040553928,202.163196384,26.1000693961,201.023190671,50.0033912659,0.0002161553,97.1760253906,11.694152832 +2011-11-29 19:40:44.766,-93.643114839,134163.383492391,146.0036310441,202.1265502764,26.0996372874,201.0196953607,50.00340271,0.0003560353,97.1793518066,11.7110214233 +2011-11-29 19:40:44.800,-93.6019639518,134162.778433517,146.0401910973,202.2031372639,26.1417216629,201.1089015998,50.0034103394,0.0001653191,97.1462860107,11.734992981 +2011-11-29 19:40:44.833,-93.5614836225,134161.57324323,146.0599739494,202.2214332607,26.2257556183,201.1830916432,50.0033988953,-0.0004323386,97.1767349243,11.6837997437 +2011-11-29 19:40:44.866,-93.5211936482,134163.483879781,146.0743977775,202.0732816033,26.2864834637,201.1529193526,50.0033950806,-7.62892886996269E-05,97.1872787476,11.6847686768 +2011-11-29 19:40:44.900,-93.480923458,134165.886162059,146.1384221454,202.0678369606,26.2901719677,201.1324939442,50.0033836365,-0.0004323106,97.1711654663,11.7049636841 +2011-11-29 19:40:44.933,-93.440068767,134163.106671404,146.1869143277,202.133290204,26.3025218097,201.2904097516,50.0033798218,2.79396772384644E-08,97.17628479,11.6963043213 +2011-11-29 19:40:44.966,-93.3986271897,134161.362731642,146.26690113,202.0872092583,26.3609911145,201.3586354568,50.0033798218,1.27265229821205E-05,97.1451797485,11.7205429077 +2011-11-29 19:40:45.000,-93.3571694449,134161.267742595,146.3478968845,202.0387991591,26.4390978981,201.2013068296,50.0034065247,0.000953665,97.1782989502,11.7075042725 +2011-11-29 19:40:45.033,-93.316988852,134159.913771664,146.3703280835,202.0717541503,26.485946971,201.0761478982,50.0034065247,-6.35627657175064E-05,97.1798858643,11.6761474609 +2011-11-29 19:40:45.066,-93.2767565955,134150.450080553,146.3790298327,202.1218749024,26.4979962322,201.144572227,50.0034103394,0.0002924446,97.1577758789,11.7214355469 +2011-11-29 19:40:45.100,-93.2351382024,134162.058389414,146.3928716063,202.1377124677,26.5495254945,201.1364066736,50.0034294128,0.0003306102,97.1667022705,11.6985321045 +2011-11-29 19:40:45.133,-93.1943838822,134163.286881728,146.4395721946,202.0185476934,26.5939330716,201.0830479944,50.0034103394,-0.0008901022,97.1697692871,11.7150878906 +2011-11-29 19:40:45.166,-93.1542816942,134163.571887267,146.5238623723,202.0955565215,26.6138022631,201.1812780906,50.0033721924,-0.001093559,97.1782150269,11.6863327026 +2011-11-29 19:40:45.200,-93.1137655223,134164.464483283,146.5918065496,202.2548308383,26.6438913138,201.2438006984,50.0033798218,0.0004704902,97.1662216187,11.7092285156 +2011-11-29 19:40:45.233,-93.0725212521,134163.314043274,146.5901772253,202.1977542229,26.6354877948,201.2681885522,50.00340271,0.0007375097,97.1663284302,11.6977844238 +2011-11-29 19:40:45.266,-93.031164335,134162.031479972,146.601764001,202.1006247164,26.6466599659,201.2914283896,50.0033988953,-0.0003560493,97.1905593872,11.6807479858 +2011-11-29 19:40:45.300,-92.9916340625,134164.781846796,146.6426387886,202.1101540305,26.7488664965,201.2865518441,50.0033798218,-0.000279732,97.1825408936,11.6873931885 +2011-11-29 19:40:45.333,-92.9520882556,134165.560051442,146.6903624084,202.1758557991,26.8438529903,201.1901688443,50.0033798218,8.90158116817474E-05,97.1871185303,11.6791610718 +2011-11-29 19:40:45.366,-92.9096339799,134162.394811721,146.7193872902,202.1716101872,26.8868311234,201.1218970542,50.0034103394,0.000813799,97.1711883545,11.70337677 +2011-11-29 19:40:45.400,-92.8676473558,134159.827651591,146.7103388258,202.1690060791,26.8995004269,201.139440477,50.0034217834,-0.0001271535,97.1585083008,11.7232513428 +2011-11-29 19:40:45.433,-92.8273436368,134159.748725519,146.7683504337,202.1390275519,26.937715162,201.1614400357,50.0033912659,-0.0007883878,97.1487960815,11.7245559692 +2011-11-29 19:40:45.466,-92.7868928535,134150.110511494,146.8674207428,202.1175709233,27.0239677522,200.9697838503,50.00340271,0.0004323386,97.1795043945,11.6893157959 +2011-11-29 19:40:45.500,-92.7459613419,134150.313074001,146.9267314938,202.0963275339,27.0673663396,200.8727991329,50.0034217834,0.0005722046,97.1768341064,11.6928787231 +2011-11-29 19:40:45.533,-92.7052852844,134159.705090564,146.9674190104,202.1407586879,27.048345879,201.0456518846,50.0033950806,-0.0006866734,97.1856231689,11.7129516602 +2011-11-29 19:40:45.566,-92.6650390777,134150.290901027,146.9959775566,202.2251815193,27.0938394189,201.2023096038,50.0033760071,-0.0005722046,97.1657104492,11.7122192383 +2011-11-29 19:40:45.600,-92.6248766466,134161.608798821,147.0078069922,202.1536090213,27.1846040778,201.1677686431,50.0033721924,7.62892886996269E-05,97.1608734131,11.7198257446 +2011-11-29 19:40:45.633,-92.5845457813,134161.301149552,147.0530024327,201.9804867667,27.2120365434,201.0628336662,50.0033683777,-0.0003178837,97.1881713867,11.6849441528 +2011-11-29 19:40:45.666,-92.5434299966,134150.978338357,147.1145783429,202.1143578996,27.259447072,200.9084504532,50.0033683777,-1.39698386192322E-08,97.1709289551,11.6850891113 +2011-11-29 19:40:45.700,-92.5013305476,134162.109786067,147.1668023343,202.317353466,27.3135304789,200.9388429104,50.0033798218,0.000813799,97.1631317139,11.7126617432 +2011-11-29 19:40:45.733,-92.4608633417,134162.883498049,147.1955564865,202.1538880259,27.314910216,201.1369674719,50.0033950806,0,97.155380249,11.7086791992 +2011-11-29 19:40:45.766,-92.4215401621,134162.382922313,147.2076438614,202.0609532551,27.3272480121,201.242387861,50.0033874512,-0.0004068855,97.1701202393,11.7148742676 +2011-11-29 19:40:45.800,-92.3800445063,134162.437770808,147.2479421507,202.0680552916,27.4021172015,201.2633654963,50.0034179688,0.0015004585,97.178062439,11.7024993896 +2011-11-29 19:40:45.833,-92.3382197334,134162.015460007,147.3072229407,202.090544672,27.4350636987,201.1704512333,50.0034370422,-7.63032585382462E-05,97.1662216187,11.6988525391 +2011-11-29 19:40:45.866,-92.297853144,134161.44196509,147.3573737714,202.1595076966,27.440809437,201.0494659944,50.0033874512,-0.0016403245,97.1801223755,11.7005767822 +2011-11-29 19:40:45.900,-92.2572272129,134162.052666692,147.4090182216,202.2151627444,27.4944815616,201.1636335984,50.0033912659,0.0008901022,97.1815948486,11.6935653687 +2011-11-29 19:40:45.933,-92.2162355559,134162.635092467,147.441580441,202.066710676,27.5646647854,201.3217843221,50.0034141541,0.000534053,97.1707229614,11.7233200073 +2011-11-29 19:40:45.966,-92.1752120309,134164.643676579,147.492389597,202.1020217662,27.5478375247,201.1738886032,50.0034103394,-0.0002924446,97.1636123657,11.7089996338 +2011-11-29 19:40:46.000,-92.1341029698,134165.290603118,147.5554924308,202.1122078394,27.5525305722,200.9999138757,50.0034065247,-7.63032585382462E-05,97.1756973267,11.6872253418 +2011-11-29 19:40:46.033,-92.0934376012,134162.338936002,147.6072869055,201.9736748636,27.6419462379,201.0503350621,50.0034103394,-2.79396772384644E-08,97.1825714111,11.7096405029 +2011-11-29 19:40:46.066,-92.0523529108,134161.405462732,147.6031461364,202.0535960236,27.726924197,201.1920711535,50.0034141541,0.0001907162,97.1721343994,11.7244796753 +2011-11-29 19:40:46.100,-92.0104870543,134162.978336163,147.6178670319,202.1533261129,27.764366859,201.2389651465,50.0034217834,0.0002416084,97.17993927,11.6928482056 +2011-11-29 19:40:46.133,-91.969028458,134164.123977844,147.6798176334,202.1650768397,27.7712358817,201.1858953,50.0034332275,0.000139866,97.1949310303,11.6689758301 +2011-11-29 19:40:46.166,-91.9286625388,134162.893257736,147.7605629771,202.1184497426,27.8316627718,201.1237544537,50.0034217834,-0.000279746,97.1660919189,11.7040100098 +2011-11-29 19:40:46.200,-91.8893845517,134162.23530149,147.8252503164,202.0281933078,27.8633833511,200.999927587,50.0034141541,-0.0004704902,97.182472229,11.6990585327 +2011-11-29 19:40:46.233,-91.8496210938,134163.260822302,147.8483300395,202.0329492157,27.8745037476,201.0386300284,50.0033760071,-0.0011189841,97.2001724243,11.6981658936 +2011-11-29 19:40:46.266,-91.8090057932,134163.052909562,147.8940681011,202.1572588301,27.9281241356,201.196563286,50.0033531189,-0.0003051572,97.1736450195,11.6892166138 +2011-11-29 19:40:46.300,-91.7674331131,134161.780221351,147.9075050092,202.0441309008,27.9771843528,201.2445832743,50.0033531189,-1.39698386192322E-08,97.1490325928,11.7424087524 +2011-11-29 19:40:46.333,-91.7264376987,134161.369295617,147.9095714644,201.9986952351,28.0162663051,201.1991082695,50.0033721924,0.0004577637,97.1880569458,11.689125061 +2011-11-29 19:40:46.366,-91.6864334777,134161.751917573,147.9326261695,202.1508468451,28.0692941781,201.2630618359,50.0033798218,-1.39698386192322E-08,97.1741638184,11.7025527954 +2011-11-29 19:40:46.400,-91.6466785379,134163.045171359,147.9567129812,202.1607490623,28.1139736579,201.2976153124,50.0033798218,-2.54251062870026E-05,97.1701507568,11.7000579834 +2011-11-29 19:40:46.433,-91.6058654724,134163.630076029,147.9939904786,202.1188053543,28.1667939558,201.1566876418,50.0033874512,0.0001653191,97.1924667358,11.6864471436 +2011-11-29 19:40:46.466,-91.5641344275,134162.958221334,148.0074384821,202.1164756451,28.2052293467,201.2373412205,50.0033874512,0,97.1664428711,11.7091751099 +2011-11-29 19:40:46.500,-91.5225100898,134162.395465352,148.0697413822,202.0596533732,28.2322596413,201.2726187788,50.0033988953,0.0006612064,97.1793212891,11.6871490479 +2011-11-29 19:40:46.533,-91.4819704973,134162.172418846,148.1542205574,202.0392264775,28.2703088085,201.2050378284,50.0034141541,0.0002924306,97.1776199341,11.7169418335 +2011-11-29 19:40:46.566,-91.4413508048,134161.99619499,148.1968541189,202.1503752282,28.3148809772,201.1355342452,50.0034179688,0.0003560353,97.1858825684,11.703163147 +2011-11-29 19:40:46.600,-91.4000351578,134162.23831051,148.2509498321,202.3925490887,28.3825786193,200.9762755207,50.0034332275,0.0002543069,97.1878433228,11.6951980591 +2011-11-29 19:40:46.633,-91.3585946193,134163.262193605,148.2805003459,202.442879838,28.4274736183,201.0018069078,50.0034332275,0,97.1767807007,11.6972885132 +2011-11-29 19:40:46.666,-91.3179227883,134161.865704056,148.2807482966,202.3108518841,28.4495573126,201.2236308829,50.0034103394,-0.0008265115,97.1685256958,11.7141494751 +2011-11-29 19:40:46.700,-91.2777846517,134150.314669011,148.351269206,202.1871672831,28.4776980521,201.2569593091,50.0034065247,0,97.1823577881,11.6814193726 +2011-11-29 19:40:46.733,-91.2369135739,134161.511839359,148.4356454182,202.1683171205,28.5290771401,201.1733206695,50.0034141541,0.0002670335,97.1770477295,11.7100372314 +2011-11-29 19:40:46.766,-91.1961173087,134163.687344447,148.4433347147,202.1119168675,28.565293702,201.1720610959,50.0033988953,-0.0006866455,97.1743164063,11.7018966675 +2011-11-29 19:40:46.800,-91.1562202452,134163.754081074,148.4617485428,202.1245703709,28.6220763197,201.225292952,50.0033721924,-0.0007375237,97.1788787842,11.697303772 +2011-11-29 19:40:46.833,-91.1157669749,134162.672770895,148.5203030076,202.2239768177,28.6709462056,201.1786745511,50.003364563,0.0003560213,97.1840438843,11.7037200928 +2011-11-29 19:40:46.866,-91.0739516636,134150.004513931,148.566823849,202.3112925419,28.6717965501,201.2187245731,50.0033912659,0.0008392101,97.1651229858,11.7116012573 +2011-11-29 19:40:46.900,-91.0328661155,134150.095263904,148.591694118,202.3222649697,28.7116969794,201.2428540857,50.0033988953,-0.0003941869,97.1840286255,11.6947479248 +2011-11-29 19:40:46.933,-90.9924488807,134161.579165159,148.6135223382,202.2460548765,28.7878982289,201.2380955545,50.0033874512,-6.35627657175064E-05,97.1611175537,11.7321853638 +2011-11-29 19:40:46.966,-90.9518772031,134150.967232577,148.7070208642,202.1336010655,28.8520259804,201.1857903968,50.0033950806,6.35767355561256E-05,97.1761169434,11.7027130127 +2011-11-29 19:40:47.000,-90.9118938872,134150.42887868,148.7821842691,202.1227049225,28.8718043125,201.0788024379,50.0033912659,-0.0003560493,97.1924743652,11.6914215088 +2011-11-29 19:40:47.033,-90.8706124166,134161.878620997,148.7883651387,202.1902415043,28.9007876022,201.1344584518,50.0033836365,0,97.1760406494,11.6959762573 +2011-11-29 19:40:47.066,-90.8286750732,134162.953834777,148.774334999,202.2854338678,28.9515251366,201.1225116285,50.0033950806,0.0008392241,97.1721343994,11.7048339844 +2011-11-29 19:40:47.100,-90.7875977831,134161.862732972,148.8147247877,202.2248821765,28.9987903301,201.029495393,50.0034141541,0.000419626,97.1819610596,11.7102966309 +2011-11-29 19:40:47.133,-90.7472688608,134150.144643699,148.8791156158,202.0708977407,29.0278902894,201.0595870663,50.0034065247,-0.0003306242,97.1687469482,11.7080612183 +2011-11-29 19:40:47.166,-90.7074102344,134161.194350365,148.9481883826,202.0482744832,29.0344173943,201.2027014211,50.0034065247,-1.27125531435013E-05,97.1712036133,11.6953887939 +2011-11-29 19:40:47.200,-90.666993109,134164.215739759,148.9921725309,202.108681221,29.076644503,201.2558239835,50.0033836365,-0.0008392381,97.165397644,11.7139434814 +2011-11-29 19:40:47.233,-90.6259154353,134162.630404999,148.9854720084,201.9547298709,29.1430535423,201.2869403515,50.0033836365,1.39698386192322E-08,97.1723175049,11.711769104 +2011-11-29 19:40:47.266,-90.5853054517,134159.85954676,149.0294874627,201.9328312916,29.1740750553,201.3125407371,50.0033721924,-0.0003814604,97.1721954346,11.6974258423 +2011-11-29 19:40:47.300,-90.544215288,134161.067493115,149.1064372932,202.1503903816,29.2016983,201.2395589478,50.0033874512,0.0008646492,97.1631088257,11.7105102539 +2011-11-29 19:40:47.333,-90.5021875595,134163.200196859,149.1397402605,202.1615920235,29.2518719823,201.3367108203,50.0034141541,0.0006739469,97.1640472412,11.7054214478 +2011-11-29 19:40:47.366,-90.4611205013,134162.469925186,149.1812360805,202.0526774762,29.3253943682,201.3366256462,50.0034255981,0,97.169960022,11.6965103149 +2011-11-29 19:40:47.400,-90.4213517878,134161.518400713,149.2344200143,202.1711529778,29.3686772743,201.1914964099,50.0034103394,-0.0004577637,97.1664199829,11.7141647339 +2011-11-29 19:40:47.433,-90.3803869607,134162.659816731,149.2844534896,202.1948993937,29.4004332469,201.1757466392,50.0034217834,0.0008138129,97.1822357178,11.6934432983 +2011-11-29 19:40:47.466,-90.3382201477,134164.259416155,149.3291371508,202.0160046334,29.4306594914,201.1883964959,50.0034446716,0.0006612204,97.1835784912,11.6718673706 +2011-11-29 19:40:47.500,-90.2969222698,134163.645291044,149.378445881,201.997638408,29.4488172077,201.1449008345,50.0034255981,-0.0010808464,97.1727371216,11.7085800171 +2011-11-29 19:40:47.533,-90.2572574126,134162.024225939,149.4102106741,202.13785529,29.4954200522,201.2121187649,50.0033912659,-0.0006103422,97.1691970825,11.6959991455 +2011-11-29 19:40:47.566,-90.2174888924,134162.185309302,149.4649815007,202.1992204082,29.5508367511,201.2655458869,50.0033950806,0.0003051991,97.1888504028,11.7050018311 +2011-11-29 19:40:47.600,-90.1769089674,134163.405150936,149.5020665653,202.3079831334,29.5886642611,201.140881203,50.0033874512,-0.0007756613,97.1630401611,11.7067108154 +2011-11-29 19:40:47.633,-90.1368127309,134162.913731152,149.5289727176,202.1666953834,29.6321240824,201.2252728751,50.0033531189,-0.0006993581,97.1675720215,11.7136993408 +2011-11-29 19:40:47.666,-90.095682912,134161.608952546,149.5710566737,202.0761109489,29.698558966,201.3724957692,50.0033531189,1.39698386192322E-08,97.1724243164,11.7125930786 +2011-11-29 19:40:47.700,-90.0539424884,134161.684458666,149.5904230732,202.2679280744,29.722162808,201.3488732052,50.0033836365,0.0012715766,97.1824493408,11.6830825806 +2011-11-29 19:40:47.733,-90.0134474213,134150.83182012,149.6160008972,202.2250654741,29.7123175763,201.2754713751,50.0033912659,5.08641824126244E-05,97.1825485229,11.6933898926 +2011-11-29 19:40:47.766,-89.9724902967,134150.17171394,149.6725533294,202.1132922787,29.7245703103,201.203280237,50.00340271,0.0006357813,97.1754837036,11.7044677734 +2011-11-29 19:40:47.800,-89.9307164459,134150.363711498,149.6892557545,202.1453151059,29.7868060804,201.1365668465,50.0034408569,0.0009663776,97.1874542236,11.6954498291 +2011-11-29 19:40:47.833,-89.8901894031,134163.074528069,149.7108595761,202.1535992134,29.8647171381,201.1470538707,50.0034294128,-0.0008901022,97.1804733276,11.6836700439 +2011-11-29 19:40:47.866,-89.8499201068,134164.679014746,149.8169802537,202.1369455726,29.8874986527,201.1493227225,50.0033912659,-0.0009409525,97.1717681885,11.6999053955 +2011-11-29 19:40:47.900,-89.809344371,134164.399031182,149.8821881769,202.1667127167,29.9529086453,201.1009551229,50.0033950806,0.0002924586,97.1735076904,11.6933822632 +2011-11-29 19:40:47.933,-89.7689339481,134163.450389839,149.8492029751,202.1287779163,30.0260888745,201.1738813112,50.0033798218,-0.0007756613,97.1774520874,11.6979675293 +2011-11-29 19:40:47.966,-89.7282360055,134161.915415992,149.8981436266,202.1280353871,30.0077284464,201.2497823786,50.0033760071,2.79396772384644E-08,97.157623291,11.7113342285 +2011-11-29 19:40:48.000,-89.687086006,134161.672667709,149.964008188,202.1090572068,30.0244204272,201.2024826456,50.0033798218,0.0003051711,97.1841583252,11.6813354492 +2011-11-29 19:40:48.033,-89.6455792114,134162.160548479,149.984561749,202.0167951928,30.1048307996,201.1951251332,50.0033988953,0.0007120846,97.173248291,11.7054901123 +2011-11-29 19:40:48.066,-89.6050276698,134150.031465216,150.0189166378,202.0458792663,30.1589789713,201.1528838211,50.00340271,-0.0001526065,97.1843719482,11.6878051758 +2011-11-29 19:40:48.100,-89.5650249204,134159.459846653,150.0374515932,202.2070014601,30.2053755043,200.9817246341,50.0033988953,-0.0002034567,97.1600952148,11.7149658203 +2011-11-29 19:40:48.133,-89.5242166896,134161.609983929,150.0634690433,202.2146755221,30.2579954311,200.9970339012,50.00340271,0.0002415804,97.1582183838,11.724609375 +2011-11-29 19:40:48.166,-89.4831627702,134150.895773886,150.1262985432,202.0079939838,30.3033929856,201.2816101998,50.0033988953,-0.0001907442,97.1710891724,11.6977310181 +2011-11-29 19:40:48.200,-89.4421567221,134161.155636083,150.1874558788,201.9839362224,30.2843324592,201.3407061159,50.0033988953,-6.35767355561256E-05,97.1788024902,11.7059707642 +2011-11-29 19:40:48.233,-89.40088084,134163.397181272,150.2185489078,202.0383364118,30.2968349151,201.1081947177,50.0034141541,0.0007501943,97.1708755493,11.707244873 +2011-11-29 19:40:48.266,-89.3601728736,134164.709094236,150.2571275901,202.0190474388,30.365207689,201.0876362044,50.0034179688,1.39698386192322E-08,97.1692504883,11.6975631714 +2011-11-29 19:40:48.300,-89.3199873617,134164.964774738,150.3250483505,202.1594883322,30.4340480988,201.1992591884,50.0034103394,-0.000534039,97.1772842407,11.6917800903 +2011-11-29 19:40:48.333,-89.2789479431,134164.217771739,150.3272292932,202.2649698732,30.4733836922,201.3318685481,50.0034103394,3.81376594305038E-05,97.1791915894,11.6925201416 +2011-11-29 19:40:48.366,-89.238159826,134163.094223677,150.3368177976,202.097938442,30.5055313216,201.3638218556,50.00340271,-0.0002288679,97.1799926758,11.7048721313 +2011-11-29 19:40:48.400,-89.1975597001,134162.173119226,150.4294610649,202.0645066461,30.5115260808,201.3032305713,50.0033912659,-0.00027976,97.1784439087,11.700302124 +2011-11-29 19:40:48.433,-89.1570040932,134164.083753461,150.5042698361,202.2250934932,30.560744664,201.2526920247,50.0033874512,1.27125531435013E-05,97.1848754883,11.701675415 +2011-11-29 19:40:48.466,-89.1161267305,134165.104403736,150.5318305745,202.3078963165,30.6418310442,201.1671205229,50.0033950806,0.0003814604,97.1823120117,11.6735992432 +2011-11-29 19:40:48.500,-89.0750459799,134163.060021771,150.5616020343,202.2111360185,30.7300986948,201.0566535838,50.0033950806,-0.0001907302,97.1820831299,11.7009811401 +2011-11-29 19:40:48.533,-89.0355047302,134161.680170578,150.6069602536,202.0798290944,30.7360628912,201.1064837181,50.0033874512,-0.0002288818,97.1827545166,11.6836853027 +2011-11-29 19:40:48.566,-88.9952423321,134162.315960365,150.6489132153,202.1476957123,30.7249243364,201.0632209395,50.0033760071,1.27125531435013E-05,97.1560974121,11.7064743042 +2011-11-29 19:40:48.600,-88.9540887002,134164.056266621,150.6882679824,202.2823602563,30.7994948674,201.0934320345,50.0033912659,0.0005976297,97.1776580811,11.7036743164 +2011-11-29 19:40:48.633,-88.913107375,134165.092417313,150.7135707244,202.3487540529,30.8902841913,201.2662271022,50.0033950806,-0.0002161553,97.1610794067,11.7220611572 +2011-11-29 19:40:48.666,-88.8723984437,134163.949871323,150.7835663898,202.2879261946,30.920872403,201.1744270977,50.0033874512,-8.90158116817474E-05,97.1419143677,11.7371139526 +2011-11-29 19:40:48.700,-88.8309533372,134161.441132877,150.8578255434,202.1715906396,30.9468569415,201.0199009693,50.0034141541,0.0004577497,97.1645355225,11.711151123 +2011-11-29 19:40:48.733,-88.7899247817,134150.075908046,150.8534846916,202.057153151,30.97757964,201.0110072909,50.0034217834,0,97.1691894531,11.7346115112 +2011-11-29 19:40:48.766,-88.7502601344,134150.600803515,150.8576699278,202.1091609168,31.0225766135,200.9718963033,50.0034065247,-0.0004831888,97.1847839355,11.698135376 +2011-11-29 19:40:48.800,-88.7095947398,134163.055735981,150.909745888,202.1537252035,31.0730820936,201.0430654548,50.0033988953,2.54251062870026E-05,97.1852493286,11.7053756714 +2011-11-29 19:40:48.833,-88.6684077355,134162.12140096,150.9281323804,202.0771806952,31.1126166709,201.2440133979,50.0034103394,0.0005086418,97.1755218506,11.6898956299 +2011-11-29 19:40:48.866,-88.6263369211,134161.634192107,150.9487893129,202.0921696297,31.1829599751,201.3884527578,50.0034141541,0,97.1672973633,11.709564209 +2011-11-29 19:40:48.900,-88.5847073031,134164.085280935,151.0017313574,202.0581905756,31.2000735409,201.3194452253,50.0034255981,0.0004577637,97.1693267822,11.7104797363 +2011-11-29 19:40:48.933,-88.5440136708,134164.269572698,151.0869585675,202.0238291441,31.2075158341,201.1993416519,50.0034294128,-1.39698386192322E-08,97.1789932251,11.6944198608 +2011-11-29 19:40:48.966,-88.503131322,134163.860992216,151.1724532361,202.2335018805,31.2569160197,201.1687255596,50.0034332275,-2.54251062870026E-05,97.1872711182,11.6711044312 +2011-11-29 19:40:49.000,-88.463130896,134163.74663308,151.2339369227,202.3248194727,31.3020689259,201.1552153694,50.0034179688,-0.0005594781,97.1639862061,11.7000656128 +2011-11-29 19:40:49.033,-88.4234359242,134161.630324045,151.2845926991,202.2412209204,31.3758829687,201.1692474045,50.0033798218,-0.0011316827,97.1842193604,11.6977996826 +2011-11-29 19:40:49.066,-88.3827945488,134150.907007123,151.2992713739,202.1634769106,31.3981918891,201.1444797428,50.0033721924,0,97.1724700928,11.7002487183 +2011-11-29 19:40:49.100,-88.3418772623,134161.473494053,151.3289990294,202.0627535097,31.4051705557,201.2161800776,50.0033760071,0.0001652911,97.1795806885,11.7028656006 +2011-11-29 19:40:49.133,-88.3011106327,134163.160931455,151.3680752909,202.0431715615,31.4472932908,201.2160879252,50.0033760071,-0.0002161413,97.1714096069,11.6858901978 +2011-11-29 19:40:49.166,-88.2598894008,134163.338579468,151.4257616321,202.2570723219,31.4915619352,201.0740055113,50.0033950806,0.0009028148,97.1818084717,11.7012329102 +2011-11-29 19:40:49.200,-88.2181477563,134161.950900331,151.425399617,202.3619324783,31.506527009,201.1020738979,50.0034179688,0.0007120986,97.1785812378,11.684211731 +2011-11-29 19:40:49.233,-88.1785327738,134159.647370762,151.4158146669,202.2033403699,31.5415866158,201.226409486,50.0034141541,-0.0002416084,97.1784210205,11.6912612915 +2011-11-29 19:40:49.266,-88.1385751503,134158.40320942,151.4736792824,202.2104395418,31.6253034674,201.1853879037,50.0033950806,-0.0003178837,97.1730499268,11.7079162598 +2011-11-29 19:40:49.300,-88.0965929915,134150.023779023,151.5500416946,202.36214735,31.7037866091,201.1781739811,50.0034217834,0.0009282399,97.1698913574,11.7037353516 +2011-11-29 19:40:49.333,-88.0551554018,134162.579924578,151.5959094299,202.2405957657,31.7089884442,201.299280668,50.0034255981,-0.0004577637,97.1864624023,11.6796264648 +2011-11-29 19:40:49.366,-88.0145295906,134163.23306509,151.6398411661,202.1100644738,31.7026226324,201.2281270568,50.0033988953,-0.0006357534,97.1726531982,11.7042770386 +2011-11-29 19:40:49.400,-87.9728615286,134162.820538445,151.6577876386,202.099399296,31.7795426467,201.0684104748,50.0034332275,0.0010681059,97.1750183105,11.7159805298 +2011-11-29 19:40:49.433,-87.9317577211,134162.009078049,151.6759933692,202.0209392494,31.8231571323,201.1268816481,50.0034484863,0,97.1831283569,11.7130508423 +2011-11-29 19:40:49.466,-87.8928142148,134150.642612785,151.7545365704,202.0860990987,31.8513791052,201.2022553478,50.0034179688,-0.0010681199,97.1766052246,11.7143554688 +2011-11-29 19:40:49.500,-87.8536271459,134161.392109828,151.8227792156,202.3038631286,31.8921454113,201.1356132637,50.003364563,-0.0012206985,97.187210083,11.700958252 +2011-11-29 19:40:49.533,-87.811909692,134164.635391602,151.8188202579,202.2437012107,31.9236362277,201.1297221011,50.0033836365,0.0007120706,97.1741409302,11.703918457 +2011-11-29 19:40:49.566,-87.7696451755,134165.247783186,151.8364165061,202.1119560776,32.0135798683,201.1458732655,50.0033912659,3.81516292691231E-05,97.1694488525,11.7132034302 +2011-11-29 19:40:49.600,-87.729384137,134164.386673865,151.8768179286,202.1779355844,32.1144925966,201.1545632734,50.003364563,-0.0007120706,97.1769790649,11.6908035278 +2011-11-29 19:40:49.633,-87.6892755385,134162.826750304,151.9192331376,202.1707353946,32.1306845117,201.1047955229,50.0033836365,0.000699372,97.186706543,11.6911849976 +2011-11-29 19:40:49.666,-87.647732594,134150.782327859,151.9812528133,202.1144032621,32.1295827207,201.0025451695,50.0034332275,0.0017547654,97.184211731,11.694480896 +2011-11-29 19:40:49.700,-87.6063239872,134157.856847879,152.0216126183,202.0961542999,32.1821669773,201.0427207787,50.0034332275,-0.0007629348,97.1795043945,11.6932907104 +2011-11-29 19:40:49.733,-87.5662553904,134157.260659128,152.0583631802,202.1442909727,32.2001736016,201.1790443644,50.0033836365,-0.0015894463,97.1935806274,11.6668319702 +2011-11-29 19:40:49.766,-87.5260813498,134159.336884481,152.0945781267,202.2576068837,32.207747472,201.2194188395,50.0033798218,0.000394173,97.1724472046,11.708114624 +2011-11-29 19:40:49.800,-87.4854551345,134161.040846747,152.1706349459,202.2889825789,32.2626645718,201.2045849283,50.0033912659,0.0002288958,97.177772522,11.7045211792 +2011-11-29 19:40:49.833,-87.4445984505,134150.959586576,152.22258404,202.1607637068,32.3371892811,201.2209791239,50.0033836365,-8.90158116817474E-05,97.1819534302,11.6820449829 +2011-11-29 19:40:49.866,-87.4031774902,134161.851079151,152.263513009,202.1450980895,32.4128650047,201.2465797544,50.0033836365,1.39698386192322E-08,97.1865158081,11.6882247925 +2011-11-29 19:40:49.900,-87.361494442,134164.65545305,152.2915070905,202.3247920547,32.4825819046,201.198215871,50.0034141541,0.0010045432,97.1712036133,11.7194366455 +2011-11-29 19:40:49.933,-87.3205409024,134164.963975153,152.2883380458,202.3031099086,32.5218854621,201.1603437923,50.0034255981,-2.79396772384644E-08,97.1850662231,11.6877822876 +2011-11-29 19:40:49.966,-87.2809777926,134162.433300169,152.3348496589,202.2421553384,32.5252527194,201.059461607,50.0034217834,-0.0001017423,97.1673965454,11.7152099609 +2011-11-29 19:40:50.000,-87.2407245009,134162.077916177,152.426346464,202.2554034799,32.555657114,201.0058956044,50.0034065247,-0.0001525786,97.1622924805,11.7127380371 +2011-11-29 19:40:50.033,-87.1994985921,134163.370622636,152.4564635486,202.2415069219,32.5910663449,201.0569853028,50.00340271,-0.0002670335,97.1853790283,11.6893920898 +2011-11-29 19:40:50.066,-87.1586375252,134163.783111994,152.4746775139,202.2716737,32.6415745737,201.1233596325,50.0033912659,-0.0004450371,97.169593811,11.6935272217 +2011-11-29 19:40:50.100,-87.1180562067,134163.02624116,152.516212225,202.3685974999,32.725889493,201.1997954831,50.0033798218,-2.54390761256218E-05,97.1662445068,11.7047348022 +2011-11-29 19:40:50.133,-87.0774764817,134161.663682136,152.545890412,202.2732533795,32.7360163599,201.185376424,50.0033912659,0.0001017144,97.1632232666,11.7124252319 +2011-11-29 19:40:50.166,-87.0369608498,134150.923809732,152.5986002583,202.1765336993,32.7438408177,201.031006368,50.0033912659,-0.0001525925,97.1735916138,11.7233810425 +2011-11-29 19:40:50.200,-86.9959731603,134162.202199092,152.6631576229,202.133071757,32.8064641353,200.9341575109,50.0033874512,1.39698386192322E-08,97.1769561768,11.6844100952 +2011-11-29 19:40:50.233,-86.9549339673,134163.618348976,152.6687879256,202.1501838672,32.8570663733,201.049711938,50.0033912659,0.0002161833,97.1793670654,11.6978912354 +2011-11-29 19:40:50.266,-86.9138615589,134163.386388026,152.6863143459,202.1193214483,32.88590349,201.1588133557,50.0034065247,0.0004069135,97.1873245239,11.6977310181 +2011-11-29 19:40:50.300,-86.8729571939,134161.91869664,152.7392601958,202.1801786004,32.9503307427,201.1784511837,50.0034141541,0.0002543069,97.1795349121,11.6959838867 +2011-11-29 19:40:50.333,-86.8316326707,134161.309227331,152.7839447657,202.1274053642,32.97587805,201.2232255828,50.0034179688,0.0001525786,97.1714324951,11.7021408081 +2011-11-29 19:40:50.366,-86.7903966627,134162.90186817,152.8398443699,202.0543801933,32.9702447358,201.2462940668,50.0034255981,0.0001144409,97.1602172852,11.7139358521 +2011-11-29 19:40:50.400,-86.7503376746,134164.251115467,152.877816981,202.1917299277,33.0406118788,201.2573833682,50.0034217834,-0.0002034567,97.1713409424,11.6962509155 +2011-11-29 19:40:50.433,-86.7104593448,134164.780946981,152.9083896341,202.2441125839,33.1118484665,201.2139121421,50.0033988953,-0.0008265255,97.1890106201,11.6756439209 +2011-11-29 19:40:50.466,-86.6695805596,134164.213053972,152.9847442967,202.1916747669,33.148023674,201.1146858632,50.0033988953,0.000279732,97.1832427979,11.7098846436 +2011-11-29 19:40:50.500,-86.6272872732,134162.891181005,153.0360593419,202.1918478955,33.1895846652,201.0994008585,50.0033988953,1.39698386192322E-08,97.1635437012,11.7150268555 +2011-11-29 19:40:50.533,-86.5860307291,134162.107914944,153.0588544501,202.106531663,33.2147486487,201.1468870397,50.0033988953,-0.0004577916,97.1670761108,11.7057800293 +2011-11-29 19:40:50.566,-86.5463990335,134163.355960723,153.0806370216,202.129264207,33.2203844857,201.1554294416,50.0033874512,1.39698386192322E-08,97.1791152954,11.7087554932 +2011-11-29 19:40:50.600,-86.5060235068,134163.898010799,153.1121406958,202.2314902125,33.2328465934,201.2193535997,50.00340271,0.0004832027,97.181137085,11.6961975098 +2011-11-29 19:40:50.633,-86.4656006522,134161.226075851,153.1812336752,202.0821857704,33.2807023674,201.2187004857,50.0033912659,-0.0007883599,97.1940841675,11.6647415161 +2011-11-29 19:40:50.666,-86.4251420508,134150.802027758,153.2497098207,202.1351802471,33.3757924145,201.0805764427,50.0033683777,-0.0001144269,97.165687561,11.7001266479 +2011-11-29 19:40:50.700,-86.3846059775,134161.082549632,153.2492227333,202.3313409361,33.4240950808,201.0584476626,50.003364563,-2.79396772384644E-08,97.1639938354,11.7059783936 +2011-11-29 19:40:50.733,-86.3436789054,134161.567038601,153.2689489786,202.1857083939,33.4240591015,201.0836671673,50.0033760071,0.0002416084,97.1851196289,11.6725692749 +2011-11-29 19:40:50.766,-86.3019516592,134162.977024353,153.3564735652,202.0948062112,33.4405579941,201.0420805383,50.0033874512,0.0004704623,97.1928024292,11.6809997559 +2011-11-29 19:40:50.800,-86.2605647737,134162.934328594,153.4136761129,202.1750575188,33.5142916482,201.1171490607,50.0034103394,0.0004959013,97.1897888184,11.6769790649 +2011-11-29 19:40:50.833,-86.2202634531,134161.869793114,153.4040229986,202.2184050469,33.557197574,201.1649547873,50.0034103394,0,97.1937332153,11.6821899414 +2011-11-29 19:40:50.866,-86.1798565585,134161.984231637,153.4355852538,202.1167876386,33.6330237713,200.9955244302,50.0034103394,0,97.1854934692,11.687789917 +2011-11-29 19:40:50.900,-86.1388470961,134162.197988759,153.5188406271,202.0540192655,33.7194291396,201.027885463,50.0034141541,-0.0001144409,97.1873397827,11.6866531372 +2011-11-29 19:40:50.933,-86.0984803293,134161.391195532,153.543590281,202.143167281,33.7298899562,201.2950120482,50.0033874512,-0.0006993441,97.1750259399,11.702255249 +2011-11-29 19:40:50.966,-86.0586736255,134159.824445392,153.5712789774,202.245322625,33.7194314168,201.2724119986,50.003364563,-0.0007374957,97.1949462891,11.669708252 +2011-11-29 19:40:51.000,-86.0172949631,134159.674919565,153.6290300753,202.2090097565,33.7334265223,201.1444878366,50.0033798218,0.0006612204,97.1721801758,11.7074737549 +2011-11-29 19:40:51.033,-85.9745324042,134162.031930042,153.655931197,202.1335220669,33.8191091637,201.2063938002,50.0034103394,0.0010553934,97.1907577515,11.6756057739 +2011-11-29 19:40:51.066,-85.933349852,134164.138178427,153.6858960894,202.1111413791,33.87595365,201.3621655051,50.0034141541,-0.0003814744,97.1712646484,11.7160263062 +2011-11-29 19:40:51.100,-85.8939121816,134163.65513348,153.7314985476,202.1427136275,33.9086012229,201.3198986078,50.0033988953,-0.0003814744,97.1997451782,11.6621704102 +2011-11-29 19:40:51.133,-85.854092348,134162.799159039,153.808336418,202.1066944088,33.9400267409,201.1402163513,50.0033988953,3.81376594305038E-05,97.1694564819,11.6914901733 +2011-11-29 19:40:51.166,-85.8134906391,134161.812901094,153.8749719095,202.1934872355,33.9583675628,201.1542617897,50.0033760071,-0.0008265255,97.1832504272,11.6809616089 +2011-11-29 19:40:51.200,-85.7720060813,134150.169335257,153.9093181608,202.3242842993,33.9850512568,201.3190836884,50.0033721924,0,97.1842193604,11.6911315918 +2011-11-29 19:40:51.233,-85.7306235585,134159.925582178,153.8935311633,202.2126990313,34.031462828,201.4138615813,50.0033798218,0.0004704623,97.1766815186,11.6906585693 +2011-11-29 19:40:51.266,-85.6901039558,134162.890055473,153.9048883487,202.0441052066,34.0835841612,201.4081806292,50.0033988953,0.0002543069,97.1735305786,11.6986618042 +2011-11-29 19:40:51.300,-85.6496224834,134163.12586866,153.9838251596,202.0763509172,34.1561335681,201.3416892017,50.00340271,0.0003178976,97.1851577759,11.6855773926 +2011-11-29 19:40:51.333,-85.6086663859,134150.787271359,154.0490133634,202.1258472348,34.2250501748,201.3569120441,50.0034141541,7.62892886996269E-05,97.1737976074,11.7015151978 +2011-11-29 19:40:51.366,-85.567603197,134161.200627734,154.0797757669,202.132980117,34.2666285666,201.407076422,50.0034103394,-8.90018418431282E-05,97.1879425049,11.692855835 +2011-11-29 19:40:51.400,-85.526359754,134162.264512966,154.0898130964,202.1450207456,34.2851234895,201.3850732074,50.0034103394,0,97.1618499756,11.6969909668 +2011-11-29 19:40:51.433,-85.4850931991,134163.151534788,154.1274669003,202.0144105749,34.2867443831,201.3195917406,50.0034179688,0.0003178837,97.1821289063,11.6896820068 +2011-11-29 19:40:51.466,-85.4451249599,134161.389456975,154.2071606164,202.0847568208,34.3206321003,201.2345834551,50.0034179688,0,97.1714553833,11.7000198364 +2011-11-29 19:40:51.500,-85.4052632998,134158.841620693,154.2326818094,202.2289859615,34.3989005328,201.2558265353,50.0033988953,-0.0006993301,97.1783676147,11.6837768555 +2011-11-29 19:40:51.533,-85.3644861608,134158.397703508,154.2386676605,202.1804477509,34.4449175958,201.319756176,50.0033912659,-0.0001271395,97.1860580444,11.6815185547 +2011-11-29 19:40:51.566,-85.3243022887,134150.134228556,154.2667126796,202.178645864,34.4822886252,201.2245852412,50.003364563,-0.000953679,97.1755523682,11.7083435059 +2011-11-29 19:40:51.600,-85.2839567092,134163.065649545,154.3363241075,202.1733525989,34.5470815767,201.2154889329,50.0033531189,-7.62753188610077E-05,97.1586456299,11.7249832153 +2011-11-29 19:40:51.633,-85.2427329368,134163.334443041,154.3869594368,202.23676571,34.592682256,201.2794387677,50.0033721924,0.0007883599,97.1720657349,11.6860046387 +2011-11-29 19:40:51.666,-85.201975972,134163.25169128,154.4029789695,202.4625633645,34.6291058283,201.2333030604,50.0033912659,0.0004069135,97.181892395,11.6992111206 +2011-11-29 19:40:51.700,-85.160964796,134162.064104276,154.4482825184,202.3846123207,34.6520896855,201.133029795,50.0033950806,0.0001907162,97.198135376,11.7048187256 +2011-11-29 19:40:51.733,-85.1193371976,134150.096082027,154.5204675052,202.1667349654,34.6625715563,201.104132635,50.0034179688,0.0006485218,97.1749725342,11.6833114624 +2011-11-29 19:40:51.766,-85.0778280705,134150.166467597,154.5668532522,202.2111817595,34.7047497481,201.156899891,50.0034370422,0.0003942009,97.1719207764,11.6991729736 +2011-11-29 19:40:51.800,-85.0371036647,134159.441940249,154.6023145958,202.2783566851,34.7943993572,201.3007783176,50.0034255981,-0.0003814744,97.1543807983,11.725769043 +2011-11-29 19:40:51.833,-84.9966248347,134150.381662568,154.6405442349,202.1556968333,34.8375033638,201.3159198594,50.0034217834,0,97.175819397,11.6925811768 +2011-11-29 19:40:51.866,-84.9567310806,134162.977304316,154.7107763218,202.0390419115,34.8467374677,201.2848849193,50.0034065247,-0.0006612064,97.1838607788,11.6841049194 +2011-11-29 19:40:51.900,-84.9159421572,134162.279586704,154.7518070634,202.142651024,34.9093174335,201.2041111806,50.0033874512,-0.0001017284,97.1787567139,11.6982955933 +2011-11-29 19:40:51.933,-84.8744365059,134150.341345249,154.7429216604,202.3195243285,34.9704926526,201.1148660516,50.0033874512,1.39698386192322E-08,97.1778717041,11.6834106445 +2011-11-29 19:40:51.966,-84.8332445706,134159.850201269,154.8132215724,202.2611742697,34.9519766109,200.9776105903,50.00340271,0.0005976297,97.1742706299,11.7121582031 +2011-11-29 19:40:52.000,-84.7921411339,134150.256700792,154.8904773507,202.2105804904,34.9363719411,201.0075462281,50.0034179688,0.0004577637,97.1701660156,11.7182769775 +2011-11-29 19:40:52.033,-84.7522420868,134150.049600428,154.8797888096,202.2579919051,35.0110122049,201.1667343035,50.0034179688,0,97.1867370605,11.6942062378 +2011-11-29 19:40:52.066,-84.7122856084,134158.319420792,154.8815790777,202.2258741267,35.085449126,201.3802599212,50.00340271,-0.0008646492,97.168762207,11.7142868042 +2011-11-29 19:40:52.100,-84.6711411326,134156.615535062,154.9558287596,202.2109954851,35.1504235647,201.2837326463,50.0033950806,-1.39698386192322E-08,97.1756286621,11.6918945313 +2011-11-29 19:40:52.133,-84.6299980077,134157.805208081,154.9849140065,202.2520944719,35.2064346644,201.0731268726,50.0033950806,-0.0002288818,97.1632385254,11.7071990967 +2011-11-29 19:40:52.166,-84.5892229666,134159.186620605,155.0028626803,202.1856903861,35.2238577672,201.0387527308,50.0033874512,-0.000139866,97.1684494019,11.7096405029 +2011-11-29 19:40:52.200,-84.5484631257,134150.946693143,155.0638686225,202.0195182566,35.2542697143,201.0343438434,50.00340271,0.000419612,97.16847229,11.7146530151 +2011-11-29 19:40:52.233,-84.5078182816,134163.314108368,155.0925777469,202.0183842324,35.2956298455,201.1622834577,50.00340271,3.81516292691231E-05,97.1666870117,11.7127227783 +2011-11-29 19:40:52.266,-84.466768697,134163.313774327,155.1115366093,202.1390181837,35.332097037,201.3737739639,50.00340271,0,97.1868896484,11.6775665283 +2011-11-29 19:40:52.300,-84.4260307279,134150.422439834,155.1834378378,202.2838310044,35.3758467037,201.4299318589,50.0033988953,-0.0002670335,97.1807250977,11.6721343994 +2011-11-29 19:40:52.333,-84.3855314626,134150.51094563,155.2227841562,202.2551743492,35.4001080107,201.2725961523,50.0033950806,3.81516292691231E-05,97.1607055664,11.7163848877 +2011-11-29 19:40:52.366,-84.3438999014,134161.965353856,155.2437904414,202.2477838305,35.4252082863,201.1994260099,50.0034065247,0.0003687618,97.1909561157,11.6896286011 +2011-11-29 19:40:52.400,-84.3030356161,134162.19668162,155.3034979116,202.3307421014,35.4765854325,201.2848272518,50.0034141541,-0.000254293,97.1752243042,11.7080459595 +2011-11-29 19:40:52.433,-84.263220637,134161.558471997,155.3541932495,202.2836476751,35.505090431,201.3966197434,50.0033912659,-0.0007629627,97.1862487793,11.6768035889 +2011-11-29 19:40:52.466,-84.2222576777,134150.29893197,155.4072720528,202.2377153029,35.5431016267,201.2822800805,50.0033988953,0.0006739469,97.1557235718,11.7326278687 +2011-11-29 19:40:52.500,-84.1812170708,134161.0110279,155.4337189023,202.3031521062,35.6374958292,201.2066535401,50.0034141541,0.000139866,97.1703491211,11.7055282593 +2011-11-29 19:40:52.533,-84.1403219725,134163.484877666,155.4726808736,202.2508987689,35.6910161909,201.3114216799,50.00340271,-0.0003687479,97.1574249268,11.7269210815 +2011-11-29 19:40:52.566,-84.099609414,134165.967560107,155.5614733062,202.2444680711,35.6880896999,201.2997901964,50.0033988953,0.0004323246,97.1891708374,11.6960601807 +2011-11-29 19:40:52.600,-84.0581721358,134163.479449155,155.6304802016,202.3349653536,35.7192995248,201.2244018278,50.0034141541,0.0004704902,97.1691741943,11.7055740356 +2011-11-29 19:40:52.633,-84.0174449941,134150.949716359,155.605338899,202.3202383783,35.7550757749,201.2222105588,50.0034141541,-0.0003687758,97.1834716797,11.7160720825 +2011-11-29 19:40:52.666,-83.9775927493,134161.492160547,155.637528228,202.2876128747,35.7697558293,201.2304410615,50.0033988953,-0.0005340809,97.1821365356,11.6904449463 +2011-11-29 19:40:52.700,-83.9372035827,134161.683173322,155.7280299251,202.2141149965,35.7912921295,201.236390858,50.0033836365,-0.0001271674,97.1850662231,11.6779785156 +2011-11-29 19:40:52.733,-83.8964508552,134150.83764576,155.7433796363,202.184910106,35.8703621331,201.2767863215,50.0033836365,-0.0001144409,97.1742782593,11.7083740234 +2011-11-29 19:40:52.766,-83.8557598661,134161.851561598,155.7524472055,202.2344906656,35.9637117495,201.2896831912,50.0033760071,-3.81516292691231E-05,97.1660842896,11.728805542 +2011-11-29 19:40:52.800,-83.8144855927,134150.676699108,155.8094319611,202.4134521827,36.0320077333,201.1805114377,50.0033836365,0.0004450511,97.1942596436,11.688583374 +2011-11-29 19:40:52.833,-83.7736848539,134159.151669397,155.8797805473,202.4851909013,36.0469165501,201.1165243886,50.0033950806,-1.39698386192322E-08,97.1705932617,11.7142562866 +2011-11-29 19:40:52.866,-83.7332043094,134161.588995448,155.9075567894,202.28814782,36.029519687,201.2647045277,50.0033950806,-1.27265229821205E-05,97.1788635254,11.7026672363 +2011-11-29 19:40:52.900,-83.6916400728,134163.823969752,155.9176882719,202.1080971188,36.0620915138,201.3454415212,50.0034103394,0.000559506,97.1734390259,11.6866607666 +2011-11-29 19:40:52.933,-83.6500239518,134162.889091871,155.9683837048,202.1751687601,36.1461491495,201.3838230647,50.0034332275,0.0006866455,97.1764907837,11.6968002319 +2011-11-29 19:40:52.966,-83.6090422718,134162.455905304,156.0723384413,202.3083820453,36.2047384008,201.2132736635,50.0034255981,-0.0006103562,97.1747970581,11.7015075684 +2011-11-29 19:40:53.000,-83.569286762,134163.984725853,156.1327609979,202.3927758658,36.2563579128,201.1006593775,50.0034141541,-0.0002034428,97.1683807373,11.7199020386 +2011-11-29 19:40:53.033,-83.5290333337,134164.845737205,156.1092422342,202.3446792897,36.2905528698,201.2370680435,50.0034103394,-3.81516292691231E-05,97.1885070801,11.6826171875 +2011-11-29 19:40:53.066,-83.4881115968,134161.894307088,156.0940082965,202.2266324468,36.3031309061,201.2954577954,50.0033950806,-0.0005722046,97.1730499268,11.7059707642 +2011-11-29 19:40:53.100,-83.4478281835,134161.371322196,156.1595004523,202.2695718728,36.3528964364,201.2345457848,50.0033683777,-0.0007120706,97.1898193359,11.6676559448 +2011-11-29 19:40:53.133,-83.4069058123,134163.336746439,156.2098118892,202.3531651249,36.4394768388,201.0664400721,50.0033683777,0.0002543209,97.1683349609,11.7065048218 +2011-11-29 19:40:53.166,-83.3648616739,134161.696693215,156.2510703137,202.4063771194,36.462772059,201.0109843019,50.0033988953,0.0011062576,97.1617889404,11.7044677734 +2011-11-29 19:40:53.200,-83.3241672758,134158.295608923,156.3278202017,202.4335482334,36.4754128281,201.0621721766,50.0034065247,-0.0001271814,97.1968231201,11.674041748 +2011-11-29 19:40:53.233,-83.2843196685,134159.982966477,156.3528042618,202.3170535735,36.5506681714,201.2127758045,50.0033874512,-0.0007120706,97.1873168945,11.6920700073 +2011-11-29 19:40:53.266,-83.2430103069,134162.581550303,156.3577822179,202.095900495,36.6114663935,201.3216828903,50.0034141541,0.0014241412,97.1841659546,11.7033996582 +2011-11-29 19:40:53.300,-83.2022362202,134163.291311303,156.3819228257,202.0650113155,36.6401450633,201.2293552695,50.0034103394,-0.0010172557,97.1589355469,11.7181549072 +2011-11-29 19:40:53.333,-83.1625269651,134161.944661366,156.4379121411,202.2603983089,36.6595805746,201.1837864265,50.003364563,-0.001233411,97.1736068726,11.6982040405 +2011-11-29 19:40:53.366,-83.1211522793,134150.534575692,156.5050744746,202.3090510716,36.6946956849,201.3053799293,50.0033760071,0.0009663776,97.1912155151,11.6856079102 +2011-11-29 19:40:53.400,-83.0794909419,134150.172838001,156.5482602483,202.2519576901,36.7732032342,201.298632608,50.0034255981,0.0012842752,97.1701507568,11.689666748 +2011-11-29 19:40:53.433,-83.038879227,134161.313388412,156.5701377853,202.1118114523,36.8385419222,201.2364604935,50.0034065247,-0.0011571217,97.1790161133,11.7080230713 +2011-11-29 19:40:53.466,-82.9985306196,134162.493109759,156.632203199,201.9288161591,36.8130343489,201.3028411421,50.0033950806,0.0001780316,97.1621398926,11.7111129761 +2011-11-29 19:40:53.500,-82.9579419323,134150.329646585,156.6832293355,202.117227747,36.8128800166,201.3375615468,50.0033988953,0.0001653191,97.188331604,11.7030563354 +2011-11-29 19:40:53.533,-82.917441505,134159.041952883,156.7110151368,202.1968148511,36.8975015844,201.273788923,50.0033798218,-0.0007375097,97.1750030518,11.6737518311 +2011-11-29 19:40:53.566,-82.8763302844,134150.346038244,156.7345874207,202.2062587928,36.9589305739,201.2342959957,50.0033798218,0,97.1744842529,11.7063293457 +2011-11-29 19:40:53.600,-82.8347197549,134163.756168361,156.7910979,202.4160182947,36.9867968153,201.2887520845,50.0033950806,0.0007502222,97.1753082275,11.7053833008 +2011-11-29 19:40:53.633,-82.7939517778,134165.098291106,156.8481002678,202.4272211172,36.992833214,201.4465955997,50.00340271,0,97.1564025879,11.715461731 +2011-11-29 19:40:53.666,-82.7541253999,134163.456094059,156.9173320344,202.3230634232,37.0190344489,201.3362075624,50.0033988953,-0.0001271674,97.1736984253,11.7018051147 +2011-11-29 19:40:53.700,-82.7138721762,134162.179497541,156.9393847485,202.3183211751,37.0468375981,201.1354943196,50.0033950806,3.81376594305038E-05,97.1790466309,11.7035827637 +2011-11-29 19:40:53.733,-82.6720332792,134163.210736983,156.9069727004,202.3320559152,37.096022638,201.2709400399,50.0034065247,0.0002034567,97.1675796509,11.7129974365 +2011-11-29 19:40:53.766,-82.6300696607,134162.728709772,156.9652370983,202.2771645241,37.1206062361,201.3981316616,50.0034103394,0.0001780177,97.1894454956,11.6771774292 +2011-11-29 19:40:53.800,-82.5890773708,134150.336748324,157.0534396204,202.2374512662,37.1304019263,201.2157562245,50.0034141541,0.0001780177,97.1727752686,11.7070007324 +2011-11-29 19:40:53.833,-82.548633895,134150.665639181,157.0850293606,202.1098902387,37.2347431757,201.1380286958,50.0034217834,0,97.1814804077,11.6959152222 +2011-11-29 19:40:53.866,-82.5088489601,134162.387339593,157.1006994086,202.1107674934,37.3186586233,201.1938237554,50.0034179688,-0.0002543349,97.1734313965,11.7001342773 +2011-11-29 19:40:53.900,-82.4693469115,134161.580488897,157.1189993368,202.2221379259,37.3725950696,201.2155128092,50.0033683777,-0.0017420389,97.1925811768,11.6810379028 +2011-11-29 19:40:53.933,-82.4284200042,134161.107322797,157.1580368215,202.2050502886,37.4203410687,201.2903635409,50.0033569336,0,97.178565979,11.6973114014 +2011-11-29 19:40:53.966,-82.3868317688,134161.461237264,157.2283471597,202.1284881542,37.4158271615,201.2516617821,50.003364563,0.0005086279,97.1694793701,11.6979217529 +2011-11-29 19:40:54.000,-82.3462620775,134161.313140775,157.2950755836,202.1443989469,37.4104214809,201.1107925108,50.0033683777,0.0001907302,97.1901473999,11.6960525513 +2011-11-29 19:40:54.033,-82.3050992131,134159.370239572,157.3248568055,202.1989014544,37.4678657421,201.2688437712,50.0034065247,0.0013605924,97.1809768677,11.6999969482 +2011-11-29 19:40:54.066,-82.2642024219,134158.925357278,157.3320834602,202.1860821979,37.5176591763,201.4465668368,50.0034179688,0.0001144409,97.1746826172,11.6932830811 +2011-11-29 19:40:54.100,-82.2234951769,134162.178323067,157.366673732,202.1581482562,37.5449244671,201.2414015301,50.0034103394,-0.0004323386,97.1832427979,11.6829223633 +2011-11-29 19:40:54.133,-82.1828472575,134164.739313171,157.4131864697,202.239079012,37.5761255692,201.1789283329,50.0033950806,-0.0004704902,97.1976089478,11.6847457886 +2011-11-29 19:40:54.166,-82.1422575982,134162.743761102,157.4569107121,202.2351264205,37.5966598296,201.3872670509,50.0033950806,5.08641824126244E-05,97.1632919312,11.718208313 +2011-11-29 19:40:54.200,-82.1011960595,134150.006195606,157.5229158648,202.0547285941,37.6423420305,201.3625694928,50.0033912659,0,97.1692352295,11.7203598022 +2011-11-29 19:40:54.233,-82.0588568759,134159.316123257,157.6086313938,202.0392987832,37.7420239418,201.2577063668,50.00340271,0.0006357953,97.1873626709,11.6802597046 +2011-11-29 19:40:54.266,-82.0186967515,134150.113703112,157.6467638536,202.1839554132,37.8256047379,201.3394467016,50.00340271,-0.0002416084,97.1740188599,11.7194442749 +2011-11-29 19:40:54.300,-81.9786403373,134150.690666772,157.6684686429,202.3099993233,37.8775364456,201.3223511606,50.0033988953,3.81376594305038E-05,97.1675720215,11.7171707153 +2011-11-29 19:40:54.333,-81.9376682371,134161.021565217,157.6999554492,202.3134187492,37.8814043695,201.3707961105,50.0034103394,0.0002670195,97.1703643799,11.7057418823 +2011-11-29 19:40:54.366,-81.8974474173,134163.159286333,157.7375041894,202.2799233392,37.8849903381,201.4710240398,50.0033874512,-0.0011825468,97.183052063,11.6850662231 +2011-11-29 19:40:54.400,-81.8575507476,134164.055358587,157.7468678795,202.2971913241,37.9462033846,201.3678783807,50.0033569336,-0.0008265115,97.1847381592,11.6894073486 +2011-11-29 19:40:54.433,-81.8167278793,134162.755459874,157.7535191073,202.1889322858,37.9842715925,201.2376476609,50.003364563,0.0008900743,97.1650848389,11.6983566284 +2011-11-29 19:40:54.466,-81.7749215986,134161.824670372,157.8300816848,202.1409916081,37.9892301492,201.2628454442,50.0033912659,0.0005468074,97.1678237915,11.7022857666 +2011-11-29 19:40:54.500,-81.7333609567,134162.365722478,157.8913029552,202.3461969027,38.0734460404,201.3614919338,50.0034065247,0.0003942009,97.1863021851,11.6709899902 +2011-11-29 19:40:54.533,-81.6927102766,134161.734699679,157.917717066,202.3410824626,38.1476234971,201.3518934181,50.0034179688,0.0002670474,97.1882171631,11.6925125122 +2011-11-29 19:40:54.566,-81.6528412456,134159.954989745,157.980602199,202.1542999685,38.1767677247,201.2249756403,50.0034179688,-1.39698386192322E-08,97.1876220703,11.6822357178 +2011-11-29 19:40:54.600,-81.6122104063,134150.445543076,158.0484339843,202.231854574,38.2156021585,201.1490023333,50.0034103394,-0.0002288818,97.1697845459,11.7223205566 +2011-11-29 19:40:54.633,-81.57095844,134162.056353593,158.1104339901,202.2445326896,38.2592869336,201.2918265239,50.00340271,-0.0001525786,97.1766662598,11.7117614746 +2011-11-29 19:40:54.666,-81.5297965248,134162.378685862,158.1413742349,202.2203378309,38.2956802326,201.3571273852,50.00340271,-3.81516292691231E-05,97.1497955322,11.7257080078 +2011-11-29 19:40:54.700,-81.4887462635,134163.378970331,158.1670372011,202.2175956882,38.2880274885,201.2671151021,50.0034103394,0.0005976297,97.1674499512,11.712600708 +2011-11-29 19:40:54.733,-81.447998537,134163.409571699,158.1992841305,202.226388514,38.3408770322,201.2154061086,50.0034217834,0,97.1690597534,11.6962051392 +2011-11-29 19:40:54.766,-81.407154068,134161.851419853,158.2491794386,202.3088339625,38.3906501379,201.2691213665,50.0034217834,5.08641824126244E-05,97.1956329346,11.6863708496 +2011-11-29 19:40:54.800,-81.3658624819,134161.104839722,158.2813096249,202.4313414971,38.4065011232,201.2589683203,50.0034217834,0,97.1523590088,11.7287521362 +2011-11-29 19:40:54.833,-81.3254158541,134150.932009041,158.2836928328,202.3604995995,38.4609869745,201.2873362743,50.0034103394,-0.0003814744,97.1819458008,11.6994171143 +2011-11-29 19:40:54.866,-81.2861971731,134163.072551225,158.3161911283,202.1946940078,38.5222036053,201.2621239321,50.0033912659,-0.0009027869,97.1773681641,11.7049713135 +2011-11-29 19:40:54.900,-81.2456191495,134164.438571013,158.3574715574,202.2723206195,38.5754486498,201.2646141291,50.0033836365,0.0005213404,97.1781234741,11.6916275024 +2011-11-29 19:40:54.933,-81.2032625739,134163.876181138,158.3623980635,202.2811959406,38.619431415,201.3759261543,50.0033988953,0.0003178837,97.1823730469,11.6885375977 +2011-11-29 19:40:54.966,-81.1620808911,134163.860530383,158.4396675227,202.2066099132,38.6289249369,201.3485411536,50.0033950806,-0.0005086139,97.1779937744,11.673828125 +2011-11-29 19:40:55.000,-81.1212964487,134163.00978713,158.5253087392,202.2581590376,38.6766382752,201.2601867089,50.00340271,0.0007502222,97.1646118164,11.6993637085 +2011-11-29 19:40:55.033,-81.0805287136,134161.161012044,158.5343106168,202.311491349,38.7579174975,201.2864123191,50.0034179688,0,97.1788635254,11.6802902222 +2011-11-29 19:40:55.066,-81.0400915883,134150.080234009,158.5392902834,202.3291715661,38.7871954144,201.2723237022,50.0034103394,-0.0005086279,97.1821899414,11.6853103638 +2011-11-29 19:40:55.100,-80.9994045605,134150.250297328,158.5910936641,202.322317449,38.7975461796,201.2631592918,50.0033950806,-0.0001017284,97.1776657104,11.7028579712 +2011-11-29 19:40:55.133,-80.9586854828,134162.525163792,158.6298997104,202.2574930277,38.8266377373,201.3287259916,50.0033912659,0,97.1797866821,11.6790542603 +2011-11-29 19:40:55.166,-80.9177416625,134162.309934262,158.6858906249,202.2937209678,38.846658064,201.2527122064,50.0033950806,-2.79396772384644E-08,97.1782150269,11.7041931152 +2011-11-29 19:40:55.200,-80.8770515563,134163.302135782,158.7557484913,202.206327564,38.9068712508,201.1840377956,50.0033912659,-8.90018418431282E-05,97.1631011963,11.7194137573 +2011-11-29 19:40:55.233,-80.8365951834,134163.625042779,158.7975330983,202.1019817241,38.971282702,201.2837535042,50.0033912659,1.39698386192322E-08,97.1819534302,11.6883392334 +2011-11-29 19:40:55.266,-80.7957954706,134163.116321351,158.8041531936,202.2170606199,39.0404032543,201.4189963573,50.0033950806,0.0001271674,97.168800354,11.6946563721 +2011-11-29 19:40:55.300,-80.7549177021,134162.262013126,158.8264284691,202.3413919144,39.0980443402,201.4796856198,50.0033988953,-1.27404928207397E-05,97.1690063477,11.723815918 +2011-11-29 19:40:55.333,-80.7146157989,134161.983631391,158.8682428855,202.3778360873,39.1296188365,201.4396857318,50.0033836365,-0.0004450371,97.1770782471,11.6963653564 +2011-11-29 19:40:55.366,-80.6742371693,134162.101927581,158.9256468673,202.4126289259,39.1496242502,201.3215220192,50.0033798218,-1.2698583304882E-05,97.1759872437,11.6884155273 +2011-11-29 19:40:55.400,-80.6335258725,134162.795445108,158.9676764963,202.3527354223,39.1828975296,201.2865631861,50.0033874512,0.0002288818,97.1748352051,11.6953811646 +2011-11-29 19:40:55.433,-80.5928038483,134162.705778717,159.0313991966,202.2490904748,39.2249593781,201.3525519747,50.0033874512,-1.27265229821205E-05,97.1633300781,11.712097168 +2011-11-29 19:40:55.466,-80.5516779094,134161.795830416,159.0897195464,202.2470217468,39.2718548464,201.3487542647,50.0033874512,1.39698386192322E-08,97.1800994873,11.7040786743 +2011-11-29 19:40:55.500,-80.510651421,134161.739642602,159.1409363817,202.3146770704,39.3044986578,201.3200940718,50.0033988953,0.000279746,97.180809021,11.7107620239 +2011-11-29 19:40:55.533,-80.4702132126,134150.697110818,159.1920512298,202.4064987029,39.3318654561,201.2575393868,50.0033988953,-1.39698386192322E-08,97.1742706299,11.6993179321 +2011-11-29 19:40:55.566,-80.4289276871,134150.309224279,159.2060103329,202.3931363765,39.385872122,201.16461847,50.0034103394,0.0003814744,97.1810760498,11.6929702759 +2011-11-29 19:40:55.600,-80.3875135992,134161.468169006,159.2319512882,202.2591612975,39.4177172596,201.2450491375,50.0034294128,0.000534053,97.1750640869,11.700592041 +2011-11-29 19:40:55.633,-80.3466920511,134161.13013857,159.2528594232,202.2214313577,39.4519545061,201.2682490816,50.0034179688,-0.0005467515,97.1649246216,11.7109603882 +2011-11-29 19:40:55.666,-80.3064880777,134159.503521908,159.2954150804,202.3213357035,39.4973851324,201.2262495439,50.00340271,-0.0004068855,97.1718215942,11.706199646 +2011-11-29 19:40:55.700,-80.2654455364,134150.372042426,159.3595280685,202.4507707886,39.5283373611,201.3044863597,50.0034179688,0.0007629348,97.1666107178,11.7156524658 +2011-11-29 19:40:55.733,-80.2238700041,134162.904062473,159.3913143696,202.4341632393,39.5766412116,201.4642158653,50.0034255981,1.2698583304882E-05,97.1837768555,11.6929702759 +2011-11-29 19:40:55.766,-80.1836952305,134164.131085596,159.3944141435,202.300789094,39.6329086471,201.4600312375,50.0033950806,-0.0009155273,97.1818008423,11.6922149658 +2011-11-29 19:40:55.800,-80.1442245246,134162.568773628,159.4196211967,202.1007914659,39.6790329961,201.2519752043,50.0033721924,-0.0006993581,97.1717681885,11.7136001587 +2011-11-29 19:40:55.833,-80.1031517794,134161.581450568,159.5131944218,202.0676234589,39.7174774365,201.1879753261,50.0033950806,0.001093545,97.1643829346,11.7070465088 +2011-11-29 19:40:55.866,-80.0608182019,134162.052607956,159.6224588776,202.2595967886,39.7497201955,201.3069319233,50.0034103394,0.000279746,97.1757278442,11.7215576172 +2011-11-29 19:40:55.900,-80.0202468164,134163.806534146,159.633578209,202.4329147667,39.7757838481,201.3230243942,50.0033836365,-0.0011571357,97.1798858643,11.6974945068 +2011-11-29 19:40:55.933,-79.9800401383,134164.43005952,159.6143400202,202.2463812737,39.8241901812,201.342062135,50.0033836365,0.000534053,97.1827850342,11.6861038208 +2011-11-29 19:40:55.966,-79.938789855,134161.951109055,159.6721883006,202.1127180575,39.865356557,201.2866431392,50.0034179688,0.0012461515,97.1898117065,11.6823654175 +2011-11-29 19:40:56.000,-79.8973007891,134150.799283293,159.7530732383,202.1691127543,39.904847336,201.2188609553,50.0034294128,-0.0003941869,97.16746521,11.7005310059 +2011-11-29 19:40:56.033,-79.8572432718,134161.927341646,159.7996529067,202.2943793786,39.9769959269,201.2271590401,50.0033912659,-0.0012461375,97.1804275513,11.7091674805 +2011-11-29 19:40:56.066,-79.8177813931,134162.823128654,159.7770535822,202.250338089,40.0504648765,201.2949483791,50.0033721924,-0.0003305962,97.1789627075,11.7072753906 +2011-11-29 19:40:56.100,-79.7768968002,134162.129008036,159.8002168548,202.1157592819,40.070941448,201.2772086373,50.0033874512,0.0009028008,97.1796798706,11.7004852295 +2011-11-29 19:40:56.133,-79.7351189398,134161.214880936,159.9163913294,202.2299209132,40.0283854408,201.2610241799,50.0033988953,1.2698583304882E-05,97.1733551025,11.7051315308 +2011-11-29 19:40:56.166,-79.694290868,134161.190294261,150.0326934815,202.5066188773,40.0630566773,201.2118049789,50.0033836365,-0.0005467795,97.1725311279,11.7065963745 +2011-11-29 19:40:56.200,-79.6543746671,134162.337052432,150.0283999544,202.4480854508,40.1728268317,201.1984038418,50.0033798218,7.63172283768654E-05,97.1777267456,11.6865310669 +2011-11-29 19:40:56.233,-79.6140057048,134162.901614789,150.007224203,202.1624657658,40.2187931532,201.3278013497,50.0033912659,0.0006484939,97.1751861572,11.7128295898 +2011-11-29 19:40:56.266,-79.5720122336,134161.516206844,150.0447612578,202.2190389841,40.2374339274,201.322430995,50.0034141541,0.00027976,97.1770553589,11.6929550171 +2011-11-29 19:40:56.300,-79.5300767343,134161.861711329,150.0448561358,202.1820025507,40.247586773,201.2536674441,50.0034179688,0.0001271674,97.1764984131,11.7020874023 +2011-11-29 19:40:56.333,-79.4896793673,134161.388460444,150.0758872168,202.0836746341,40.2657554404,201.2423633912,50.0034065247,-0.0004577637,97.1835784912,11.6989898682 +2011-11-29 19:40:56.366,-79.4498313497,134161.139552327,150.1692173447,202.2332615958,40.3371917325,201.3414500035,50.00340271,0,97.1723556519,11.7086639404 +2011-11-29 19:40:56.400,-79.4090578403,134161.821645681,150.225213887,202.2881287201,40.4387499011,201.4472032944,50.0034141541,0.0002924446,97.1768035889,11.6967697144 +2011-11-29 19:40:56.433,-79.3677603119,134150.655991751,150.2450258394,202.2890339289,40.4929099696,201.4770620268,50.00340271,-0.0004831888,97.1691665649,11.7193222046 +2011-11-29 19:40:56.466,-79.3275320253,134150.72558669,150.2670370531,202.3200855221,40.504839726,201.3893736353,50.0033721924,-0.000953651,97.1660003662,11.7053833008 +2011-11-29 19:40:56.500,-79.286820626,134161.616032785,150.3101874005,202.3131165142,40.5355523079,201.3500938194,50.0033798218,0.0008010864,97.160446167,11.7052154541 +2011-11-29 19:40:56.533,-79.2455180964,134150.753892713,150.355709983,202.3406371688,40.5478750124,201.2759290834,50.0034103394,0.0007120706,97.1774978638,11.6985549927 +2011-11-29 19:40:56.566,-79.2048818217,134150.140968805,150.3887549153,202.293677752,40.5545220996,201.2349577994,50.0034065247,-0.0005594781,97.1651077271,11.7213363647 +2011-11-29 19:40:56.600,-79.1645100665,134162.181289026,150.4409736439,202.3098672877,40.6025977127,201.3610335968,50.0033836365,-0.0006103422,97.16847229,11.7254104614 +2011-11-29 19:40:56.633,-79.1234481348,134164.121974762,150.5074102994,202.3245093368,40.6883369275,201.4809491873,50.0033988953,0.0006484939,97.1816864014,11.6921691895 +2011-11-29 19:40:56.666,-79.0824942983,134163.871380304,150.4937351554,202.2515890491,40.7832404282,201.4677407264,50.0034065247,-0.0001144409,97.1914672852,11.6739730835 +2011-11-29 19:40:56.700,-79.0419197167,134163.612812307,150.5056668808,202.2422588315,40.8388258061,201.3166092151,50.0033912659,-0.000394173,97.1784439087,11.6952056885 +2011-11-29 19:40:56.733,-79.0013488392,134162.894505308,150.582754656,202.310846957,40.832767406,201.2009872085,50.0033912659,6.35627657175064E-05,97.1742401123,11.6897354126 +2011-11-29 19:40:56.766,-78.9605066122,134161.857811617,150.6457451782,202.4052584741,40.8271779084,201.2851564339,50.0033988953,0.000394173,97.1819763184,11.7035369873 +2011-11-29 19:40:56.800,-78.9194489297,134161.592839544,150.6905816775,202.332835941,40.8655197388,201.3531433668,50.0033988953,-2.54251062870026E-05,97.1820678711,11.6881256104 +2011-11-29 19:40:56.833,-78.8789446296,134161.428605588,150.7405681377,202.2539331454,40.8942240281,201.2508358006,50.0033912659,-0.0002415944,97.1628875732,11.7201004028 +2011-11-29 19:40:56.866,-78.8388096559,134163.071900669,150.7817511587,202.1516393216,40.9323624826,201.2180086211,50.0033874512,-0.0002034567,97.1893463135,11.6922912598 +2011-11-29 19:40:56.900,-78.7974833666,134162.928743433,150.8184739734,202.1574640061,41.0071879485,201.2740699952,50.0033950806,0.0004450511,97.1881027222,11.6942825317 +2011-11-29 19:40:56.933,-78.7557778081,134158.889902948,150.8278982403,202.2214558954,41.088978584,201.242941938,50.0034065247,0.0002034567,97.1823501587,11.7013244629 +2011-11-29 19:40:56.966,-78.7158216699,134158.262118301,150.8893773794,202.2087649923,41.1197085126,201.2592755693,50.0033836365,-0.0007375097,97.1759262085,11.6909790039 +2011-11-29 19:40:57.000,-78.6755716004,134159.797273608,150.9654147821,202.2286392411,41.1125030141,201.338144386,50.0033798218,0.0003051711,97.1834716797,11.7063751221 +2011-11-29 19:40:57.033,-78.6336486437,134150.513019755,150.9830342356,202.3433660318,41.1552938581,201.3479022402,50.0034255981,0.0014495663,97.173324585,11.6795730591 +2011-11-29 19:40:57.066,-78.5918245536,134150.744022195,150.946155745,202.3460266339,41.2205313182,201.2786479982,50.0034370422,-0.0003560213,97.1799621582,11.6828384399 +2011-11-29 19:40:57.100,-78.5515270369,134162.793679874,150.9865519463,202.3134717129,41.2655038002,201.2498384975,50.0033988953,-0.0011189841,97.1541442871,11.7256317139 +2011-11-29 19:40:57.133,-78.5117539655,134163.975092715,161.0798497893,202.3048064811,41.305253456,201.2637389575,50.0033912659,5.08781522512436E-05,97.1947250366,11.681098938 +2011-11-29 19:40:57.166,-78.4711403962,134162.258175035,161.160548527,202.2324404665,41.3377566783,201.1747382313,50.00340271,0.0001907442,97.1862716675,11.6930465698 +2011-11-29 19:40:57.200,-78.4300774573,134163.582780701,161.2216732639,202.1991489491,41.3611384972,201.2299036823,50.0033874512,-0.0004323386,97.1866455078,11.6766357422 +2011-11-29 19:40:57.233,-78.3892976005,134165.446651176,161.2470136095,202.2407337553,41.4129497305,201.3196787821,50.0033798218,-5.08502125740051E-05,97.1645278931,11.7115249634 +2011-11-29 19:40:57.266,-78.34814907,134163.536717798,161.2656626186,202.1875587236,41.48092027,201.2457518384,50.0033988953,0.0009791041,97.1720962524,11.7115097046 +2011-11-29 19:40:57.300,-78.3072793444,134159.99661699,161.290492218,202.0821645872,41.5344708896,201.1690496918,50.0034103394,3.81376594305038E-05,97.1728057861,11.695892334 +2011-11-29 19:40:57.333,-78.2668023492,134161.072410531,161.3295232642,202.0302854693,41.5613345506,201.3352456407,50.0034065247,-0.0002034567,97.1813430786,11.6905136108 +2011-11-29 19:40:57.366,-78.2265168788,134163.478679342,161.3748887916,202.0819079892,41.5722096828,201.43764834,50.0033912659,-0.0004832167,97.1625823975,11.7047348022 +2011-11-29 19:40:57.400,-78.1862346226,134162.278896052,161.4085755854,202.1995481643,41.5940574344,201.314761216,50.0033798218,-0.0004577637,97.173576355,11.7011795044 +2011-11-29 19:40:57.433,-78.1454411697,134162.210575354,161.4758888398,202.3152577159,41.666978536,201.3519760005,50.0033760071,0,97.1703720093,11.729347229 +2011-11-29 19:40:57.466,-78.1045501168,134164.366158025,161.5451737527,202.300206567,41.7231311641,201.4110443464,50.0033760071,0.0001017423,97.1642303467,11.7185592651 +2011-11-29 19:40:57.500,-78.0636027121,134163.344715866,161.5624166595,202.2196321862,41.7071221979,201.2252306423,50.0033874512,0.0004704762,97.1769104004,11.6801757813 +2011-11-29 19:40:57.533,-78.0227594722,134162.898800904,161.5934543213,202.2363135944,41.756794303,201.1363793747,50.00340271,0.0004704902,97.1717605591,11.7264709473 +2011-11-29 19:40:57.566,-77.9813281801,134162.302877049,161.6256806885,202.4622830383,41.8542928836,201.2004289556,50.0034103394,0.0001653051,97.1724395752,11.7011566162 +2011-11-29 19:40:57.600,-77.9402501987,134161.184762167,161.6577448024,202.5593680609,41.9164321922,201.2159036732,50.0034141541,7.62753188610077E-05,97.1853790283,11.6879653931 +2011-11-29 19:40:57.633,-77.8999751245,134162.241080851,161.7164153333,202.4896697064,41.947866983,201.2770964513,50.0034141541,-0.0001271535,97.1672592163,11.6972732544 +2011-11-29 19:40:57.666,-77.8596463731,134163.598829378,161.7327579102,202.3436392155,41.9638545344,201.2328895268,50.0033988953,-0.0003560353,97.1824417114,11.7098007202 +2011-11-29 19:40:57.700,-77.8186971866,134161.356834908,161.7762796833,202.348479378,41.981431051,201.2075726116,50.00340271,0.0001907302,97.1758422852,11.6999893188 +2011-11-29 19:40:57.733,-77.7774414359,134159.24225691,161.8185221291,202.3374276506,42.0262030035,201.4347224009,50.00340271,1.39698386192322E-08,97.1664505005,11.7208633423 +2011-11-29 19:40:57.766,-77.736126765,134159.721000202,161.8458320024,202.1928923913,42.053482516,201.4519218357,50.0034065247,0.0002034428,97.1818695068,11.6815261841 +2011-11-29 19:40:57.800,-77.6956770259,134150.835423516,161.9247155595,202.161716692,42.1002183321,201.325438942,50.0034065247,0,97.1853485107,11.6780700684 +2011-11-29 19:40:57.833,-77.6551712322,134161.701904669,161.9883997492,202.2737558491,42.1841135651,201.2456592543,50.0034103394,0.0002288818,97.1801757813,11.6877441406 +2011-11-29 19:40:57.866,-77.6143474575,134162.271314186,161.9875430861,202.3984154151,42.239034283,201.3416387804,50.0034103394,-0.0003306242,97.1754760742,11.7015686035 +2011-11-29 19:40:57.900,-77.574009448,134163.002385693,162.004806373,202.380233791,42.2504628845,201.4538510694,50.0033874512,-0.0007629208,97.1542892456,11.7234649658 +2011-11-29 19:40:57.933,-77.5335243989,134161.531976937,162.0396206271,202.3159693108,42.2916690394,201.3546884219,50.0033760071,-6.35767355561256E-05,97.1703796387,11.6867370605 +2011-11-29 19:40:57.966,-77.4923286654,134159.905068189,162.08836658,202.3775017325,42.3508188987,201.3315263622,50.0033874512,0.0005467795,97.1721725464,11.7256851196 +2011-11-29 19:40:58.000,-77.4509112348,134159.198896598,162.1379385053,202.4309760513,42.3539894374,201.414136517,50.0034065247,0.0004959013,97.1626815796,11.7216033936 +2011-11-29 19:40:58.033,-77.4095514831,134150.157461845,162.1862752173,202.4347197221,42.394544461,201.3731442155,50.0034179688,0.0004831888,97.1825408936,11.6914138794 +2011-11-29 19:40:58.066,-77.368820172,134150.288037263,162.2263501966,202.38897768,42.4901491024,201.297115558,50.0034255981,0,97.1867980957,11.6754379272 +2011-11-29 19:40:58.100,-77.32907371,134161.633544433,162.2612235998,202.2951614094,42.5270501885,201.2871980699,50.0034255981,-0.0001525646,97.1683273315,11.6976852417 +2011-11-29 19:40:58.133,-77.2888005975,134162.032790637,162.294469068,202.254274337,42.5332741601,201.1900952914,50.0033988953,-0.0006357953,97.1804122925,11.7022094727 +2011-11-29 19:40:58.166,-77.2473969494,134161.912074355,162.3369449986,202.3621266056,42.5862412149,201.1842751264,50.0033950806,0,97.196975708,11.6925888062 +2011-11-29 19:40:58.200,-77.2059887003,134162.352530665,162.3757528559,202.3359399537,42.6223853105,201.3586158351,50.0033950806,1.27265229821205E-05,97.1824645996,11.6936187744 +2011-11-29 19:40:58.233,-77.1652844224,134162.736041472,162.4134272463,202.2529567086,42.6449654265,201.4115223361,50.0033950806,0,97.1909179688,11.6703720093 diff --git a/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Floating Point - 5 phasors, 3 analogs.csv b/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Floating Point - 5 phasors, 3 analogs.csv new file mode 100755 index 0000000..0cfc8fe --- /dev/null +++ b/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Floating Point - 5 phasors, 3 analogs.csv @@ -0,0 +1,712 @@ +"2011-11-29 20:18:29.233",134168.296875,-169.102970943,134.8224334717,-169.5159651613,0.1450927705,144.6345149207,202.337310791,70.3263802607,202.0307922363,-49.3285038651,60.0033760071,"-7.63032585382462E-05",97.1161651611,108.9102172852,11.794052124 +"2011-11-29 20:18:29.266",134167.265625,-169.061921506,134.8015441895,-169.4483189678,0.0693023801,0.1610450551,202.3217163086,70.3646429804,202.1531677246,-49.2646518417,60.0033760071,"2.79396772384644E-08",97.1366653442,108.922706604,11.7860412598 +"2011-11-29 20:18:29.300",134167.046875,-169.0205032389,134.78465271,-169.3850440953,0.0458044522,-74.8878606262,202.2794799805,70.4249330602,202.0801849365,-49.207759781,60.0033836365,0.0005086139,97.1474304199,108.9005584717,11.7531280518 +"2011-11-29 20:18:29.333",134165.78125,-168.9798636134,134.7117156982,-169.367558811,0.1078804955,174.3555230185,202.0138702393,70.4346797402,202.0202636719,-49.1611949663,60.0033950806,0.0001780316,97.1515655518,108.9214553833,11.7698898315 +"2011-11-29 20:18:29.366",134166.0625,-168.9391420255,134.6603393555,-169.3241324683,0.0502309091,-135.409565805,201.8742523193,70.4780514414,202.0673370361,-49.1344411153,60.00340271,0.00027976,97.1497802734,108.913482666,11.7637023926 +"2011-11-29 20:18:29.400",134168.25,-168.8983111547,134.7460327148,-169.2591910297,0.1367013007,-93.1392803904,202.0541381836,70.5406228044,202.153213501,-49.0967009051,60.0034065247,0.0001017423,97.1319656372,108.9110870361,11.7791213989 +"2011-11-29 20:18:29.433",134168.03125,-168.8577808121,134.7694091797,-169.2105874035,0.1303349286,-94.847551683,202.1423950195,70.5799373732,202.1329956055,-49.036690863,60.0033950806,-0.0005594781,97.1434402466,108.9143066406,11.770866394 +"2011-11-29 20:18:29.466",134165.1875,-168.8172777904,134.7488708496,-169.1920366097,0.0251683109,-49.7269087994,202.1364746094,70.6069166205,202.1249237061,-48.9971611432,60.0033874512,-0.0003051711,97.1438598633,108.9025115967,11.7586517334 +"2011-11-29 20:18:29.500",134163.71875,-168.7766928063,134.7640838623,-169.1789636277,0.0830653459,110.7198184838,202.1180877686,70.6408694908,202.1621398926,-48.9756187266,60.0033874512,0.0003051711,97.1206283569,108.8883361816,11.7677078247 +"2011-11-29 20:18:29.533",134163.828125,-168.7355477467,134.7208251953,-169.1402774362,0.0719386414,100.8485490576,201.9964599609,70.6924784002,202.1679840088,-48.9527819891,60.0033912659,"7.62892886996269E-05",97.1437301636,108.9006271362,11.7568969727 +"2011-11-29 20:18:29.566",134165.03125,-168.6946075929,134.7014465332,-169.0792428658,0.0182955861,18.3640769044,202.0995178223,70.749626593,202.0247650146,-48.9073680613,60.0033950806,"2.54390761256218E-05",97.1380081177,108.8836669922,11.7456588745 +"2011-11-29 20:18:29.600",134168.28125,-168.6537357409,134.7675933838,-168.9990427845,0.1057253778,-109.8865968768,202.2347106934,70.807143616,202.0158538818,-48.8307367539,60.00340271,0.0002288818,97.1334686279,108.9103851318,11.7769165039 +"2011-11-29 20:18:29.633",134169.609375,-168.6128365681,134.8114624023,-168.9500293471,0.1741364002,-135.6230365373,202.1170043945,70.8475441849,202.174118042,-48.7747531084,60.0034103394,0.0002543069,97.1322097778,108.9046630859,11.7724533081 +"2011-11-29 20:18:29.666",134167.296875,-168.5715822255,134.7888031006,-168.9464093468,0.1465153247,-155.4737246052,202.0650787354,70.8824669422,202.1605987549,-48.7850222978,60.0034179688,0.000279774,97.1318435669,108.9321670532,11.8003234863 +"2011-11-29 20:18:29.700",134163.875,-168.5309835811,134.7734222412,-168.9167526654,0.1618448496,-179.0984883404,202.1455230713,70.9278398888,202.0170135498,-48.7530843332,60.0034103394,-0.000279732,97.1244430542,108.9172515869,11.7928085327 +"2011-11-29 20:18:29.733",134163.4375,-168.4908493895,134.6933288574,-168.863190322,0.07745222,-119.1842875071,202.050567627,70.9634729857,201.9809875488,-48.706536594,60.0033988953,-0.0004577637,97.1373977661,108.9127655029,11.7753677368 +"2011-11-29 20:18:29.766",134166.59375,-168.450100481,134.6704559326,-168.818384281,0.126095891,-81.0482472952,201.987487793,70.9934643464,202.0208129883,-48.6659925911,60.0033950806,0.0001017144,97.1295623779,108.8991699219,11.7696075439 +"2011-11-29 20:18:29.800",134167.328125,-168.4090920252,134.678604126,-168.7711603531,0.108848311,-103.0472279325,202.0768127441,71.0504554448,201.9159088135,-48.6207801539,60.0033988953,-0.0001525925,97.1335296631,108.9075622559,11.7740325928 +"2011-11-29 20:18:29.833",134168.15625,-168.3686982864,134.7520904541,-168.7525412574,0.1251616776,-156.9304946721,202.1476135254,71.0946877499,201.9875183105,-48.6068977944,60.0033798218,-0.0005340669,97.1406402588,108.9163131714,11.7756729126 +"2011-11-29 20:18:29.866",134169.203125,-168.3281406231,134.7929229736,-168.7290727274,0.1713201255,-142.0740409254,202.2034454346,71.1279780919,202.0232543945,-48.6077720586,60.0033798218,0.0003305962,97.1406173706,108.933807373,11.7931900024 +"2011-11-29 20:18:29.900",134169.203125,-168.2872960919,134.6959838867,-168.6730241951,0.1111529693,-62.5422185693,202.2106323242,71.1479632254,201.9098815918,-48.5240134488,60.0033912659,0.0003814744,97.1529083252,108.9044342041,11.7515258789 +"2011-11-29 20:18:29.933",134169.3125,-168.2468886928,134.6150970459,-168.6361411736,0.1139465198,30.0007794764,202.0644836426,71.1756459821,201.8910980225,-48.4374134804,60.0033874512,-0.0003814884,97.1458969116,108.9192047119,11.7733078003 +"2011-11-29 20:18:29.966",134168.28125,-168.2069320861,134.6213684082,-168.5966626802,0.1800202578,124.1126651442,201.9098052979,71.2584893465,201.8865661621,-48.4046490629,60.0033721924,-0.000534053,97.1282043457,108.9049835205,11.7767791748 +"2011-11-29 20:18:30.000",134166.125,-168.1660465737,134.6870117188,-168.5288525621,0.2006438076,168.9980319165,201.9216461182,71.3419064469,201.9552459717,-48.3778576459,60.0033798218,0.0004069135,97.1309967041,108.9200668335,11.7890701294 +"2011-11-29 20:18:30.033",134164.3125,-168.1244507217,134.6818237305,-168.4630368592,0.1549095362,-64.5752107154,201.9330444336,71.3637972032,202.1510772705,-48.3326759445,60.0033912659,0.0004832027,97.1484832764,108.9197845459,11.7713012695 +"2011-11-29 20:18:30.066",134166.15625,-168.0837974358,134.6237030029,-168.4238315734,0.2399064302,-25.4937459639,201.948135376,71.3883380728,202.1161651611,-48.2771226009,60.0033874512,-0.0004832167,97.1307220459,108.9100265503,11.7793045044 +"2011-11-29 20:18:30.100",134168.671875,-168.0435539612,134.6981811523,-168.4289951964,0.0758340806,64.7152842349,202.085067749,71.3974153942,202.0570373535,-48.2381632019,60.0033836365,0.0002288818,97.1278381348,108.9133453369,11.7855072021 +"2011-11-29 20:18:30.133",134169.296875,-168.0026138073,134.7296447754,-168.3838749668,0.0666584298,125.1205141978,202.1620025635,71.4213756979,202.0028991699,-48.1716303292,60.00340271,0.0005849171,97.1577072144,108.921005249,11.7632980347 +"2011-11-29 20:18:30.166",134167.734375,-167.9620971251,134.7190704346,-168.3001231872,0.066609405,-121.4367472916,202.2138214111,71.5091982702,201.8999328613,-48.12291742,60.0033950806,-0.0007629348,97.1296539307,108.9293212891,11.7996673584 +"2011-11-29 20:18:30.200",134165.453125,-167.9220175751,134.8034820557,-168.2203329173,0.2367471904,-148.5384051635,202.3042449951,71.6099230699,201.8848419189,-48.0728589636,60.0033721924,-0.0007120706,97.141746521,108.9134674072,11.7717208862 +"2011-11-29 20:18:30.233",134165.6875,-167.8812686665,134.8206634521,-168.2139398602,0.226904124,-169.3587068859,202.2487945557,71.6174294478,201.9880828857,-48.0437965087,60.0033721924,0.0004577637,97.1455917358,108.919921875,11.7743301392 +"2011-11-29 20:18:30.266",134167.09375,-167.8400006635,134.7584991455,-168.2660268828,0.1117278636,159.3766039799,202.0735778809,71.5556025754,202.1096801758,-48.0707176993,60.0033950806,0.0005849171,97.1352386475,108.9136886597,11.7784500122 +"2011-11-29 20:18:30.300",134167.453125,-167.7993063965,134.7873687744,-168.2091723882,0.0597603396,-106.502019577,202.1817321777,71.6104353341,202.1538848877,-48.0436496596,60.0033874512,-0.0003560493,97.126449585,108.9007797241,11.7743301392 +"2011-11-29 20:18:30.333",134167.90625,-167.7582979407,134.7945861816,-168.1141644568,0.1495974064,-62.1187946521,202.4531555176,71.696256661,201.9736175537,-47.964918069,60.0033988953,0.0006612204,97.1394500732,108.9086456299,11.7691955566 +"2011-11-29 20:18:30.366",134169.46875,-167.7169752962,134.8035736084,-168.0930591723,0.096420832,171.811578081,202.3246765137,71.7291986634,201.9975128174,-47.9056251969,60.0034217834,0.000534053,97.1360168457,108.9164123535,11.7803955078 +"2011-11-29 20:18:30.400",134167.75,-167.6767045009,134.8062286377,-168.079835926,0.2849707007,160.6752141865,202.0523681641,71.7627007412,202.1246643066,-47.8805071762,60.0034141541,-0.0003814604,97.1364822388,108.9037399292,11.7672576904 +"2011-11-29 20:18:30.433",134164.984375,-167.6367342338,134.728515625,-168.0440867159,0.1319861859,148.8217214102,202.1294403076,71.7697494965,201.9622344971,-47.8321733425,60.0033912659,-0.0007374957,97.1403198242,108.8994903564,11.7591705322 +"2011-11-29 20:18:30.466",134165.0625,-167.5958077403,134.6993560791,-168.0027367507,0.0599027015,169.1915584965,202.2049713135,71.7973502909,201.8403930664,-47.795867472,60.0033988953,0.0003560493,97.1388244629,108.9189376831,11.7801132202 +"2011-11-29 20:18:30.500",134165.609375,-167.5555779261,134.7456359863,-167.9492290487,0.1175718755,173.4509327648,202.1370849609,71.9225271678,201.9895172119,-47.8102416051,60.0033798218,-0.0009918446,97.1369476318,108.9150085449,11.7780609131 +"2011-11-29 20:18:30.533",134166.28125,-167.5153344515,134.7556304932,-167.9005707811,0.0389445201,82.44644849,202.1036682129,71.9703180014,202.1774597168,-47.7611086393,60.0033607483,-0.0003814744,97.13331604,108.9063491821,11.7730331421 +"2011-11-29 20:18:30.566",134167.5625,-167.4741210901,134.7534332275,-167.8605458726,0.0232568569,-58.5460114897,202.1315307617,71.9305594703,202.1390686035,-47.65787033,60.0033721924,0.0007120706,97.1285476685,108.9191055298,11.7905578613 +"2011-11-29 20:18:30.600",134166.9375,-167.4325525588,134.781036377,-167.8150158315,0.1436795145,-135.767522359,202.1632537842,71.9648880011,202.0607757568,-47.6164179119,60.00340271,0.0010681059,97.1313323975,108.9164505005,11.785118103 +"2011-11-29 20:18:30.633",134166.4375,-167.3913528577,134.7587280273,-167.7896348486,0.0994106531,-151.6603070481,202.1341247559,72.0262640809,202.048538208,-47.6132862702,60.0034103394,"-5.08641824126244E-05",97.1599731445,108.9181213379,11.7581481934 +"2011-11-29 20:18:30.666",134167.328125,-167.3511093831,134.6957092285,-167.7810151499,0.0991883427,138.6410102636,202.0322418213,72.0757146505,201.9974822998,-47.6150621194,60.0034103394,"1.39698386192322E-08",97.1244659424,108.9186935425,11.7942276001 +"2011-11-29 20:18:30.700",134166.15625,-167.3109478708,134.6871948242,-167.7184642774,0.083424814,112.3871291319,202.075012207,72.1456626178,201.9733276367,-47.5592150776,60.0034103394,"-5.08641824126244E-05",97.1357574463,108.9184265137,11.7826690674 +"2011-11-29 20:18:30.733",134166.296875,-167.2699120943,134.7311401367,-167.6461598949,0.0603959188,59.2860215051,202.0905609131,72.1868691491,202.145904541,-47.4667104106,60.0034065247,-0.0002288818,97.1477813721,108.9258651733,11.7780838013 +"2011-11-29 20:18:30.766",134165.96875,-167.2284118649,134.7288513184,-167.6102330999,0.0666521117,140.921159635,201.9429016113,72.2306438315,202.2038726807,-47.4365175594,60.0034065247,0,97.123085022,108.9035797119,11.7804946899 +"2011-11-29 20:18:30.800",134165.328125,-167.1871985034,134.7057189941,-167.5554686431,0.1903870851,-147.0027737324,201.9218139648,72.2891307413,202.0184326172,-47.4190869166,60.0034065247,0.0001271535,97.13646698,108.9016189575,11.7651519775 +"2011-11-29 20:18:30.833",134167.234375,-167.1469823496,134.7625579834,-167.5144738477,0.1911585331,-113.1810976418,202.0932769775,72.288468213,202.084854126,-47.3614196295,60.0034065247,0,97.1244888306,108.9146728516,11.790184021 +"2011-11-29 20:18:30.866",134168.9375,-167.1066022712,134.7877807617,-167.498381922,0.0497270934,-97.5609058025,202.2779541016,72.3078454597,202.0704650879,-47.3176586074,60.0034103394,0.0003051851,97.1500396729,108.9332809448,11.783241272 +"2011-11-29 20:18:30.900",134170.4375,-167.0655255135,134.719543457,-167.4414181443,0.0959455147,135.544311777,202.2464752197,72.3816798046,201.8620605469,-47.2413175831,60.0034141541,-0.0002288818,97.1340408325,108.9098815918,11.7758407593 +"2011-11-29 20:18:30.933",134168.609375,-167.0254186427,134.6839752197,-167.3783618379,0.0350519009,128.5353492356,202.0845336914,72.4507944888,201.9539489746,-47.1984274102,60.0033798218,-0.0008901022,97.1288299561,108.9278869629,11.7990570068 +"2011-11-29 20:18:30.966",134165.609375,-166.9848746398,134.6943511963,-167.3387877219,0.1081242189,-88.1916757708,201.9718017578,72.491673171,202.0923614502,-47.1994553537,60.0033683777,-0.0002543209,97.1332931519,108.914932251,11.7816390991 +"2011-11-29 20:18:31.000",134165.796875,-166.9443442973,134.7009124756,-167.3141717201,0.0082966676,-175.4406761531,201.9728546143,72.5127852857,202.1235656738,-47.140903557,60.0033760071,0.0002288818,97.1352920532,108.9032211304,11.7679290771 +"2011-11-29 20:18:31.033",134167.296875,-166.9038549359,134.6902160645,-167.2848838689,0.0977809727,25.8015672218,202.0949249268,72.5215415882,202.0733337402,-47.0850155341,60.0033760071,"-2.54390761256218E-05",97.1309051514,108.9061660767,11.7752609253 +"2011-11-29 20:18:31.066",134167.25,-166.8627918386,134.7153778076,-167.2337940539,0.0955304205,-64.7005515168,202.2023925781,72.578580498,201.9664001465,-47.0723865144,60.0033760071,"-2.79396772384644E-08",97.1220779419,108.9007720947,11.7786941528 +"2011-11-29 20:18:31.100",134167.03125,-166.821824364,134.7046966553,-167.1974437872,0.1050107405,-92.6661122055,202.1512908936,72.6228128031,201.9364624023,-47.0462098144,60.0033874512,0.0002543349,97.1513061523,108.9249420166,11.7736358643 +"2011-11-29 20:18:31.133",134168,-166.7816082101,134.6782989502,-167.1698498229,0.0768977627,-11.9338883716,202.0171813965,72.6216585011,202.0900878906,-46.9705279033,60.0033836365,-0.000279732,97.1320724487,108.9260406494,11.7939682007 +"2011-11-29 20:18:31.166",134166.90625,-166.7411188487,134.7247009277,-167.1614623506,0.1715258956,91.2748573131,202.0719451904,72.6636709947,202.1389770508,-46.9390202406,60.0033836365,0.0001780177,97.1366958618,108.9173583984,11.7806625366 +"2011-11-29 20:18:31.200",134165.671875,-166.7003426194,134.7617034912,-167.1086649883,0.2102522403,129.3795469566,202.2709503174,72.755789756,201.9220581055,-46.9194722392,60.0033912659,"7.62892886996269E-05",97.1400222778,108.9205780029,11.7805557251 +"2011-11-29 20:18:31.233",134166.640625,-166.6597712957,134.7189331055,-167.0413193231,0.0248604342,-168.0532118487,202.2695617676,72.7813551541,201.8643035889,-46.8635090843,60.0033836365,-0.0002288818,97.1226959229,108.9226608276,11.7999649048 +"2011-11-29 20:18:31.266",134168.765625,-166.6186398965,134.6730804443,-167.0016222637,0.0362494811,-26.5984914961,202.1249084473,72.8092018353,201.9243927002,-46.8187679301,60.0033836365,0.0001017004,97.145904541,108.9201889038,11.7742843628 +"2011-11-29 20:18:31.300",134167.859375,-166.5776177804,134.7223358154,-166.9603269399,0.1349045485,139.6828326781,202.1561584473,72.8501898005,201.9329223633,-46.7399031508,60.0033950806,0.0002543069,97.1273574829,108.9056549072,11.7782974243 +"2011-11-29 20:18:31.333",134165.140625,-166.5374699284,134.8051300049,-166.9278152395,0.1664902717,138.9865905149,202.2486724854,72.8554558764,202.0724945068,-46.672642863,60.0033950806,"-5.08781522512436E-05",97.1392745972,108.9155273438,11.7762527466 +"2011-11-29 20:18:31.366",134164.5625,-166.4976909067,134.8708343506,-166.8810557644,0.0942825526,176.2316120589,202.2861480713,72.9062724838,202.2390441895,-46.6605807489,60.0033760071,-0.0006866455,97.1384277344,108.9013900757,11.7629623413 +"2011-11-29 20:18:31.400",134165.6875,-166.4571605642,134.8437652588,-166.8443503278,0.1503423601,162.1740308979,202.1686706543,72.9923260371,202.2356109619,-46.6591259186,60.0033760071,0.0003051851,97.1354904175,108.9233932495,11.787902832 +"2011-11-29 20:18:31.433",134167.5625,-166.4154281083,134.7200775146,-166.8283130437,0.1823710799,129.163644677,201.948928833,73.029004153,202.1330718994,-46.6392910493,60.0033798218,0,97.1495513916,108.9170761108,11.7675247192 +"2011-11-29 20:18:31.466",134168.9375,-166.3736683318,134.6050567627,-166.7654616429,0.130270496,0.5457648249,201.9873199463,73.0529234755,201.9568481445,-46.5919339327,60.0033950806,0.000534053,97.1314315796,108.90234375,11.7709121704 +"2011-11-29 20:18:31.500",134168.734375,-166.3331379892,134.6272277832,-166.7088803558,0.3081825972,-16.3638833267,202.140411377,73.1114513665,202.0107116699,-46.5723210445,60.00340271,0.0003306102,97.1289825439,108.91796875,11.7889862061 +"2011-11-29 20:18:31.533",134167.90625,-166.2926076467,134.7216644287,-166.6597029938,0.1359220892,-47.4541018814,202.0629730225,73.1682990309,202.1698455811,-46.5213917389,60.0034141541,0.0004323525,97.133934021,108.8986206055,11.7646865845 +"2011-11-29 20:18:31.566",134168.046875,-166.2512303607,134.7438964844,-166.6152384623,0.1055927128,-152.1283389308,202.0192108154,73.199028052,202.1122589111,-46.437052563,60.0034332275,0.0003051851,97.1349029541,108.9136047363,11.7787017822 +"2011-11-29 20:18:31.600",134169.1875,-166.2109732257,134.7142791748,-166.5635612511,0.0949059576,-154.825362068,202.0703735352,73.2484786216,201.9816741943,-46.3810006156,60.0034065247,-0.0009663915,97.1314468384,108.9265670776,11.7951202393 +"2011-11-29 20:18:31.633",134168.84375,-166.1707570719,134.817276001,-166.4982373218,0.2221906185,-124.7820100225,202.2247924805,73.3291568161,202.0626373291,-46.3674085392,60.0033760071,-0.0006866455,97.1561431885,108.9035949707,11.7474517822 +"2011-11-29 20:18:31.666",134168.046875,-166.1301994086,134.884979248,-166.4681981499,0.2723530531,-133.6475819048,202.2952728271,73.3692636869,202.1320800781,-46.3473721792,60.0033760071,0.0001780316,97.1394805908,108.9327392578,11.793258667 +"2011-11-29 20:18:31.700",134167.265625,-166.0896007642,134.7557220459,-166.4568600358,0.0874619931,-121.635888287,202.2000274658,73.3760460647,202.0066375732,-46.3070877235,60.0033798218,-0.0001525925,97.1505126953,108.9287796021,11.7782669067 +"2011-11-29 20:18:31.733",134167.21875,-166.0489611386,134.6260375977,-166.4203321842,0.1133208722,9.4597795571,202.1197052002,73.4283926345,201.8728027344,-46.2711711738,60.0033798218,0,97.1333312988,108.9112243652,11.7778930664 +"2011-11-29 20:18:31.766",134167.421875,-166.0081302678,134.7039031982,-166.372739426,0.0676515698,94.8038179817,202.1496734619,73.4693464488,201.9741516113,-46.1957078287,60.0033836365,0.0002034288,97.1207733154,108.9184112549,11.7976379395 +"2011-11-29 20:18:31.800",134166.3125,-165.9668212837,134.8201293945,-166.3255564792,0.2120327652,-174.9573992881,202.1255645752,73.4906976201,202.1273345947,-46.1327881261,60.0033912659,0.0003306102,97.1374816895,108.9098892212,11.7724075317 +"2011-11-29 20:18:31.833",134165.328125,-165.9260177336,134.7403869629,-166.2756004757,0.2075133771,-142.5582876772,202.1139831543,73.5290423021,201.9192810059,-46.1037290863,60.0033950806,0,97.1332626343,108.8980407715,11.7647781372 +"2011-11-29 20:18:31.866",134165.78125,-165.8857879193,134.5975646973,-166.2256308117,0.1797547489,-80.1426939849,202.1083068848,73.5746543054,201.6740570068,-46.0764254051,60.0033950806,"-2.54111364483833E-05",97.1202087402,108.9058074951,11.7855987549 +"2011-11-29 20:18:31.900",134167.578125,-165.8453258787,134.6386260986,-166.1799505065,0.1479940861,-69.1760124799,202.2281341553,73.6189207614,201.707824707,-46.0200046274,60.0033912659,-0.0002543069,97.1393814087,108.928894043,11.7895126343 +"2011-11-29 20:18:31.933",134166.765625,-165.8057381023,134.7091522217,-166.1387371451,0.0489395112,-61.9942734733,202.204498291,73.6780565392,201.9367980957,-45.9687303973,60.0033760071,-0.0006612344,97.1406021118,108.9143981934,11.7737960815 +"2011-11-29 20:18:31.966",134166.3125,-165.7654263258,134.6456298828,-166.109162426,0.1335384101,30.6746664305,202.0961914063,73.7477176386,201.9699554443,-45.9549914718,60.0033607483,0,97.1463012695,108.8932800293,11.7469787598 +"2011-11-29 20:18:32.000",134168.953125,-165.7234479831,134.6671905518,-166.0859397828,0.0623375848,45.4995988542,202.0775146484,73.7559343562,201.978805542,-45.9184704503,60.003364563,0.0003051711,97.1439208984,108.9108581543,11.7669372559 +"2011-11-29 20:18:32.033",134169.28125,-165.682316584,134.7414855957,-166.0628127622,0.0508997552,-129.79596993,202.050994873,73.7501901671,202.1345062256,-45.8844151271,60.0033912659,0.0003306102,97.1489105225,108.9158325195,11.7669219971 +"2011-11-29 20:18:32.066",134167.9375,-165.6418408829,134.7391204834,-166.0135807587,0.1144944206,-100.4569333313,202.046661377,73.8040462087,202.1250457764,-45.8608065782,60.0033912659,0.0002034567,97.1413574219,108.9234771729,11.782119751 +"2011-11-29 20:18:32.100",134167.078125,-165.6007094838,134.7500762939,-165.9906313231,0.0357705615,-58.9408032539,202.1491699219,73.8518848536,202.1129760742,-45.8427987845,60.0034179688,0.0007883878,97.1497802734,108.9061813354,11.756401062 +"2011-11-29 20:18:32.133",134166.953125,-165.5592502355,134.82081604,-165.9479836219,0.1116574705,67.8054120795,202.3647613525,73.8868007807,202.1657104492,-45.7570594198,60.0034370422,0.0004832167,97.1355895996,108.9043045044,11.7687149048 +"2011-11-29 20:18:32.166",134167.234375,-165.5178319684,134.8270568848,-165.8511998414,0.0978476554,161.1638869008,202.3099975586,73.973721768,202.0911254883,-45.6608220544,60.0034294128,-0.0003814604,97.142288208,108.9138870239,11.7715988159 +"2011-11-29 20:18:32.200",134166.796875,-165.4778753617,134.7667541504,-165.7968861771,0.2567587197,-148.4723299134,202.1715698242,74.0638666047,201.8846282959,-45.6791440369,60.0034141541,-0.0003051991,97.1370620728,108.9048461914,11.7677841187 +"2011-11-29 20:18:32.233",134167.390625,-165.4378094721,134.7483520508,-165.792911007,0.2051653415,-125.5847075142,202.1719207764,74.0470438488,201.917678833,-45.67023064,60.0034065247,-0.0003051851,97.1292266846,108.9069213867,11.7776947021 +"2011-11-29 20:18:32.266",134168.078125,-165.3975523371,134.7303466797,-165.7594704008,0.1532536,-71.5523923865,202.2077026367,74.0367302631,201.9966125488,-45.5987902764,60.0033798218,-0.0009409664,97.1374511719,108.8991775513,11.7617263794 +"2011-11-29 20:18:32.300",134166.75,-165.3574454663,134.688949585,-165.7224234548,0.0293897931,-107.6627965661,202.1138153076,74.0829569834,201.9397583008,-45.5346957812,60.0033493042,-0.0007629488,97.1331634521,108.9178390503,11.7846755981 +"2011-11-29 20:18:32.333",134167.265625,-165.3165736143,134.6743927002,-165.7024793024,0.0897390097,124.7442117557,202.0773010254,74.1285894773,201.9165496826,-45.5095538549,60.0033493042,0,97.133140564,108.9227600098,11.7896194458 +"2011-11-29 20:18:32.366",134167.875,-165.2752919509,134.6895294189,-165.6595857144,0.0458155908,-159.6815172849,202.1174316406,74.1490937052,201.9078521729,-45.4694025879,60.0033721924,0.0009663915,97.1479263306,108.9072952271,11.7593688965 +"2011-11-29 20:18:32.400",134167.0625,-165.2345976839,134.6852111816,-165.5918985397,0.1096128747,-111.8864079639,202.0882110596,74.211118653,201.9046173096,-45.4197915088,60.0033836365,0.000279732,97.1401367188,108.9169082642,11.7767715454 +"2011-11-29 20:18:32.433",134167.078125,-165.1935892281,134.7213134766,-165.5628019339,0.054535985,-79.6505583646,202.154586792,74.2437191459,202.0076141357,-45.3846057893,60.00340271,0.0007629627,97.135093689,108.9169311523,11.7818374634 +"2011-11-29 20:18:32.466",134166.75,-165.1522119421,134.7651977539,-165.5492098574,0.1286593974,-174.6766921736,202.1805725098,74.2617166944,201.9902954102,-45.354156806,60.0034217834,0.000534053,97.1332855225,108.9138793945,11.7805938721 +"2011-11-29 20:18:32.500",134166.78125,-165.1120504298,134.7492523193,-165.4953196649,0.2289061546,-161.4176147681,202.1427307129,74.3477702477,201.8781433105,-45.3427777108,60.0034141541,-0.0004577637,97.1366119385,108.9009094238,11.7642974854 +"2011-11-29 20:18:32.533",134166.171875,-165.0717796344,134.7688140869,-165.4549669073,0.131089583,-167.9339157646,202.2225799561,74.3969066286,201.9542388916,-45.3050238402,60.0033988953,-0.0004068995,97.1311645508,108.9117889404,11.7806243896 +"2011-11-29 20:18:32.566",134165.484375,-165.0308394806,134.7589263916,-165.4231792069,0.0948160142,123.3637622225,202.2283172607,74.435626971,202.0194244385,-45.2564099688,60.00340271,0.0002288679,97.1372756958,108.913848877,11.7765731812 +"2011-11-29 20:18:32.600",134165.421875,-164.9906779682,134.7152862549,-165.3821570907,0.1120574027,146.3185390417,202.2238311768,74.4714581434,201.849029541,-45.2117405316,60.0033798218,-0.0009918166,97.1438522339,108.9041671753,11.7603149414 +"2011-11-29 20:18:32.633",134165.34375,-164.9502159276,134.7539978027,-165.2968070468,0.188980639,-134.2053351524,202.1230926514,74.5237159208,201.9787597656,-45.1448934702,60.0033683777,-0.0001780177,97.1379852295,108.9258575439,11.7878723145 +"2011-11-29 20:18:32.666",134167.015625,-164.9090162265,134.8057556152,-165.2369199482,0.1806704849,-126.7916292613,202.1176147461,74.5889920387,202.15965271,-45.0946915798,60.0033836365,0.0007883739,97.1453781128,108.9097671509,11.7643890381 +"2011-11-29 20:18:32.700",134169.390625,-164.8684585632,134.7784881592,-165.2223306641,0.0301558599,163.8141095818,202.2628479004,74.5928647559,202.0488891602,-45.0329056886,60.0033874512,-0.0003305962,97.1501235962,108.9105987549,11.7604751587 +"2011-11-29 20:18:32.733",134168.890625,-164.8291986359,134.6609344482,-165.1897779825,0.0625008196,62.138397295,202.196105957,74.6077272476,201.8317565918,-44.9738552881,60.003364563,-0.0006612064,97.1392059326,108.8908004761,11.7515945435 +"2011-11-29 20:18:32.766",134166.328125,-164.7887229349,134.6501464844,-165.1390023562,0.0032847053,-83.0411735516,202.1112518311,74.6657565347,201.8410644531,-44.9444205879,60.0033760071,0.0008392381,97.1334609985,108.9185180664,11.7850570679 +"2011-11-29 20:18:32.800",134163.796875,-164.7465670073,134.779083252,-165.10231058,0.1332431585,-179.1212055496,202.125579834,74.7059180471,202.0847930908,-44.9013220942,60.0033950806,0.0005594781,97.1436462402,108.9228591919,11.7792129517 +"2011-11-29 20:18:32.833",134164.875,-164.7052580232,134.8428497314,-165.0791562387,0.1221353561,177.3503287431,202.231262207,74.7275151052,202.1832580566,-44.875319564,60.0033988953,-0.0004068995,97.1440887451,108.9092102051,11.76512146 +"2011-11-29 20:18:32.866",134167.59375,-164.66542436,134.8453521729,-165.0392952547,0.1134274676,167.85431674,202.3348083496,74.7950656761,202.1020965576,-44.8588007515,60.0033798218,-0.0004577637,97.1335601807,108.9015960693,11.7680358887 +"2011-11-29 20:18:32.900",134165.515625,-164.6248940174,134.848236084,-164.9791486089,0.18787314,161.5034565856,202.2967376709,74.8628211527,202.0932006836,-44.7915233882,60.0033988953,0.0009918306,97.1435470581,108.9047164917,11.7611694336 +"2011-11-29 20:18:32.933",134164.390625,-164.5835986937,134.7936248779,-164.9522103428,0.1112930328,159.7579744224,202.19871521,74.866659719,202.0935821533,-44.7527484043,60.0034217834,0.0001017144,97.1414260864,108.904838562,11.7634124756 +"2011-11-29 20:18:32.966",134166.546875,-164.5428361247,134.7298736572,-164.9396837759,0.0496879742,128.0910590905,202.1852874756,74.8938575323,201.9867706299,-44.7600840275,60.0033988953,-0.0005849171,97.1248931885,108.9066390991,11.7817459106 +"2011-11-29 20:18:33.000",134165.5625,-164.5025380086,134.7444763184,-164.9036340374,0.1254227459,157.9576048591,202.2581939697,74.972090519,201.8763885498,-44.7576217443,60.0033760071,-0.0004831888,97.1321182251,108.9223937988,11.7902755737 +"2011-11-29 20:18:33.033",134164.546875,-164.461570534,134.7482452393,-164.8470254296,0.2068149447,-174.4236609856,202.2681274414,75.0059272762,201.7740936279,-44.6898252866,60.0033988953,0.000813785,97.1567687988,108.9197921753,11.7630233765 +"2011-11-29 20:18:33.066",134165.59375,-164.4199063801,134.7265930176,-164.7819610476,0.2179476768,-152.4457241612,202.2308197021,75.0381725992,201.7378845215,-44.6148707906,60.0034179688,0.000279732,97.1306915283,108.9063262939,11.7756347656 +"2011-11-29 20:18:33.100",134165.4375,-164.3791028299,134.8150482178,-164.726049119,0.2098569125,-129.2039291327,202.320602417,75.0913046408,201.9554138184,-44.5776257691,60.00340271,-0.0006103422,97.1446685791,108.9146575928,11.7699890137 +"2011-11-29 20:18:33.133",134165.78125,-164.3387773931,134.8708343506,-164.6809562101,0.1772757769,-105.271847866,202.3301086426,75.1451948333,202.1936187744,-44.5502367105,60.0033950806,-0.0001017004,97.1299591064,108.935508728,11.8055496216 +"2011-11-29 20:18:33.166",134165.96875,-164.2978782203,134.768737793,-164.6612169634,0.0632076338,156.8134252297,202.0765228271,75.2040642338,202.1814575195,-44.5153959155,60.0034065247,0.0003306242,97.1312255859,108.9094924927,11.7782669067 +"2011-11-29 20:18:33.200",134165.515625,-164.2575801042,134.6920013428,-164.6235553003,0.1796914637,136.9721491626,202.0647888184,75.2294110658,201.9188079834,-44.4329555323,60.0033950806,-0.0006866455,97.1443634033,108.9141921997,11.7698287964 +"2011-11-29 20:18:33.233",134165.6875,-164.2170770825,134.6973419189,-164.5946089586,0.1668328643,125.4736076571,202.1951293945,75.2385088778,201.8418731689,-44.382938057,60.0033798218,-0.0001271535,97.1415557861,108.9251861572,11.7836303711 +"2011-11-29 20:18:33.266",134166.921875,-164.1760276455,134.6754455566,-164.540677785,0.1221094579,78.20181377,202.2401428223,75.3161612985,201.8436737061,-44.3664192445,60.0033874512,0.0003306102,97.1339797974,108.9153747559,11.7813949585 +"2011-11-29 20:18:33.300",134167.625,-164.1348279445,134.6802520752,-164.4882492529,0.0849476531,50.457715135,202.2150878906,75.3557149239,201.8969421387,-44.3181366372,60.00340271,0.0005086139,97.1366043091,108.9223480225,11.7857437134 +"2011-11-29 20:18:33.333",134167.75,-164.0942839416,134.7559509277,-164.467745025,0.0371315889,159.7477974406,202.1168518066,75.3320005071,202.1234283447,-44.2613265388,60.0033950806,-0.0004577497,97.1345214844,108.9227600098,11.7882385254 +"2011-11-29 20:18:33.366",134166.71875,-164.0536579764,134.7503662109,-164.417269927,0.1461791247,-114.7582976042,202.1208648682,75.3526345086,202.0384674072,-44.218658347,60.0033988953,0.0003814744,97.1280212402,108.8964691162,11.768447876 +"2011-11-29 20:18:33.400",134166.28125,-164.0123080111,134.6984100342,-164.3649233572,0.1945338994,-112.1854336457,202.0830535889,75.429699533,201.8949432373,-44.2029557421,60.0034179688,0.0003814744,97.1241455078,108.9081573486,11.7840118408 +"2011-11-29 20:18:33.433",134166.125,-163.9714908007,134.7460784912,-164.3746358862,0.1197025478,145.6389898608,202.1585540771,75.4726819135,202.0043792725,-44.1958181945,60.0034103394,-0.0006103702,97.1677017212,108.9043731689,11.7366714478 +"2011-11-29 20:18:33.466",134166.703125,-163.9322172129,134.7147827148,-164.36719098,0.2006149143,98.0487315734,202.2359466553,75.4747992721,201.9370574951,-44.1525011347,60.0033874512,-0.0006866455,97.1320037842,108.9074859619,11.7754821777 +"2011-11-29 20:18:33.500",134168.1875,-163.8925884554,134.7143096924,-164.2923321067,0.1159531549,59.5055574454,202.2961425781,75.5207459547,201.9328918457,-44.0822560542,60.0033607483,-0.0003560493,97.1480941772,108.9059677124,11.7578735352 +"2011-11-29 20:18:33.533",134168.71875,-163.8518805279,134.7562561035,-164.2088945158,0.0198720824,-20.7373763957,202.2211151123,75.5880301482,202.0661315918,-44.008988615,60.003364563,"5.08502125740051E-05",97.1362609863,108.9020767212,11.7658157349 +"2011-11-29 20:18:33.566",134168.28125,-163.8105032419,134.7349700928,-164.1760139852,0.0175287537,-99.670027237,202.1244506836,75.6122568292,202.0756225586,-43.968693914,60.003364563,0,97.1233062744,108.9155731201,11.7922668457 +"2011-11-29 20:18:33.600",134167.890625,-163.7683882955,134.6799163818,-164.1552911912,0.0296518002,9.7003465036,202.1844329834,75.6424530955,201.8873138428,-43.9536265167,60.0033836365,0.0009918306,97.1448974609,108.9142990112,11.7694015503 +"2011-11-29 20:18:33.633",134168.046875,-163.7268880661,134.695892334,-164.096141753,0.0686378479,-5.9337870325,202.3030548096,75.7055025717,201.8506469727,-43.904568683,60.0034332275,0.0009918166,97.1298522949,108.9119873047,11.7821350098 +"2011-11-29 20:18:33.666",134167.921875,-163.686699233,134.7987823486,-164.0667309584,0.0397295207,147.5365393556,202.3248138428,75.7455274803,202.04737854,-43.8702845484,60.0034332275,"-2.79396772384644E-08",97.1468353271,108.9206390381,11.7738037109 +"2011-11-29 20:18:33.700",134166.34375,-163.6464967396,134.8126678467,-164.0374021262,0.1011244953,167.2430694508,202.296585083,75.7961186914,202.0546112061,-43.8569349437,60.0034255981,-0.0003560213,97.1341705322,108.9205169678,11.7863464355 +"2011-11-29 20:18:33.733",134165.203125,-163.60535168,134.759185791,-164.0189059739,0.1059787869,143.8537013551,202.2293243408,75.8239926934,201.9848632813,-43.8378650555,60.0034179688,"-2.54390761256218E-05",97.1371078491,108.9146957397,11.7775878906 +"2011-11-29 20:18:33.766",134166.28125,-163.5638514506,134.7437286377,-163.9863942734,0.1550430655,132.2346753127,202.1365356445,75.8602678281,202.0279998779,-43.7935302976,60.0034103394,-0.0004323386,97.1037826538,108.9302597046,11.8264770508 +"2011-11-29 20:18:33.800",134165.875,-163.5242363534,134.706817627,-163.8983394747,0.0685942397,130.2544395478,202.0716705322,75.957966854,202.0221710205,-43.736856803,60.0033760071,-0.0009409525,97.1495361328,108.8960113525,11.7464752197 +"2011-11-29 20:18:33.833",134163.03125,-163.4843890298,134.6802520752,-163.8248876203,0.0733544976,-14.0976965696,202.1639099121,76.0041389328,201.9418792725,-43.6641972506,60.0033760071,0.0005086418,97.1454467773,108.9214782715,11.7760314941 +"2011-11-29 20:18:33.866",134162.265625,-163.4423560457,134.7329711914,-163.8283983375,0.1022025347,-85.076884113,202.2783966064,75.9629528921,201.9029083252,-43.6478013815,60.0034141541,0.0010681199,97.1411514282,108.9394226074,11.7982711792 +"2011-11-29 20:18:33.900",134165.796875,-163.4006372502,134.7387695313,-163.8175519971,0.0756518617,-117.9051706605,202.3426513672,75.9898091959,201.8231048584,-43.6398237205,60.0034255981,-0.0001780177,97.1406784058,108.9139404297,11.7732620239 +"2011-11-29 20:18:33.933",134167.4375,-163.36091287,134.7136535645,-163.736668897,0.0210026484,35.4538249248,202.2837219238,76.0859441085,201.8790588379,-43.5569530353,60.0033760071,-0.0015767198,97.1509094238,108.9135894775,11.7626800537 +"2011-11-29 20:18:33.966",134165.578125,-163.3213797351,134.7252807617,-163.6539553061,0.0488383248,104.8914882915,202.1305389404,76.1811910965,202.0484161377,-43.4751751804,60.0033721924,0.0004831888,97.1500091553,108.8981933594,11.7481842041 +"2011-11-29 20:18:34.000",134165.78125,-163.2803439585,134.7636566162,-163.6283557571,0.0358877219,161.9342639373,202.106842041,76.2128626836,202.1560974121,-43.4638336513,60.00340271,0.0006357953,97.118927002,108.9102859497,11.7913589478 +"2011-11-29 20:18:34.033",134168.546875,-163.2396770122,134.7949676514,-163.5788095649,0.1125329658,-56.6989575834,202.2606964111,76.2285789489,202.1588134766,-43.4166028932,60.0033798218,-0.0008392381,97.1329650879,108.9181671143,11.7852020264 +"2011-11-29 20:18:34.066",134169.625,-163.1996384433,134.7140960693,-163.5316129577,0.0828156695,-68.4467053709,202.199005127,76.2866287267,201.9524230957,-43.3730228712,60.0033493042,-0.0007120846,97.1289749146,108.9157180786,11.7867431641 +"2011-11-29 20:18:34.100",134166.75,-163.1589031951,134.6399841309,-163.5370361279,0.1269385666,127.3450794897,202.1083526611,76.3335589565,201.7676696777,-43.3737195505,60.0033683777,0.0009409525,97.1435852051,108.9228591919,11.7792739868 +"2011-11-29 20:18:34.133",134164.625,-163.1177854563,134.6613616943,-163.5189907681,0.1049878374,134.7563948147,202.0841674805,76.3343171075,201.8517456055,-43.3458831145,60.0033988953,0.0007120846,97.1426239014,108.8929595947,11.7503356934 +"2011-11-29 20:18:34.166",134165.984375,-163.076831642,134.735458374,-163.460961481,0.0939195231,179.3661088125,202.0900421143,76.3639464681,202.0286102295,-43.2779432228,60.0033988953,-0.0001017423,97.1277618408,108.9252624512,11.7975006104 +"2011-11-29 20:18:34.200",134167.328125,-163.0363149599,134.7007751465,-163.4276301578,0.1151335984,121.3637052486,202.1410980225,76.3960483572,201.9341430664,-43.2195348602,60.0033950806,0.0001017144,97.1350631714,108.917388916,11.7823257446 +"2011-11-29 20:18:34.233",134166.296875,-162.9957572966,134.651184082,-163.4046397411,0.1276842207,105.8167671881,202.0353851318,76.4363669639,201.921875,-43.2093339726,60.0033988953,0.0002034428,97.1574020386,108.9166564941,11.7592544556 +"2011-11-29 20:18:34.266",134166.96875,-162.9546668785,134.6968383789,-163.3698877386,0.1406074017,143.6472657177,202.1134033203,76.4844378352,201.8940887451,-43.1921799525,60.0034065247,"7.62892886996269E-05",97.1268997192,108.9137115479,11.7868118286 +"2011-11-29 20:18:34.300",134169.859375,-162.9130983473,134.7418670654,-163.317909999,0.059841767,142.0797782843,202.3025360107,76.5256511967,201.8900604248,-43.1472919493,60.0034065247,0.0001017423,97.1410293579,108.9201049805,11.7790756226 +"2011-11-29 20:18:34.333",134170.625,-162.8717074009,134.7531433105,-163.2855349023,0.1122234166,48.66631361,202.2786102295,76.5258492722,202.078414917,-43.0798745671,60.0034179688,0.0002288818,97.1272659302,108.9225311279,11.7952651978 +"2011-11-29 20:18:34.366",134168.09375,-162.8313956244,134.7572937012,-163.2314124833,0.0817365199,138.451431533,202.1609039307,76.5656214637,202.0708465576,-43.0086356941,60.0034179688,0,97.1313858032,108.9206542969,11.7892684937 +"2011-11-29 20:18:34.400",134165,-162.7910565272,134.7566833496,-163.1506386662,0.2066543102,-169.2542186519,202.1748046875,76.670410226,201.8918304443,-42.9651820306,60.0034141541,-0.0001525786,97.1354827881,108.9314956665,11.7960128784 +"2011-11-29 20:18:34.433",134164.375,-162.7509906375,134.7145233154,-163.0937978319,0.1403826326,-152.0971659475,202.1581115723,76.7436981558,201.8491668701,-42.9386262551,60.0033912659,-0.0008392381,97.1459197998,108.9166564941,11.7707366943 +"2011-11-29 20:18:34.466",134166.875,-162.7104739553,134.6585235596,-163.0870769258,0.0856863111,-112.8696341855,202.0853729248,76.7256254752,201.8373718262,-42.9182415555,60.0033683777,-0.0003560493,97.1516571045,108.8980255127,11.7463684082 +"2011-11-29 20:18:34.500",134168.59375,-162.6695611222,134.7442932129,-163.0662585092,0.1240338758,-147.4618580672,202.2496185303,76.7407133631,201.8659515381,-42.8823318359,60.0033683777,0,97.1452789307,108.9018707275,11.7565917969 +"2011-11-29 20:18:34.533",134167.25,-162.6294269306,134.8587493896,-162.9751437857,0.2169630229,-148.9071124352,202.3663330078,76.8537256731,202.0011138916,-42.8186369068,60.003364563,"-2.79396772384644E-08",97.1451339722,108.9208831787,11.7757492065 +"2011-11-29 20:18:34.566",134164.671875,-162.5891014938,134.8060150146,-162.9142731398,0.2065442204,-161.1047238022,202.2419128418,76.9128819415,201.9715118408,-42.743036958,60.003364563,0.0001525646,97.1249084473,108.8979949951,11.7730865479 +"2011-11-29 20:18:34.600",134164.6875,-162.5476422455,134.7059020996,-162.9231114046,0.1493121237,160.0243654604,202.1651916504,76.8880883548,201.8358459473,-42.7084318046,60.0033874512,0.0009155553,97.1518783569,108.9437332153,11.7918548584 +"2011-11-29 20:18:34.633",134167.78125,-162.5067567332,134.6365966797,-162.9167593286,0.1368422806,103.3235364052,202.0907592773,76.9116661678,201.8302459717,-42.7061846723,60.0033988953,-0.0002034428,97.1480712891,108.9123153687,11.7642440796 +"2011-11-29 20:18:34.666",134167.890625,-162.4670186926,134.5773773193,-162.8680737402,0.1241775826,59.4443521203,202.0487670898,76.9809106256,201.7768096924,-42.6931048601,60.0033721924,-0.0007120846,97.1428451538,108.9137496948,11.770904541 +"2011-11-29 20:18:34.700",134165.578125,-162.4264337085,134.5954437256,-162.7951136595,0.0131280441,-111.2218032369,202.1301727295,77.0286126668,201.649887085,-42.6213366474,60.0033836365,0.0008646771,97.153717041,108.91822052,11.764503479 +"2011-11-29 20:18:34.733",134164.25,-162.3849061584,134.7041931152,-162.7663449027,0.1801652163,-165.2506213077,202.1792755127,77.0520197251,201.755355835,-42.5820801351,60.0034141541,0.0006357953,97.1386566162,108.9195861816,11.7809295654 +"2011-11-29 20:18:34.766",134166.265625,-162.3441572498,134.7378845215,-162.7454035428,0.188690424,174.3628859624,202.1072540283,77.0845177651,201.9345703125,-42.5543290765,60.0033950806,-0.0007120986,97.1361694336,108.8906707764,11.7545013428 +"2011-11-29 20:18:34.800",134168.890625,-162.3033400393,134.6867980957,-162.7251725224,0.1166008264,129.5163010042,202.138168335,77.1081433895,201.8802185059,-42.527626452,60.0033912659,0.0003814884,97.1255493164,108.928604126,11.8030548096 +"2011-11-29 20:18:34.833",134168.515625,-162.2625091684,134.6901855469,-162.682552142,0.0441596881,78.7631801876,202.2227783203,77.1197068997,201.8714447021,-42.4734562216,60.0034065247,0,97.1284561157,108.9210357666,11.7925796509 +"2011-11-29 20:18:34.866",134166.578125,-162.2226481844,134.7968597412,-162.598062702,0.0608316101,-171.5508424396,202.3348236084,77.1855772441,201.9985961914,-42.3786258752,60.0033988953,-0.0003560213,97.1309814453,108.9172515869,11.7862701416 +"2011-11-29 20:18:34.900",134167.234375,-162.1829374646,134.8657684326,-162.5360582447,0.1744561493,-156.1394494832,202.4206390381,77.2692743822,202.0055847168,-42.3465000804,60.0033683777,-0.0009155273,97.1455383301,108.9031066895,11.7575683594 +"2011-11-29 20:18:34.933",134165.6875,-162.1421065937,134.7811584473,-162.5179719038,0.1408860087,-158.9023293044,202.3192749023,77.2828527983,201.8860015869,-42.3208937012,60.0033683777,0.0003306242,97.1264343262,108.9094009399,11.7829666138 +"2011-11-29 20:18:34.966",134163.375,-162.1006746662,134.716293335,-162.4898725055,0.0829108506,-164.80588037,202.2449035645,77.3255483108,201.8232574463,-42.3039445868,60.0033798218,0.0001271535,97.1589355469,108.8974761963,11.7385406494 +"2011-11-29 20:18:35.000",134163.890625,-162.0592700595,134.7002563477,-162.4524703896,0.0555278771,131.888753552,202.1312103271,77.3966300895,201.9481964111,-42.2870774347,60.0033950806,0.0007120706,97.1248550415,108.9192504883,11.7943954468 +"2011-11-29 20:18:35.033",134164.921875,-162.0180157169,134.7080993652,-162.4157103115,0.0682803169,34.1839971355,202.1895446777,77.3787554844,202.0028381348,-42.2044321457,60.0034294128,0.0010172417,97.1434020996,108.9266662598,11.7832641602 +"2011-11-29 20:18:35.066",134164.765625,-161.9772668083,134.6999359131,-162.3754668369,0.049672313,-85.4425861015,202.2559814453,77.3712900876,201.8363647461,-42.1354096691,60.0034332275,0,97.1431655884,108.9106750488,11.7675094604 +"2011-11-29 20:18:35.100",134166.625,-161.9369823526,134.680267334,-162.3332289471,0.1187935993,-144.7068329636,202.1940002441,77.4402818284,201.736618042,-42.1164319884,60.0034255981,-0.0004068995,97.139755249,108.9192276001,11.7794723511 +"2011-11-29 20:18:35.133",134166.65625,-161.8972716328,134.760925293,-162.2900211704,0.1141022891,-136.8065034148,202.2197265625,77.523562325,201.9620361328,-42.1172857621,60.0033950806,-0.0010426668,97.1424789429,108.9260559082,11.7835769653 +"2011-11-29 20:18:35.166",134164.828125,-161.8569735167,134.8073425293,-162.2378931667,0.1400380731,-146.7045540128,202.2675018311,77.5985373115,202.0211791992,-42.0847638164,60.0033721924,-0.0003814744,97.1439819336,108.9145965576,11.770614624 +"2011-11-29 20:18:35.200",134164.5,-161.8154869476,134.7281036377,-162.1781699926,0.1549102217,-174.4885477828,202.1491241455,77.6698239959,201.8853607178,-42.0165643775,60.0033721924,0,97.1500778198,108.9203109741,11.7702331543 +"2011-11-29 20:18:35.233",134164.890625,-161.7740686805,134.6944274902,-162.1402078012,0.0769574717,-169.9065426988,202.0553436279,77.7084418854,201.9530944824,-41.9858319413,60.0033874512,0.0005594781,97.1551437378,108.9285736084,11.7734298706 +"2011-11-29 20:18:35.266",134165.484375,-161.7331695078,134.7548980713,-162.0916997977,0.15074417,-136.4375912374,202.1979980469,77.7297520757,201.9325714111,-41.9314328997,60.00340271,0.0006357813,97.1417617798,108.9062576294,11.7644958496 +"2011-11-29 20:18:35.300",134163.375,-161.6924205992,134.7930297852,-162.0462517189,0.1985771805,-170.4440512657,202.321105957,77.7757055884,201.863571167,-41.8595622341,60.0034179688,"-2.79396772384644E-08",97.1268920898,108.8959197998,11.76902771 +"2011-11-29 20:18:35.333",134161.4375,-161.6522727472,134.8242340088,-162.0082622068,0.1733834893,153.9689656291,202.3746643066,77.8403874798,201.9750976563,-41.8224367409,60.0034179688,"-7.62892886996269E-05",97.1466827393,108.9195556641,11.7728729248 +"2011-11-29 20:18:35.366",134163.828125,-161.6120019519,134.7969970703,-161.9698765436,0.034623675,112.9225066798,202.2707366943,77.8689718215,202.1190032959,-41.7988247769,60.0033874512,-0.0007120706,97.1599884033,108.9064483643,11.7464599609 +"2011-11-29 20:18:35.400",134165.078125,-161.5710481376,134.7587280273,-161.9503831837,0.0381100737,-126.9583541789,202.1031494141,77.8837455207,202.1435089111,-41.7907002669,60.0033874512,0,97.1467895508,108.919883728,11.7730941772 +"2011-11-29 20:18:35.433",134164.03125,-161.5299577196,134.7606048584,-161.9021347274,0.0290505309,-114.0169010603,202.2265777588,77.9076102016,202.0379638672,-41.7177640919,60.0033874512,"5.08502125740051E-05",97.1264801025,108.9103546143,11.7838745117 +"2011-11-29 20:18:35.466",134162.578125,-161.4898918299,134.784286499,-161.8386276285,0.0898261145,167.5172469045,202.3139343262,77.9707416401,201.9640350342,-41.6346850859,60.0033721924,-0.0004068855,97.1421051025,108.9187011719,11.7765960693 +"2011-11-29 20:18:35.500",134163.59375,-161.4499898648,134.7738342285,-161.7737544918,0.2114211768,-170.1364468663,202.1834869385,78.0877154599,201.9300537109,-41.6263181042,60.0033721924,0.0001017144,97.133026123,108.9271850586,11.7941589355 +"2011-11-29 20:18:35.533",134165.703125,-161.4088448052,134.675567627,-161.7371993194,0.0617153235,-148.1613650609,202.1043395996,78.113390141,201.8637084961,-41.5917197809,60.0033950806,0.000534039,97.1485137939,108.9014892578,11.7529754639 +"2011-11-29 20:18:35.566",134165.84375,-161.3681232174,134.6022491455,-161.7528404526,0.1211414114,41.6951493355,202.0643310547,78.0698818359,201.855682373,-41.5616976844,60.0033874512,-0.0003814884,97.1620254517,108.9142684937,11.752243042 +"2011-11-29 20:18:35.600",134164.296875,-161.3269098559,134.6011505127,-161.7330055832,0.1315233558,57.1132392924,201.9939727783,78.0990467437,201.9139251709,-41.5415622868,60.0033874512,0.0001271674,97.1473693848,108.908493042,11.7611236572 +"2011-11-29 20:18:35.633",134165.578125,-161.2851637397,134.6655883789,-161.6682553899,0.0381600745,50.9399367356,202.0675506592,78.1500204455,201.9634552002,-41.4805960182,60.0034179688,0.001093545,97.1376113892,108.9119644165,11.7743530273 +"2011-11-29 20:18:35.666",134167.75,-161.2444967934,134.7576293945,-161.6131221029,0.1193244159,-173.9403704603,202.2328796387,78.2123664122,201.9254150391,-41.4311078826,60.0034255981,0,97.1409683228,108.9120025635,11.7710342407 +"2011-11-29 20:18:35.700",134166.84375,-161.2042396584,134.8315582275,-161.5887383276,0.3148454726,-174.5512079382,202.313079834,78.2375219989,201.8769073486,-41.3945697856,60.0034103394,-0.0006103562,97.1569290161,108.9149398804,11.7580108643 +"2011-11-29 20:18:35.733",134167.125,-161.1632995045,134.8184509277,-161.5512679098,0.2707233131,-154.2418453468,202.290222168,78.2436759994,201.8990783691,-41.3555728206,60.0034141541,0.0003051711,97.1367492676,108.9127578735,11.776008606 +"2011-11-29 20:18:35.766",134168.25,-161.1223866714,134.7516326904,-161.4886350751,0.1379662901,-117.1735617777,202.3079071045,78.3088906456,201.8504638672,-41.3130685534,60.0034065247,-0.0005849311,97.1483078003,108.9274902344,11.7791824341 +"2011-11-29 20:18:35.800",134168.21875,-161.0818290081,134.6771087646,-161.4416023925,0.1267182976,104.2117888464,202.2276153564,78.414082389,201.8149871826,-41.2611249647,60.0033912659,-0.0005086279,97.1538619995,108.9148101807,11.7609481812 +"2011-11-29 20:18:35.833",134165.703125,-161.0412986656,134.6946868896,-161.3781635955,0.1721171439,105.8723854185,202.21434021,78.4656366568,201.8800201416,-41.1728755056,60.0033874512,0.0003560493,97.1357269287,108.9101715088,11.7744445801 +"2011-11-29 20:18:35.866",134163.296875,-160.9997028135,134.7263793945,-161.3349148376,0.1033174619,-156.1084404244,202.1803894043,78.4508971086,201.8986816406,-41.1230936718,60.0034065247,0.0004577637,97.1303024292,108.9126281738,11.7823257446 +"2011-11-29 20:18:35.900",134163.734375,-160.9585167729,134.7148895264,-161.3152165721,0.1289021969,-130.6590462939,202.1926727295,78.4818242052,201.8434295654,-41.1305419931,60.0034103394,-0.0001525925,97.1403503418,108.9052734375,11.7649230957 +"2011-11-29 20:18:35.933",134166.421875,-160.9186557889,134.6376800537,-161.2716672859,0.0537871681,-52.6509161982,202.1445007324,78.5819342878,201.7869262695,-41.139458805,60.0033950806,-0.0004068995,97.1370315552,108.9084854126,11.7714538574 +"2011-11-29 20:18:35.966",134167.46875,-160.8791772955,134.6202087402,-161.2129413194,0.1639854312,-18.3951269444,202.1566925049,78.6424019526,201.8356933594,-41.0961690661,60.0033760071,-0.0006103562,97.131187439,108.9050979614,11.7739105225 +"2011-11-29 20:18:36.000",134165.828125,-160.8386879341,134.691696167,-161.1561687871,0.1217822731,-47.5995370994,202.1675415039,78.6706925961,201.9577789307,-41.0145175696,60.0033760071,"-1.39698386192322E-08",97.1399612427,108.9181137085,11.7781524658 +"2011-11-29 20:18:36.033",134165,-160.7976248368,134.7517700195,-161.121362143,0.0968797579,-111.7964065612,202.1486206055,78.6921052391,202.0454864502,-40.9555662069,60.0033683777,"-2.54390761256218E-05",97.1442489624,108.9193115234,11.775062561 +"2011-11-29 20:18:36.066",134165.546875,-160.7570398527,134.7429656982,-161.0764331587,0.1024669558,-94.6050663071,202.1840209961,78.7500320735,202.0055847168,-40.9293656013,60.0033607483,-0.0002288818,97.1338348389,108.9166870117,11.7828521729 +"2011-11-29 20:18:36.100",134165.953125,-160.7161816611,134.7108764648,-161.0253570041,0.0646226332,-26.4052193407,202.2999572754,78.8328959285,201.879196167,-40.8963587121,60.0033874512,0.0010426808,97.1233062744,108.91381073,11.7905044556 +"2011-11-29 20:18:36.133",134165.375,-160.6753371299,134.6978607178,-160.9955363982,0.1483157873,17.9617104604,202.2986297607,78.8383600798,201.9449157715,-40.8299078017,60.0033988953,0.0001780037,97.1352081299,108.9080352783,11.7728271484 +"2011-11-29 20:18:36.166",134163.046875,-160.6346292024,134.7162475586,-160.9918754168,0.143864572,3.3657900107,202.2518615723,78.8089083041,202.0377197266,-40.803454479,60.0033988953,"2.54251062870026E-05",97.139175415,108.9122772217,11.7731018066 +"2011-11-29 20:18:36.200",134162.75,-160.5938256523,134.7219390869,-160.9461131493,0.1135220826,-57.6719521816,202.2559967041,78.8311747208,201.9385528564,-40.7543966453,60.0033950806,"-7.62753188610077E-05",97.1296768188,108.9065322876,11.7768554688 +"2011-11-29 20:18:36.233",134164.390625,-160.5528308569,134.775390625,-160.8925508058,0.1018223539,-120.5725097955,202.3141174316,78.8847165737,201.9372253418,-40.6880857537,60.00340271,0.0001271395,97.1419296265,108.9102249146,11.7682952881 +"2011-11-29 20:18:36.266",134163.828125,-160.5117950804,134.8208770752,-160.8726476346,0.1153751165,171.502512021,202.4161529541,78.9515089936,201.9463195801,-40.6812214136,60.0034065247,"2.54251062870026E-05",97.1449127197,108.9004974365,11.7555847168 +"2011-11-29 20:18:36.300",134163.75,-160.4714013416,134.7667694092,-160.8499987273,0.160578236,174.0318266933,202.3248291016,78.9968272988,201.8316802979,-40.6771062246,60.00340271,-0.0001017144,97.1455917358,108.9157104492,11.7701187134 +"2011-11-29 20:18:36.333",134165.921875,-160.4305704708,134.7205200195,-160.795971931,0.136921823,-129.1945854339,202.0892028809,78.9893892228,201.9583282471,-40.6015370117,60.0034065247,0.0001780316,97.1360473633,108.9165420532,11.7804946899 +"2011-11-29 20:18:36.366",134167,-160.3893980904,134.7395935059,-160.7307982659,0.1769560426,-99.1697500313,202.0307006836,79.0225497912,202.1069335938,-40.5283481196,60.0034141541,0.0002288958,97.135345459,108.9142150879,11.7788696289 +"2011-11-29 20:18:36.400",134167.28125,-160.3486765026,134.737411499,-160.6698046766,0.1233531609,-94.5592972094,202.1538391113,79.1081388917,202.0110778809,-40.4795703237,60.0034065247,-0.0005086279,97.1460800171,108.9146118164,11.7685317993 +"2011-11-29 20:18:36.433",134165.671875,-160.308719896,134.69090271,-160.6249439942,0.111702852,-27.7860240437,202.2061309814,79.1686407073,201.9449157715,-40.4414749436,60.0033874512,-0.0005340669,97.1368408203,108.9197311401,11.7828903198 +"2011-11-29 20:18:36.466",134163.59375,-160.2687769497,134.7082519531,-160.6041665587,0.0622628257,-4.8175966646,202.1891326904,79.2036932382,201.9946136475,-40.4190548476,60.0033760071,-0.0003051851,97.1535491943,108.919303894,11.7657546997 +"2011-11-29 20:18:36.500",134163.8125,-160.2281236638,134.748916626,-160.5705073865,0.1749843806,-120.9841516364,202.1865234375,79.2256113152,201.9275817871,-40.3979871291,60.0033721924,"-7.63032585382462E-05",97.1483840942,108.9196929932,11.7713088989 +"2011-11-29 20:18:36.533",134164.328125,-160.187115208,134.7115020752,-160.5528581777,0.1519946456,-125.5559797385,202.1789398193,79.2574741477,201.8329772949,-40.3876154869,60.0033721924,0,97.1347198486,108.9214630127,11.7867431641 +"2011-11-29 20:18:36.566",134165.328125,-160.146243356,134.7803955078,-160.5355231576,0.0509760492,174.1212885111,202.3546447754,79.3138505291,201.9419555664,-40.3783810711,60.0033760071,0.0003814604,97.1560897827,108.9243927002,11.7683029175 +"2011-11-29 20:18:36.600",134164.890625,-160.1050846361,134.8391571045,-160.4715516058,0.077448085,-107.0988005255,202.5014190674,79.3423255878,201.971786499,-40.3025728015,60.00340271,0.0008901022,97.1513671875,108.9199295044,11.7685623169 +"2011-11-29 20:18:36.633",134162.671875,-160.0642264444,134.7234954834,-160.3688938626,0.1580817103,-72.7647987755,202.2940216064,79.4358786888,201.8717041016,-40.2180731162,60.0034103394,0,97.1228790283,108.9297637939,11.8068847656 +"2011-11-29 20:18:36.666",134162.453125,-160.0237780642,134.6461029053,-160.2950458573,0.1944588274,-65.9260103973,202.1041717529,79.5124382792,201.850692749,-40.1573185835,60.0034103394,"-7.63032585382462E-05",97.1521148682,108.9225692749,11.7704544067 +"2011-11-29 20:18:36.700",134163.515625,-159.9834116462,134.6596221924,-160.2987614802,0.0875200406,-92.5495550273,202.1480712891,79.5082103921,201.7997283936,-40.1283995626,60.0033950806,-0.0004831888,97.150894165,108.9115753174,11.7606811523 +"2011-11-29 20:18:36.733",134164.984375,-159.9423485489,134.7589569092,-160.3438270683,0.109084934,-170.3765689967,202.1987457275,79.4805822769,201.9726715088,-40.1626324707,60.0033988953,0.0001780177,97.1416397095,108.9108276367,11.7691879272 +"2011-11-29 20:18:36.766",134165.78125,-159.9013264327,134.8256988525,-160.3106186886,0.0789236948,-163.2455646353,202.2766876221,79.5403259416,202.1229858398,-40.1602999611,60.0033950806,-0.0001780177,97.1430130005,108.92137146,11.7783584595 +"2011-11-29 20:18:36.800",134166.25,-159.8607687694,134.7864227295,-160.2267439656,0.1562705189,166.7734119831,202.2233886719,79.6346918352,202.0062255859,-40.0638815957,60.0033874512,-0.0002543209,97.1381149292,108.9214401245,11.7833251953 +"2011-11-29 20:18:36.833",134166.1875,-159.8200062005,134.7356262207,-160.169602603,0.1916223019,166.4542235828,202.1785888672,79.6717729322,201.8701171875,-39.9808025897,60.0033950806,0.0003051711,97.1340637207,108.9260253906,11.7919616699 +"2011-11-29 20:18:36.866",134163.796875,-159.7792846126,134.6631317139,-160.1155348255,0.0775945485,-150.750935662,202.1928405762,79.7121530106,201.7218017578,-39.946402342,60.0033988953,"5.08641824126244E-05",97.1267242432,108.904335022,11.7776107788 +"2011-11-29 20:18:36.900",134162.65625,-159.7390821192,134.6146697998,-160.0667809352,0.07820566,-35.6995034142,202.157043457,79.7413862202,201.7331542969,-39.8928741494,60.0033912659,-0.0003560353,97.1407394409,108.9131622314,11.7724227905 +"2011-11-29 20:18:36.933",134164.546875,-159.6987566823,134.7396240234,-160.0417141409,0.1143516004,-44.8481593168,202.2801818848,79.7381692011,201.9900054932,-39.8506123539,60.0033798218,-0.000279732,97.1408691406,108.9136047363,11.7727355957 +"2011-11-29 20:18:36.966",134166.53125,-159.6583356228,134.7952575684,-160.0249665171,0.0408340804,15.9196427005,202.4622192383,79.7953515448,201.9662322998,-39.8456570517,60.0033760071,"-7.63032585382462E-05",97.1412658691,108.9220352173,11.7807693481 +"2011-11-29 20:18:37.000",134166.5625,-159.6174364501,134.7595825195,-159.9965529301,0.1501219273,111.1084220966,202.4285430908,79.8810909095,201.8486175537,-39.8312112016,60.0033721924,0,97.1490249634,108.9234695435,11.7744445801 +"2011-11-29 20:18:37.033",134165.875,-159.5760318433,134.7493438721,-159.9480449267,0.1500513256,92.3830350153,202.3400421143,79.9461962727,201.9545288086,-39.8015067089,60.0033798218,0.0004323386,97.1170043945,108.914642334,11.7976379395 +"2011-11-29 20:18:37.066",134166.609375,-159.5351190102,134.7560272217,-159.8791146576,0.0710950792,-15.320281648,202.3115997314,79.9858182,202.0154266357,-39.7555258754,60.0033950806,0.0002288539,97.1400375366,108.9122619629,11.7722244263 +"2011-11-29 20:18:37.100",134168.40625,-159.4943701016,134.7656555176,-159.8171921625,0.1608465165,-94.5479317747,202.3856506348,79.9993283142,201.8456878662,-39.6746905866,60.0034065247,0.0004069135,97.139251709,108.9093856812,11.7701339722 +"2011-11-29 20:18:37.133",134167,-159.4533343251,134.6812896729,-159.7753231029,0.0893111452,-29.2806623869,202.3395843506,79.9981603519,201.7652130127,-39.5674429562,60.0034179688,0.0003560213,97.130821228,108.9186401367,11.7878189087 +"2011-11-29 20:18:37.166",134164.9375,-159.4128449637,134.6441040039,-159.7399563834,0.145976454,28.5758859023,202.1477813721,80.0676575267,201.9313659668,-39.541365294,60.0034103394,-0.0004323386,97.145690918,108.9188995361,11.7732086182 +"2011-11-29 20:18:37.200",134163.65625,-159.3722189985,134.6740570068,-159.6982922295,0.099530071,33.136037796,202.1912841797,80.1199631153,201.9300537109,-39.5100318012,60.0033988953,-0.0001779897,97.1558227539,108.902305603,11.7464828491 +"2011-11-29 20:18:37.233",134162.5,-159.3315247314,134.6808624268,-159.6868721532,0.0574505441,62.3430297625,202.2279205322,80.1012142461,201.8602600098,-39.4636548167,60.0033950806,-0.0001271674,97.1325302124,108.9098052979,11.7772750854 +"2011-11-29 20:18:37.266",134163.734375,-159.2911992946,134.6808166504,-159.6704660388,0.0623938516,108.7509549839,202.2336273193,80.1180916435,201.8135528564,-39.4408658905,60.0033836365,-0.0004831888,97.1390457153,108.9032287598,11.7641830444 +"2011-11-29 20:18:37.300",134166.828125,-159.2505186879,134.7102355957,-159.5885720706,0.0882130042,-76.3186554837,202.3133087158,80.2262886701,201.8089599609,-39.4278407198,60.0033798218,"-5.08781522512436E-05",97.1442565918,108.9036407471,11.7593841553 +"2011-11-29 20:18:37.333",134168.78125,-159.2094829113,134.7139434814,-159.515325122,0.2824039161,-60.5407067651,202.2900085449,80.3054983739,201.8972015381,-39.4149521528,60.0033874512,0.0004323246,97.1346817017,108.9103088379,11.7756271362 +"2011-11-29 20:18:37.366",134167.171875,-159.1681875876,134.7419433594,-159.4977442151,0.2006050795,-55.5479989913,202.3203735352,80.3033468644,201.955657959,-39.353685356,60.0033988953,0.00027976,97.1379470825,108.9130554199,11.7751083374 +"2011-11-29 20:18:37.400",134165.4375,-159.1278075092,134.7505950928,-159.5181938014,0.0473733544,102.7836509325,202.3843994141,80.2943515052,201.8760986328,-39.3169116175,60.0033950806,-0.0001525786,97.1396331787,108.9026565552,11.7630233765 +"2011-11-29 20:18:37.433",134164.671875,-159.0877006384,134.68309021,-159.4739341756,0.125001654,76.330724428,202.2720794678,80.3492184148,201.8496856689,-39.2673620101,60.0033950806,"-2.5453045964241E-05",97.1339492798,108.9065246582,11.7725753784 +"2011-11-29 20:18:37.466",134163.6875,-159.0472522582,134.692565918,-159.3879284336,0.1253381819,-5.8748173136,202.2184143066,80.4303132508,201.9733734131,-39.2217807427,60.0033874512,-0.0002034428,97.1513366699,108.9058532715,11.7545166016 +"2011-11-29 20:18:37.500",134163.421875,-159.0056564061,134.7101593018,-159.3577663182,0.1691512465,-53.059556171,202.2173461914,80.4616774795,201.9621582031,-39.2230238371,60.0033950806,"7.62892886996269E-05",97.1427307129,108.9157104492,11.7729797363 +"2011-11-29 20:18:37.533",134165.578125,-158.9640742144,134.6652069092,-159.3660445075,0.0715622306,-9.4208363797,202.1908416748,80.4571354037,201.868560791,-39.1990908543,60.0033912659,-0.0001525786,97.1382369995,108.9088287354,11.7705917358 +"2011-11-29 20:18:37.566",134166.15625,-158.9241312682,134.7009124756,-159.3275768821,0.0336652063,-32.8383610765,202.2059173584,80.4896744249,201.9187927246,-39.1522391717,60.0033836365,0,97.1344146729,108.9185333252,11.7841186523 +"2011-11-29 20:18:37.600",134162.5625,-158.8843249257,134.772277832,-159.2610508396,0.1639339775,-116.0894331715,202.3365325928,80.5723743554,201.862197876,-39.1259053773,60.0033760071,-0.0003560493,97.1372909546,108.9149017334,11.7776107788 +"2011-11-29 20:18:37.633",134160.796875,-158.8439448473,134.8306121826,-159.2266540069,0.2428865582,-127.2831979758,202.4151153564,80.6133623206,201.8719024658,-39.1026998096,60.0033760071,0,97.1545028687,108.9130630493,11.7585601807 +"2011-11-29 20:18:37.666",134162.234375,-158.8029363916,134.7405090332,-159.1824080415,0.1089276671,-134.9217127134,202.1821594238,80.6715008908,201.9412841797,-39.0488027869,60.0033721924,0,97.1435852051,108.9050140381,11.761428833 +"2011-11-29 20:18:37.700",134163.4375,-158.7621191811,134.650100708,-159.1131089421,0.0590605699,138.2746252562,202.0925750732,80.720288932,201.8324432373,-38.9314089105,60.0033683777,-0.0001271674,97.138381958,108.9109115601,11.7725296021 +"2011-11-29 20:18:37.733",134165.0625,-158.7212883102,134.628692627,-159.0514733151,0.0676034763,18.4066938697,202.1913299561,80.731442631,201.7651672363,-38.8347514885,60.0033874512,0.0008392381,97.1511383057,108.9236450195,11.7725067139 +"2011-11-29 20:18:37.766",134166.46875,-158.6803618167,134.6715545654,-159.0046591985,0.1007048339,-54.5512285046,202.2430419922,80.7881946728,201.799041748,-38.8247042802,60.00340271,0.0003051711,97.1423492432,108.8796157837,11.7372665405 +"2011-11-29 20:18:37.800",134166.859375,-158.639285059,134.72265625,-158.9824884045,0.0652759075,-150.5314133821,202.2202758789,80.869262188,201.8844146729,-38.8367151679,60.0034103394,0.0002034567,97.1500167847,108.9155883789,11.7655715942 +"2011-11-29 20:18:37.833",134166.046875,-158.5985771316,134.7367095947,-158.9654948938,0.0941890255,126.293175716,202.139541626,80.9269909469,202.0467224121,-38.8321423562,60.0034065247,-0.0002034567,97.1449050903,108.9113464355,11.7664413452 +"2011-11-29 20:18:37.866",134165.65625,-158.5585658834,134.6955566406,-158.8959089265,0.0290705077,-117.6435880757,202.1318969727,80.9903682722,201.9336853027,-38.7875104851,60.00340271,-0.0002288958,97.160774231,108.9281463623,11.7673721313 +"2011-11-29 20:18:37.900",134164.96875,-158.5177350126,134.7431030273,-158.82887745,0.182022512,-98.2686841552,202.3955383301,80.9798975922,201.7461395264,-38.6820011379,60.0033988953,"5.08502125740051E-05",97.1421508789,108.9013061523,11.7591552734 +"2011-11-29 20:18:37.933",134164.796875,-158.4766172738,134.7813415527,-158.7861341262,0.2146588415,-111.3263461123,202.4386291504,80.9822130263,201.7630004883,-38.5986147734,60.00340271,"7.63032585382462E-05",97.1408081055,108.9240570068,11.7832489014 +"2011-11-29 20:18:37.966",134165.203125,-158.4358820256,134.7178497314,-158.7483358593,0.1565297693,-123.1326696021,202.2177276611,81.0364515585,201.8111419678,-38.5585625441,60.0033950806,-0.0003306242,97.1360778809,108.9103469849,11.774269104 +"2011-11-29 20:18:38.000",134165.15625,-158.3952150792,134.7046508789,-158.7357819716,0.1204173937,-152.4012049882,202.074005127,81.0763945048,201.92237854,-38.551588921,60.0033912659,0,97.1379776001,108.9128570557,11.7748794556 +"2011-11-29 20:18:38.033",134165.34375,-158.3548623216,134.728515625,-158.7267661219,0.0827944055,-156.4432562975,202.0936279297,81.1311179804,202.0104217529,-38.5855076404,60.0033950806,0.0001017144,97.1472930908,108.9204559326,11.7731628418 +"2011-11-29 20:18:38.066",134165.96875,-158.3134713752,134.7312316895,-158.6765778919,0.0359580554,-120.4416843522,202.1300506592,81.2006902873,202.0362701416,-38.5600788461,60.0034065247,"2.54390761256218E-05",97.1394882202,108.9239044189,11.7844161987 +"2011-11-29 20:18:38.100",134165.671875,-158.2726541648,134.7095947266,-158.6169776612,0.0839281008,-122.7589489715,202.1022644043,81.2320681764,201.9597625732,-38.4798616894,60.0033988953,-0.0004323386,97.1448364258,108.9276885986,11.7828521729 +"2011-11-29 20:18:38.133",134166.546875,-158.2330663883,134.6962127686,-158.5820753945,0.1227663979,-149.6268914303,202.0832977295,81.2369585918,201.8860473633,-38.406334703,60.0033836365,-0.0005340669,97.1765594482,108.8934249878,11.7168655396 +"2011-11-29 20:18:38.166",134166.09375,-158.1926316685,134.743637085,-158.5575823362,0.093999818,-173.0224203567,202.1764221191,81.2556391592,201.9656982422,-38.3639328886,60.0033760071,0.000279746,97.1422805786,108.9241714478,11.7818908691 +"2011-11-29 20:18:38.200",134165.796875,-158.1516095523,134.7323303223,-158.5067793891,0.0411538556,33.8391477145,202.2415008545,81.300008068,201.9980621338,-38.3108145075,60.0033950806,0.0002543349,97.1380310059,108.9110412598,11.7730102539 +"2011-11-29 20:18:38.233",134165.328125,-158.1108743041,134.7108154297,-158.4602248198,0.0644780174,92.9500909806,202.2968597412,81.346043543,201.8587036133,-38.2487349181,60.0033836365,-0.0003560353,97.1349105835,108.9165725708,11.7816619873 +"2011-11-29 20:18:38.266",134164.375,-158.070070754,134.6897583008,-158.4359639878,0.1382803619,104.1747897117,202.3964538574,81.3940392823,201.6928710938,-38.2264104448,60.0033874512,0.0004323386,97.1369781494,108.9233779907,11.7863998413 +"2011-11-29 20:18:38.300",134165.5,-158.0297316567,134.7026672363,-158.3887263995,0.1475995779,82.8690732751,202.4562683105,81.4379505685,201.7250213623,-38.1779980639,60.0033950806,"1.39698386192322E-08",97.1448745728,108.9129638672,11.7680892944 +"2011-11-29 20:18:38.333",134167.578125,-157.9890647104,134.73046875,-158.3208206588,0.087883763,-8.6038048824,202.3672790527,81.4631812873,201.9027099609,-38.1168849463,60.0033950806,"7.63172283768654E-05",97.1420059204,108.9094085693,11.7674026489 +"2011-11-29 20:18:38.366",134166.015625,-157.9478650094,134.7516937256,-158.2729546931,0.1744945198,-67.4064607301,202.3070831299,81.4721493257,201.953918457,-38.0670928673,60.0033950806,0,97.1367416382,108.9206008911,11.7838592529 +"2011-11-29 20:18:38.400",134165.125,-157.9069658366,134.7576904297,-158.2378885019,0.2177632004,-96.7351495922,202.2839508057,81.5253291786,201.8880157471,-38.0549419608,60.0033988953,0.0001525925,97.1336135864,108.9054412842,11.7718276978 +"2011-11-29 20:18:38.433",134165.390625,-157.8660256827,134.7113037109,-158.205144575,0.1205437854,-103.9325092414,202.2230682373,81.6069840901,201.8423309326,-38.0446932619,60.00340271,"2.54251062870026E-05",97.1351013184,108.9156646729,11.7805633545 +"2011-11-29 20:18:38.466",134165.734375,-157.8254680194,134.6243438721,-158.1599970246,0.0149959587,40.7574360795,202.1462097168,81.6647948112,201.7429351807,-37.9830439745,60.0034065247,0,97.1420516968,108.9123001099,11.7702484131 +"2011-11-29 20:18:38.500",134166.125,-157.7849376769,134.6171722412,-158.1220211728,0.0637553558,69.9287744585,202.1313476563,81.7290737215,201.7643127441,-37.9593944445,60.00340271,-0.0002288539,97.1413421631,108.9034576416,11.7621154785 +"2011-11-29 20:18:38.533",134164.734375,-157.7443390325,134.7271881104,-158.1178137763,0.0565765575,100.9877209921,202.222076416,81.7378231938,201.9716644287,-37.9575093123,60.0033912659,-0.0002034567,97.1346130371,108.9010925293,11.7664794922 +"2011-11-29 20:18:38.566",134164.5625,-157.7033578974,134.7572021484,-158.0876106798,0.0471885093,21.0792546844,202.2964477539,81.7408899488,202.0242004395,-37.9160637244,60.0033950806,"2.54251062870026E-05",97.1221923828,108.8993301392,11.7771377563 +"2011-11-29 20:18:38.600",134166.390625,-157.6624314039,134.7246856689,-158.0210163354,0.0784630924,-90.352706643,202.2476501465,81.7857506312,201.8986816406,-37.8480350402,60.0033950806,0,97.1297149658,108.9073562622,11.7776412964 +"2011-11-29 20:18:38.633",134165.203125,-157.6221196275,134.7450561523,-157.9572906704,0.1652958095,-112.8724823743,202.1917266846,81.8580003723,201.9285125732,-37.8055444334,60.0033912659,0,97.1532592773,108.9095840454,11.7563247681 +"2011-11-29 20:18:38.666",134162.234375,-157.582204002,134.7016601563,-157.9374694614,0.0402029455,-108.1286564486,202.2358093262,81.9104767157,201.8446044922,-37.7938272439,60.0033836365,-0.0004323106,97.1455612183,108.9198532104,11.7742919922 +"2011-11-29 20:18:38.700",134161.875,-157.5413048292,134.5825042725,-157.9276886305,0.2119918466,33.4225574015,202.2510986328,81.9337335098,201.7055358887,-37.7768542238,60.0033912659,0.0002543069,97.1509246826,108.9172363281,11.7663116455 +"2011-11-29 20:18:38.733",134164.65625,-157.499954864,134.5727081299,-157.9142468183,0.1915941983,41.4770306595,202.1038360596,81.9480837372,201.7963867188,-37.7583102602,60.0033912659,"5.08781522512436E-05",97.1427154541,108.8990478516,11.7563323975 +"2011-11-29 20:18:38.766",134165.5,-157.4588098044,134.6298980713,-157.8750551928,0.0654268712,115.5541649067,202.0010681152,81.9685128331,201.8863677979,-37.6999838598,60.0033988953,0.0001780037,97.1430969238,108.9119567871,11.7688598633 +"2011-11-29 20:18:38.800",134164.59375,-157.4178969713,134.6527252197,-157.814116245,0.0863623098,108.5584665927,202.1622161865,82.0295132525,201.8032226563,-37.6329762889,60.0034141541,0.000559492,97.1383666992,108.9134750366,11.7751083374 +"2011-11-29 20:18:38.833",134165.921875,-157.3772436853,134.6612243652,-157.7449127684,0.1515554488,44.9151498122,202.3025054932,82.0915655211,201.8228912354,-37.5644353406,60.0034141541,0,97.1462783813,108.9157485962,11.7694702148 +"2011-11-29 20:18:38.866",134166.90625,-157.3366723617,134.6530303955,-157.6909406135,0.1743898243,13.4230582947,202.3125457764,82.1475525818,201.8203735352,-37.5367116028,60.0034103394,-0.0003814744,97.1407241821,108.9157714844,11.7750473022 +"2011-11-29 20:18:38.900",134165.375,-157.2967840569,134.674911499,-157.6383481569,0.1927174181,3.3674721582,202.4317779541,82.1814166597,201.7769622803,-37.475338938,60.0033912659,-0.0005086139,97.1249542236,108.8886947632,11.7637405396 +"2011-11-29 20:18:38.933",134166.125,-157.2574558277,134.7459869385,-157.5915340404,0.0571935177,27.1515336207,202.4242706299,82.2226641721,201.8728790283,-37.4038746687,60.003364563,-0.0009663776,97.1229019165,108.9139709473,11.7910690308 +"2011-11-29 20:18:38.966",134167.828125,-157.2159146171,134.7545928955,-157.5647596988,0.0960649326,-135.0578110628,202.3026123047,82.254868514,201.8742980957,-37.3944387624,60.003364563,0,97.1371536255,108.9122009277,11.7750473022 +"2011-11-29 20:18:39.000",134168.21875,-157.1732805763,134.7261657715,-157.5515637733,0.0560979135,-131.9567549154,202.2404632568,82.2638775335,201.8894500732,-37.3735383835,60.0033912659,0.001373291,97.1299591064,108.9255752563,11.7956161499 +"2011-11-29 20:18:39.033",134166.921875,-157.1326955923,134.674118042,-157.5040666378,0.0551699549,-29.2821855191,202.152633667,82.3139291598,201.9057769775,-37.3341179467,60.0033912659,-0.0004831888,97.1361541748,108.9166183472,11.7804641724 +"2011-11-29 20:18:39.066",134163.65625,-157.0926980045,134.6964111328,-157.435833048,0.0900994614,-116.394728967,202.1481781006,82.3764663718,201.8751068115,-37.2646788285,60.0033912659,0.0004069135,97.1332550049,108.911239624,11.7779846191 +"2011-11-29 20:18:39.100",134165.0625,-157.0517305299,134.7173309326,-157.3651132694,0.1511427164,-86.2146911759,202.2864837646,82.4174270163,201.8191070557,-37.1877333324,60.0034217834,0.0010426668,97.1368255615,108.9156494141,11.7788238525 +"2011-11-29 20:18:39.133",134167.578125,-157.0102712816,134.7283935547,-157.3729406662,0.0786082298,-25.4200909114,202.4187774658,82.4066284872,201.8217315674,-37.1684346329,60.0034179688,-0.0007629488,97.1357345581,108.9188766479,11.7831420898 +"2011-11-29 20:18:39.166",134165.046875,-156.9696999579,134.7352294922,-157.3929804412,0.1845038235,91.167404777,202.4317016602,82.4202069032,201.8442382813,-37.1568438019,60.0033912659,-0.0009409664,97.1391220093,108.9121246338,11.7730026245 +"2011-11-29 20:18:39.200",134165.421875,-156.9299619173,134.6986999512,-157.3280526629,0.171293065,123.1363442439,202.277053833,82.4871769081,201.7906646729,-37.0950135144,60.0033760071,-0.0001525925,97.1261520386,108.9112167358,11.7850646973 +"2011-11-29 20:18:39.233",134166.1875,-156.8893905937,134.6657409668,-157.2376346187,0.0727209374,-116.7709631073,202.0845947266,82.5439835914,201.8600769043,-37.0324148307,60.0033912659,0.0006612064,97.1496353149,108.9106903076,11.7610549927 +"2011-11-29 20:18:39.266",134166.140625,-156.8485187417,134.6753692627,-157.2030602011,0.0426415615,-134.678380394,202.0566253662,82.5890901607,201.932723999,-36.9996913944,60.0033874512,-0.000559506,97.1356277466,108.9033889771,11.7677612305 +"2011-11-29 20:18:39.300",134165.734375,-156.8082889275,134.7642364502,-157.1834985393,0.2124240398,142.1624918751,202.23387146,82.624559333,201.9577026367,-36.9387387862,60.0033683777,-0.000559492,97.1334991455,108.9246673584,11.7911682129 +"2011-11-29 20:18:39.333",134165.109375,-156.7673760943,134.7706298828,-157.136151668,0.1887208372,127.0139519187,202.279083252,82.6907985076,201.9891357422,-36.9109365012,60.0033721924,0.000559506,97.1550674438,108.903137207,11.7480697632 +"2011-11-29 20:18:39.366",134165.265625,-156.7261627329,134.7398071289,-157.100443439,0.1037463397,128.0675085982,202.2068023682,82.7639771544,201.9868621826,-36.9362867483,60.0033950806,0.0006612064,97.1517562866,108.9021148682,11.7503585815 +"2011-11-29 20:18:39.400",134165.34375,-156.6854274847,134.8003845215,-157.0600633607,0.0911201984,177.6355847636,202.2670135498,82.8036468931,202.0529937744,-36.9125791617,60.00340271,-0.0001017423,97.1500930786,108.9038696289,11.7537765503 +"2011-11-29 20:18:39.433",134163.765625,-156.6440501987,134.8237762451,-157.0155305273,0.1137414277,178.264604205,202.2506866455,82.8393141409,202.1187438965,-36.8568004218,60.0034103394,0.0004323386,97.1500701904,108.9154434204,11.76537323 +"2011-11-29 20:18:39.466",134164.921875,-156.6033832524,134.7436218262,-156.9849859213,0.1817761362,125.3056259847,202.2383117676,82.8590738782,201.9559326172,-36.7784410766,60.0034179688,0,97.1323242188,108.9196929932,11.7873687744 +"2011-11-29 20:18:39.500",134166.828125,-156.5638910986,134.6875915527,-156.9540998059,0.2754449844,98.6791921847,202.3603210449,82.8837376913,201.7733612061,-36.7156818834,60.00340271,-0.000813799,97.1359405518,108.9375610352,11.8016204834 +"2011-11-29 20:18:39.533",134167.171875,-156.5232924542,134.7150268555,-156.907094444,0.1875057966,94.6058312882,202.3509063721,82.939041733,201.8556060791,-36.7023356938,60.0033874512,-0.0001017144,97.1600112915,108.92578125,11.7657699585 +"2011-11-29 20:18:39.566",134166.65625,-156.4824752437,134.7206115723,-156.8527261382,0.0496733226,130.5454192668,202.1530151367,83.0002265676,201.9954071045,-36.692124561,60.0033912659,"-5.08502125740051E-05",97.1359329224,108.9227752686,11.7868423462 +"2011-11-29 20:18:39.600",134165.375,-156.4417536559,134.6899261475,-156.7805310387,0.0800142661,-157.2343151468,202.146774292,83.0648811382,201.8444824219,-36.6255370467,60.0033836365,-0.0001525925,97.1390075684,108.9223937988,11.7833862305 +"2011-11-29 20:18:39.633",134164.84375,-156.4008818039,134.6804656982,-156.7481422816,0.0436520539,-167.1708880117,202.2189941406,83.0811028375,201.7812805176,-36.5747614204,60.0033912659,0.0005849171,97.1320037842,108.9070129395,11.7750091553 +"2011-11-29 20:18:39.666",134165.578125,-156.3598460273,134.6875,-156.7390854508,0.0469127484,150.3639508041,202.1802215576,83.1013270277,201.855682373,-36.5685971747,60.00340271,0.0001780177,97.1462097168,108.9021759033,11.7559661865 +"2011-11-29 20:18:39.700",134165.5625,-156.3183184772,134.7135009766,-156.6800316352,0.0156053193,9.037426272,202.2780303955,83.1421305778,201.8795623779,-36.5029249059,60.0034103394,0.0002034567,97.1387939453,108.9216537476,11.7828598022 +"2011-11-29 20:18:39.733",134163.703125,-156.2778427762,134.7740783691,-156.6181228006,0.0978960171,-29.6287083364,202.3872833252,83.1847987695,201.9960327148,-36.4428021657,60.0034141541,"-1.39698386192322E-08",97.1492004395,108.9254455566,11.7762451172 +"2011-11-29 20:18:39.766",134164.09375,-156.2391839055,134.7691497803,-156.5744369107,0.0548111536,-85.9410806279,202.3369903564,83.2500475666,201.9540405273,-36.4132308617,60.0033988953,-0.0008392241,97.1608581543,108.9102630615,11.7494049072 +"2011-11-29 20:18:39.800",134166.171875,-156.1985579403,134.7658996582,-156.5336333606,0.1665652096,-121.7189980289,202.3106536865,83.2827095313,201.852142334,-36.3765459156,60.0033912659,0.0003306102,97.1482696533,108.927116394,11.7788467407 +"2011-11-29 20:18:39.833",134166.609375,-156.156483975,134.7778930664,-156.4981027165,0.1322962046,-120.7963760758,202.3412322998,83.338375573,201.8864898682,-36.3561270651,60.0034065247,0.0003814604,97.1375198364,108.914855957,11.7773361206 +"2011-11-29 20:18:39.866",134165.140625,-156.1140138587,134.7375030518,-156.4679952426,0.0602958016,149.0470630113,202.2129669189,83.3999224076,201.9656982422,-36.3218156098,60.0034217834,0.0004831888,97.1408309937,108.9311981201,11.7903671265 +"2011-11-29 20:18:39.900",134164.296875,-156.0731556671,134.7284088135,-156.4727353939,0.1376226693,121.414412573,202.1714019775,83.3771232362,201.9966888428,-36.2837817014,60.0034332275,0.0004577637,97.144493103,108.9094924927,11.7649993896 +"2011-11-29 20:18:39.933",134165.203125,-156.0339640416,134.6734924316,-156.4476822601,0.1248818338,90.5577694125,202.1211090088,83.3786053872,201.9503936768,-36.2412057172,60.0034332275,0,97.1363830566,108.9141235352,11.7777404785 +"2011-11-29 20:18:39.966",134166.296875,-155.9942396614,134.6500091553,-156.3704601413,0.0978360698,66.8289818962,202.090713501,83.4726502619,201.9323730469,-36.194476978,60.0034065247,-0.0010681059,97.1539306641,108.9339141846,11.7799835205 +"2011-11-29 20:18:40.000",134165.078125,-155.9533131679,134.6811218262,-156.2952734189,0.0485065766,-65.8217338993,202.097946167,83.5451595501,201.9472351074,-36.1493567484,60.0033760071,-0.0008392381,97.1422576904,108.9165725708,11.7743148804 +"2011-11-29 20:18:40.033",134164.390625,-155.911649014,134.6671142578,-156.2548933405,0.0945940614,-85.9574525914,201.9947357178,83.5786889487,201.9762115479,-36.113706576,60.0033760071,0,97.1316299438,108.9153594971,11.7837295532 +"2011-11-29 20:18:40.066",134165.640625,-155.8709410865,134.6767272949,-156.2264114517,0.0760143772,-122.9851238557,202.0511779785,83.6182630648,201.9168395996,-36.0828068002,60.0033721924,"7.62892886996269E-05",97.1532821655,108.921081543,11.7677993774 +"2011-11-29 20:18:40.100",134167.46875,-155.8307659138,134.7007293701,-156.1886131848,0.0964606404,-177.6168700453,202.2456207275,83.6621197095,201.7682495117,-36.0289849095,60.0033836365,"7.63032585382462E-05",97.152305603,108.8919754028,11.7396697998 +"2011-11-29 20:18:40.133",134166.859375,-155.7906453827,134.7051696777,-156.1577953713,0.1002500206,137.3080032244,202.2971954346,83.6709443139,201.7805175781,-35.9599863385,60.0033874512,0.0001525786,97.1337738037,108.915184021,11.7814102173 +"2011-11-29 20:18:40.166",134165.984375,-155.7495822854,134.723815918,-156.1213768026,0.0971610099,107.7021999274,202.2568206787,83.7135305433,201.9271087646,-35.928591374,60.0033912659,"7.62892886996269E-05",97.1274337769,108.905960083,11.7785263062 +"2011-11-29 20:18:40.200",134165.90625,-155.7083552635,134.7310180664,-156.055315213,0.0983870849,101.9259772482,202.2744445801,83.8033611913,201.9405822754,-35.8864491068,60.0033874512,-0.0002034567,97.1300354004,108.915687561,11.7856521606 +"2011-11-29 20:18:40.233",134166.46875,-155.6677292984,134.7640838623,-155.9978050202,0.029127432,65.4048464731,202.3522796631,83.8383112693,201.9635314941,-35.8281261215,60.0033836365,0.0001271674,97.1548156738,108.91355896,11.7587432861 +"2011-11-29 20:18:40.266",134165.359375,-155.6274311823,134.7327728271,-155.9704979239,0.0970433131,52.886646517,202.3075714111,83.8396431562,201.9781341553,-35.76705057,60.0033874512,"7.62892886996269E-05",97.1480560303,108.9220581055,11.7740020752 +"2011-11-29 20:18:40.300",134163.03125,-155.5862588019,134.6737060547,-155.9431088653,0.132908076,124.801885873,202.0939178467,83.8827962914,201.9047241211,-35.7317794731,60.0034065247,0.0007883599,97.1469726563,108.9197692871,11.7727966309 +"2011-11-29 20:18:40.333",134163.359375,-155.5444034027,134.7059783936,-155.9017998812,0.1692603081,-174.098393717,202.0995483398,83.9541239569,201.8590393066,-35.7425199456,60.0034179688,0.0001780316,97.1390686035,108.9252319336,11.7861633301 +"2011-11-29 20:18:40.366",134165.078125,-155.5035861922,134.7266235352,-155.8705312752,0.0645465702,176.7844748911,202.229309082,83.981028072,201.8946685791,-35.7134199246,60.0034065247,-0.0003814884,97.125793457,108.9161376953,11.7903442383 +"2011-11-29 20:18:40.400",134164.71875,-155.4630421893,134.7720947266,-155.8154526297,0.0320686214,128.8237608035,202.3261871338,84.0177608294,201.9838409424,-35.6395719193,60.00340271,"2.54251062870026E-05",97.1424636841,108.907081604,11.7646179199 +"2011-11-29 20:18:40.433",134164.515625,-155.422880677,134.8078613281,-155.7493363986,0.0544594228,-102.8403688233,202.3780212402,84.0738844938,202.0145111084,-35.5845410851,60.00340271,0,97.1390380859,108.9018707275,11.7628326416 +"2011-11-29 20:18:40.466",134164.46875,-155.3826645232,134.8226623535,-155.692522885,0.1777125746,-119.8518428758,202.4632263184,84.1079944585,201.8628082275,-35.5219799674,60.0033836365,-0.0008646632,97.1544723511,108.9225158691,11.7680435181 +"2011-11-29 20:18:40.500",134164.078125,-155.3412872372,134.868270874,-155.6822776013,0.2303971797,-149.2662711025,202.4543457031,84.1157877043,201.9239349365,-35.4871050215,60.0033836365,0,97.1441192627,108.9110183716,11.7668991089 +"2011-11-29 20:18:40.533",134164.71875,-155.3008525173,134.7557678223,-155.7142975281,0.0791226104,134.8319640277,202.2174224854,84.119496497,202.0240478516,-35.5269079489,60.0033721924,-0.0005086139,97.1398620605,108.9091186523,11.7692565918 +"2011-11-29 20:18:40.566",134164.96875,-155.2616199107,134.687789917,-155.6771549594,0.0825629681,87.5782223305,202.2333984375,84.1719455197,201.8687438965,-35.5050410983,60.0033569336,-0.0005340669,97.1413726807,108.9067840576,11.765411377 +"2011-11-29 20:18:40.600",134166.0625,-155.220830021,134.6926422119,-155.5887040097,0.0735448301,-165.2445560997,202.3746490479,84.2378978263,201.6326904297,-35.4111635633,60.0033721924,0.0010681199,97.1533584595,108.8954086304,11.7420501709 +"2011-11-29 20:18:40.633",134166,-155.1796439803,134.6954345703,-155.5157029478,0.1475223601,-110.8027916219,202.2942047119,84.2798078671,201.6895141602,-35.3400715393,60.0033988953,0.0004831888,97.1555557251,108.9195480347,11.7639923096 +"2011-11-29 20:18:40.666",134164,-155.1393322038,134.7453765869,-155.4357624138,0.226041913,-97.3577964671,202.2542419434,84.3361569277,201.864944458,-35.2616712129,60.0033721924,-0.0009918027,97.1576004028,108.9237365723,11.7661361694 +"2011-11-29 20:18:40.700",134164.171875,-155.0990067669,134.8535003662,-155.3952320712,0.2754724324,-130.9805706189,202.3320465088,84.3935646677,201.9800109863,-35.2159601719,60.0033683777,0.0005086279,97.1338195801,108.9008026123,11.7669830322 +"2011-11-29 20:18:40.733",134164.53125,-155.0580529527,134.8515167236,-155.4197797711,0.196094051,-160.4482606607,202.3654022217,84.4061117252,201.9957580566,-35.2404703057,60.0033950806,0.0008646632,97.1476364136,108.9108657837,11.7632293701 +"2011-11-29 20:18:40.766",134165.5,-155.0164297799,134.7228546143,-155.4005459584,0.0909693167,137.4862165203,202.2662658691,84.4436162939,201.8686676025,-35.2206047005,60.0034065247,"5.08502125740051E-05",97.141494751,108.9261474609,11.78465271 +"2011-11-29 20:18:40.800",134166.21875,-154.9753393618,134.6081085205,-155.3280639909,0.0676980987,23.359267452,202.1061553955,84.4978411657,201.7877197266,-35.1541401297,60.0034065247,-0.0002543209,97.1534194946,108.9225921631,11.7691726685 +"2011-11-29 20:18:40.833",134166.625,-154.9348773212,134.594909668,-155.2589424765,0.2618276179,-10.3301198272,202.0442199707,84.5345466023,201.9569854736,-35.0950248424,60.0034065247,0.0002543209,97.1419830322,108.9112319946,11.7692489624 +"2011-11-29 20:18:40.866",134167.296875,-154.8939371673,134.6648254395,-155.2196005869,0.2542935014,-10.3349154737,202.1622161865,84.5755209072,202.0423736572,-35.0560825189,60.0034179688,0.000279746,97.1469345093,108.9038391113,11.7569046021 +"2011-11-29 20:18:40.900",134166.875,-154.8534068247,134.7518005371,-155.1900805093,0.0644170046,-145.8374888184,202.4243164063,84.6149515892,201.7698516846,-34.9974350996,60.0034065247,-0.0004323246,97.1487426758,108.9338378906,11.7850952148 +"2011-11-29 20:18:40.933",134164.921875,-154.8130540671,134.7995605469,-155.1526237519,0.1554074436,-179.1590721183,202.5410308838,84.6619228002,201.7180175781,-34.9484114168,60.0033836365,-0.0004831888,97.1265792847,108.9221725464,11.7955932617 +"2011-11-29 20:18:40.966",134163.71875,-154.7726603284,134.7221069336,-155.1017934841,0.0459256545,75.5766237323,202.4159698486,84.694666727,201.7820892334,-34.8874929596,60.0033721924,-0.0002034567,97.1371307373,108.9072265625,11.7700958252 +"2011-11-29 20:18:41.000",134163.71875,-154.7315152688,134.6624450684,-155.0675469156,0.1439167112,114.9695553552,202.2284240723,84.7653933359,201.7610168457,-34.8592159764,60.0033874512,0.000279732,97.1384735107,108.9047851563,11.7663116455 +"2011-11-29 20:18:41.033",134163.6875,-154.69039753,134.7215118408,-155.0492146879,0.2483582795,145.5017030585,202.1583099365,84.8153083584,201.8817596436,-34.8528195043,60.0033874512,"2.5453045964241E-05",97.1376724243,108.9142837524,11.7766113281 +"2011-11-29 20:18:41.066",134164.96875,-154.6495939799,134.755645752,-155.027303441,0.097258985,155.997149322,202.211517334,84.7928165454,201.9938659668,-34.8264037477,60.0033950806,0.0003814744,97.1514205933,108.9150314331,11.7636108398 +"2011-11-29 20:18:41.100",134165.96875,-154.6084489204,134.7515411377,-154.9678124933,0.024211362,-88.9067555957,202.3748321533,84.799626244,201.8732147217,-34.7409512509,60.0034141541,0.0006357674,97.141998291,108.9140548706,11.7720565796 +"2011-11-29 20:18:41.133",134165.328125,-154.567563408,134.7322692871,-154.9452045672,0.1179030389,105.3342074931,202.3914337158,84.8448625869,201.8284606934,-34.7016947387,60.0034217834,0,97.1445007324,108.9355010986,11.7910003662 +"2011-11-29 20:18:41.166",134163.453125,-154.5275521598,134.7382659912,-154.9437429067,0.2110021859,111.4015464951,202.3725585938,84.8786788535,201.8584289551,-34.7059397013,60.0034065247,-0.0006866455,97.1427993774,108.9446105957,11.8018112183 +"2011-11-29 20:18:41.200",134163.40625,-154.486830572,134.6704101563,-154.8617123348,0.1362928599,69.1090697959,202.3252563477,84.9365510463,201.7869262695,-34.6325561488,60.0033950806,"-7.62753188610077E-05",97.1472854614,108.9292221069,11.7819366455 +"2011-11-29 20:18:41.233",134165.09375,-154.446354871,134.6262512207,-154.7834930084,0.1864733398,18.2179791581,202.2193145752,85.0082953534,201.84715271,-34.5813365602,60.0033874512,-0.0004323386,97.1428833008,108.9214553833,11.7785720825 +"2011-11-29 20:18:41.266",134166.6875,-154.4056196228,134.6722717285,-154.7525659118,0.1370951384,13.4818423178,202.2602233887,85.0344208269,201.8934631348,-34.5470968219,60.0033798218,0,97.136756897,108.9330368042,11.7962799072 +"2011-11-29 20:18:41.300",134165.71875,-154.3638461858,134.7080383301,-154.7372662881,0.0598000363,20.5850324414,202.3056335449,85.0366816195,201.8811798096,-34.5121160081,60.0033874512,0.0004323386,97.1495513916,108.9185943604,11.7690429688 +"2011-11-29 20:18:41.333",134162.03125,-154.3229196923,134.7066955566,-154.6827203974,0.1445643604,-25.6916250819,202.2525939941,85.0952095105,201.9610748291,-34.4921957614,60.00340271,0,97.1414260864,108.9058074951,11.7643814087 +"2011-11-29 20:18:41.366",134162.234375,-154.2835231612,134.6741790771,-154.6128202414,0.2068198174,-16.8185263311,202.2876434326,85.1790978939,201.8902893066,-34.4437560598,60.0033912659,-0.0005086279,97.1421508789,108.9100494385,11.7678985596 +"2011-11-29 20:18:41.400",134165.703125,-154.2434709319,134.6716003418,-154.5658012192,0.1243391708,-23.2250815556,202.2881622314,85.2365192943,201.8108825684,-34.3941347355,60.0033798218,"7.63032585382462E-05",97.1397094727,108.9071044922,11.7673950195 +"2011-11-29 20:18:41.433",134166.609375,-154.2024761365,134.7057342529,-154.5413764627,0.1134059578,-78.3659432157,202.2781219482,85.2838729958,201.8135223389,-34.3974849433,60.0033874512,0.0002288818,97.1245574951,108.9109191895,11.7863616943 +"2011-11-29 20:18:41.466",134164.21875,-154.160866624,134.7790222168,-154.4988790257,0.1926959902,-106.1858159694,202.3787231445,85.3162549227,201.8319091797,-34.354365959,60.0033874512,0,97.1372299194,108.9065170288,11.7692871094 +"2011-11-29 20:18:41.500",134163.4375,-154.1205958287,134.7562561035,-154.4582940416,0.1238667741,-128.5303631975,202.3886413574,85.3598930013,201.7705688477,-34.2913028224,60.0033683777,-0.0006357813,97.1583709717,108.925201416,11.7668304443 +"2011-11-29 20:18:41.533",134164.8125,-154.0814451844,134.7096252441,-154.4169167556,0.0497312769,4.1587177705,202.3314666748,85.4076565141,201.8455657959,-34.2462064984,60.0033683777,0,97.1578216553,108.9104309082,11.7526092529 +"2011-11-29 20:18:41.566",134165.59375,-154.0406279739,134.7501068115,-154.3930384143,0.0602616258,75.7403092157,202.2909698486,85.4410902901,201.9998321533,-34.2137938357,60.0033912659,0.0008646492,97.1474914551,108.9104156494,11.7629241943 +"2011-11-29 20:18:41.600",134165.46875,-153.9981168765,134.7784881592,-154.3681628654,0.1330206692,156.3733834623,202.271774292,85.499071766,201.9782104492,-34.2065879861,60.0034103394,0.0003560213,97.1498413086,108.9222412109,11.7723999023 +"2011-11-29 20:18:41.633",134165.25,-153.9568078924,134.7330169678,-154.321321428,0.0758437738,164.9866071755,202.2585296631,85.535503995,201.8843994141,-34.1638378321,60.0033988953,-0.0006866455,97.1418151855,108.9170608521,11.7752456665 +"2011-11-29 20:18:41.666",134164.171875,-153.917220116,134.7467346191,-154.2489760643,0.1045479998,-120.1841179186,202.3195037842,85.5762597338,201.8358306885,-34.0904132985,60.0033798218,-0.0001780037,97.1383666992,108.9289321899,11.7905654907 +"2011-11-29 20:18:41.700",134162.6875,-153.8771405659,134.7456665039,-154.200509042,0.160201624,-96.9351443613,202.2417907715,85.6271992846,201.9100341797,-34.066166127,60.0033950806,0.0006103422,97.1463088989,108.9252090454,11.7789001465 +"2011-11-29 20:18:41.733",134163.84375,-153.8363370158,134.7665557861,-154.1642270771,0.1503203213,-72.7429694909,202.346786499,85.656965249,201.9320220947,-34.0272101431,60.0033950806,-0.0005086418,97.1427764893,108.9113006592,11.7685241699 +"2011-11-29 20:18:41.766",134166.015625,-153.7956017676,134.7881469727,-154.1156644321,0.132433638,-43.6976856681,202.5795135498,85.6803108356,201.8333129883,-33.9461084769,60.0033760071,"-2.5453045964241E-05",97.1367111206,108.9076385498,11.7709274292 +"2011-11-29 20:18:41.800",134166.515625,-153.7543610854,134.7022247314,-154.0833029958,0.1331664026,-9.2212616673,202.4610290527,85.732281745,201.7564239502,-33.9199864184,60.0033798218,"7.62892886996269E-05",97.1403656006,108.9273300171,11.7869644165 +"2011-11-29 20:18:41.833",134165.609375,-153.7133253089,134.6435089111,-154.0564740128,0.0073276451,6.5755635597,202.2114257813,85.7742942386,201.7277526855,-33.887512284,60.00340271,0.000279746,97.1405792236,108.9097290039,11.7691497803 +"2011-11-29 20:18:41.866",134164.796875,-153.6725354191,134.6224365234,-154.013443821,0.1199463829,84.6434949498,202.1355285645,85.8233486572,201.7961273193,-33.8208837886,60.0034065247,0.0002034567,97.1386108398,108.9196853638,11.7810745239 +"2011-11-29 20:18:41.900",134166.34375,-153.6315952653,134.6667175293,-153.9612884965,0.1940672547,64.8146771477,202.2714080811,85.8798206613,201.882019043,-33.7675809923,60.0034103394,"5.08641824126244E-05",97.1432647705,108.9354400635,11.792175293 +"2011-11-29 20:18:41.933",134168.828125,-153.5910785831,134.7656707764,-153.9125755873,0.1228558719,19.3303608418,202.4282226563,85.9320442877,201.9922637939,-33.760962539,60.0034065247,"-7.62753188610077E-05",97.1406555176,108.909614563,11.7689590454 +"2011-11-29 20:18:41.966",134167.703125,-153.5505482406,134.8261108398,-153.8678924898,0.168599695,-52.5819005517,202.5654449463,85.97473297,201.9470214844,-33.7569429727,60.0033950806,-0.0004068995,97.1326980591,108.9218597412,11.7891616821 +"2011-11-29 20:18:42.000",134165,-153.5098676339,134.7808380127,-153.841145469,0.1176332161,-76.8727614103,202.4199829102,85.9957016507,201.8973236084,-33.7100605542,60.0033912659,"5.08641824126244E-05",97.1377334595,108.915763855,11.7780303955 +"2011-11-29 20:18:42.033",134166.03125,-153.4687225743,134.7581939697,-153.810600863,0.0610621236,-139.47854172,202.2053527832,86.0270453888,202.0116577148,-33.6523591161,60.0033950806,"7.62753188610077E-05",97.135017395,108.9165496826,11.7815322876 +"2011-11-29 20:18:42.066",134166.0625,-153.4288342696,134.7676086426,-153.7704256903,0.1081344038,-84.3041574914,202.3021697998,86.0426796918,201.9645690918,-33.6119483019,60.0033798218,-0.0003814744,97.1448135376,108.9270477295,11.7822341919 +"2011-11-29 20:18:42.100",134164.34375,-153.3888366818,134.8624572754,-153.7254693852,0.2114848644,-116.0299422239,202.5532073975,86.0673161842,201.8690490723,-33.554219543,60.0033760071,"5.08502125740051E-05",97.143157959,108.9287185669,11.7855606079 +"2011-11-29 20:18:42.133",134165.46875,-153.3475550184,134.8675079346,-153.7016047043,0.1913362443,-139.4024534127,202.4571228027,86.1080514324,201.962097168,-33.5241872013,60.0033950806,0.0005594781,97.1502380371,108.9038467407,11.7536087036 +"2011-11-29 20:18:42.166",134165.375,-153.306560223,134.7385559082,-153.6649675695,0.101163581,-141.8349843044,202.18019104,86.1672077008,201.9380950928,-33.502801879,60.00340271,0,97.1590423584,108.928894043,11.7698516846 +"2011-11-29 20:18:42.200",134162.34375,-153.2657566729,134.7018585205,-153.5914747341,0.2044645995,-123.3694586003,202.1836547852,86.2271426107,201.7469940186,-33.4389293649,60.0033950806,-0.000279746,97.1509933472,108.9223861694,11.7713928223 +"2011-11-29 20:18:42.233",134162.828125,-153.2251307078,134.7814331055,-153.5289511824,0.3035290241,-120.5370201326,202.383102417,86.2517722729,201.7090148926,-33.3558571892,60.0033988953,"7.62892886996269E-05",97.1256103516,108.9220123291,11.7964019775 +"2011-11-29 20:18:42.266",134165.859375,-153.1849008935,134.8200836182,-153.496658048,0.2331630886,-109.9243063512,202.5321807861,86.2794277088,201.7616577148,-33.3175193373,60.0033988953,0,97.1447067261,108.9158782959,11.7711715698 +"2011-11-29 20:18:42.300",134166.140625,-153.1446300982,134.7299346924,-153.4931883119,0.0373257846,-58.8474755491,202.4102783203,86.3299232974,201.7843780518,-33.3263029606,60.0033798218,-0.0004323665,97.117401123,108.9254150391,11.808013916 +"2011-11-29 20:18:42.333",134164.53125,-153.1035670009,134.6224517822,-153.4616601587,0.1619272977,75.354417188,202.076675415,86.3876725468,201.899017334,-33.2762615797,60.0033798218,0,97.1314239502,108.9336166382,11.802192688 +"2011-11-29 20:18:42.366",134165.265625,-153.0616569602,134.6728668213,-153.4046827207,0.1101614684,109.5622448535,202.0001983643,86.4571424009,202.0333709717,-33.2355263315,60.0033874512,0.000559506,97.1258087158,108.9097900391,11.7839813232 +"2011-11-29 20:18:42.400",134167.21875,-153.0207031459,134.7679290771,-153.3525137358,0.078026861,-130.9792319018,202.2978973389,86.4927618374,201.9351196289,-33.2058969708,60.0033988953,-0.0001017284,97.143447876,108.9228439331,11.7793960571 +"2011-11-29 20:18:42.433",134166.78125,-152.9811973317,134.7493133545,-153.3302883002,0.1194841638,-73.5409951332,202.3692169189,86.493868328,201.859085083,-33.1873393469,60.0033988953,"1.39698386192322E-08",97.1379089355,108.9253997803,11.7874908447 +"2011-11-29 20:18:42.466",134164.78125,-152.9409948383,134.7184448242,-153.3082267892,0.183031559,-76.2950981613,202.3005981445,86.503362291,201.815322876,-33.1699872513,60.0033950806,0.0003051572,97.1631546021,108.9144439697,11.7512893677 +"2011-11-29 20:18:42.500",134163.609375,-152.8997541561,134.6681060791,-153.257997578,0.1059410796,-76.4185606607,202.3044433594,86.5516244076,201.6776580811,-33.0963441516,60.0033988953,-0.0002034567,97.1303939819,108.924911499,11.7945175171 +"2011-11-29 20:18:42.533",134164.265625,-152.8594697003,134.7147521973,-153.1920452714,0.0842255726,-103.3736290126,202.3193511963,86.6219138844,201.7725067139,-33.0237665615,60.0033683777,-0.0009918166,97.1331863403,108.91015625,11.7769699097 +"2011-11-29 20:18:42.566",134163.34375,-152.8189530182,134.7369537354,-153.1373217958,0.1040268168,-109.6229037635,202.246383667,86.7046479658,201.8903961182,-32.99933839,60.0033607483,0.0002034288,97.1468505859,108.9281921387,11.7813415527 +"2011-11-29 20:18:42.600",134163.484375,-152.7784909775,134.6891479492,-153.1115036807,0.0805980414,-57.8495780812,202.2533111572,86.7226045331,201.8230133057,-32.9680492934,60.0033760071,0.0003305962,97.138381958,108.9031677246,11.7647857666 +"2011-11-29 20:18:42.633",134165.71875,-152.7374005595,134.7186431885,-153.1092087372,0.1012736261,-86.2105179303,202.2967834473,86.6902977384,201.8215942383,-32.9346769891,60.0033912659,0.0004323106,97.1396789551,108.9115600586,11.7718811035 +"2011-11-29 20:18:42.666",134165.546875,-152.6959276509,134.7843780518,-153.0306752221,0.1858794093,-129.9743744711,202.3423461914,86.7757775558,201.8418884277,-32.8572738703,60.0033912659,"7.63032585382462E-05",97.1424636841,108.9178924561,11.775428772 +"2011-11-29 20:18:42.700",134165.875,-152.6548918743,134.7904663086,-152.942429178,0.0958134085,-135.8574486296,202.3694458008,86.8990214892,201.9118499756,-32.7915025637,60.0034103394,0.0003814744,97.1630401611,108.9124679565,11.7494277954 +"2011-11-29 20:18:42.733",134166.9375,-152.6139927016,134.6834869385,-152.9268836675,0.0624641702,24.2386918737,202.1978302002,86.9267179063,201.9163208008,-32.7811377516,60.0034179688,0.000279732,97.1414794922,108.9280548096,11.7865753174 +"2011-11-29 20:18:42.766",134165.640625,-152.572956925,134.6974487305,-152.9419100836,0.067499727,162.075102438,202.1490783691,86.9135424714,201.8969573975,-32.7836239405,60.0034217834,"1.39698386192322E-08",97.1349639893,108.9108657837,11.7759017944 +"2011-11-29 20:18:42.800",134162.5,-152.5324265825,134.8069458008,-152.8864626079,0.2150471509,-166.9105212005,202.3898162842,86.9500908136,201.8242034912,-32.7077644445,60.0034141541,-0.0004323246,97.1287078857,108.9273223877,11.798614502 +"2011-11-29 20:18:42.833",134162.125,-152.4920328438,134.81300354,-152.8099098477,0.0876007527,-75.6985767599,202.560256958,86.9883876843,201.8614959717,-32.6317512692,60.0033988953,-0.0006103562,97.1610946655,108.9300003052,11.7689056396 +"2011-11-29 20:18:42.866",134163.515625,-152.4517074069,134.7479248047,-152.7872062989,0.2181064337,-28.4030701635,202.392074585,86.9891458353,201.9773406982,-32.6141054755,60.0033836365,-0.0004323386,97.14478302,108.9005203247,11.7557373047 +"2011-11-29 20:18:42.900",134164.515625,-152.4109858191,134.7347869873,-152.7431515788,0.1024229825,-75.5003783306,202.35546875,87.0294166307,201.8291168213,-32.5434915648,60.0033798218,-0.0001525925,97.1339035034,108.9244995117,11.7905960083 +"2011-11-29 20:18:42.933",134166.296875,-152.3703735143,134.7722930908,-152.6902176127,0.1747537702,-147.7518815598,202.4282836914,87.0967486355,201.7172546387,-32.4807050508,60.0033760071,"-7.63032585382462E-05",97.1334915161,108.9366455078,11.8031539917 +"2011-11-29 20:18:42.966",134169.046875,-152.3296929076,134.763458252,-152.650547874,0.1360649914,-118.5859629358,202.3986206055,87.1676186783,201.7808685303,-32.4898062779,60.0033798218,0.0002288818,97.1588668823,108.9097137451,11.7508468628 +"2011-11-29 20:18:43.000",134169.40625,-152.2888210556,134.7554016113,-152.6444690057,0.118851617,-115.0652736262,202.3354644775,87.2068786057,201.8377380371,-32.5160205439,60.0033874512,0.0003306242,97.1483001709,108.9007873535,11.7524871826 +"2011-11-29 20:18:43.033",134167.828125,-152.2483863357,134.7252349854,-152.634770137,0.1285763085,131.5047739773,202.2749633789,87.2315765697,201.8707885742,-32.4654532384,60.0033874512,"1.39698386192322E-08",97.1341552734,108.9216461182,11.7874908447 +"2011-11-29 20:18:43.066",134165.203125,-152.2085253517,134.7059783936,-152.5827104352,0.1675840616,102.6442740922,202.2278289795,87.247292835,201.9351348877,-32.3664940426,60.0033798218,-0.0003051711,97.1338882446,108.9022903442,11.7684020996 +"2011-11-29 20:18:43.100",134165.203125,-152.1680223299,134.65965271,-152.5340931487,0.071462974,40.0038954593,202.2253265381,87.2577976659,201.8261260986,-32.3211210959,60.0033760071,0.0001271395,97.1589660645,108.909614563,11.7506484985 +"2011-11-29 20:18:43.133",134166.65625,-152.1263171948,134.69090271,-152.4964724667,0.0852345079,58.307432982,202.2906799316,87.2958418196,201.8580932617,-32.2759291493,60.0033836365,0.0001780037,97.1550598145,108.9304504395,11.775390625 +"2011-11-29 20:18:43.166",134165.71875,-152.0846257201,134.7795257568,-152.4432516327,0.1178958565,112.6049165438,202.3601226807,87.3847708826,201.9908294678,-32.2376220333,60.00340271,0.0007120846,97.1531600952,108.9189376831,11.7657775879 +"2011-11-29 20:18:43.200",134163.21875,-152.0442593021,134.8017730713,-152.3818755528,0.1506919265,-173.9460121966,202.3481140137,87.4837266633,201.9183349609,-32.2314577876,60.00340271,-0.0003306102,97.1412353516,108.9036102295,11.7623748779 +"2011-11-29 20:18:43.233",134161.015625,-152.0043846578,134.7667999268,-152.3363045307,0.225970611,-153.1851604407,202.3450927734,87.5157602505,201.7307434082,-32.1869659354,60.00340271,0.0001017423,97.1175918579,108.9120788574,11.7944869995 +"2011-11-29 20:18:43.266",134164.28125,-151.9633898624,134.7314453125,-152.3020443018,0.2101606131,-161.7488516221,202.2988128662,87.5512977248,201.6896057129,-32.1451378569,60.0034179688,0.0003051851,97.1451873779,108.9077682495,11.7625808716 +"2011-11-29 20:18:43.300",134167.9375,-151.922108199,134.7435455322,-152.2748464885,0.19272089,171.3453357079,202.3381652832,87.6140876538,201.7383270264,-32.1309788747,60.0034065247,-0.0002543209,97.145904541,108.9128723145,11.7669677734 +"2011-11-29 20:18:43.333",134165.203125,-151.880908498,134.7812805176,-152.2483316942,0.1476919949,164.7460205922,202.372177124,87.6291072398,201.8648529053,-32.0968552496,60.00340271,-0.0002288818,97.1439590454,108.9106063843,11.7666473389 +"2011-11-29 20:18:43.366",134162.390625,-151.8405967215,134.746383667,-152.1903433881,0.0873135179,-83.458429808,202.2980041504,87.6393525235,201.9110565186,-32.0427601514,60.00340271,0,97.1426086426,108.9352798462,11.7926712036 +"2011-11-29 20:18:43.400",134164.796875,-151.8002712846,134.7128601074,-152.1383793089,0.2168589234,-77.1296653156,202.3057403564,87.6750812431,201.7783355713,-32.0108187718,60.0034103394,0.0004577637,97.1441650391,108.9100570679,11.7658920288 +"2011-11-29 20:18:43.433",134166.90625,-151.7593721119,134.7460021973,-152.0997340986,0.1948777139,-90.5612391486,202.3621826172,87.6989937354,201.784942627,-31.9465330313,60.0034065247,-0.0003560493,97.1587524414,108.9025192261,11.7437667847 +"2011-11-29 20:18:43.466",134167.6875,-151.7191422977,134.7021331787,-152.0867020977,0.0112930275,46.8075083632,202.3208007813,87.7260139637,201.7984466553,-31.8978713486,60.0033836365,-0.0007883878,97.1468200684,108.9377441406,11.7909240723 +"2011-11-29 20:18:43.500",134165.265625,-151.6788305212,134.5964508057,-152.0556383973,0.1639538705,52.485939809,202.1834411621,87.7848150623,201.7568206787,-31.8763767432,60.003364563,-0.0003560493,97.1448669434,108.9313812256,11.7865142822 +"2011-11-29 20:18:43.533",134162.96875,-151.6379586692,134.6204833984,-151.9950546194,0.1416492015,-7.5464104903,202.0970306396,87.837339217,201.8812103271,-31.8506440055,60.0033760071,0.0006103562,97.1411972046,108.915397644,11.7742004395 +"2011-11-29 20:18:43.566",134164.609375,-151.5970048549,134.7360076904,-151.9255642748,0.1068310291,-109.7495081499,202.1527557373,87.9005457876,201.9777374268,-31.7718338678,60.0033912659,0.0001525786,97.1466217041,108.9146270752,11.7680053711 +"2011-11-29 20:18:43.600",134165.796875,-151.5566794181,134.7833862305,-151.8789687242,0.1684230864,-169.8733069983,202.2683563232,87.9640597167,201.9233093262,-31.7069641462,60.0033760071,-0.0005086279,97.1330108643,108.9189300537,11.7859191895 +"2011-11-29 20:18:43.633",134166.1875,-151.5160534529,134.7754058838,-151.8759497806,0.1104474589,157.1154561948,202.2754364014,87.9607402447,201.9832000732,-31.6880581825,60.0033836365,0.000534053,97.1529769897,108.8938446045,11.7408676147 +"2011-11-29 20:18:43.666",134165.28125,-151.4748127707,134.7388458252,-151.835993174,0.0816327929,142.2427192771,202.2074127197,87.9884503222,201.9779663086,-31.6390686507,60.00340271,0.0005594781,97.1575622559,108.9201507568,11.762588501 +"2011-11-29 20:18:43.700",134163.734375,-151.4339272583,134.6904296875,-151.773783811,0.1040294245,173.8307732449,202.264465332,88.0458375716,201.7232055664,-31.5762377405,60.0033988953,-0.0004577637,97.1634140015,108.9237365723,11.7603225708 +"2011-11-29 20:18:43.733",134162.3125,-151.3939979724,134.6193847656,-151.7248113547,0.1117637306,-86.6654631705,202.2624969482,88.0953564431,201.55027771,-31.5731539101,60.0033798218,-0.000534053,97.1427459717,108.92137146,11.7786254883 +"2011-11-29 20:18:43.766",134163.421875,-151.3534676299,134.5744476318,-151.6787348985,0.1515857428,-48.3743776645,202.1436157227,88.1504897301,201.6159973145,-31.5494121726,60.0033874512,0.0005340669,97.1344909668,108.921257019,11.7867660522 +"2011-11-29 20:18:43.800",134165.75,-151.3122542684,134.6831817627,-151.6442151225,0.1014171019,-175.2169464766,202.1700286865,88.2019278847,201.7881469727,-31.4785557901,60.00340271,0.0002543209,97.1246948242,108.9167404175,11.7920455933 +"2011-11-29 20:18:43.833",134166.4375,-151.2713824164,134.7441864014,-151.6028514968,0.1419478357,146.0946317803,202.3056640625,88.2458938124,201.8626861572,-31.415619012,60.0033950806,-0.0003051711,97.1485671997,108.92527771,11.7767105103 +"2011-11-29 20:18:43.866",134166.578125,-151.2298412059,134.7205657959,-151.567074966,0.0547821969,94.2916152657,202.3064727783,88.2732350597,201.8793792725,-31.3928505764,60.0034065247,0.0006358232,97.1561660767,108.9155731201,11.7594070435 +"2011-11-29 20:18:43.900",134165.703125,-151.1885458822,134.7177581787,-151.5152884717,0.1392075866,-18.0417466171,202.3805541992,88.2868407965,201.87059021,-31.3455788372,60.0034217834,0.0001525925,97.147895813,108.9258422852,11.7779464722 +"2011-11-29 20:18:43.933",134164.890625,-151.1486848982,134.7096557617,-151.4799627333,0.1845961958,-17.5156103151,202.3767852783,88.3319951771,201.8821258545,-31.3291522322,60.0034217834,"-1.39698386192322E-08",97.1470565796,108.9328842163,11.7858276367 +"2011-11-29 20:18:43.966",134165.234375,-151.1092473859,134.7762145996,-151.4634473359,0.0804610997,-136.3500418726,202.3385925293,88.3706335572,201.9140319824,-31.3031633624,60.0033874512,-0.0013224408,97.1470413208,108.9230575562,11.7760162354 +"2011-11-29 20:18:44.000",134164.703125,-151.0687307038,134.7941436768,-151.4450604666,0.1705620438,-157.2871534902,202.2035522461,88.3629017831,202.0115203857,-31.2479003018,60.0033760071,"5.08502125740051E-05",97.1347503662,108.8876113892,11.7528610229 +"2011-11-29 20:18:44.033",134164.546875,-151.0269982479,134.7136993408,-151.4021532183,0.0442956798,-1.0645358884,202.1844940186,88.3749502368,201.9980773926,-31.1852708823,60.0033798218,0,97.1329345703,108.9204330444,11.7874984741 +"2011-11-29 20:18:44.066",134164.765625,-150.9860171129,134.7111358643,-151.3437687612,0.0739261806,-4.0665785186,202.1938171387,88.4531559028,202.0042266846,-31.1518371063,60.0033721924,-0.0003560493,97.1457595825,108.9288330078,11.7830734253 +"2011-11-29 20:18:44.100",134165.453125,-150.9458965817,134.7422180176,-151.3116122306,0.0561677814,12.4307376762,202.2258911133,88.5107412277,202.0565795898,-31.1382723506,60.0033798218,0.000534053,97.1411895752,108.9060974121,11.7649078369 +"2011-11-29 20:18:44.133",134164.71875,-150.9050793712,134.7281646729,-151.287938795,0.1143635586,43.9292495715,202.2843780518,88.533861418,202.0125427246,-31.100955612,60.0033988953,0.0007120706,97.1463928223,108.9180145264,11.7716217041 +"2011-11-29 20:18:44.166",134162.515625,-150.8643031419,134.7301330566,-151.2440889805,0.0454457663,-16.1575689251,202.3351135254,88.5614895332,201.8896636963,-31.0583352316,60.00340271,-0.0002543069,97.1483306885,108.919052124,11.7707214355 +"2011-11-29 20:18:44.200",134162.828125,-150.8239094031,134.7536773682,-151.1968240714,0.0925513059,150.9045602769,202.3674926758,88.6230841791,201.8466186523,-30.99400851,60.0033836365,-0.0005086418,97.1250991821,108.918006897,11.7929077148 +"2011-11-29 20:18:44.233",134164.90625,-150.7831878153,134.7168273926,-151.1259813494,0.1645302474,123.7318411169,202.2472839355,88.7230303373,201.8911743164,-30.9281962223,60.0033798218,0.000279732,97.1485366821,108.9025115967,11.7539749146 +"2011-11-29 20:18:44.266",134166,-150.7418105293,134.7218170166,-151.0568188538,0.0870875046,90.5609386203,202.3177032471,88.7800760772,201.8910064697,-30.8716251805,60.0033988953,0.0004832027,97.1453552246,108.9118881226,11.7665328979 +"2011-11-29 20:18:44.300",134166.265625,-150.7016899981,134.768081665,-151.0140891904,0.0917426348,9.1813212823,202.4943847656,88.7957308708,201.8983306885,-30.8321227814,60.0033912659,-0.0004323386,97.1558532715,108.9161911011,11.7603378296 +"2011-11-29 20:18:44.333",134165.515625,-150.6619382972,134.7150726318,-151.018009719,0.132144779,15.2514879827,202.4049072266,88.8107914379,201.8703918457,-30.8552429717,60.0033760071,-0.0003814884,97.147605896,108.9178695679,11.7702636719 +"2011-11-29 20:18:44.366",134166.078125,-150.6199872753,134.5744476318,-151.0148951527,0.2021651864,45.7268938894,202.1295928955,88.8467250631,201.7886505127,-30.8597372362,60.00340271,0.0009409525,97.1527557373,108.9187774658,11.7660217285 +"2011-11-29 20:18:44.400",134166.03125,-150.5790607818,134.5909729004,-150.9512377896,0.1213496327,44.3476840356,202.1221618652,88.891346689,201.7694244385,-30.7844036648,60.0034065247,-0.0007120706,97.139465332,108.9081192017,11.7686538696 +"2011-11-29 20:18:44.433",134164.234375,-150.5394183638,134.686920166,-150.8714475198,0.0281964988,149.0347550104,202.2240905762,88.9417056737,201.8248748779,-30.6772721476,60.0033607483,-0.0012461375,97.1399307251,108.9276199341,11.787689209 +"2011-11-29 20:18:44.466",134163.453125,-150.4987104364,134.6960601807,-150.8412034421,0.1557296962,112.4627939675,202.2109832764,88.9854325448,201.8977508545,-30.6236585778,60.0033760071,0.0011698343,97.1472015381,108.8995132446,11.7523117065 +"2011-11-29 20:18:44.500",134163.15625,-150.4569096787,134.6698608398,-150.8082409492,0.1204229817,95.0388447911,202.210647583,89.0100963579,201.8506164551,-30.5950674059,60.0034217834,0.0012715766,97.1582489014,108.9227828979,11.7645339966 +"2011-11-29 20:18:44.533",134163.09375,-150.4156006946,134.6867218018,-150.7709890975,0.0973708779,-52.1593748044,202.1360626221,89.0317002462,201.9407501221,-30.6007876893,60.0034103394,-0.0008392381,97.1390228271,108.8939361572,11.7549133301 +"2011-11-29 20:18:44.566",134164.09375,-150.3756304275,134.76222229,-150.7418651708,0.0759391934,-88.9733226194,202.2412261963,89.0796140233,202.0112915039,-30.5821173672,60.0033836365,-0.0002288818,97.1362915039,108.9165344238,11.7802429199 +"2011-11-29 20:18:44.600",134164.5625,-150.3356328398,134.7519378662,-150.6811174684,0.1592244208,-156.0823627621,202.3314208984,89.1489882547,201.7677154541,-30.5064832674,60.0033874512,0.0002034428,97.1456069946,108.8992843628,11.7536773682 +"2011-11-29 20:18:44.633",134164.03125,-150.2950068746,134.6801605225,-150.6392484087,0.1437509209,-143.4848028381,202.2668762207,89.174020898,201.6330871582,-30.4570122073,60.0033874512,-0.0002543069,97.1497039795,108.8985671997,11.7488632202 +"2011-11-29 20:18:44.666",134165,-150.2541213622,134.6676177979,-150.6150831995,0.0362857729,157.3157993036,202.2705383301,89.2146195424,201.7118988037,-30.436169885,60.0033760071,0,97.1421966553,108.9287567139,11.7865600586 +"2011-11-29 20:18:44.700",134166.65625,-150.2131948687,134.6898956299,-150.5788831969,0.0973593742,68.5785007011,202.3316040039,89.2621098477,201.815322876,-30.4020189392,60.0033798218,"7.62753188610077E-05",97.1526794434,108.9155578613,11.762878418 +"2011-11-29 20:18:44.733",134165.84375,-150.1720361488,134.7665252686,-150.5485708173,0.0845773295,41.2632696441,202.3072509766,89.2860360003,202.0768890381,-30.3780688809,60.00340271,0.0006866455,97.1288833618,108.9262542725,11.7973709106 +"2011-11-29 20:18:44.766",134164.953125,-150.1310959949,134.8052825928,-150.4941342096,0.086912781,-41.5930721584,202.3694000244,89.3231717389,202.0764312744,-30.3344820287,60.0034103394,"2.54251062870026E-05",97.1431045532,108.9229202271,11.7798156738 +"2011-11-29 20:18:44.800",134165.359375,-150.090770558,134.776763916,-150.4320887712,0.0729341283,-90.3379192835,202.4706573486,89.395715178,201.8249206543,-30.277231383,60.0034103394,"-1.39698386192322E-08",97.1479568481,108.9253311157,11.7773742676 +"2011-11-29 20:18:44.833",134164.640625,-150.0502265551,134.7384033203,-150.4167618267,0.0866294876,118.3630665424,202.3032684326,89.421854312,201.9156951904,-30.2304855684,60.0033988953,-0.0001780177,97.1393280029,108.9196472168,11.7803192139 +"2011-11-29 20:18:44.866",134162.875,-150.0095459484,134.7169647217,-150.3976236367,0.1200720519,83.8780424797,202.1879272461,89.4223870667,202.0354003906,-30.1898459428,60.0033912659,-0.0003306102,97.1327133179,108.9108886719,11.778175354 +"2011-11-29 20:18:44.900",134163.15625,-149.9691522096,134.7059020996,-150.3390206136,0.1968485564,94.0327852471,202.3366851807,89.5111180543,201.8681030273,-30.1384248636,60.0033798218,-0.0003560493,97.1296615601,108.9120635986,11.7824020386 +"2011-11-29 20:18:44.933",134164.28125,-149.9289633766,134.6353912354,-150.277439628,0.2543467581,80.7568304441,202.3519134521,89.6002725135,201.7156677246,-30.0985843702,60.0033683777,-0.0003051711,97.1615142822,108.9188079834,11.7572937012 +"2011-11-29 20:18:44.966",134165.078125,-149.8873538641,134.577255249,-150.2192464163,0.0954119042,21.5723516538,202.188583374,89.6203942508,201.6391601563,-30.0623126506,60.0033798218,0.0004068995,97.1499557495,108.9117584229,11.7618026733 +"2011-11-29 20:18:45.000",134165.15625,-149.8463454084,134.6401519775,-150.1467917696,0.2492560744,-59.781066786,202.2110290527,89.6561776118,201.7126922607,-30.0200747608,60.0033874512,-0.0002543209,97.145324707,108.924369812,11.779045105 +"2011-11-29 20:18:45.033",134165.03125,-149.8061292545,134.7345581055,-150.0971362943,0.1965187192,-78.2182950164,202.2691040039,89.7128545216,201.8751525879,-29.9597573602,60.0033798218,"2.54111364483833E-05",97.122718811,108.907119751,11.7844009399 +"2011-11-29 20:18:45.066",134165.375,-149.7644924214,134.7899780273,-150.0725066322,0.0747506246,-148.4260485516,202.4236907959,89.7317604852,201.873916626,-29.8768695996,60.0034103394,0.001093545,97.1272125244,108.911315918,11.7841033936 +"2011-11-29 20:18:45.100",134166.03125,-149.7237981543,134.7608642578,-150.0578490462,0.0931568071,143.286467805,202.4172058105,89.7424702218,201.8312530518,-29.8332998228,60.0034255981,0,97.1443099976,108.9178314209,11.7735214233 +"2011-11-29 20:18:45.133",134166.0625,-149.6850026798,134.7211761475,-150.0255149307,0.0898812041,161.1285065209,202.2468414307,89.801906528,201.8596038818,-29.8333817851,60.0033836365,-0.0015258836,97.1636047363,108.9143753052,11.7507705688 +"2011-11-29 20:18:45.166",134166.484375,-149.6444450165,134.6316070557,-149.9778402103,0.0124164009,8.8252191247,202.1706848145,89.8516166448,201.7375030518,-29.8081818022,60.0033721924,0.0006866455,97.1539764404,108.9092025757,11.7552261353 +"2011-11-29 20:18:45.200",134167,-149.6026715795,134.5969390869,-149.9415309246,0.1367984712,16.4385168038,202.3015899658,89.862818155,201.6244354248,-29.7543530813,60.0034141541,0.0009663776,97.1403961182,108.9084472656,11.7680511475 +"2011-11-29 20:18:45.233",134167.6875,-149.5612259917,134.6768951416,-149.9002765821,0.187798664,7.6283565387,202.3805541992,89.8896539682,201.8261566162,-29.7100080781,60.0034065247,-0.0004577497,97.131187439,108.9152679443,11.7840805054 +"2011-11-29 20:18:45.266",134167,-149.5210098378,134.712890625,-149.8470284273,0.0921579972,19.2010346249,202.3908843994,89.9814312201,201.840057373,-29.6799689062,60.0033950806,0,97.140586853,108.9135894775,11.7730026245 +"2011-11-29 20:18:45.300",134165.0625,-149.4811215331,134.7002716064,-149.7970997445,0.0556700379,-178.1852100861,202.4139251709,90.0323434502,201.6398010254,-29.618364015,60.0033950806,0.0001017284,97.1276626587,108.9233627319,11.7957000732 +"2011-11-29 20:18:45.333",134165.6875,-149.4403589641,134.7132568359,-149.7475535522,0.0913944766,-85.5294319568,202.404006958,90.0483943947,201.6983032227,-29.566157464,60.00340271,-0.0002034428,97.160697937,108.9039077759,11.7432098389 +"2011-11-29 20:18:45.366",134164.421875,-149.3991046215,134.696685791,-149.7209294748,0.0744585618,-29.2208162694,202.3307342529,90.0686322453,201.7996368408,-29.5281542915,60.0033950806,0,97.13671875,108.9136581421,11.7769393921 +"2011-11-29 20:18:45.400",134162.8125,-149.3582737507,134.7206268311,-149.6935404163,0.0217460152,-139.0068898371,202.3504638672,90.123758702,201.7920684814,-29.5114715544,60.0033836365,-0.0004831748,97.1480560303,108.9178314209,11.7697753906 +"2011-11-29 20:18:45.433",134163.8125,-149.3180575968,134.7084350586,-149.648829998,0.0324872136,-54.2944133918,202.3072052002,90.1949087826,201.822555542,-29.5013731198,60.0033836365,0.0001271674,97.1444320679,108.9319839478,11.7875518799 +"2011-11-29 20:18:45.466",134165.859375,-149.2775682354,134.6843261719,-149.6257576189,0.0316454209,77.5270593818,202.1468353271,90.2108982555,201.9294128418,-29.4556313429,60.0033912659,0.0002543209,97.1390304565,108.9437942505,11.8047637939 +"2011-11-29 20:18:45.500",134164.96875,-149.2357811381,134.6840667725,-149.6021524852,0.0813834444,123.5008987607,202.1306152344,90.2370510498,201.9190216064,-29.418119944,60.00340271,0.0002543069,97.1423721313,108.9129867554,11.770614624 +"2011-11-29 20:18:45.533",134162.296875,-149.1942672483,134.6519622803,-149.5480164058,0.0481467694,-41.6800887684,202.1430969238,90.27135909,201.8294525146,-29.3801167714,60.0033988953,-0.0003814744,97.1476898193,108.9245910645,11.7769012451 +"2011-11-29 20:18:45.566",134161.890625,-149.1550892832,134.6429443359,-149.5077592708,0.0746480376,-40.3148364062,202.1439819336,90.2888375441,201.8116912842,-29.3240409183,60.0033836365,-0.0003560213,97.1529159546,108.9060974121,11.7531814575 +"2011-11-29 20:18:45.600",134163.75,-149.1144359973,134.654876709,-149.463390362,0.0664435178,24.7237582482,202.298828125,90.3437181141,201.7342071533,-29.2718582731,60.0033950806,0.0009409525,97.1493148804,108.9095687866,11.7602539063 +"2011-11-29 20:18:45.633",134164.25,-149.0725805981,134.6300354004,-149.399159263,0.1234369278,28.6661946635,202.3077087402,90.4074574394,201.7080535889,-29.2063635891,60.0034332275,0.0009918166,97.1311187744,108.9199295044,11.78881073 +"2011-11-29 20:18:45.666",134164.96875,-149.0322688216,134.6519622803,-149.3424413722,0.097935468,-17.7196007449,202.2429199219,90.4636289151,201.7801055908,-29.16884536,60.0033950806,-0.0018056296,97.1671295166,108.9191131592,11.7519836426 +"2011-11-29 20:18:45.700",134164.796875,-148.9925854225,134.694732666,-149.2903680099,0.1009075493,-112.0007180098,202.2584991455,90.5273819009,201.7472839355,-29.1250228663,60.0033531189,-0.0008138129,97.1462097168,108.9195785522,11.7733688354 +"2011-11-29 20:18:45.733",134163.46875,-148.9516179479,134.7135009766,-149.2641537439,0.1067470089,-154.9299186038,202.3343505859,90.5587939409,201.7019500732,-29.0835533728,60.0033874512,0.0012970157,97.1473770142,108.9226837158,11.7753067017 +"2011-11-29 20:18:45.766",134161.625,-148.9101040581,134.6959381104,-149.2731559332,0.0946026817,153.5176677099,202.2583312988,90.5550168462,201.7803039551,-29.0783316931,60.0034103394,"2.54390761256218E-05",97.1527862549,108.9119186401,11.7591323853 +"2011-11-29 20:18:45.800",134161.71875,-148.8702294137,134.6962127686,-149.2619680834,0.1091969758,122.4366869861,202.246887207,90.5959570001,201.8401031494,-29.088617958,60.0033721924,-0.0012970017,97.1473846436,108.9092559814,11.7618713379 +"2011-11-29 20:18:45.833",134162.140625,-148.8306552977,134.6522674561,-149.189417814,0.0531143025,46.6927133739,202.2242889404,90.6472039095,201.7852783203,-29.0215591607,60.0033531189,"2.79396772384644E-08",97.1502456665,108.9102020264,11.7599563599 +"2011-11-29 20:18:45.866",134162.421875,-148.7900429929,134.6009368896,-149.1459504901,0.0758183151,1.7385883678,202.161239624,90.6466916453,201.7103424072,-28.9486024951,60.0033798218,0.0009154994,97.1437606812,108.9187774658,11.7750167847 +"2011-11-29 20:18:45.900",134164.46875,-148.7483515182,134.6339874268,-149.1182335825,0.038683001,48.071499756,202.2641906738,90.6827277233,201.6772155762,-28.9153736248,60.0033950806,0.0001780177,97.1414260864,108.9300918579,11.7886657715 +"2011-11-29 20:18:45.933",134164.96875,-148.7071381567,134.6654205322,-149.0789873155,0.0577097312,-145.6785093353,202.2571868896,90.7233946697,201.683883667,-28.881765679,60.0033874512,-0.0004577637,97.1473312378,108.9007644653,11.7534332275 +"2011-11-29 20:18:45.966",134163.734375,-148.6670039651,134.7108001709,-149.0093057256,0.1632880419,-106.6654523434,202.322265625,90.7853581458,201.6916656494,-28.8345690718,60.0033874512,0.000279732,97.1564941406,108.9257278442,11.7692337036 +"2011-11-29 20:18:46.000",134165.296875,-148.6260774716,134.7744445801,-148.973324289,0.2019471228,-126.4889289376,202.3198852539,90.823853092,201.8191070557,-28.7919316159,60.0034103394,0.0009409525,97.1431274414,108.9133682251,11.7702407837 +"2011-11-29 20:18:46.033",134165.921875,-148.5845362611,134.7618560791,-148.9516042875,0.2368354648,-157.4050152345,202.1580810547,90.859923321,201.8955535889,-28.7529824622,60.0034332275,0.0003814744,97.1324005127,108.9052124023,11.7728118896 +"2011-11-29 20:18:46.066",134164.296875,-148.5434321827,134.7008056641,-148.8894768868,0.081386283,-179.6252188688,202.1275787354,90.9578750639,201.9064788818,-28.724848913,60.0034217834,-0.0004069135,97.1353378296,108.9176330566,11.7822952271 +"2011-11-29 20:18:46.100",134161.65625,-148.5024510477,134.7369232178,-148.8234289575,0.0589309186,-39.9940463265,202.339630127,91.0168878983,201.8915710449,-28.6791890984,60.0034179688,"7.63032585382462E-05",97.1391830444,108.9350280762,11.7958450317 +"2011-11-29 20:18:46.133",134161.984375,-148.4620436485,134.7622375488,-148.8022963522,0.095948033,-107.9498420961,202.3565368652,91.0089717091,201.8595733643,-28.6308689251,60.0034179688,"-1.39698386192322E-08",97.134437561,108.9253463745,11.7909088135 +"2011-11-29 20:18:46.166",134163.640625,-148.421513306,134.6938476563,-148.7820789923,0.1135404259,-141.8869893648,202.2513580322,91.0274268802,201.7196807861,-28.5949250546,60.0034103394,-0.0004832167,97.1368484497,108.926612854,11.7897644043 +"2011-11-29 20:18:46.200",134165.34375,-148.3802726238,134.6739196777,-148.7202247992,0.0733036101,-140.106714218,202.2656097412,91.0908178659,201.6858520508,-28.53383072,60.0034065247,0,97.1395339966,108.9086532593,11.7691192627 +"2011-11-29 20:18:46.233",134165.3125,-148.3391822057,134.6906433105,-148.6635615498,0.0899165869,39.9734089099,202.3379211426,91.1500902475,201.8251037598,-28.4729071402,60.00340271,-0.0002543069,97.1456604004,108.9134597778,11.7677993774 +"2011-11-29 20:18:46.266",134164.734375,-148.2993895236,134.7536621094,-148.6356807176,0.1150506437,14.0571320761,202.3620452881,91.1816388913,202.0107269287,-28.4624091394,60.0033874512,-0.000559492,97.1512985229,108.8977127075,11.7464141846 +"2011-11-29 20:18:46.300",134165.859375,-148.2598154076,134.7343597412,-148.6110783762,0.0878530964,-51.3754739934,202.2057800293,91.2036662513,202.0102081299,-28.4503623933,60.0033721924,-0.0004068995,97.1300354004,108.9198074341,11.7897720337 +"2011-11-29 20:18:46.333",134166.375,-148.21946265,134.6753692627,-148.5680345241,0.0557210669,-7.9480256135,202.1563873291,91.2544077267,201.9146118164,-28.4002800312,60.0033683777,"-5.08641824126244E-05",97.1334075928,108.9139709473,11.7805633545 +"2011-11-29 20:18:46.366",134165.34375,-148.1781400055,134.6445770264,-148.5115351993,0.1584796607,3.7546971401,202.3202667236,91.3183724483,201.7553405762,-28.3618943681,60.0033683777,0,97.1609954834,108.9113845825,11.7503890991 +"2011-11-29 20:18:46.400",134164.703125,-148.1370905686,134.6819915771,-148.4435611566,0.1105148271,-16.992300004,202.3824615479,91.3715659615,201.7385101318,-28.2816242774,60.0033683777,"7.62892886996269E-05",97.1473617554,108.919303894,11.7719421387 +"2011-11-29 20:18:46.433",134164.828125,-148.0962870185,134.6990356445,-148.4031947386,0.093611002,-56.1676098471,202.2568817139,91.3906221893,201.8461914063,-28.2231288298,60.0033950806,0.0008392241,97.1342697144,108.936706543,11.8024368286 +"2011-11-29 20:18:46.466",134165.15625,-148.0559889024,134.7233428955,-148.3783601708,0.1377227902,-79.5890388508,202.2057342529,91.4218224934,201.9165344238,-28.2146884235,60.0033988953,"1.39698386192322E-08",97.1223220825,108.9169158936,11.794593811 +"2011-11-29 20:18:46.500",134164.03125,-148.0153629372,134.7425994873,-148.3638118679,0.1625577211,-140.8661492914,202.195892334,91.4573736281,201.8726654053,-28.1907434878,60.00340271,"5.08641824126244E-05",97.1450119019,108.9123916626,11.7673797607 +"2011-11-29 20:18:46.533",134166.15625,-147.9745047456,134.7405548096,-148.3548233389,0.1842510849,170.6077435794,202.2069549561,91.4721200065,201.8779754639,-28.1471600508,60.0033950806,"-2.54251062870026E-05",97.14478302,108.9152450562,11.7704620361 +"2011-11-29 20:18:46.566",134168.515625,-147.9334279879,134.7182769775,-148.31406077,0.1821564138,129.8233999697,202.2593231201,91.5217891421,201.8719940186,-28.0983959152,60.0033950806,0,97.1516265869,108.9108276367,11.7592010498 +"2011-11-29 20:18:46.600",134166.75,-147.8924058718,134.6922149658,-148.2483816709,0.0977247804,116.6196470964,202.2337799072,91.5729199383,201.8538970947,-28.0417172979,60.0033988953,"7.62753188610077E-05",97.1241836548,108.9315185547,11.8073348999 +"2011-11-29 20:18:46.633",134163.65625,-147.8521623972,134.6917266846,-148.1875383458,0.0746720359,-86.757766347,202.1311645508,91.6062922425,201.9107208252,-27.9997628609,60.0033988953,0,97.1350860596,108.9224090576,11.787322998 +"2011-11-29 20:18:46.666",134165.125,-147.8118779414,134.633895874,-148.1157940387,0.1103536785,-14.9937132283,202.1872253418,91.6843134934,201.7920837402,-27.9383543376,60.0033950806,"-7.63032585382462E-05",97.1530075073,108.9214859009,11.7684783936 +"2011-11-29 20:18:46.700",134166.46875,-147.7705416366,134.6790771484,-148.073487847,0.0566342101,-20.4876476042,202.3769683838,91.7720677639,201.696182251,-27.9312663088,60.0034065247,0.0002543069,97.1354675293,108.9168395996,11.7813720703 +"2011-11-29 20:18:46.733",134163.828125,-147.7300795959,134.7729034424,-148.04435026,0.1310273707,-127.8245587694,202.3834228516,91.8362373911,201.813079834,-27.9374612904,60.0033874512,-0.0008646632,97.1252059937,108.9395065308,11.8143005371 +"2011-11-29 20:18:46.766",134163.578125,-147.68942631,134.7297058105,-148.0132455785,0.0988285989,-102.4521203803,202.2160949707,91.8534494678,201.9047851563,-27.8997569386,60.0033798218,"7.62892886996269E-05",97.1395187378,108.9092788696,11.7697601318 +"2011-11-29 20:18:46.800",134166.875,-147.6480763448,134.633392334,-147.9667046695,0.1173108667,-68.2172383356,202.1251525879,91.8529030527,201.7558288574,-27.8187696781,60.0034065247,0.0009409664,97.1448516846,108.9085769653,11.7637252808 +"2011-11-29 20:18:46.833",134167.546875,-147.6074367192,134.6470031738,-147.9323761388,0.1894122362,-81.6087052978,202.1819152832,91.8579778833,201.6851501465,-27.7714894011,60.0034103394,-0.0001525925,97.14453125,108.900138855,11.755607605 +"2011-11-29 20:18:46.866",134164.90625,-147.567097622,134.7203826904,-147.9033478348,0.2019614279,-79.6639523656,202.2761230469,91.8832700738,201.8123474121,-27.7427325972,60.0033874512,-0.0006866455,97.128616333,108.9242477417,11.7956314087 +"2011-11-29 20:18:46.900",134162.90625,-147.5256793548,134.6785583496,-147.8484877554,0.0789105818,-51.1771867716,202.2713165283,91.9838924206,201.7750091553,-27.7026906132,60.0034065247,0.0008138129,97.1317062378,108.909072876,11.7773666382 +"2011-11-29 20:18:46.933",134165.203125,-147.4837693141,134.707824707,-147.8020834502,0.0435027741,165.5181324967,202.2725067139,92.0501794065,201.8225402832,-27.6449925901,60.0034294128,0.0006611925,97.1388778687,108.9334335327,11.7945556641 +"2011-11-29 20:18:46.966",134167.265625,-147.442856481,134.8170013428,-147.7495866162,0.1738254428,-163.7266695001,202.3580932617,92.0730673704,201.9279022217,-27.5582662632,60.0034179688,-0.0006866595,97.1466522217,108.9198150635,11.7731628418 +"2011-11-29 20:18:47.000",134167,-147.4032823649,134.827255249,-147.6999311409,0.1881670803,-161.0109999464,202.3788757324,92.1397641677,201.9215240479,-27.5269635062,60.0034065247,"-7.62892886996269E-05",97.1384048462,108.9217987061,11.7833938599 +"2011-11-29 20:18:47.033",134164.859375,-147.3644459093,134.7173156738,-147.662201176,0.0231053121,75.8672004701,202.2570648193,92.1941188131,201.9129486084,-27.513759043,60.0033874512,-0.0010172417,97.1418762207,108.9312286377,11.789352417 +"2011-11-29 20:18:47.066",134165.140625,-147.3226724723,134.5740966797,-147.6491418543,0.1951939166,33.419179873,201.9758605957,92.2133936069,201.942779541,-27.5106034956,60.0033874512,0.0001017284,97.1416015625,108.9205245972,11.7789230347 +"2011-11-29 20:18:47.100",134165.484375,-147.2802160164,134.5737762451,-147.675779592,0.1858285069,60.6280512242,202.0484924316,92.1821386613,201.8379516602,-27.5085339483,60.0033912659,0.0001271535,97.1408004761,108.9041442871,11.763343811 +"2011-11-29 20:18:47.133",134165.03125,-147.2401774475,134.6703491211,-147.6461502314,0.08275415,70.1054304712,202.4007263184,92.170465868,201.6779937744,-27.4476957458,60.003364563,-0.0008646632,97.1339111328,108.9125900269,11.778678894 +"2011-11-29 20:18:47.166",134165.140625,-147.2004394069,134.7465667725,-147.5306380722,0.089062579,-97.368192015,202.4677886963,92.2834508572,201.7167816162,-27.3634624378,60.0033683777,0.0007629488,97.1462936401,108.9160308838,11.7697372437 +"2011-11-29 20:18:47.200",134165.203125,-147.1592533662,134.7343139648,-147.4355208578,0.0718538463,-125.7978777182,202.3409576416,92.4223086031,201.7963562012,-27.3004488201,60.0034179688,0.0014750054,97.1614685059,108.9402618408,11.778793335 +"2011-11-29 20:18:47.233",134165.046875,-147.1183132124,134.7476806641,-147.4047986669,0.0540898889,-165.2750870453,202.3402099609,92.4306687546,201.8531036377,-27.2351556267,60.00340271,-0.0010681199,97.1429977417,108.8983230591,11.7553253174 +"2011-11-29 20:18:47.266",134163.71875,-147.0781107189,134.7838439941,-147.3806197972,0.1578145176,-110.3090918883,202.3689880371,92.4121316212,201.8589782715,-27.1998213506,60.0033721924,-0.000813799,97.1454696655,108.896812439,11.7513427734 +"2011-11-29 20:18:47.300",134163.640625,-147.0372935084,134.758392334,-147.3174951889,0.2561130524,-87.2549563072,202.4426879883,92.4389674344,201.7075195313,-27.1360666573,60.0033874512,0.0007629488,97.1478881836,108.9191207886,11.771232605 +"2011-11-29 20:18:47.333",134165.296875,-146.9967495055,134.7578735352,-147.2919776022,0.1624657661,-56.437211074,202.5214691162,92.4777697391,201.7572937012,-27.1069888345,60.0033950806,0,97.1296005249,108.9107284546,11.7811279297 +"2011-11-29 20:18:47.366",134166.953125,-146.9567792385,134.7072601318,-147.286158281,0.1151265055,-23.265698983,202.3269042969,92.5238803462,201.8611907959,-27.1228195055,60.0033721924,-0.0007375237,97.1393890381,108.9146575928,11.7752685547 +"2011-11-29 20:18:47.400",134166.78125,-146.9152516883,134.7164306641,-147.2386748059,0.100984998,-83.2353558297,202.222366333,92.5867727281,201.884262085,-27.0895906351,60.0033760071,0.0003051572,97.1465682983,108.9102401733,11.763671875 +"2011-11-29 20:18:47.433",134166.15625,-146.8740929684,134.7741546631,-147.1950162367,0.0959449038,-121.4272943098,202.2574462891,92.6262990328,201.98046875,-27.0279089043,60.0033950806,0.0003051711,97.1620483398,108.9331359863,11.7710876465 +"2011-11-29 20:18:47.466",134167.0625,-146.8343549278,134.7418365479,-147.1732006125,0.0569143109,-68.4824955622,202.2925109863,92.6611671485,201.9233856201,-27.0230867907,60.0033721924,-0.001093559,97.1496887207,108.9187316895,11.7690429688 +"2011-11-29 20:18:47.500",134165.78125,-146.7944256419,134.6800384521,-147.1337631003,0.1023973748,-38.8166412419,202.2374572754,92.6896831883,201.8364868164,-26.9844586559,60.0033531189,-0.0001525646,97.117767334,108.9253082275,11.8075408936 +"2011-11-29 20:18:47.533",134163.609375,-146.7534581673,134.6877288818,-147.0951861918,0.0866918862,-30.214188737,202.220703125,92.6830442444,201.8844299316,-26.8949831778,60.0033798218,0.0009409525,97.1679534912,108.9197235107,11.7517700195 +"2011-11-29 20:18:47.566",134164.234375,-146.7118349945,134.6420593262,-147.073780379,0.1355481595,46.9944847918,202.2495117188,92.7237453417,201.810836792,-26.861522081,60.0033874512,-0.0002288818,97.14453125,108.9106063843,11.7660751343 +"2011-11-29 20:18:47.600",134164.328125,-146.6714002746,134.6185302734,-147.0440690561,0.185611248,65.350683073,202.3340911865,92.7850257989,201.6803588867,-26.8443646458,60.0033683777,-0.0003051711,97.1426620483,108.9112243652,11.7685623169 +"2011-11-29 20:18:47.633",134163.875,-146.6307196679,134.6816864014,-146.9998504114,0.1078797579,49.9427974187,202.3219146729,92.822796745,201.828414917,-26.8131165304,60.0033912659,0.000813799,97.1249084473,108.9129486084,11.7880401611 +"2011-11-29 20:18:47.666",134165.328125,-146.5898341555,134.7412872314,-146.9643744088,0.1616576165,33.8141423919,202.3481903076,92.8510737282,202.0393829346,-26.7789058204,60.0034065247,0.00027976,97.1314086914,108.9166488647,11.7852401733 +"2011-11-29 20:18:47.700",134166.359375,-146.5488530205,134.7479248047,-146.8947064793,0.0466296487,135.9132922563,202.3667907715,92.9207484879,201.8688964844,-26.6968291447,60.0034065247,-0.0001780316,97.1324005127,108.9146270752,11.7822265625 +"2011-11-29 20:18:47.733",134164.90625,-146.5080084893,134.6833953857,-146.8188777191,0.0981492922,-139.3658572591,202.1865234375,92.9876092097,201.7685699463,-26.6285870171,60.00340271,-0.000279732,97.131401062,108.9034957886,11.7720947266 +"2011-11-29 20:18:47.766",134164.78125,-146.4676830524,134.6651000977,-146.7775140935,0.0898040533,-56.1008174272,202.1206512451,93.0238160425,201.8778686523,-26.6040598078,60.0033988953,0,97.1274185181,108.8955078125,11.7680892944 +"2011-11-29 20:18:47.800",134165.359375,-146.4281362571,134.7364959717,-146.7678425457,0.0480953343,-112.4975118191,202.3002929688,93.0646674039,201.8711090088,-26.6076678552,60.0033874512,-0.0007120706,97.1322860718,108.9167022705,11.7844161987 +"2011-11-29 20:18:47.833",134164.484375,-146.3875785938,134.7746276855,-146.7422293363,0.0848153904,-134.1345607323,202.4050750732,93.0825829901,201.8379211426,-26.5717939942,60.0033798218,0.0002034567,97.1497650146,108.9346160889,11.7848510742 +"2011-11-29 20:18:47.866",134163.40625,-146.3459827418,134.7068939209,-146.6994860125,0.1135640591,17.8674265291,202.3598632813,93.109623709,201.8724365234,-26.5166965657,60.0033798218,0,97.1481628418,108.9061431885,11.7579803467 +"2011-11-29 20:18:47.900",134162.875,-146.3048376822,134.6504364014,-146.6639963495,0.1936088204,46.0584176113,202.3663482666,93.1732605815,201.7755737305,-26.4886688844,60.0033912659,"7.62892886996269E-05",97.1435165405,108.9242401123,11.7807235718 +"2011-11-29 20:18:47.933",134163.828125,-146.265004019,134.6873626709,-146.6011449488,0.0372895561,-19.3476975694,202.4325256348,93.2504827003,201.6533966064,-26.4606207126,60.0033760071,-0.0003814604,97.1430511475,108.9333724976,11.7903213501 +"2011-11-29 20:18:47.966",134164.25,-146.2253069595,134.7282104492,-146.55822404,0.1047452539,-111.7093421398,202.3450164795,93.2818810799,201.7550811768,-26.414851615,60.0033798218,0.000279732,97.1576843262,108.9136581421,11.7559738159 +"2011-11-29 20:18:48.000",134162.59375,-146.1841482396,134.6791992188,-146.5302612456,0.0228358824,17.1908040843,202.1817626953,93.3169541013,201.8791809082,-26.3790460558,60.0033988953,0.0003814744,97.1446533203,108.9181900024,11.7735366821 +"2011-11-29 20:18:48.033",134162.859375,-146.1427436328,134.6366424561,-146.4739258453,0.1299930513,35.1253133163,202.2069244385,93.3708169731,201.8344421387,-26.3173574947,60.0033912659,-0.0003305962,97.125579834,108.9176483154,11.7920684814 +"2011-11-29 20:18:48.066",134164.53125,-146.1018444601,134.6262207031,-146.4469465981,0.1018220559,62.8810027823,202.2994689941,93.3936707861,201.6696472168,-26.2728861331,60.0033836365,0.0002034428,97.154045105,108.90675354,11.7527084351 +"2011-11-29 20:18:48.100",134165.5625,-146.0604671741,134.6806182861,-146.3977828964,0.0085496632,127.0118208997,202.4425048828,93.4198372408,201.6009674072,-26.2121999023,60.0034217834,0.0011698483,97.1421203613,108.915687561,11.7735671997 +"2011-11-29 20:18:48.133",134164.265625,-146.0203739637,134.8227386475,-146.3677027433,0.1013273671,-153.7949460694,202.5034790039,93.4334771285,201.8667449951,-26.1645337196,60.0034217834,0,97.1264343262,108.90259552,11.7761611938 +"2011-11-29 20:18:48.166",134163.203125,-145.9813735835,134.842666626,-146.3510644025,0.0984089822,-163.7646590122,202.3586120605,93.4730580748,202.0774688721,-26.1665622858,60.0033950806,-0.0015767477,97.1271209717,108.9276351929,11.8005142212 +"2011-11-29 20:18:48.200",134163.546875,-145.9403924485,134.7916870117,-146.3172003246,0.0524356887,-170.8069665371,202.3604888916,93.5214158141,201.9685211182,-26.149328011,60.0033836365,0.0002034428,97.1376800537,108.9206085205,11.7829284668 +"2011-11-29 20:18:48.233",134164.78125,-145.8985233889,134.7757415771,-146.2607966224,0.0969044641,171.5293410041,202.4856262207,93.5638244587,201.7719268799,-26.0663053541,60.00340271,0.0004068995,97.1402664185,108.9267883301,11.7865219116 +"2011-11-29 20:18:48.266",134166.09375,-145.8570641406,134.7046661377,-146.1833969188,0.0766429156,107.0994220727,202.4759063721,93.624783897,201.6626281738,-25.9699484604,60.00340271,"2.54251062870026E-05",97.1254348755,108.9016342163,11.7761993408 +"2011-11-29 20:18:48.300",134165.953125,-145.8159873829,134.6695861816,-146.1572919358,0.0859208032,62.1259868413,202.3972015381,93.6412446529,201.6898345947,-25.9435514868,60.0034294128,0.0011189701,97.14503479,108.9070510864,11.7620162964 +"2011-11-29 20:18:48.333",134165.4375,-145.7761537197,134.7456207275,-146.1298209149,0.0535333157,-144.5442744614,202.3156890869,93.6790292594,201.8699188232,-25.9386798543,60.0034294128,0,97.1409225464,108.9212722778,11.7803497314 +"2011-11-29 20:18:48.366",134164.75,-145.7355004338,134.7682037354,-146.0570930606,0.1587524712,-135.0607617045,202.1800689697,93.7641470768,201.9706115723,-25.8867208978,60.0034217834,-0.0003814744,97.1496276855,108.9207763672,11.7711486816 +"2011-11-29 20:18:48.400",134162.78125,-145.6936177138,134.706451416,-146.0131066424,0.0136338109,-172.1385802177,202.1568908691,93.8173610807,201.9520721436,-25.8417048285,60.0034217834,0,97.1389160156,108.9180526733,11.7791366577 +"2011-11-29 20:18:48.433",134163.9375,-145.6522540881,134.7175750732,-145.9857039234,0.1031325758,74.9306312708,202.2845153809,93.8598311969,201.9478149414,-25.8118244584,60.0034179688,-0.0002288958,97.1563873291,108.9171447754,11.7607574463 +"2011-11-29 20:18:48.466",134165.515625,-145.611955972,134.7944946289,-145.9628091293,0.1073912308,151.7356030536,202.3488311768,93.8626315745,201.9869232178,-25.7609754076,60.0033988953,-0.0006357813,97.1460189819,108.9254455566,11.7794265747 +"2011-11-29 20:18:48.500",134164.1875,-145.5716851767,134.8117523193,-145.9537386381,0.1978236139,173.8717680403,202.2914123535,93.8547222154,201.9954223633,-25.7257230937,60.0033988953,"7.63032585382462E-05",97.1381607056,108.9176330566,11.7794723511 +"2011-11-29 20:18:48.533",134161.96875,-145.5309635889,134.7405853271,-145.9076075405,0.0980280414,154.8639116557,202.3161315918,93.9126422196,201.8577575684,-25.7035420544,60.00340271,-0.0001271674,97.1517791748,108.909942627,11.7581634521 +"2011-11-29 20:18:48.566",134162.296875,-145.4904332463,134.7382202148,-145.8298799877,0.1550034732,105.9356466306,202.4766540527,94.0022338109,201.7887420654,-25.6196041522,60.0033798218,-0.0006357953,97.146736145,108.9325256348,11.7857894897 +"2011-11-29 20:18:48.600",134163.90625,-145.4504219982,134.7249908447,-145.7592285109,0.1689590812,114.3666067459,202.4568328857,94.0781786843,201.7492980957,-25.5487904584,60.0033607483,-0.0005086418,97.1447372437,108.9271774292,11.7824401855 +"2011-11-29 20:18:48.633",134163.78125,-145.4096730896,134.730758667,-145.7175370362,0.1530346125,-133.1985242877,202.2964630127,94.1042290258,201.7482757568,-25.5482167225,60.0033721924,0.0005086279,97.1416778564,108.9236755371,11.7819976807 +"2011-11-29 20:18:48.666",134163.28125,-145.3689105206,134.7240447998,-145.7126876019,0.2191665024,-111.7225858766,202.215423584,94.0839297036,201.7771759033,-25.5436609863,60.0033836365,0.0004069135,97.1434631348,108.9189987183,11.7755355835 +"2011-11-29 20:18:48.700",134164.234375,-145.3280659894,134.7238006592,-145.6882901662,0.1046591327,-151.6121268937,202.4025421143,94.1169400078,201.6671295166,-25.4897332277,60.0033874512,"-2.54251062870026E-05",97.1554718018,108.9306106567,11.775138855 +"2011-11-29 20:18:48.733",134164.734375,-145.2874810053,134.7633514404,-145.6228979351,0.0779430568,161.3242734029,202.5701751709,94.190132315,201.6754302979,-25.417403232,60.0033912659,0.0001525786,97.1590118408,108.9288024902,11.7697906494 +"2011-11-29 20:18:48.766",134164.46875,-145.2464862099,134.7168731689,-145.5513448734,0.0053528538,-70.1381470774,202.4192810059,94.255736282,201.7322845459,-25.3592424636,60.0033988953,0.0002288818,97.1386413574,108.927444458,11.7888031006 +"2011-11-29 20:18:48.800",134163.78125,-145.2055460561,134.614654541,-145.4861848687,0.0920841545,22.2713788267,202.2844390869,94.3457035337,201.6511993408,-25.3230936875,60.0033988953,-0.0001525786,97.1448822021,108.9063415527,11.7614593506 +"2011-11-29 20:18:48.833",134165.828125,-145.1657533739,134.6338500977,-145.4803792079,0.134134829,38.2219161803,202.253326416,94.3469261376,201.7839202881,-25.3048024409,60.0033950806,-0.0002288818,97.1434631348,108.9249191284,11.7814559937 +"2011-11-29 20:18:48.866",134166.78125,-145.1260836352,134.6911468506,-145.4785487172,0.095066227,179.1504250989,202.087677002,94.344631194,201.9103240967,-25.285961364,60.0033721924,-0.0006866734,97.1233444214,108.923614502,11.8002700806 +"2011-11-29 20:18:48.900",134164.5625,-145.0847883115,134.6913452148,-145.4179512789,0.3374626637,-157.4511599925,202.0110473633,94.3962879147,201.7353515625,-25.2119528493,60.0033836365,0.0005086139,97.1260299683,108.9249420166,11.7989120483 +"2011-11-29 20:18:48.933",134164.25,-145.0427689878,134.6837463379,-145.3892644843,0.2313407063,-166.0204655894,202.1318969727,94.4214161807,201.7053527832,-25.1763692713,60.0033988953,0.0004069135,97.1428375244,108.9191055298,11.7762680054 +"2011-11-29 20:18:48.966",134164.625,-145.0017741924,134.6390380859,-145.3917643336,0.2014813721,77.0478942908,202.256362915,94.4632510893,201.8111419678,-25.2078427829,60.0033988953,-0.0001525925,97.1348876953,108.9027404785,11.7678527832 +"2011-11-29 20:18:49.000",134164.078125,-144.9617356234,134.5872344971,-145.3451414623,0.2777602375,62.3612527072,202.2150421143,94.5274070562,201.7939300537,-25.1807627904,60.0033988953,"5.08641824126244E-05",97.1318969727,108.8983154297,11.766418457 +"2011-11-29 20:18:49.033",134164.71875,-144.9213692054,134.654800415,-145.2750090799,0.0362205133,-118.0293025185,202.2287597656,94.546934567,201.705368042,-25.1012064545,60.0034065247,0.0003051851,97.1440582275,108.9281616211,11.7841033936 +"2011-11-29 20:18:49.066",134166.15625,-144.8807295799,134.7463684082,-145.2312002466,0.1987242252,-107.1145099606,202.3629455566,94.5508209447,201.7223358154,-25.0473572431,60.0033874512,-0.0007629348,97.145362854,108.9203414917,11.7749786377 +"2011-11-29 20:18:49.100",134166.578125,-144.8392976524,134.7957611084,-145.1694689969,0.1715686172,-100.3545419655,202.5438995361,94.6132283831,201.7241973877,-24.9856140406,60.0033874512,0,97.1390533447,108.9292755127,11.790222168 +"2011-11-29 20:18:49.133",134165.625,-144.7991224797,134.7828979492,-145.1197315593,0.1009549499,-99.1103478761,202.4598236084,94.6713601231,201.8212432861,-24.9307710366,60.0033683777,-0.0004069135,97.1398620605,108.9150390625,11.775177002 +"2011-11-29 20:18:49.166",134165.609375,-144.7585374956,134.6707000732,-145.0980115578,0.0547622368,83.8896401409,202.1910552979,94.717211183,201.8592834473,-24.9011826571,60.0033836365,0.0007375097,97.1385116577,108.9226226807,11.7841110229 +"2011-11-29 20:18:49.200",134165.828125,-144.7166137945,134.5754699707,-145.0619208382,0.1321964562,51.3818943712,202.2004547119,94.7556173367,201.6549224854,-24.8683089567,60.0034103394,0.0008646492,97.1384658813,108.9128723145,11.7744064331 +"2011-11-29 20:18:49.233",134164.90625,-144.6751545462,134.6629638672,-145.0255022695,0.0515657663,-52.4027788408,202.3451538086,94.7703705454,201.6484680176,-24.8352576713,60.0034332275,0.0004832027,97.1598739624,108.9179229736,11.7580490112 +"2011-11-29 20:18:49.266",134163.046875,-144.6346788452,134.6841125488,-144.9730737375,0.0419591442,-100.5717488113,202.290802002,94.8272455306,201.7339324951,-24.7811659881,60.0034065247,-0.0010681059,97.148979187,108.9172286987,11.7682495117 +"2011-11-29 20:18:49.300",134162.484375,-144.5947768801,134.6608734131,-144.9259317718,0.0430693105,105.7048818593,202.3259735107,94.8967905167,201.6730194092,-24.7365255793,60.00340271,0,97.1582717896,108.9285049438,11.7702331543 +"2011-11-29 20:18:49.333",134164.625,-144.5543011791,134.669418335,-144.8977367509,0.1359689385,-0.5370330684,202.3809204102,94.9086887062,201.7398834229,-24.7260344087,60.0033988953,-0.0004068855,97.1547012329,108.9157943726,11.7610931396 +"2011-11-29 20:18:49.366",134164.921875,-144.5143445724,134.7094726563,-144.8557584083,0.2471664846,-8.9881003534,202.3615570068,94.9578455777,201.9459228516,-24.7177903704,60.0033607483,-0.0011952734,97.1439208984,108.9212188721,11.7772979736 +"2011-11-29 20:18:49.400",134164.515625,-144.4736639657,134.713394165,-144.7973466305,0.1981086731,-0.2372776502,202.3953857422,95.0331825642,201.9076843262,-24.6600650266,60.0033531189,"-2.79396772384644E-08",97.1272659302,108.9134902954,11.7862243652 +"2011-11-29 20:18:49.433",134165.9375,-144.4327238118,134.762588501,-144.7649305527,0.0183586869,-58.4852706174,202.47706604,95.052744226,201.8114776611,-24.5872278893,60.0033607483,0.0004068995,97.1445159912,108.9136047363,11.7690887451 +"2011-11-29 20:18:49.466",134166.140625,-144.3924120354,134.8002624512,-144.755299986,0.2026698291,163.6159794544,202.3556976318,95.0801947563,201.9214477539,-24.5453229712,60.0033683777,0.000279732,97.1475601196,108.9109954834,11.7634353638 +"2011-11-29 20:18:49.500",134163.46875,-144.3513079569,134.7202758789,-144.6928174154,0.1449938267,146.2779813784,202.1575775146,95.1639328755,201.9530334473,-24.5110268838,60.0033836365,0.0004068995,97.138885498,108.926574707,11.787689209 +"2011-11-29 20:18:49.533",134162.65625,-144.309643803,134.6783905029,-144.6356623925,0.0935936943,-3.8410930567,202.3033447266,95.2078305013,201.8056945801,-24.4955599204,60.0034103394,0.0008646632,97.1380844116,108.9231948853,11.7851104736 +"2011-11-29 20:18:49.566",134164.0625,-144.2691544416,134.6621246338,-144.6267421654,0.1890183389,-19.2458030998,202.4230041504,95.197530576,201.6742858887,-24.494154609,60.0034065247,-0.000534053,97.1501922607,108.9290618896,11.7788696289 +"2011-11-29 20:18:49.600",134164.015625,-144.2293754199,134.6830291748,-144.575133256,0.1112581417,-27.0746273982,202.426071167,95.2278907669,201.6764526367,-24.405440697,60.0033874512,-0.0004577637,97.1352920532,108.9293136597,11.7940216064 +"2011-11-29 20:18:49.633",134163.515625,-144.1885172283,134.7404174805,-144.4998645714,0.0634215027,-33.178678667,202.4344024658,95.2723211475,201.8128967285,-24.2881031697,60.00340271,0.0006357813,97.140838623,108.932723999,11.791885376 +"2011-11-29 20:18:49.666",134163.640625,-144.1471809234,134.6878662109,-144.4612466818,0.1708692461,-17.3297045188,202.3429260254,95.3200231886,201.8262481689,-24.2806258201,60.0034065247,-0.0001525786,97.1475601196,108.9351806641,11.7876205444 +"2011-11-29 20:18:49.700",134163.9375,-144.106295411,134.6460723877,-144.4339805666,0.1673256159,-23.4709615355,202.3905181885,95.3845070046,201.6354370117,-24.29253767,60.0033950806,-0.0002543069,97.1363601685,108.9228363037,11.7864761353 +"2011-11-29 20:18:49.733",134164.921875,-144.0656694458,134.7031402588,-144.4062909798,0.0396951661,157.9861687102,202.4162597656,95.4641879914,201.6730041504,-24.2667605361,60.0033988953,0.0003051572,97.1512298584,108.9159469604,11.7647171021 +"2011-11-29 20:18:49.766",134165.171875,-144.0253576694,134.6845703125,-144.3687932412,0.1228523627,111.2977617706,202.3764953613,95.5018155036,201.7089538574,-24.2051607675,60.0033988953,0,97.1423110962,108.9196929932,11.777381897 +"2011-11-29 20:18:49.800",134162.734375,-143.984185289,134.5976104736,-144.2993438777,0.1289612204,35.0629741797,202.3630218506,95.5144718441,201.5608825684,-24.1128285628,60.0034065247,"5.08641824126244E-05",97.1278381348,108.9041290283,11.7762908936 +"2011-11-29 20:18:49.833",134162.3125,-143.9429582672,134.6532897949,-144.2306321747,0.1887485981,-2.3486314093,202.4730834961,95.5460682992,201.6379394531,-24.0394979443,60.00340271,"-5.08641824126244E-05",97.1506958008,108.9141387939,11.7634429932 +"2011-11-29 20:18:49.866",134164.59375,-143.9015536605,134.7106018066,-144.2228047779,0.0984557793,-18.7549071589,202.3972473145,95.5703223009,201.7940673828,-24.03808068,60.0034179688,0.0004068995,97.1393203735,108.9225234985,11.783203125 +"2011-11-29 20:18:49.900",134163.71875,-143.861351167,134.722869873,-144.1933256814,0.0534633994,-121.0534097546,202.2914581299,95.6362267962,201.8296966553,-24.0284296227,60.0034179688,-0.0001017144,97.1361236572,108.9161758423,11.7800521851 +"2011-11-29 20:18:49.933",134162.21875,-143.8221458812,134.74269104,-144.128534507,0.1083601564,-117.7591685368,202.4386444092,95.6994538574,201.6940155029,-23.9695602223,60.0034065247,-0.0006357813,97.1371383667,108.9097976685,11.7726593018 +"2011-11-29 20:18:49.966",134164.140625,-143.7808095763,134.7355041504,-144.1020470334,0.0349652283,135.1093926514,202.5159454346,95.7211670288,201.68699646,-23.9147189259,60.0034065247,"-1.39698386192322E-08",97.1446990967,108.9272460938,11.7825469971 +"2011-11-29 20:18:50.000",134165.453125,-143.7398830828,134.6635131836,-144.0582245397,0.2474317402,71.0861500134,202.3685302734,95.779667599,201.8264160156,-23.8552279782,60.0033988953,-0.0005086279,97.1454391479,108.9188995361,11.7734603882 +"2011-11-29 20:18:50.033",134164.5625,-143.6992980988,134.6217651367,-143.9879965346,0.24467282,39.1117566405,202.3133850098,95.8432839809,201.7979888916,-23.8150493904,60.0033760071,-0.0004323106,97.1546936035,108.8946228027,11.7399291992 +"2011-11-29 20:18:50.066",134164.609375,-143.6584399072,134.6271362305,-143.9662218915,0.0669736043,-5.5262936777,202.3824462891,95.8441036036,201.5511779785,-23.7883809168,60.0033950806,0.0008900883,97.1394577026,108.9061813354,11.7667236328 +"2011-11-29 20:18:50.100",134166.140625,-143.6187428477,134.6648254395,-143.9605391741,0.1065603346,135.9624013164,202.4306182861,95.8466717548,201.5482025146,-23.7370759509,60.0033950806,0,97.1511383057,108.9161071777,11.7649688721 +"2011-11-29 20:18:50.133",134166.109375,-143.5779802787,134.6793212891,-143.9255412848,0.2478156984,100.2708516576,202.3521575928,95.88296738,201.7968292236,-23.6701793706,60.0033836365,0,97.1267166138,108.9186630249,11.7919464111 +"2011-11-29 20:18:50.166",134164.21875,-143.5365893324,134.673538208,-143.8638510163,0.1342519671,47.9532623512,202.3788909912,95.9334766289,201.7757720947,-23.652755558,60.0033950806,0.0005594781,97.1449203491,108.9306488037,11.7857284546 +"2011-11-29 20:18:50.200",134162.828125,-143.495922386,134.6997070313,-143.8145370504,0.1661091894,-47.6721078593,202.4813537598,95.9671016502,201.6379699707,-23.642175595,60.0033950806,-0.0001017284,97.1375274658,108.916885376,11.7793579102 +"2011-11-29 20:18:50.233",134164.40625,-143.4548456284,134.7318878174,-143.78527652,0.0569524989,-57.0896444039,202.4426422119,96.0281157301,201.7516937256,-23.6141666967,60.00340271,0.0003306242,97.1473083496,108.9223022461,11.7749938965 +"2011-11-29 20:18:50.266",134165.265625,-143.4143699274,134.730178833,-143.7515490459,0.0566772632,71.5969935218,202.3501281738,96.0856942248,201.888381958,-23.5790902603,60.0034103394,0,97.1378479004,108.924446106,11.7865982056 +"2011-11-29 20:18:50.300",134163.921875,-143.3746455471,134.7313232422,-143.6864983243,0.062985152,-3.1416910772,202.4154815674,96.1419066816,201.8288116455,-23.5257584357,60.0033950806,-0.0008392381,97.1222915649,108.9234695435,11.8011779785 +"2011-11-29 20:18:50.333",134164.578125,-143.3345113556,134.688369751,-143.6513911519,0.0922055319,-47.0886013834,202.4389038086,96.1877304208,201.638092041,-23.5158905199,60.0033683777,-0.0006866455,97.1265640259,108.9221496582,11.7955856323 +"2011-11-29 20:18:50.366",134165.03125,-143.2934072771,134.6586303711,-143.6488503216,0.0475633331,-26.496866819,202.3235321045,96.1836801186,201.6756744385,-23.4928642446,60.0033760071,0.0003306102,97.1633605957,108.9191207886,11.7557601929 +"2011-11-29 20:18:50.400",134162.515625,-143.2517567836,134.6773223877,-143.6041535636,0.0565749444,-115.6790344251,202.2571716309,96.2160210643,201.7267150879,-23.4313532685,60.0033798218,0.0002288679,97.1539916992,108.9205322266,11.7665405273 +"2011-11-29 20:18:50.433",134162.140625,-143.2104341391,134.6737518311,-143.5169320479,0.068840161,-151.1817703345,202.3083343506,96.3200175246,201.6463470459,-23.3507143476,60.00340271,0.0008646632,97.1545639038,108.9099273682,11.7553634644 +"2011-11-29 20:18:50.466",134163.953125,-143.1700950419,134.6887664795,-143.4599546099,0.1255174428,-154.5200389517,202.3377532959,96.3648508863,201.6073150635,-23.2772761537,60.0034141541,0,97.1511764526,108.9053955078,11.7542190552 +"2011-11-29 20:18:50.500",134165.234375,-143.1304526239,134.6695251465,-143.4088921156,0.2275063246,-119.0095712681,202.2876281738,96.3769198306,201.5162963867,-23.2205941213,60.0034103394,-0.00027976,97.1367721558,108.9042510986,11.7674789429 +"2011-11-29 20:18:50.533",134166.078125,-143.0901681682,134.6008758545,-143.3737303018,0.163122341,-62.5674424579,202.245010376,96.3966727377,201.5342102051,-23.1890967039,60.0033874512,-0.0007120986,97.1413421631,108.9103927612,11.7690505981 +"2011-11-29 20:18:50.566",134166.6875,-143.0492553351,134.5975189209,-143.39352419,0.0549490489,59.0844967737,202.2095031738,96.4014265493,201.636505127,-23.1819284204,60.0033760071,-0.0001271395,97.1569595337,108.9300918579,11.7731323242 +"2011-11-29 20:18:50.600",134164.8125,-143.0080419736,134.7165222168,-143.3736756603,0.1541348547,163.072678887,202.2798919678,96.4575160628,201.7802886963,-23.169241344,60.0033760071,0,97.1516876221,108.9074172974,11.7557296753 +"2011-11-29 20:18:50.633",134163.671875,-142.9676345745,134.8175354004,-143.3069310517,0.1091192737,-151.2826795493,202.38331604,96.4989684809,201.9635925293,-23.1081248113,60.0033760071,0.0003051711,97.1335754395,108.9226989746,11.7891235352 +"2011-11-29 20:18:50.666",134164.0625,-142.9270222697,134.7528076172,-143.2752253136,0.0592862926,-66.2854969137,202.3510742188,96.5061470097,201.8967437744,-23.0724951295,60.0033912659,0.0004831888,97.1521911621,108.9203414917,11.7681503296 +"2011-11-29 20:18:50.700",134164.515625,-142.8861367573,134.6198272705,-143.2386428204,0.1108612418,-3.4056603862,202.3314361572,96.5663551272,201.6148529053,-23.0632555911,60.00340271,0.0001780316,97.153968811,108.9184036255,11.7644348145 +"2011-11-29 20:18:50.733",134162.609375,-142.8458523016,134.5877838135,-143.1989184402,0.0893390477,22.8255257344,202.2876739502,96.633864717,201.5640563965,-23.0371796364,60.0033874512,-0.0006357813,97.1378707886,108.9276199341,11.7897491455 +"2011-11-29 20:18:50.766",134161.890625,-142.805103393,134.6578674316,-143.1425830399,0.0035184934,-49.7708303309,202.2744598389,96.7196450628,201.7005157471,-23.005391936,60.0033798218,"1.39698386192322E-08",97.1418304443,108.940246582,11.7984161377 +"2011-11-29 20:18:50.800",134164.734375,-142.7637944089,134.7144012451,-143.0638582795,0.0121316835,-120.5837659473,202.4463195801,96.7933974454,201.6869506836,-22.9218860432,60.0033950806,0.0006103562,97.1415863037,108.9029464722,11.7613601685 +"2011-11-29 20:18:50.833",134166.53125,-142.723250406,134.6995239258,-142.9899419723,0.1091507301,-22.1345598923,202.4413604736,96.8299048065,201.7149200439,-22.835730037,60.0033950806,-0.0004577637,97.1368408203,108.932975769,11.7961349487 +"2011-11-29 20:18:50.866",134165.203125,-142.6823512332,134.6758880615,-142.9622933666,0.1462489516,-2.153912321,202.3790893555,96.8748064701,201.7633209229,-22.8251329985,60.0033912659,0.0004323386,97.1461486816,108.9149475098,11.7687988281 +"2011-11-29 20:18:50.900",134162.4375,-142.6405777963,134.6743469238,-142.9480592523,0.0418543257,-17.2325621533,202.3367004395,96.8813497914,201.7124786377,-22.7865731656,60.0034179688,0.0007629488,97.1463775635,108.9092254639,11.7628479004 +"2011-11-29 20:18:50.933",134162.90625,-142.5996513028,134.6603088379,-142.929740685,0.1340715885,-108.6810753185,202.2308349609,96.8577036765,201.6418304443,-22.7380071055,60.0034255981,-0.0003814884,97.1476287842,108.9053115845,11.7576828003 +"2011-11-29 20:18:50.966",134166.53125,-142.5597083565,134.7394104004,-142.850018717,0.1857624799,-107.9084101686,202.4384613037,96.9466463998,201.6297149658,-22.6760897331,60.0033988953,-0.0007629488,97.1492004395,108.9213943481,11.7721939087 +"2011-11-29 20:18:51.000",134167.46875,-142.5202845046,134.8355255127,-142.7992021096,0.2173338532,-110.6086639853,202.5502624512,97.0219287449,201.7740478516,-22.6525341182,60.0033836365,-0.000534053,97.152671814,108.90675354,11.7540817261 +"2011-11-29 20:18:51.033",134167.171875,-142.4792487281,134.7668609619,-142.8113052048,0.1251070946,-118.3238066151,202.287979126,96.9871904028,201.9010620117,-22.6241068709,60.0033874512,0.0001271674,97.1498794556,108.9056396484,11.7557601929 +"2011-11-29 20:18:51.066",134166.984375,-142.4376801968,134.6770629883,-142.7759794664,0.0438984111,49.1295063037,202.2270965576,96.9999491961,201.850189209,-22.5489150259,60.0033836365,-0.0001271814,97.144493103,108.9105300903,11.7660369873 +"2011-11-29 20:18:51.100",134165.5,-142.3967673637,134.6996459961,-142.7261327458,0.0283191279,142.3320718118,202.3483581543,97.0675065972,201.7459564209,-22.5113950892,60.0033836365,0.0002543349,97.1338043213,108.9009094238,11.7671051025 +"2011-11-29 20:18:51.133",134163.765625,-142.3558955117,134.7100524902,-142.6933068567,0.0654056296,-149.4399491528,202.3444976807,97.1020195431,201.7232971191,-22.4858057855,60.0034103394,0.0009918166,97.1425018311,108.9207000732,11.7781982422 +"2011-11-29 20:18:51.166",134163.453125,-142.3153788295,134.6824798584,-142.6454272306,0.1052939892,-102.5714779361,202.2608337402,97.1430211687,201.7085418701,-22.4525530095,60.0034103394,0,97.1479187012,108.9239349365,11.7760162354 +"2011-11-29 20:18:51.200",134165.1875,-142.2747528643,134.708190918,-142.5955668496,0.0866399407,-124.9954397737,202.3582611084,97.2280365333,201.6855926514,-22.4260126019,60.00340271,-0.0003560213,97.1511917114,108.9067993164,11.755607605 +"2011-11-29 20:18:51.233",134166.890625,-142.2335941444,134.7178039551,-142.5614978661,0.0970959738,15.5133352373,202.4427337646,97.2838801599,201.8021697998,-22.4166654881,60.00340271,0,97.1342697144,108.9283676147,11.7940979004 +"2011-11-29 20:18:51.266",134167.296875,-142.1932823679,134.6973876953,-142.5038100883,0.1760911793,-1.5842572553,202.5053863525,97.3139193319,201.725189209,-22.3523370589,60.0033950806,-0.0004323386,97.1250305176,108.916267395,11.7912368774 +"2011-11-29 20:18:51.300",134165.34375,-142.1535853085,134.7002563477,-142.4524880469,0.1319283694,-45.4650654177,202.5149383545,97.3229625024,201.6045227051,-22.2641046752,60.0033721924,-0.0007374957,97.1461868286,108.9055633545,11.7593765259 +"2011-11-29 20:18:51.333",134164.21875,-142.112658815,134.6763305664,-142.451190311,0.0403235517,9.3237281652,202.3020629883,97.3580969954,201.7645874023,-22.2653921659,60.0033798218,0.0006103562,97.1415176392,108.932800293,11.7912826538 +"2011-11-29 20:18:51.366",134164,-142.0707351138,134.6486358643,-142.4278583848,0.1360694021,93.6705188437,202.2250823975,97.4467186999,201.7979431152,-22.2701032888,60.0033988953,0.0004577637,97.157699585,108.9221343994,11.7644348145 +"2011-11-29 20:18:51.400",134163.890625,-142.0300545071,134.663772583,-142.3503220773,0.2416366786,137.2614486551,202.1971893311,97.5410572727,201.7550811768,-22.1738044517,60.0033874512,-0.0007375097,97.1353988647,108.9219284058,11.786529541 +"2011-11-29 20:18:51.433",134163.296875,-141.9898246929,134.626449585,-142.2960903753,0.1006844714,-173.7808718829,202.0933227539,97.5634739536,201.7015075684,-22.1404458078,60.0033836365,0.0003560353,97.135887146,108.9043121338,11.7684249878 +"2011-11-29 20:18:51.466",134162.28125,-141.9493489919,134.58253479,-142.2429241828,0.2438559383,-48.7781442973,202.2218933105,97.5701060673,201.5419616699,-22.1244956086,60.0033950806,0.0001780316,97.140007019,108.9212493896,11.7812423706 +"2011-11-29 20:18:51.500",134162.375,-141.9088186494,134.5654296875,-142.2057952745,0.20550704,-2.9224560921,202.3251037598,97.597174107,201.5289001465,-22.0460764992,60.0033836365,-0.0006357953,97.1523895264,108.9239883423,11.7715988159 +"2011-11-29 20:18:51.533",134164.46875,-141.8672637785,134.647354126,-142.2227068229,0.1771603823,72.011463061,202.2385253906,97.6008145978,201.8522644043,-22.017584365,60.0033836365,0,97.1511230469,108.9041900635,11.7530670166 +"2011-11-29 20:18:51.566",134164.25,-141.8265695114,134.759185791,-142.1899765564,0.1061625332,64.4560990464,202.3603515625,97.6576759226,202.0136566162,-22.023830573,60.0033836365,"1.39698386192322E-08",97.1398010254,108.9303512573,11.7905502319 +"2011-11-29 20:18:51.600",134164.453125,-141.7866538859,134.7649078369,-142.1197485513,0.0783282965,-15.4112922111,202.516204834,97.7294202297,201.8265838623,-21.986225259,60.0033798218,-0.0001271814,97.1531677246,108.9082260132,11.7550582886 +"2011-11-29 20:18:51.633",134167.25,-141.7460689018,134.7400970459,-142.044384244,0.1448116899,-49.4395183448,202.4942016602,97.7760909123,201.7342376709,-21.9052567815,60.0033836365,0.0003306102,97.1405639648,108.9163208008,11.7757568359 +"2011-11-29 20:18:51.666",134167.453125,-141.7047872385,134.7031860352,-141.9924748063,0.2260224372,-40.0162956677,202.4787445068,97.7881871773,201.6799926758,-21.8350817104,60.00340271,0.0004323386,97.1412200928,108.933380127,11.7921600342 +"2011-11-29 20:18:51.700",134166.40625,-141.6648852733,134.6638031006,-141.963432842,0.1773700267,-40.559917254,202.4117431641,97.8269689914,201.616897583,-21.8024146232,60.0033721924,-0.0009663915,97.1567840576,108.9194946289,11.7627105713 +"2011-11-29 20:18:51.733",134166.375,-141.6250652705,134.6632537842,-141.9373415193,0.0725853965,-174.8075449378,202.3718109131,97.8906536752,201.5588989258,-21.7534080159,60.0033531189,-0.0001525786,97.1467514038,108.9292831421,11.7825317383 +"2011-11-29 20:18:51.766",134165.671875,-141.584138777,134.7111968994,-141.9135997818,0.1914256066,143.2973141454,202.406463623,97.9527537552,201.6784820557,-21.7269598159,60.0033798218,0.0007883599,97.1291503906,108.8980102539,11.7688598633 +"2011-11-29 20:18:51.800",134164.421875,-141.543485491,134.7366638184,-141.881798421,0.107946299,161.8552659694,202.3865661621,97.9774039079,201.7649078369,-21.7150377207,60.0033798218,-0.0001780177,97.1526641846,108.9276275635,11.7749633789 +"2011-11-29 20:18:51.833",134161.90625,-141.5025316768,134.7282714844,-141.8322932099,0.0971782953,-126.4943384474,202.3571014404,97.983510097,201.7360076904,-21.6548432635,60.0033798218,0,97.1380844116,108.9279937744,11.7899093628 +"2011-11-29 20:18:51.866",134162.859375,-141.4614822399,134.7197265625,-141.7647562994,0.1580851823,-89.7950148671,202.3091583252,98.0467781393,201.754486084,-21.6111129773,60.00340271,0.0007120706,97.1479873657,108.9327316284,11.7847442627 +"2011-11-29 20:18:51.900",134166.84375,-141.420651369,134.7045898438,-141.712532673,0.1215962172,-99.4811588461,202.2964477539,98.1001902186,201.7291870117,-21.54793202,60.0034065247,0.0001525646,97.1546173096,108.9298019409,11.7751846313 +"2011-11-29 20:18:51.933",134167.71875,-141.379670234,134.7018280029,-141.6691609718,0.0758190304,-146.4427801827,202.3174743652,98.1287677301,201.7149810791,-21.4646685989,60.0034065247,"7.63172283768654E-05",97.1536331177,108.9019470215,11.7483139038 +"2011-11-29 20:18:51.966",134166.1875,-141.3377055517,134.670425415,-141.6373322902,0.0667638481,-118.9101510346,202.30809021,98.1654595063,201.6439056396,-21.4467939938,60.0034179688,0.0003305962,97.1388397217,108.9278717041,11.7890319824 +"2011-11-29 20:18:52.000",134163.21875,-141.2964648695,134.6514434814,-141.6190956851,0.1316514909,-111.1096651911,202.2302093506,98.218489095,201.612121582,-21.4751700147,60.0034255981,-0.0002288818,97.1452255249,108.9407196045,11.7954940796 +"2011-11-29 20:18:52.033",134162.46875,-141.2567678101,134.7433776855,-141.5861058715,0.2035604417,-136.1779620866,202.3863830566,98.2538763051,201.6426391602,-21.4309616153,60.0034179688,-0.0002034567,97.1396560669,108.9167633057,11.7771072388 +"2011-11-29 20:18:52.066",134164.46875,-141.2161691656,134.8018188477,-141.5158368853,0.1331965923,-133.8018758782,202.6400146484,98.2875696283,201.6357879639,-21.3233144189,60.0034103394,0.0001525925,97.1456756592,108.9159164429,11.7702407837 +"2011-11-29 20:18:52.100",134165,-141.1748601815,134.6839904785,-141.4731345426,0.0750998929,39.3418554683,202.5393066406,98.3325669145,201.5901031494,-21.2776136232,60.0034217834,"-7.62753188610077E-05",97.146812439,108.9248428345,11.7780303955 +"2011-11-29 20:18:52.133",134163.9375,-141.1345620654,134.5988464355,-141.4851829963,0.1621936113,66.1009588627,202.2993621826,98.3375188017,201.6431274414,-21.285946454,60.0033836365,-0.0011444092,97.1546478271,108.9249572754,11.7703094482 +"2011-11-29 20:18:52.166",134163.96875,-141.094578138,134.6152038574,-141.438846993,0.084248811,24.7419521646,202.2398376465,98.3821814086,201.6895141602,-21.2650938864,60.0033569336,-0.0005086139,97.1333389282,108.9095535278,11.7762145996 +"2011-11-29 20:18:52.200",134164.375,-141.0537199464,134.6396484375,-141.3538521189,0.0324700326,156.7467216023,202.357208252,98.4716227358,201.5484161377,-21.1704906438,60.0033798218,0.0008646492,97.15625,108.9358978271,11.7796478271 +"2011-11-29 20:18:52.233",134163.84375,-141.0120284717,134.626373291,-141.3134447198,0.1681789309,148.789469257,202.3395843506,98.5431143259,201.4834594727,-21.1244637065,60.00340271,0.0003814744,97.1300125122,108.911819458,11.7818069458 +"2011-11-29 20:18:52.266",134165.6875,-140.9708287706,134.5793457031,-141.2802909816,0.1272907257,145.8310137991,202.2795715332,98.6083494626,201.4220581055,-21.1338381412,60.0033988953,"-2.54251062870026E-05",97.1474456787,108.9239807129,11.7765350342 +"2011-11-29 20:18:52.300",134165.59375,-140.9304077111,134.6320648193,-141.2176035054,0.0372724608,-56.1346712598,202.4463653564,98.6222352372,201.4481506348,-21.067216476,60.00340271,"5.08641824126244E-05",97.144317627,108.9172592163,11.7729415894 +"2011-11-29 20:18:52.333",134163.140625,-140.8909292177,134.7293548584,-141.1733438795,0.1639405936,-57.4880220175,202.5245056152,98.6320912002,201.6474151611,-21.0242204352,60.00340271,"-1.39698386192322E-08",97.1438827515,108.9125747681,11.7686920166 +"2011-11-29 20:18:52.366",134162.984375,-140.8506857431,134.7384490967,-141.1478672739,0.1427245587,-99.151253879,202.452041626,98.6789941092,201.6588134766,-21.001178792,60.0033836365,-0.0004068715,97.1266174316,108.9230728149,11.7964553833 +"2011-11-29 20:18:52.400",134163.765625,-140.8090625703,134.7460327148,-141.1102329316,0.1604990661,-155.3517237662,202.3828735352,98.6967252803,201.7021026611,-20.9053102568,60.0033836365,0,97.1389312744,108.9180908203,11.7791595459 +"2011-11-29 20:18:52.433",134163.703125,-140.7679038504,134.7197113037,-141.0990860629,0.1772147268,152.3006919243,202.3374633789,98.7146203759,201.7540283203,-20.8660742351,60.0033836365,-0.0001271674,97.1488494873,108.92212677,11.7732772827 +"2011-11-29 20:18:52.466",134164.9375,-140.7278926022,134.6947937012,-141.09537044,0.1231890097,111.3798333237,202.3685913086,98.7541261901,201.7546539307,-20.9110288327,60.0033721924,-0.0004323386,97.1410598755,108.9057769775,11.7647171021 +"2011-11-29 20:18:52.500",134165.265625,-140.6880316182,134.6923065186,-141.0445401722,0.1360786259,4.3055851938,202.4182281494,98.7849986451,201.7721557617,-20.8954986901,60.0033798218,0.0005086558,97.1572113037,108.9017944336,11.7445831299 +"2011-11-29 20:18:52.533",134164.609375,-140.6469275398,134.683380127,-140.9595999396,0.061337024,-13.7179004857,202.3392181396,98.8470714043,201.7501983643,-20.779522078,60.0034065247,0.0003814744,97.1338882446,108.937461853,11.8035736084 +"2011-11-29 20:18:52.566",134164.6875,-140.6064654992,134.6307678223,-140.8897407648,0.0529339015,143.4467313636,202.2561950684,98.9011528422,201.6259155273,-20.6653998622,60.0033836365,-0.0007629348,97.1262969971,108.9013824463,11.7750854492 +"2011-11-29 20:18:52.600",134164.953125,-140.5660581,134.5936584473,-140.8590322343,0.0998956338,45.5704176706,202.2537841797,98.9497701287,201.6287384033,-20.6640440697,60.003364563,-0.0003560353,97.1408691406,108.9163513184,11.7754821777 +"2011-11-29 20:18:52.633",134163.640625,-140.5256097198,134.6430969238,-140.8529670263,0.2049354017,60.5567440493,202.2873382568,98.9954231131,201.8344268799,-20.6797705802,60.0033683777,0.000279732,97.1313781738,108.9157791138,11.7844009399 +"2011-11-29 20:18:52.666",134162.78125,-140.4842460942,134.6849822998,-140.8303727606,0.1968348473,91.7457237243,202.3167724609,99.026903455,201.8595275879,-20.642950738,60.0033912659,0.0007120706,97.1272506714,108.9064331055,11.7791824341 +"2011-11-29 20:18:52.700",134161.765625,-140.443223978,134.6368560791,-140.7685868693,0.0148719521,-107.4788595717,202.3361358643,99.0647017218,201.5637207031,-20.6035371314,60.0033912659,-0.0003051572,97.1245956421,108.9275894165,11.8029937744 +"2011-11-29 20:18:52.733",134162.78125,-140.4019559751,134.618927002,-140.7124153936,0.1779539287,-48.7080187451,202.3322143555,99.1026297623,201.532409668,-20.5772870068,60.0034065247,0.0007883739,97.1389160156,108.9274597168,11.7885437012 +"2011-11-29 20:18:52.766",134165.09375,-140.3610977834,134.6310119629,-140.7041781854,0.0942293406,49.7364437435,202.2001037598,99.1442324445,201.7870635986,-20.5474305424,60.0034179688,0,97.1499938965,108.9132385254,11.7632446289 +"2011-11-29 20:18:52.800",134164.296875,-140.3212367994,134.6205596924,-140.6543861064,0.0887866691,114.2085356779,202.0562133789,99.2022480713,201.8301544189,-20.486524038,60.0034179688,"-2.54251062870026E-05",97.1463165283,108.894241333,11.7479248047 +"2011-11-29 20:18:52.833",134162.640625,-140.2806518154,134.7195281982,-140.5841854221,0.1190064102,-119.9684068842,202.0743865967,99.2188317706,201.9750366211,-20.3989797959,60.0033988953,-0.0002288818,97.1568145752,108.9071731567,11.7503585815 +"2011-11-29 20:18:52.866",134163.140625,-140.2394794351,134.7460174561,-140.5579574957,0.086130023,-147.9519514609,202.2487182617,99.2459203009,201.9063415527,-20.3583538307,60.00340271,0.0001780316,97.1389923096,108.930519104,11.7915267944 +"2011-11-29 20:18:52.900",134165.703125,-140.1990310548,134.6868133545,-140.4994227745,0.0283244438,120.0697668915,202.471572876,99.3269673256,201.5954589844,-20.3171011957,60.0033836365,-0.0006612204,97.1468658447,108.9233551025,11.7764892578 +"2011-11-29 20:18:52.933",134166.828125,-140.1580089387,134.6552886963,-140.4838909243,0.0414993092,110.678338745,202.3578796387,99.3486258554,201.6232147217,-20.3046173174,60.0033874512,0.0003814744,97.1379623413,108.9135894775,11.7756271362 diff --git a/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Integer Point - 5 phasors, 3 analogs.csv b/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Integer Point - 5 phasors, 3 analogs.csv new file mode 100755 index 0000000..e74e5a5 --- /dev/null +++ b/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Integer Point - 5 phasors, 3 analogs.csv @@ -0,0 +1,148 @@ +"2011-11-29 20:13:29.333",-175.519890960376,134170.48185,-176.012634664189,134.5806,75.6246993793174,0.21362,63.9707378263564,201.65728,-55.9435991165736,202.08452,60.003,0,97.1514053344727,108.887939453125,11.7365341186523 +"2011-11-29 20:13:29.366",-175.479783914717,134170.48185,-175.961068462627,134.5806,0,0,63.9879265602103,201.65728,-55.9034920709144,202.08452,60.013,0,97.1507415771484,108.913871765137,11.7631301879883 +"2011-11-29 20:13:29.400",-175.439676869058,134170.48185,-175.903772683114,134.36698,-163.97479138849,0.21362,64.056681495626,201.44366,-55.8748441811579,201.8709,60.003,0,97.1621017456055,108.913604736328,11.7515029907227 +"2011-11-29 20:13:29.433",-175.399569823399,134170.48185,-175.857936059504,134.36698,-169.160059434424,0.21362,64.1368955869443,201.44366,-55.8633850252553,201.8709,60.003,0,97.1711273193359,108.892799377441,11.7216720581055 +"2011-11-29 20:13:29.466",-175.35946277774,134170.48185,-175.817829013844,134.36698,20.3342721491929,0.21362,64.1884617885061,201.44366,-55.8175484016448,201.8709,60.023,0,97.1606140136719,108.911491394043,11.7508773803711 +"2011-11-29 20:13:29.500",-175.319355732081,134170.48185,-175.75480365638,134.36698,-9.69444589361353,0.21362,64.1999209444087,201.44366,-55.7316047323752,201.8709,60.003,0,97.1519622802734,108.907653808594,11.7556915283203 +"2011-11-29 20:13:29.533",-175.279248686421,134170.48185,-175.703237454818,134.36698,-57.1639992202022,0.21362,64.20565052236,201.65728,-55.6743089528621,201.65728,60.003,0,97.1627807617188,108.918716430664,11.7559356689453 +"2011-11-29 20:13:29.566",-175.233412062811,134161.32658,-175.720426188672,134.5806,-148.344502737321,0.21362,64.2113801003114,201.44366,-55.6743089528621,201.8709,60.003,0,97.1703491210938,108.883918762207,11.7135696411133 +"2011-11-29 20:13:29.600",-175.193305017152,134170.48185,-175.697507876867,134.5806,170.174194731806,0.21362,64.2400279900679,201.44366,-55.6227427513003,202.08452,60.003,0,97.170166015625,108.894172668457,11.724006652832 +"2011-11-29 20:13:29.633",-175.158927549444,134170.48185,-175.600105051695,134.5806,0,0,64.3145125034349,201.65728,-55.5310695040794,201.8709,60.003,0,97.1531219482422,108.900321960449,11.747200012207 +"2011-11-29 20:13:29.666",-175.118820503785,134170.48185,-175.542809272182,134.5806,0,0,64.4061857506558,201.65728,-55.5024216143228,201.8709,60.003,0,97.1613311767578,108.909461975098,11.7481307983398 +"2011-11-29 20:13:29.700",-175.072983880174,134170.48185,-175.53707969423,134.5806,110.523558680736,0.21362,64.446292796315,201.65728,-55.4852328804689,201.8709,60.003,0,97.1696243286133,108.898735046387,11.7291107177734 +"2011-11-29 20:13:29.733",-175.032876834515,134170.48185,-175.485513492669,134.5806,133.161121166355,0.21362,64.446292796315,201.65728,-55.3878300552967,201.8709,60.013,0,97.1571578979492,108.882125854492,11.724967956543 +"2011-11-29 20:13:29.766",-174.992769788856,134170.48185,-175.416758557253,134.5806,-180,0,64.4806702640228,201.65728,-55.3133455419297,201.8709,60.003,0,97.1832580566406,108.893295288086,11.7100372314453 +"2011-11-29 20:13:29.800",-174.952662743197,134170.48185,-175.370921933642,134.36698,0,0,64.5666139332925,201.44366,-55.3076159639784,201.8709,60.003,0,97.1749649047852,108.908988952637,11.7340240478516 +"2011-11-29 20:13:29.833",-174.912555697538,134170.48185,-175.353733199788,134.5806,180,0,64.6124505569029,201.65728,-55.3076159639784,201.8709,60.023,0,97.1494369506836,108.928733825684,11.779296875 +"2011-11-29 20:13:29.866",-174.872448651879,134170.48185,-175.348003621837,134.5806,85.1472579343916,0.21362,64.6468280246108,201.65728,-55.3076159639784,201.8709,60.003,0,97.150520324707,108.901405334473,11.7508850097656 +"2011-11-29 20:13:29.900",-174.832341606219,134170.48185,-175.313626154129,134.5806,87.1354214834956,0.21362,64.6812054923186,201.65728,-55.2617793403679,201.8709,60.003,0,97.1672668457031,108.919006347656,11.7517395019531 +"2011-11-29 20:13:29.933",-174.786504982609,134170.48185,-175.239141640762,134.5806,180,0,64.7041238041239,201.65728,-55.170106093147,201.8709,60.003,0,97.1659851074219,108.92399597168,11.7580108642578 +"2011-11-29 20:13:29.966",-174.74639793695,134170.48185,-175.158927549444,134.5806,-131.688619632868,0.21362,64.7728787395396,201.44366,-55.1185398915852,201.8709,60.003,0,97.1724548339844,108.902503967285,11.7300491333008 +"2011-11-29 20:13:30.000",-174.706290891291,134170.48185,-175.136009237639,134.36698,0,0,64.8072562072474,201.44366,-55.1013511577313,201.8709,60.003,0,97.1749572753906,108.894897460938,11.7199401855469 +"2011-11-29 20:13:30.033",-174.666183845631,134170.48185,-175.107361347882,134.36698,-24.0756865513972,0.21362,64.8244449411013,201.44366,-55.0669736900234,202.08452,60.003,0,97.1591567993164,108.914352416992,11.7551956176758 +"2011-11-29 20:13:30.066",-174.626076799972,134170.48185,-175.084443036077,134.36698,-1.07716065484595,0.21362,64.8702815647118,201.44366,-55.0383258002669,201.8709,60.003,0,97.1730270385742,108.899780273438,11.7267532348633 +"2011-11-29 20:13:30.100",-174.585969754313,134170.48185,-175.044335990418,134.36698,28.997394011571,0.21362,64.9275773442249,201.44366,-54.9867595987051,201.8709,60.003,0,97.1567687988281,108.901840209961,11.7450714111328 +"2011-11-29 20:13:30.133",-174.545862708654,134170.48185,-174.992769788856,134.36698,41.2128542037601,0.21362,64.9562252339814,201.65728,-54.8893567735329,201.8709,60.003,0,97.1619338989258,108.888381958008,11.726448059082 +"2011-11-29 20:13:30.166",-174.505755662995,134170.48185,-174.975581055002,134.5806,73.2068174838653,0.21362,64.9562252339814,201.65728,-54.8721680396789,201.8709,60.003,0,97.1672897338867,108.913017272949,11.7457275390625 +"2011-11-29 20:13:30.200",-174.465648617336,134170.48185,-174.981310632953,134.5806,68.7148283700396,0.21362,64.9963322796406,201.65728,-54.8950863514842,201.8709,60.023,0,97.1755981445313,108.916893005371,11.7412948608398 +"2011-11-29 20:13:30.233",-174.419811993725,134170.48185,-174.906826119586,134.36698,43.292691000085,0.42724,65.059357637105,201.65728,-54.8206018381172,201.8709,60.003,0,97.1674728393555,108.907218933105,11.73974609375 +"2011-11-29 20:13:30.266",-174.379704948066,134170.48185,-174.815152872365,134.36698,11.2815389861259,0.21362,65.1166534166181,201.8709,-54.7346581688475,201.8709,60.003,0,97.1779174804688,108.920379638672,11.7424621582031 +"2011-11-29 20:13:30.300",-174.339597902407,134170.48185,-174.775045826706,134.36698,-13.9114152657764,0.21362,65.1510308843259,201.65728,-54.7231990129449,201.8709,60.003,0,97.1774597167969,108.901176452637,11.7237167358398 +"2011-11-29 20:13:30.333",-174.299490856748,134170.48185,-174.763586670804,134.5806,-180,0,65.1567604622772,201.65728,-54.7117398570423,201.8709,60.003,0,97.1674118041992,108.897216796875,11.7298049926758 +"2011-11-29 20:13:30.366",-174.259383811089,134170.48185,-174.729209203096,134.5806,-172.51186253594,0.21362,65.1968675079364,201.65728,-54.6487144995779,201.8709,60.003,0,97.1832046508789,108.902069091797,11.718864440918 +"2011-11-29 20:13:30.400",-174.219276765429,134170.48185,-174.631806377924,134.36698,180,0,65.3114590669625,201.44366,-54.5742299862109,201.65728,60.003,0,97.1534042358398,108.908470153809,11.7550659179688 +"2011-11-29 20:13:30.433",-174.17916971977,134170.48185,-174.597428910216,134.36698,4.89305957041723,0.21362,65.357295690573,201.44366,-54.5513116744057,201.8709,60.003,0,97.1569519042969,108.911415100098,11.7544631958008 +"2011-11-29 20:13:30.466",-174.139062674111,134170.48185,-174.585969754313,134.36698,4.033622877721,0.21362,65.3802140023782,201.44366,-54.5513116744057,201.8709,60.003,0,97.149284362793,108.923675537109,11.7743911743164 +"2011-11-29 20:13:30.500",-174.093226050501,134170.48185,-174.540133130703,134.36698,0,0,65.4031323141835,201.65728,-54.5054750507952,201.65728,60.003,0,97.1769485473633,108.91438293457,11.737434387207 +"2011-11-29 20:13:30.533",-174.053119004841,134170.48185,-174.494296507092,134.36698,-110.626691083859,0.21362,65.4031323141835,201.44366,-54.4424496933308,201.65728,60.003,0,97.1573028564453,108.909309387207,11.7520065307617 +"2011-11-29 20:13:30.566",-174.013011959182,134170.48185,-174.459919039384,134.36698,-91.5414669280516,0.21362,65.4604280936966,201.44366,-54.4309905374282,201.8709,60.003,0,97.1570434570313,108.886322021484,11.7292785644531 +"2011-11-29 20:13:30.600",-173.972904913523,134170.48185,-174.431271149628,134.5806,0,0,65.5349126070636,201.65728,-54.408072225623,201.8709,60.003,0,97.1548690795898,108.913635253906,11.7587661743164 +"2011-11-29 20:13:30.633",-173.932797867864,134170.48185,-174.385434526017,134.5806,180,0,65.5750196527227,201.65728,-54.3393172902073,201.8709,60.003,0,97.1826019287109,108.919464111328,11.7368621826172 +"2011-11-29 20:13:30.666",-173.892690822205,134170.48185,-174.316679590602,134.5806,-58.3786697458796,0.21362,65.597937964528,201.65728,-54.2533736209377,201.8709,60.003,0,97.1535491943359,108.906539916992,11.7529907226563 +"2011-11-29 20:13:30.700",-173.852583776546,134170.48185,-174.259383811089,134.36698,-38.6803807492819,0.21362,65.6495041660897,201.44366,-54.1960778414246,201.65728,60.003,0,97.1692657470703,108.888938903809,11.7196731567383 +"2011-11-29 20:13:30.733",-173.812476730887,134170.48185,-174.242195077235,134.36698,-10.3877248257218,0.21362,65.6838816337976,201.44366,-54.184618685522,201.8709,60.003,0,97.160400390625,108.900939941406,11.7405395507813 +"2011-11-29 20:13:30.766",-173.766640107276,134170.48185,-174.247924655186,134.36698,13.1321926643985,0.21362,65.729718257408,201.44366,-54.2189961532298,201.8709,60.003,0,97.1591339111328,108.911834716797,11.7527008056641 +"2011-11-29 20:13:30.800",-173.726533061617,134170.48185,-174.213547187478,134.36698,72.9146090083486,0.21362,65.7927436148724,201.65728,-54.184618685522,201.65728,60.003,0,97.16162109375,108.899421691895,11.7378005981445 +"2011-11-29 20:13:30.833",-173.686426015958,134170.48185,-174.150521830014,134.5806,135.006045266676,0.21362,65.7984731928237,201.65728,-54.0757567044471,201.8709,60.003,0,97.1684875488281,108.907470703125,11.7389831542969 +"2011-11-29 20:13:30.866",-173.65204854825,134170.48185,-174.070307738695,134.5806,-180,0,65.8557689723368,201.65728,-54.0127313469827,201.8709,60.003,0,97.1673889160156,108.904815673828,11.7374267578125 +"2011-11-29 20:13:30.900",-173.606211924639,134170.48185,-174.035930270988,134.36698,-6.97289636674212,0.21362,65.9245239077525,201.44366,-54.0012721910801,201.8709,60.003,0,97.1497116088867,108.894897460938,11.7451858520508 +"2011-11-29 20:13:30.933",-173.56610487898,134170.48185,-174.030200693036,134.36698,44.3125558754179,0.21362,65.9417126416064,201.44366,-53.9611651454209,201.8709,60.013,0,97.1676864624023,108.910163879395,11.7424774169922 +"2011-11-29 20:13:30.966",-173.525997833321,134170.48185,-174.007282381231,134.5806,74.0089583970484,0.21362,65.9531717975091,201.44366,-53.9325172556644,202.08452,60.003,0,97.1542053222656,108.90673828125,11.7525329589844 +"2011-11-29 20:13:31.000",-173.485890787662,134170.48185,-173.932797867864,134.5806,180,0,66.0104675770221,201.44366,-53.8694918982,201.8709,60.003,0,97.187255859375,108.927581787109,11.7403259277344 +"2011-11-29 20:13:31.033",-173.445783742003,134170.48185,-173.8697725104,134.5806,-180,0,66.04484504473,201.44366,-53.795007384833,201.8709,60.003,0,97.1651611328125,108.890502929688,11.725341796875 +"2011-11-29 20:13:31.066",-173.405676696344,134170.48185,-173.846854198594,134.5806,-180,0,66.04484504473,201.44366,-53.7549003391738,202.08452,60.003,0,97.1422958374023,108.902961730957,11.7606658935547 +"2011-11-29 20:13:31.100",-173.365569650684,134170.48185,-173.812476730887,134.5806,-145.049995415319,0.21362,66.1078704021944,201.65728,-53.7549003391738,202.08452,60.003,0,97.1660079956055,108.935081481934,11.7690734863281 +"2011-11-29 20:13:31.133",-173.325462605025,134170.48185,-173.78382884113,134.5806,-150.980108594923,0.21362,66.1537070258048,201.65728,-53.7377116053199,201.8709,60.003,0,97.1579208374023,108.890426635742,11.7325057983398 +"2011-11-29 20:13:31.166",-173.279625981415,134170.48185,-173.726533061617,134.5806,-142.185206439665,0.21362,66.1823549155614,201.65728,-53.6689566699042,201.8709,60.003,0,97.1811065673828,108.901145935059,11.7200393676758 +"2011-11-29 20:13:31.200",-173.239518935756,134170.48185,-173.69788517186,134.5806,-146.929296983348,0.21362,66.2224619612205,201.44366,-53.646038358099,201.8709,60.003,0,97.1674575805664,108.915542602539,11.7480850219727 +"2011-11-29 20:13:31.233",-173.199411890097,134170.48185,-173.686426015958,134.5806,-165.854092956519,0.21362,66.2625690068797,201.44366,-53.6403087801477,201.8709,60.003,0,97.1669158935547,108.898391723633,11.7314758300781 +"2011-11-29 20:13:31.266",-173.159304844437,134170.48185,-173.646318970299,134.5806,180,0,66.2854873186849,201.65728,-53.5658242667807,201.8709,60.003,0,97.1669311523438,108.911796569824,11.7448654174805 +"2011-11-29 20:13:31.300",-173.119197798778,134170.48185,-173.594752768737,134.36698,40.559682317311,0.21362,66.342783098198,201.65728,-53.497069331365,201.8709,60.003,0,97.1742477416992,108.915061950684,11.7408142089844 +"2011-11-29 20:13:31.333",-173.079090753119,134170.48185,-173.514538677419,134.5806,32.1486618847905,0.21362,66.4115380336137,201.65728,-53.422584817998,201.8709,60.003,0,97.1436080932617,108.92130279541,11.7776947021484 +"2011-11-29 20:13:31.366",-173.03898370746,134170.48185,-173.480161209711,134.5806,180,0,66.4401859233703,201.8709,-53.3882073502901,202.08452,60.003,0,97.1575622558594,108.911567687988,11.7540054321289 +"2011-11-29 20:13:31.400",-172.998876661801,134170.48185,-173.485890787662,134.5806,96.3142053614914,0.21362,66.4516450792729,201.65728,-53.3767481943875,201.8709,60.003,0,97.1635437011719,108.894332885742,11.7307891845703 +"2011-11-29 20:13:31.433",-172.95304003819,134170.48185,-173.417135852246,134.5806,115.112950619734,0.21362,66.5261295926399,201.65728,-53.3079932589718,201.8709,60.003,0,97.1637268066406,108.919357299805,11.7556304931641 +"2011-11-29 20:13:31.466",-172.912932992531,134170.48185,-173.325462605025,134.5806,156.881573884771,0.21362,66.6006141060069,201.65728,-53.2392383235561,201.8709,60.003,0,97.1667327880859,108.914337158203,11.7476043701172 +"2011-11-29 20:13:31.500",-172.872825946872,134170.48185,-173.273896403464,134.5806,-103.734008808436,0.21362,66.6349915737147,201.65728,-53.2335087456048,201.8709,60.003,0,97.1484222412109,108.929618835449,11.7811965942383 +"2011-11-29 20:13:31.533",-172.832718901213,134170.48185,-173.262437247561,134.5806,0,0,66.6808281973252,201.65728,-53.2277791676535,201.8709,60.003,0,97.1521606445313,108.903854370117,11.7516937255859 +"2011-11-29 20:13:31.566",-172.792611855554,134170.48185,-173.273896403464,134.5806,91.4154162131228,0.21362,66.7037465091304,201.65728,-53.1991312778969,202.08452,60.003,0,97.1770782470703,108.906044006348,11.7289657592773 +"2011-11-29 20:13:31.600",-172.752504809895,134170.48185,-173.239518935756,134.5806,130.64583644573,0.21362,66.732394398887,201.65728,-53.1647538101891,202.08452,60.023,0,97.1599578857422,108.909530639648,11.7495727539063 +"2011-11-29 20:13:31.633",-172.712397764235,134170.48185,-173.159304844437,134.5806,-177.67994184802,0.21362,66.7896901784001,201.65728,-53.107458030676,201.8709,60.003,0,97.1853485107422,108.900588989258,11.7152404785156 +"2011-11-29 20:13:31.666",-172.672290718576,134170.48185,-173.107738642876,134.5806,180,0,66.8240676461079,201.65728,-53.0444326732116,201.8709,60.003,0,97.1559906005859,108.909599304199,11.7536087036133 +"2011-11-29 20:13:31.700",-172.632183672917,134170.48185,-173.096279486973,134.5806,152.183319964698,0.21362,66.8240676461079,201.65728,-53.0043256275525,201.8709,60.003,0,97.1531982421875,108.898460388184,11.7452621459961 +"2011-11-29 20:13:31.733",-172.586347049307,134170.48185,-173.067631597216,134.5806,-168.495428392072,0.21362,66.8183380681566,201.65728,-52.9527594259907,202.08452,60.003,0,97.1588287353516,108.910591125488,11.7517623901367 +"2011-11-29 20:13:31.766",-172.546240003647,134170.48185,-173.027524551557,134.5806,-150.332666286425,0.21362,66.8699042697184,201.65728,-52.9355706921368,202.08452,60.003,0,97.1738967895508,108.896827697754,11.7229309082031 +"2011-11-29 20:13:31.800",-172.506132957988,134170.48185,-172.975958349996,134.5806,162.92054904545,0.21362,66.9787662507932,201.65728,-52.9011932244289,202.08452,60.013,0,97.1686553955078,108.906051635742,11.7373962402344 +"2011-11-29 20:13:31.833",-172.466025912329,134170.48185,-172.90720341458,134.5806,173.371299228636,0.21362,66.9959549846472,201.65728,-52.792331243354,202.08452,60.003,0,97.1519775390625,108.911178588867,11.7592010498047 +"2011-11-29 20:13:31.866",-172.42591886667,134170.48185,-172.844178057115,134.5806,-97.4028251722399,0.21362,67.0074141405498,201.65728,-52.7235763079384,201.8709,60.003,0,97.159309387207,108.901176452637,11.7418670654297 +"2011-11-29 20:13:31.900",-172.385811821011,134170.48185,-172.798341433505,134.5806,-180,0,67.0933578098194,201.65728,-52.7121171520357,201.8709,60.003,0,97.1727828979492,108.91569519043,11.7429122924805 +"2011-11-29 20:13:31.933",-172.345704775352,134170.48185,-172.752504809895,134.5806,-180,0,67.1678423231864,201.65728,-52.6834692622792,201.8709,60.003,0,97.1753616333008,108.911064147949,11.7357025146484 +"2011-11-29 20:13:31.966",-172.299868151741,134170.48185,-172.729586498089,134.5806,180,0,67.2136789467969,201.44366,-52.660550950474,201.8709,60.003,0,97.1461791992188,108.905899047852,11.7597198486328 +"2011-11-29 20:13:32.000",-172.259761106082,134170.48185,-172.706668186284,134.36698,-180,0,67.2423268365534,201.44366,-52.660550950474,201.8709,60.003,0,97.1472854614258,108.900444030762,11.7531585693359 +"2011-11-29 20:13:32.033",-172.219654060423,134170.48185,-172.683749874479,134.36698,-180,0,67.2652451483586,201.44366,-52.6490917945713,201.8709,60.003,0,97.1697235107422,108.917938232422,11.7482147216797 +"2011-11-29 20:13:32.066",-172.179547014764,134170.48185,-172.660831562674,134.5806,136.633245404847,0.21362,67.2996226160665,201.65728,-52.5803368591556,202.08452,60.003,0,97.1610870361328,108.897026062012,11.7359390258789 +"2011-11-29 20:13:32.100",-172.139439969105,134170.48185,-172.632183672917,134.5806,113.325322298926,0.21362,67.3397296617257,201.8709,-52.5230410796426,202.08452,60.003,0,97.1554794311523,108.904388427734,11.748908996582 +"2011-11-29 20:13:32.133",-172.099332923445,134170.48185,-172.574887893404,134.5806,78.8619109218065,0.21362,67.3683775514822,201.65728,-52.4829340339834,202.08452,60.003,0,97.1752777099609,108.904861450195,11.7295837402344 +"2011-11-29 20:13:32.166",-172.059225877786,134170.48185,-172.494673802086,134.5806,-41.9691584933328,0.21362,67.4084845971414,201.65728,-52.4313678324216,201.8709,60.003,0,97.1613998413086,108.908218383789,11.7468185424805 +"2011-11-29 20:13:32.200",-172.019118832127,134170.48185,-172.431648444621,134.36698,-67.3626479735309,0.21362,67.494428266411,201.65728,-52.3969903647138,201.8709,60.003,0,97.1692810058594,108.89762878418,11.7283477783203 +"2011-11-29 20:13:32.233",-171.979011786468,134170.48185,-172.403000554865,134.5806,-101.064025483126,0.21362,67.5230761561675,201.65728,-52.3740720529086,201.8709,60.003,0,97.1711196899414,108.893516540527,11.7223968505859 +"2011-11-29 20:13:32.266",-171.933175162857,134170.48185,-172.368623087157,134.5806,-106.24929352906,0.21362,67.5230761561675,201.65728,-52.3053171174929,201.8709,60.003,0,97.1559753417969,108.914398193359,11.7584228515625 +"2011-11-29 20:13:32.300",-171.89879769515,134170.48185,-172.3399751974,134.5806,-180,0,67.5803719356806,201.65728,-52.2652100718337,201.8709,60.013,0,97.1664581298828,108.907752990723,11.7412948608398 +"2011-11-29 20:13:32.333",-171.852961071539,134170.48185,-172.311327307644,134.5806,103.017811564522,0.21362,67.6204789813398,201.65728,-52.196455136418,202.08452,60.003,0,97.1758728027344,108.898315429688,11.7224426269531 +"2011-11-29 20:13:32.366",-171.81285402588,134170.48185,-172.254031528131,134.5806,137.429656740079,0.21362,67.6319381372424,201.65728,-52.0933227332945,202.08452,60.003,0,97.1690521240234,108.917449951172,11.7483978271484 +"2011-11-29 20:13:32.400",-171.772746980221,134170.48185,-172.20819490452,134.5806,156.600824565157,0.21362,67.7006930726581,201.65728,-52.0875931553431,201.8709,60.003,0,97.1702423095703,108.903633117676,11.7333908081055 +"2011-11-29 20:13:32.433",-171.732639934562,134170.48185,-172.168087858861,134.5806,0,0,67.7866367419277,201.65728,-52.121970623051,201.8709,60.003,0,97.1742477416992,108.91259765625,11.7383499145508 +"2011-11-29 20:13:32.466",-171.692532888902,134170.48185,-172.145169547056,134.5806,0,0,67.8324733655382,201.65728,-52.1277002010023,201.8709,60.003,0,97.1638870239258,108.903213500977,11.7393264770508 +"2011-11-29 20:13:32.500",-171.652425843243,134170.48185,-172.122251235251,134.36698,-180,0,67.8324733655382,201.44366,-52.0818635773918,201.8709,60.003,0,97.1674346923828,108.893798828125,11.7263641357422 +"2011-11-29 20:13:32.533",-171.612318797584,134170.48185,-172.07641461164,134.5806,-151.157725511414,0.21362,67.8496620993921,201.44366,-52.0131086419761,201.8709,60.003,0,97.1623229980469,108.890502929688,11.7281799316406 +"2011-11-29 20:13:32.566",-171.572211751925,134170.48185,-172.03057798803,134.5806,-180,0,67.9012283009539,201.65728,-51.9558128624631,201.8709,60.003,0,97.1391983032227,108.913948059082,11.7747497558594 +"2011-11-29 20:13:32.600",-171.526375128315,134170.48185,-171.996200520322,134.5806,72.4505131942926,0.21362,67.9642536584182,201.65728,-51.9157058168039,202.08452,60.003,0,97.1713104248047,108.902000427246,11.7306900024414 +"2011-11-29 20:13:32.633",-171.486268082655,134170.48185,-171.933175162857,134.5806,95.9475123726077,0.21362,68.0100902820287,201.65728,-51.8412213034369,201.8709,60.003,0,97.1598510742188,108.91886138916,11.7590103149414 +"2011-11-29 20:13:32.666",-171.446161036996,134170.48185,-171.893068117198,134.5806,-163.115354695794,0.21362,68.0272790158826,201.65728,-51.824032569583,201.8709,60.003,0,97.1710052490234,108.908638000488,11.7376327514648 +"2011-11-29 20:13:32.700",-171.406053991337,134170.48185,-171.875879383344,134.5806,-142.77535296865,0.21362,68.0673860615418,201.65728,-51.8354917254856,201.8709,60.003,0,97.1592483520508,108.908126831055,11.7488784790039 +"2011-11-29 20:13:32.733",-171.365946945678,134170.48185,-171.841501915637,134.36698,4.944625771979,0.21362,68.0731156394931,201.44366,-51.7610072121186,202.08452,60.003,0,97.1652984619141,108.910659790039,11.745361328125 +"2011-11-29 20:13:32.766",-171.325839900019,134170.48185,-171.789935714075,134.5806,54.4710975830874,0.21362,68.107493107201,201.44366,-51.657874808995,202.08452,60.003,0,97.1688766479492,108.927345275879,11.7584686279297 +"2011-11-29 20:13:32.800",-171.28573285436,134170.48185,-171.744099090464,134.5806,148.877353486793,0.21362,68.1762480426166,201.65728,-51.6292269192385,202.08452,60.003,0,97.1710815429688,108.907989501953,11.7369079589844 +"2011-11-29 20:13:32.833",-171.2456258087,134170.48185,-171.698262466854,134.5806,-163.934684342831,0.21362,68.1991663544219,201.65728,-51.6063086074332,202.08452,60.023,0,97.1799240112305,108.890487670898,11.710563659668 +"2011-11-29 20:13:32.866",-171.19978918509,134170.48185,-171.629507531438,134.5806,-131.270360442423,0.21362,68.256462133935,201.65728,-51.5662015617741,201.8709,60.003,0,97.1680221557617,108.907775878906,11.7397537231445 +"2011-11-29 20:13:32.900",-171.159682139431,134170.48185,-171.577941329876,134.5806,-180,0,68.330946647302,201.65728,-51.4917170484071,201.8709,60.003,0,97.1644134521484,108.922523498535,11.7581100463867 +"2011-11-29 20:13:32.933",-171.119575093772,134170.48185,-171.566482173974,134.5806,117.267271929426,0.21362,68.3424058032046,201.44366,-51.4286916909427,202.08452,60.003,0,97.1551513671875,108.90234375,11.7471923828125 +"2011-11-29 20:13:32.966",-171.079468048113,134170.48185,-171.566482173974,134.5806,93.6614107700357,0.21362,68.3481353811559,201.44366,-51.4401508468453,202.08452,60.003,0,97.1640167236328,108.921104431152,11.7570877075195 +"2011-11-29 20:13:33.000",-171.039361002453,134170.48185,-171.537834284217,134.5806,0,0,68.3710536929611,201.65728,-51.4630691586505,202.08452,60.003,0,97.1697387695313,108.91145324707,11.7417144775391 +"2011-11-29 20:13:33.033",-170.999253956794,134170.48185,-171.457620192899,134.5806,-58.8370359819842,0.21362,68.4512677842795,201.65728,-51.4057733791375,202.08452,60.003,0,97.1592178344727,108.916007995605,11.7567901611328 +"2011-11-29 20:13:33.066",-170.959146911135,134170.48185,-171.400324413386,134.5806,180,0,68.554400187403,201.8709,-51.3370184437218,202.08452,60.003,0,97.1589965820313,108.904708862305,11.7457122802734 +"2011-11-29 20:13:33.100",-170.919039865476,134170.48185,-171.394594835434,134.5806,116.757339491759,0.21362,68.5887776551108,201.65728,-51.3255592878191,202.08452,60.003,0,97.1631164550781,108.910865783691,11.7477493286133 +"2011-11-29 20:13:33.133",-170.873203241865,134170.48185,-171.360217367727,134.5806,80.7182941780304,0.21362,68.5887776551108,201.44366,-51.2682635083061,202.29814,60.003,0,97.1711578369141,108.887092590332,11.715934753418 +"2011-11-29 20:13:33.166",-170.833096196206,134170.48185,-171.297192010262,134.5806,94.2458277210691,0.21362,68.62888470077,201.44366,-51.1823198390364,202.29814,60.003,0,97.16943359375,108.907417297363,11.7379837036133 +"2011-11-29 20:13:33.200",-170.798718728498,134170.48185,-171.239896230749,134.5806,123.821909105722,0.21362,68.703369214137,201.65728,-51.1479423713286,202.08452,60.003,0,97.1750106811523,108.898147583008,11.7231369018555 +"2011-11-29 20:13:33.233",-170.752882104888,134170.48185,-171.211248340993,134.5806,0,0,68.703369214137,201.65728,-51.1250240595234,201.8709,60.003,0,97.1627960205078,108.935104370117,11.7723083496094 +"2011-11-29 20:13:33.266",-170.712775059229,134170.48185,-171.188330029187,134.36698,2.68144248121225,0.21362,68.7262875259422,201.44366,-51.1078353256694,201.8709,60.003,0,97.1625061035156,108.919311523438,11.7568054199219 +"2011-11-29 20:13:33.300",-170.67266801357,134170.48185,-171.11384551582,134.36698,11.8946038269159,0.21362,68.8236903511145,201.65728,-51.044809968205,201.8709,60.003,0,97.1577377319336,108.907600402832,11.7498626708984 +"2011-11-29 20:13:33.333",-170.63256096791,134170.48185,-171.062279314259,134.5806,0,0,68.8637973967736,201.65728,-50.9989733445946,202.08452,60.003,0,97.1674575805664,108.918304443359,11.750846862793 +"2011-11-29 20:13:33.366",-170.592453922251,134170.48185,-171.027901846551,134.5806,-37.660515873949,0.21362,68.8752565526763,201.65728,-50.970325454838,202.08452,60.013,0,97.1711502075195,108.905746459961,11.7345962524414 +"2011-11-29 20:13:33.400",-170.552346876592,134170.48185,-170.993524378843,134.5806,-61.713284113541,0.21362,68.9153635983354,201.65728,-50.9416775650815,202.08452,60.003,0,97.162841796875,108.919624328613,11.7567825317383 +"2011-11-29 20:13:33.433",-170.512239830933,134170.48185,-170.924769443427,134.5806,-95.3573658436229,0.21362,68.9841185337511,201.65728,-50.8786522076171,202.08452,60.003,0,97.1660766601563,108.898834228516,11.7327575683594 +"2011-11-29 20:13:33.466",-170.472132785274,134170.48185,-170.884662397768,134.5806,0,0,69.0414143132642,201.65728,-50.8328155840066,201.8709,60.003,0,97.1648712158203,108.897659301758,11.7327880859375 +"2011-11-29 20:13:33.500",-170.426296161663,134170.48185,-170.867473663914,134.5806,0,0,69.0643326250694,201.65728,-50.8156268501527,201.8709,60.003,0,97.1680068969727,108.917579650879,11.7495727539063 +"2011-11-29 20:13:33.533",-170.386189116004,134170.48185,-170.844555352109,134.5806,-180,0,69.0643326250694,201.44366,-50.7640606485909,201.8709,60.003,0,97.1581573486328,108.903312683105,11.7451553344727 +"2011-11-29 20:13:33.566",-170.346082070345,134170.48185,-170.833096196206,134.5806,86.957804567005,0.21362,69.0700622030207,201.44366,-50.7010352911265,202.08452,60.003,0,97.1700592041016,108.913986206055,11.7439270019531 +"2011-11-29 20:13:33.600",-170.305975024686,134170.48185,-170.810177884401,134.5806,79.7098884586001,0.21362,69.1158988266312,201.65728,-50.6609282454674,201.8709,60.003,0,97.1762390136719,108.91919708252,11.7429580688477 +"2011-11-29 20:13:33.633",-170.265867979027,134170.48185,-170.747152526937,134.5806,103.900166569023,0.21362,69.1846537620469,201.8709,-50.6380099336622,201.8709,60.003,0,97.1507797241211,108.87718963623,11.7264099121094 +"2011-11-29 20:13:33.666",-170.225760933368,134170.48185,-170.689856747424,134.5806,180,0,69.2648678533652,201.8709,-50.6322803557108,201.8709,60.003,0,97.1669692993164,108.893951416016,11.7269821166992 +"2011-11-29 20:13:33.700",-170.185653887708,134170.48185,-170.626831389959,134.5806,-180,0,69.316434054927,201.65728,-50.5864437321004,201.8709,60.003,0,97.1637420654297,108.918006896973,11.754264831543 +"2011-11-29 20:13:33.733",-170.145546842049,134170.48185,-170.580994766349,134.5806,-180,0,69.316434054927,201.44366,-50.5062296407821,201.8709,60.003,0,97.1640625,108.909141540527,11.7450790405273 +"2011-11-29 20:13:33.766",-170.099710218439,134170.48185,-170.563806032495,134.36698,-180,0,69.3221636328783,201.44366,-50.4718521730742,201.8709,60.003,0,97.1745529174805,108.897735595703,11.7231826782227 +"2011-11-29 20:13:33.800",-170.05960317278,134161.32658,-170.523698986836,134.5806,-180,0,69.390918568294,201.65728,-50.4546634392203,201.8709,60.003,0,97.1572723388672,108.899826049805,11.7425537109375 +"2011-11-29 20:13:33.833",-170.01949612712,134170.48185,-170.466403207323,134.5806,-144.064508007694,0.21362,69.4367551919045,201.65728,-50.3801789258533,201.8709,60.003,0,97.157096862793,108.900863647461,11.743766784668 +"2011-11-29 20:13:33.866",-169.979389081461,134170.48185,-170.449214473469,134.5806,153.220373573885,0.21362,69.4768622375636,201.65728,-50.3458014581454,202.08452,60.003,0,97.1795654296875,108.908645629883,11.7290802001953 +"2011-11-29 20:13:33.900",-169.939282035802,134170.48185,-170.420566583712,134.5806,136.873887678802,0.21362,69.5513467509306,201.65728,-50.3343423022428,202.08452,60.003,0,97.1396026611328,108.912544250488,11.7729415893555 +"2011-11-29 20:13:33.933",-169.899174990143,134170.48185,-170.328893336491,134.5806,180,0,69.614372108395,201.65728,-50.2541282109245,202.08452,60.013,0,97.1967010498047,108.902908325195,11.7062072753906 +"2011-11-29 20:13:33.966",-169.859067944484,134170.48185,-170.288786290832,134.5806,0,0,69.6372904202003,201.44366,-50.1968324314114,202.08452,60.003,0,97.1850509643555,108.896392822266,11.7113418579102 +"2011-11-29 20:13:34.000",-169.818960898825,134170.48185,-170.294515868783,134.36698,49.4920943434005,0.21362,69.6315608422489,201.44366,-50.1853732755088,202.08452,60.003,0,97.1563873291016,108.904205322266,11.7478179931641 +"2011-11-29 20:13:34.033",-169.778853853166,134170.48185,-170.242949667221,134.5806,43.2583135323772,0.21362,69.6773974658594,201.44366,-50.1452662298496,202.08452,60.003,0,97.1504058837891,108.907752990723,11.7573471069336 +"2011-11-29 20:13:34.066",-169.738746807506,134170.48185,-170.179924309757,134.5806,0,0,69.7461524012751,201.44366,-50.1051591841905,202.08452,60.003,0,97.1674880981445,108.916732788086,11.7492446899414 +"2011-11-29 20:13:34.100",-169.692910183896,134170.48185,-170.145546842049,134.5806,0,0,69.7748002910317,201.65728,-50.0650521385313,201.8709,60.003,0,97.1579132080078,108.896186828613,11.7382736206055 +"2011-11-29 20:13:34.133",-169.652803138237,134170.48185,-170.128358108195,134.5806,180,0,69.763341135129,201.65728,-50.0134859369696,201.8709,60.003,0,97.1694488525391,108.897880554199,11.7284317016602 +"2011-11-29 20:13:34.166",-169.612696092578,134170.48185,-170.099710218439,134.5806,-180,0,69.7748002910317,201.65728,-49.9733788913104,202.08452,60.003,0,97.1587295532227,108.903778076172,11.7450485229492 +"2011-11-29 20:13:34.200",-169.572589046918,134170.48185,-170.036684860974,134.5806,180,0,69.8607439603013,201.44366,-49.9275422676999,202.08452,60.003,0,97.1621398925781,108.914245605469,11.7521057128906 +"2011-11-29 20:13:34.233",-169.532482001259,134170.48185,-169.97365950351,134.5806,129.477002543663,0.21362,69.9466876295709,201.44366,-49.8645169102356,202.08452,60.023,0,97.1683044433594,108.912506103516,11.7442016601563 diff --git a/PMUSimulator/DataDir/60Hz_measurement_files/Rect - Integer Point - 5 phasors, 3 analogs.csv b/PMUSimulator/DataDir/60Hz_measurement_files/Rect - Integer Point - 5 phasors, 3 analogs.csv new file mode 100755 index 0000000..15550fe --- /dev/null +++ b/PMUSimulator/DataDir/60Hz_measurement_files/Rect - Integer Point - 5 phasors, 3 analogs.csv @@ -0,0 +1,581 @@ +"2011-11-29 19:59:41.333",-144.288248800004,134166.76221621,-144.769279848706,134.421986928277,180,0.21362,95.1669489196678,201.622088465351,-24.6649402115011,201.687148381249,60.003,0,97.1605606079102,108.866287231445,11.7057266235352 +"2011-11-29 19:59:41.366",-144.249158766432,134164.942969119,-144.694972673441,134.545331124661,180,0.21362,95.2274017294428,201.641438911704,-24.6396397539419,201.881298166063,60.003,0,97.1727600097656,108.874153137207,11.7013931274414 +"2011-11-29 19:59:41.400",-144.2068962754,134168.540518895,-144.642330533104,134.371055359501,180,0.21362,95.2934422530305,201.448303859516,-24.6097668864874,201.598095859552,60.003,0,97.1526794433594,108.879905700684,11.7272262573242 +"2011-11-29 19:59:41.433",-144.167805715173,134166.851241233,-144.642330533104,134.371055359501,0,0,95.3539348416315,201.468124007611,-24.5545448474405,201.509230441792,60.003,0,97.1575317382813,108.858940124512,11.7014083862305 +"2011-11-29 19:59:41.466",-144.125546071298,134170.589301778,-144.568111931814,134.494785561127,0,0,95.3539348416315,201.468124007611,-24.5545448474405,201.509230441792,60.003,0,97.1708602905273,108.858459472656,11.6875991821289 +"2011-11-29 19:59:41.500",-144.084161736864,134161.615219975,-144.568111931814,134.494785561127,0,0,95.3539348416315,201.468124007611,-24.4489741215787,201.809404241766,60.003,0,97.1524353027344,108.884796142578,11.7323608398438 +"2011-11-29 19:59:41.533",-144.041902841975,134165.497742137,-144.494029885759,134.618741023863,0,0,95.4144154616509,201.488168688449,-24.4238967453483,202.003888332598,60.003,0,97.145622253418,108.877983093262,11.7323608398438 +"2011-11-29 19:59:41.566",-144.005107374996,134171.479211599,-144.441156424166,134.444899839451,0,0,95.4748839818981,201.508437835026,-24.3687042595744,201.915653515403,60.003,0,97.1670150756836,108.87181854248,11.7048034667969 +"2011-11-29 19:59:41.600",-143.962853936043,134175.498256946,-144.441156424166,134.444899839451,0,0,95.5353402713429,201.528931379613,-24.3384563139547,201.632952102459,60.003,0,97.1424026489258,108.89867401123,11.7562713623047 +"2011-11-29 19:59:41.633",-143.921460443024,134166.799388069,-144.441156424166,134.444899839451,0,0,95.5353402713429,201.528931379613,-24.3134635670617,201.827606225275,60.003,0,97.1590423583984,108.872688293457,11.7136459350586 +"2011-11-29 19:59:41.666",-143.879208103679,134170.962883454,-144.367164145376,134.569240361849,0,0,95.5957841991171,201.549649253761,-24.3134635670617,201.827606225275,60.003,0,97.158935546875,108.875518798828,11.7165832519531 +"2011-11-29 19:59:41.700",-143.840114839022,134169.797155253,-144.314107292293,134.395674694404,0,0,95.7166344469999,201.591757713332,-24.2581747074572,201.739746707747,60.003,0,97.1447982788086,108.852096557617,11.7072982788086 +"2011-11-29 19:59:41.733",-143.801020913239,134168.693889759,-144.186965683356,134.347110852097,0,0.21362,95.7226885098159,201.379201235361,-24.2028377208362,201.652075208256,60.003,0,97.1604156494141,108.869400024414,11.708984375 +"2011-11-29 19:59:41.766",-143.758773033913,134173.065354235,-144.186965683356,134.347110852097,0,0,95.7226885098159,201.379201235361,-24.1226358664209,201.759538225522,60.003,0,97.1587524414063,108.876602172852,11.7178497314453 +"2011-11-29 19:59:41.800",-143.719679449867,134172.092055856,-144.186965683356,134.347110852097,90,0.21362,95.7770405061963,201.613148158255,-24.1226358664209,201.759538225522,60.003,0,97.1608428955078,108.896324157715,11.735481262207 +"2011-11-29 19:59:41.833",-143.677435355296,134176.603965256,-144.166441063543,134.645348583012,180,0.21362,95.8374336819009,201.634762651738,-24.0978670009526,201.954522257032,60.003,0,97.1428680419922,108.87907409668,11.7362060546875 +"2011-11-29 19:59:41.866",-143.636024286351,134168.388084949,-144.039482803355,134.597552900489,-90,0.42724,95.8978138440794,201.656601121739,-24.0425195590052,201.867396149486,60.003,0,97.1536483764648,108.872772216797,11.719123840332 +"2011-11-29 19:59:41.900",-143.593781906474,134173.04442652,-143.986015043094,134.424702736574,-90,0.21362,95.8978138440794,201.656601121739,-23.9871243721842,201.78045857637,60.003,0,97.1532287597656,108.882125854492,11.7288970947266 +"2011-11-29 19:59:41.933",-143.552364682147,134164.970145553,-143.986015043094,134.424702736574,0,0,95.8978138440794,201.656601121739,-23.9316814823793,201.693709781478,60.003,0,97.1376190185547,108.872749328613,11.7351303100586 +"2011-11-29 19:59:41.966",-143.513267543625,134164.326656088,-143.986015043094,134.424702736574,-90,0.21362,95.9644871012531,201.466198707305,-23.9316814823793,201.693709781478,60.003,0,97.1612930297852,108.874572753906,11.7132797241211 +"2011-11-29 19:59:42.000",-143.476496997261,134171.102820135,-143.858785220557,134.377847350678,-90,0.21362,96.0917526792435,201.298627090608,-23.9070891190864,201.888983422855,60.003,0,97.1406021118164,108.865859985352,11.7252578735352 +"2011-11-29 19:59:42.033",-143.431932036436,134168.681395194,-143.858785220557,134.377847350678,0,0,96.0917526792435,201.298627090608,-23.8516417320447,201.802507409219,60.003,0,97.1444320678711,108.88215637207,11.7377243041992 +"2011-11-29 19:59:42.066",-143.392835516181,134168.230340622,-143.858785220557,134.377847350678,90,0.21362,96.0853070281543,201.511042102694,-23.771688394574,201.911698427551,60.003,0,97.142692565918,108.884010314941,11.7413177490234 +"2011-11-29 19:59:42.100",-143.350601972804,134173.306491253,-143.785298717885,134.503946233451,0,0.21362,96.0853070281543,201.511042102694,-23.7161894513671,201.825684354222,60.003,0,97.1467971801758,108.872688293457,11.7258911132813 +"2011-11-29 19:59:42.133",-143.31150658516,134172.985391605,-143.785298717885,134.503946233451,-90,0.21362,96.1456966945623,201.533799705404,-23.7161894513671,201.825684354222,60.003,0,97.1567840576172,108.866104125977,11.7093200683594 +"2011-11-29 19:59:42.166",-143.270072931326,134165.389036794,-143.785298717885,134.503946233451,180,0.21362,96.2060726568099,201.556781143903,-23.771688394574,201.911698427551,60.003,0,97.1658935546875,108.86930847168,11.7034149169922 +"2011-11-29 19:59:42.200",-143.227843268408,134170.677074824,-143.711949995309,134.630265962558,180,0.21362,96.3267829515109,201.60341522133,-23.7161894513671,201.825684354222,60.003,0,97.1363677978516,108.872360229492,11.7359924316406 +"2011-11-29 19:59:42.233",-143.188746939115,134170.552130969,-143.658075209371,134.458136630638,0,0,96.3267829515109,201.60341522133,-23.5807690334846,201.849989022779,60.003,0,97.1538238525391,108.865036010742,11.7112121582031 +"2011-11-29 19:59:42.266",-143.14965055521,134170.489658998,-143.584821215849,134.584838425322,-90,0.21362,96.3267829515109,201.60341522133,-23.5807690334846,201.849989022779,60.003,0,97.1483917236328,108.883964538574,11.7355728149414 +"2011-11-29 19:59:42.300",-143.105080315945,134168.663590437,-143.584821215849,134.584838425322,-90,0.21362,96.3334802806117,201.391097638783,-23.5807690334846,201.849989022779,60.003,0,97.1638565063477,108.883628845215,11.7197723388672 +"2011-11-29 19:59:42.333",-143.065983403931,134168.734809451,-143.530765609948,134.412990421361,0,0,96.3938771642707,201.414775055291,-23.5251721234927,201.764627159158,60.003,0,97.1505737304688,108.858535766602,11.7079620361328 +"2011-11-29 19:59:42.366",-143.026886551628,134168.868501182,-143.530765609948,134.412990421361,0,0,96.4542597825485,201.438676226791,-23.445381979599,201.875421007576,60.003,0,97.1700973510742,108.873603820801,11.7035064697266 +"2011-11-29 19:59:42.400",-142.984668014572,134174.576201693,-143.457607212533,134.540073914089,0,0,96.5146280064181,201.462801073645,-23.365679523349,201.986605930481,60.003,0,97.1529846191406,108.86897277832,11.7159881591797 +"2011-11-29 19:59:42.433",-142.943217106647,134167.53345208,-143.403371090561,134.368508274298,0,0,96.5749817070417,201.487149515509,-23.3100297886822,201.901979882615,60.003,0,97.1615142822266,108.886993408203,11.7254791259766 +"2011-11-29 19:59:42.466",-142.901001776511,134173.385516633,-143.403371090561,134.368508274298,0,0,96.581944655178,201.274936010781,-23.3340412767098,201.705813873537,60.003,0,97.1631088256836,108.904846191406,11.7417373657227 +"2011-11-29 19:59:42.500",-142.865023393654,134168.2556422,-143.33030915515,134.495973090886,90,0.21362,96.7027334381537,201.324355392144,-23.3100297886822,201.901979882615,60.003,0,97.1630172729492,108.86767578125,11.7046585083008 +"2011-11-29 19:59:42.533",-142.822811761725,134174.242611036,-143.202928218354,134.45253660879,0,0,96.7631054606064,201.349400492117,-23.2304126595086,202.013827867985,60.003,0,97.1463394165039,108.854019165039,11.7076797485352 +"2011-11-29 19:59:42.566",-142.781352462314,134167.474102373,-143.202928218354,134.45253660879,90,0.21362,96.6956450241564,201.536516859361,-23.174713957378,201.929665203253,60.003,0,97.1425399780273,108.865814208984,11.723274230957 +"2011-11-29 19:59:42.600",-142.742256074951,134168.062600412,-143.202928218354,134.45253660879,90,0.21362,96.7488183439642,201.773673835379,-23.1189688590752,201.845693526835,60.003,0,97.1609573364258,108.879516601563,11.7185592651367 +"2011-11-29 19:59:42.633",-142.697680734623,134166.978687479,-143.202928218354,134.45253660879,0,0.21362,96.8162487070369,201.586777601501,-23.1189688590752,201.845693526835,60.003,0,97.1533279418945,108.881805419922,11.7284774780273 +"2011-11-29 19:59:42.666",-142.655476393421,134173.25432823,-143.075465581607,134.409765111874,0,0.21362,96.8765278656011,201.612242788595,-23.1189688590752,201.845693526835,60.003,0,97.1426773071289,108.852890014648,11.7102127075195 +"2011-11-29 19:59:42.700",-142.616382366085,134174.043955532,-143.075465581607,134.409765111874,0,0.21362,96.8765278656011,201.612242788595,-23.063177412274,201.761913077192,60.003,0,97.1646041870117,108.881362915039,11.7167587280273 +"2011-11-29 19:59:42.733",-142.574912914472,134167.62528789,-143.075465581607,134.409765111874,0,0.21362,96.8765278656011,201.612242788595,-22.983642786905,201.874968911374,60.003,0,97.1471252441406,108.876068115234,11.7289428710938 +"2011-11-29 19:59:42.766",-142.535817778491,134168.543642539,-143.002738176329,134.538208402892,90,0.21362,96.8765278656011,201.612242788595,-22.9041973479522,201.988413309739,60.003,0,97.1599655151367,108.868637084961,11.7086715698242 +"2011-11-29 19:59:42.800",-142.496723195905,134169.524463352,-142.947922429119,134.367659235167,0,0,96.9970401786331,201.663842372037,-22.8483567127534,201.905370125839,60.003,0,97.1474227905273,108.876800537109,11.729377746582 +"2011-11-29 19:59:42.833",-142.455246744366,134163.308624461,-142.875294341149,134.496482029002,-90,0.21362,97.0572730783644,201.689976597178,-22.8483567127534,201.905370125839,60.003,0,97.1506118774414,108.886474609375,11.7358627319336 +"2011-11-29 19:59:42.866",-142.413053031804,134170.002376627,-142.875294341149,134.496482029002,0,0,96.9970401786331,201.663842372037,-22.7924701775563,201.82251887965,60.003,0,97.1487579345703,108.87614440918,11.7273864746094 +"2011-11-29 19:59:42.900",-142.37157291771,134163.928378295,-142.875294341149,134.496482029002,0,0,97.0572730783644,201.689976597178,-22.7131121267,201.936896661753,60.003,0,97.1480484008789,108.886085510254,11.738037109375 +"2011-11-29 19:59:42.933",-142.332478389861,134165.171625844,-142.802805364856,134.625520519053,0,0,97.1174903040859,201.716333662634,-22.7131121267,201.936896661753,60.003,0,97.1491851806641,108.860069274902,11.7108840942383 +"2011-11-29 19:59:42.966",-142.293384604748,134166.47733574,-142.802805364856,134.625520519053,180,0.21362,97.185280096874,201.530969297743,-22.7131121267,201.936896661753,60.003,0,97.1640777587891,108.880439758301,11.7163619995117 +"2011-11-29 19:59:43.000",-142.25429159875,134167.84550616,-142.747772036108,134.455421497658,180,0.21362,97.2531946127253,201.345887566393,-22.6571790290647,201.854510498706,60.003,0,97.1632995605469,108.893531799316,11.7302322387695 +"2011-11-29 19:59:43.033",-142.20971400842,134167.650589582,-142.675383492463,134.584838425322,-135,0.302104301194141,97.2531946127253,201.345887566393,-22.5779105160613,201.969547992145,60.003,0,97.1572723388672,108.872253417969,11.7149810791016 +"2011-11-29 19:59:43.066",-142.170622258651,134169.152439486,-142.547885194044,134.544822371326,-90,0.21362,97.3057595333108,201.584853434434,-22.5779105160613,201.969547992145,60.003,0,97.1592712402344,108.868637084961,11.7093658447266 +"2011-11-29 19:59:43.100",-142.131531402232,134170.716744473,-142.547885194044,134.544822371326,0,0,97.3659749683352,201.612129617101,-22.4659071129067,201.805899323533,60.003,0,97.1526947021484,108.881156921387,11.7284622192383 +"2011-11-29 19:59:43.133",-142.086954726988,134170.745481535,-142.547885194044,134.544822371326,0,0,97.3737663613302,201.400274384149,-22.4659071129067,201.805899323533,60.003,0,97.1536560058594,108.848701477051,11.6950454711914 +"2011-11-29 19:59:43.166",-142.047865371321,134172.443456118,-142.547885194044,134.544822371326,180,0.21362,97.3737663613302,201.400274384149,-22.4659071129067,201.805899323533,60.003,0,97.1671447753906,108.897048950195,11.7299041748047 +"2011-11-29 19:59:43.200",-142.006370417563,134166.988683258,-142.547885194044,134.544822371326,180,0.21362,97.4863566399806,201.667349759176,-22.4098373714933,201.724364530187,60.003,0,97.1545639038086,108.880310058594,11.7257461547852 +"2011-11-29 19:59:43.233",-141.967281044624,134168.815399342,-142.420311664637,134.505472951515,0,0,97.4863566399806,201.667349759176,-22.3306596919294,201.840606637096,60.003,0,97.1641311645508,108.882110595703,11.7179794311523 +"2011-11-29 19:59:43.266",-141.925781754568,134163.497299822,-142.348266238613,134.635858591961,-90,0.21362,97.5545006024329,201.48352574775,-22.3076421559009,202.038222836241,60.003,0,97.145866394043,108.870147705078,11.7242813110352 +"2011-11-29 19:59:43.300",-141.883616460791,134171.10375721,-142.292664103675,134.466790751128,-90,0.21362,97.6749063678688,201.54013967432,-22.2745451608755,201.759538225522,60.003,0,97.1462020874023,108.883316040039,11.7371139526367 +"2011-11-29 19:59:43.333",-141.844530076242,134173.126575592,-142.292664103675,134.466790751128,0,0,97.6749063678688,201.54013967432,-22.2515733092004,201.957233750543,60.003,0,97.1423645019531,108.863586425781,11.7212219238281 +"2011-11-29 19:59:43.366",-141.803027381555,134168.016682664,-142.292664103675,134.466790751128,0,0,97.6668042618142,201.751848037823,-22.1954595286789,201.876438220327,60.003,0,97.1460723876953,108.873504638672,11.7274322509766 +"2011-11-29 19:59:43.400",-141.763941370098,134170.168240248,-142.220721904957,134.597552900489,0,0,97.7269196638723,201.78045857637,-22.1725783663321,202.07424520391,60.003,0,97.1483764648438,108.87052154541,11.7221450805664 +"2011-11-29 19:59:43.433",-141.722434753132,134165.195053765,-142.220721904957,134.597552900489,0,0,97.7350837542503,201.568780262613,-22.1164655855431,201.993722392783,60.003,0,97.146240234375,108.87476348877,11.7285232543945 +"2011-11-29 19:59:43.466",-141.683349269503,134167.475351841,-142.164943714922,134.428776346145,0,0,97.803487286989,201.385999266225,-22.1164655855431,201.993722392783,60.003,0,97.1564407348633,108.858505249023,11.7020645141602 +"2011-11-29 19:59:43.500",-141.63877311275,134168.320614131,-142.164943714922,134.428776346145,0,0,97.7952439757007,201.597643141431,-22.0603081032087,201.913393474689,60.003,0,97.1579742431641,108.879173278809,11.7211990356445 +"2011-11-29 19:59:43.533",-141.599690022634,134170.734548958,-142.093105586669,134.559914569025,90,0.21362,97.8553869069686,201.62672821531,-22.0041059739167,201.833258681132,60.003,0,97.1472930908203,108.86572265625,11.7184295654297 +"2011-11-29 19:59:43.566",-141.560608357004,134173.210911088,-142.037151706411,134.391430303253,135,0.302104301194141,97.9155124230266,201.656035388108,-22.0041059739167,201.833258681132,60.003,0,97.1746368408203,108.884567260742,11.7099304199219 +"2011-11-29 19:59:43.600",-141.519095459184,134168.582688091,-141.965418490055,134.522944157731,180,0.21362,97.9840495513368,201.474013047278,-21.9252068923355,201.951471783315,60.003,0,97.1542053222656,108.865303039551,11.7110977172852 +"2011-11-29 19:59:43.633",-141.480014711681,134171.18778162,-141.965418490055,134.522944157731,0,0,97.9756203990734,201.685564563006,-21.8464002737385,202.070067390168,60.003,0,97.1440124511719,108.862396240234,11.7183837890625 +"2011-11-29 19:59:43.666",-141.438498469942,134166.696306418,-141.893825505966,134.654668458924,0,0,98.0357107105348,201.715315642505,-21.8464002737385,202.070067390168,60.003,0,97.13916015625,108.87353515625,11.734375 +"2011-11-29 19:59:43.700",-141.396363462179,134175.142179449,-141.83766182557,134.486642217443,0,0,98.1644523377582,201.564025980265,-21.812672662836,201.792331324191,60.003,0,97.1470184326172,108.878402709961,11.7313842773438 +"2011-11-29 19:59:43.733",-141.354845709958,134170.792647786,-141.83766182557,134.486642217443,180,0.21362,98.1730849263726,201.352573404608,-21.7338702883458,201.911472420191,60.003,0,97.1436004638672,108.863754272461,11.7201538085938 +"2011-11-29 19:59:43.766",-141.313325287618,134166.51357057,-141.709836807757,134.451009289623,180,0.21362,98.1730849263726,201.352573404608,-21.5988324418028,201.952262651296,60.003,0,97.1549224853516,108.848754882813,11.6938323974609 +"2011-11-29 19:59:43.800",-141.274248232635,134169.447309872,-141.766174822553,134.618741023863,90,0.21362,98.1644523377582,201.564025980265,-21.5765449441894,202.150898400718,60.003,0,97.1692199707031,108.869667053223,11.7004470825195 +"2011-11-29 19:59:43.833",-141.232124645029,134178.175991921,-141.766174822553,134.618741023863,90,0.21362,98.2245505789087,201.594474086113,-21.63282686325,202.22955342082,60.003,0,97.1523132324219,108.869873046875,11.7175598144531 +"2011-11-29 19:59:43.866",-141.190602721126,134174.105176442,-141.638456619734,134.583482143742,0,0,98.2245505789087,201.594474086113,-21.5765449441894,202.150898400718,60.003,0,97.1693572998047,108.868927001953,11.6995697021484 +"2011-11-29 19:59:43.900",-141.15212319101,134164.361954377,-141.638456619734,134.583482143742,0,0,98.2846306026776,201.62514392245,-21.5424599960244,201.8737256416,60.003,0,97.1690063476563,108.872192382813,11.7031860351563 +"2011-11-29 19:59:43.933",-141.11304922639,134167.553131187,-141.581944655178,134.416045906328,0,0,98.3446922852854,201.656035388108,-21.4638498834584,201.994174223195,60.003,0,97.1612091064453,108.877403259277,11.716194152832 +"2011-11-29 19:59:43.966",-141.068479069006,134169.437314277,-141.510672114156,134.548892344148,0,0.21362,98.4047355031892,201.687148381249,-21.4074368580955,201.916105520511,60.003,0,97.1595840454102,108.879257202148,11.7196731567383 +"2011-11-29 19:59:44.000",-141.029408632921,134172.762058226,-141.453986590353,134.381752590161,90,0.21362,98.4737011107712,201.507192303808,-21.3853336126128,202.115002584713,60.003,0,97.1656875610352,108.886260986328,11.720573425293 +"2011-11-29 19:59:44.033",-140.987879196095,134169.035303295,-141.453986590353,134.381752590161,90,0.21362,98.4826608580561,201.295906725542,-21.4074368580955,201.916105520511,60.003,0,97.1542510986328,108.882705688477,11.7284545898438 +"2011-11-29 19:59:44.066",-140.946347473935,134165.379040896,-141.382822526371,134.514972141235,0,0,98.5337685334,201.538781126342,-21.3509802476536,201.838232711343,60.003,0,97.1725387573242,108.873741149902,11.7012023925781 +"2011-11-29 19:59:44.100",-140.907278999679,134168.898800458,-141.382822526371,134.514972141235,0,0,98.5247660519059,201.750038539293,-21.272471137066,201.959606277503,60.003,0,97.1617660522461,108.879135131836,11.7173690795898 +"2011-11-29 19:59:44.133",-140.865745101026,134165.379353268,-141.311799389704,134.648398795233,0,0,98.5847531368294,201.781815497192,-21.2505055071332,202.158686273979,60.003,0,97.1501617431641,108.858222961426,11.7080612182617 +"2011-11-29 19:59:44.166",-140.82667879876,134169.027806575,-141.311799389704,134.648398795233,180,0.21362,98.6538465774944,201.602622984854,-21.2505055071332,202.158686273979,60.003,0,97.1574020385742,108.880676269531,11.723274230957 +"2011-11-29 19:59:44.200",-140.785142888006,134165.645181428,-141.311799389704,134.648398795233,135,0.302104301194141,98.7138569533252,201.634875810528,-21.2159748530494,201.882202329106,60.003,0,97.1441345214844,108.857055664063,11.7129211425781 +"2011-11-29 19:59:44.233",-140.746078912338,134169.422320882,-141.254909080765,134.481722041677,90,0.21362,98.7138569533252,201.634875810528,-21.1157364039438,202.203488934459,60.003,0,97.1560211181641,108.885520935059,11.7294998168945 +"2011-11-29 19:59:44.266",-140.704541153898,134166.176523797,-141.183995460079,134.615520644042,90,0.21362,98.7230628526178,201.423724167292,-21.059248553597,202.126629914941,60.003,0,97.1674957275391,108.873954772949,11.7064590454102 +"2011-11-29 19:59:44.300",-140.66300140745,134163.001245489,-141.126933005494,134.449142542636,0,0,98.8431484160758,201.488961374949,-21.0244506701629,201.850554212809,60.003,0,97.1586151123047,108.879974365234,11.7213592529297 +"2011-11-29 19:59:44.333",-140.620918122522,134172.781736566,-141.056129722758,134.583312607583,0,0,98.8431484160758,201.488961374949,-21.002717782689,202.049967511217,60.003,0,97.1572570800781,108.879272460938,11.7220153808594 +"2011-11-29 19:59:44.366",-140.579378508273,134169.748426844,-141.056129722758,134.583312607583,0,0,98.8937720273132,201.732960597524,-21.002717782689,202.049967511217,60.003,0,97.1682815551758,108.876502990723,11.7082214355469 +"2011-11-29 19:59:44.400",-140.543340398444,134168.035736969,-140.928203407448,134.551775167078,0,0,98.9537046276342,201.766097271646,-20.8679330580301,202.096826485747,60.003,0,97.1553039550781,108.880783081055,11.7254791259766 +"2011-11-29 19:59:44.433",-140.498780777348,134170.957573354,-140.928203407448,134.551775167078,0,0,98.963155716391,201.555083097711,-20.8113217559813,202.020830428817,60.003,0,97.1482467651367,108.88916015625,11.7409133911133 +"2011-11-29 19:59:44.466",-140.459726964046,134175.191842946,-140.928203407448,134.551775167078,0,0.21362,98.9726266148964,201.344074419457,-20.8679330580301,202.096826485747,60.003,0,97.1551818847656,108.875640869141,11.720458984375 +"2011-11-29 19:59:44.500",-140.418184658581,134172.432211324,-140.870797897025,134.385997286969,0,0,99.0326618772548,201.377501691788,-20.8113217559813,202.020830428817,60.003,0,97.1510162353516,108.877716064453,11.7266998291016 +"2011-11-29 19:59:44.533",-140.376640666055,134169.743116695,-140.800217747437,134.520908794177,0,0,99.0830837781358,201.622088465351,-20.7546679012599,201.945031743037,60.003,0,97.1447219848633,108.890594482422,11.7458724975586 +"2011-11-29 19:59:44.566",-140.335095030049,134167.124563303,-140.800217747437,134.520908794177,0,0,99.1430177908336,201.655922241192,-20.6979715567777,201.869430650737,60.003,0,97.1340026855469,108.870208740234,11.7362060546875 +"2011-11-29 19:59:44.600",-140.29604546414,134171.620084813,-140.672173979525,134.490713950919,0,0,99.2029316299475,201.689976597177,-20.6198726490063,201.993948308115,60.003,0,97.1521301269531,108.880737304688,11.7286071777344 +"2011-11-29 19:59:44.633",-140.25449889867,134169.138383149,-140.672173979525,134.490713950919,90,0.21362,99.2029316299475,201.689976597177,-20.6198726490063,201.993948308115,60.003,0,97.1584014892578,108.879493713379,11.7210922241211 +"2011-11-29 19:59:44.666",-140.21295081806,134166.727230922,-140.672173979525,134.490713950919,135,0.302104301194141,99.2628251746993,201.724251421596,-20.6198726490063,201.993948308115,60.003,0,97.1588439941406,108.894378662109,11.7355346679688 +"2011-11-29 19:59:44.700",-140.173905346145,134171.417677133,-140.672173979525,134.490713950919,180,0.21362,99.3226983045698,201.758746602087,-20.5631397935335,201.918817529906,60.003,0,97.1608734130859,108.854522705078,11.6936492919922 +"2011-11-29 19:59:44.733",-140.13235658531,134169.143380958,-140.544073343958,134.461191089706,0,0,99.3325358585388,201.547951147483,-20.5063647592741,201.843884869615,60.003,0,97.1581802368164,108.854957580566,11.69677734375 +"2011-11-29 19:59:44.766",-140.090806437719,134166.93964146,-140.544073343958,134.461191089706,0,0.21362,99.3924493408189,201.582702873036,-20.4495476107926,201.769150547972,60.003,0,97.1713943481445,108.874237060547,11.7028427124023 +"2011-11-29 19:59:44.800",-140.051765414682,134171.824991042,-140.544073343958,134.461191089706,0,0,99.4523421037,201.617674945572,-20.4495476107926,201.769150547972,60.003,0,97.1452026367188,108.873481750488,11.7282791137695 +"2011-11-29 19:59:44.833",-140.010214836124,134169.758110055,-140.473861503937,134.597044344543,180,0.21362,99.4423828388939,201.828397578625,-20.3926884130808,201.694614785448,60.003,0,97.170295715332,108.859771728516,11.6894760131836 +"2011-11-29 19:59:44.866",-139.968662999229,134167.761792023,-140.473861503937,134.597044344543,180,0.21362,99.4423828388939,201.828397578625,-20.3147115992975,201.820596960152,60.003,0,97.1493835449219,108.886772155762,11.7373886108398 +"2011-11-29 19:59:44.900",-139.929626779826,134172.842020989,-140.473861503937,134.597044344543,90,0.21362,99.5122140271057,201.652867250448,-20.2936777660727,202.020943371357,60.003,0,97.1466979980469,108.864692687988,11.7179946899414 +"2011-11-29 19:59:44.933",-139.888074761228,134170.982562058,-140.345819842749,134.568562144164,90,0.21362,99.5720649912254,201.68827967238,-20.2936777660727,202.020943371357,60.003,0,97.1599884033203,108.880142211914,11.7201538085938 +"2011-11-29 19:59:44.966",-139.846521612741,134169.193671401,-140.275864478601,134.70498464641,-45,0.302104301194141,99.6318948765153,201.723912095443,-20.2368322195244,201.946952478296,60.003,0,97.1522750854492,108.871284484863,11.7190093994141 +"2011-11-29 19:59:45.000",-139.804967378032,134167.475351841,-140.217724608632,134.540752275383,-90,0.21362,99.6917035636996,201.759764403076,-20.1799450587273,201.873160516444,60.003,0,97.1517181396484,108.882438659668,11.7307205200195 +"2011-11-29 19:59:45.033",-139.765937470647,134172.816720276,-140.217724608632,134.540752275383,0,0,99.6318948765153,201.723912095443,-20.102170583329,202.000160880737,60.003,0,97.1571502685547,108.883712768555,11.7265625 +"2011-11-29 19:59:45.066",-139.727366337886,134165.316878888,-140.147884824136,134.677541783613,0,0,99.6917035636996,201.759764403076,-20.0244939852301,202.127532980559,60.003,0,97.1704711914063,108.879150390625,11.7086791992188 +"2011-11-29 19:59:45.100",-139.685809497535,134163.800929152,-140.147884824136,134.677541783613,0,0,99.8112568679961,201.832128202625,-20.0244939852301,202.127532980559,60.003,0,97.1574020385742,108.865440368652,11.7080383300781 +"2011-11-29 19:59:45.133",-139.641272394052,134168.284067424,-140.147884824136,134.677541783613,0,0,99.8710012479079,201.868639458243,-20.0244939852301,202.127532980559,60.003,0,97.1453094482422,108.883583068848,11.7382736206055 +"2011-11-29 19:59:45.166",-139.602249435751,134173.886530207,-140.08957704926,134.513615155203,0,0,99.8814061203502,201.65818516746,-20.0244939852301,202.127532980559,60.003,0,97.16748046875,108.870315551758,11.7028350830078 +"2011-11-29 19:59:45.200",-139.560693968003,134172.583078899,-140.01985364202,134.650771134745,0,0,99.941189242656,201.69495416089,-19.96758061328,202.054484512124,60.003,0,97.1544570922852,108.87873840332,11.7242813110352 +"2011-11-29 19:59:45.233",-139.522111588987,134165.406841986,-139.961378415421,134.487151190869,90,0.21362,99.941189242656,201.69495416089,-19.8536306067233,201.908986322533,60.003,0,97.1545791625977,108.890640258789,11.7360610961914 +"2011-11-29 19:59:45.266",-139.480552777939,134164.239503637,-139.961378415421,134.487151190869,0,0,99.9516763880323,201.48454493902,-19.8536306067233,201.908986322533,60.003,0,97.1675720214844,108.888725280762,11.7211532592773 +"2011-11-29 19:59:45.300",-139.441535545156,134170.098271439,-139.833129960945,134.461360779842,0,0,100.071297803123,201.55881878045,-19.7965941087778,201.836537032997,60.003,0,97.1471557617188,108.890380859375,11.7432250976563 +"2011-11-29 19:59:45.333",-139.399977548514,134169.067789076,-139.833129960945,134.461360779842,90,0.21362,100.071297803123,201.55881878045,-19.7395167062001,201.764287900909,60.003,0,97.1534271240234,108.888732910156,11.7353057861328 +"2011-11-29 19:59:45.366",-139.358418935362,134168.107893413,-139.833129960945,134.461360779842,45,0.302104301194141,100.071297803123,201.55881878045,-19.7190486810491,201.965368012658,60.003,0,97.1553039550781,108.886199951172,11.7308959960938 +"2011-11-29 19:59:45.400",-139.316859749414,134167.218585966,-139.763641690726,134.5992480731,0,0,100.120406990016,201.806577699555,-19.7190486810491,201.965368012658,60.003,0,97.1544799804688,108.871116638184,11.7166366577148 +"2011-11-29 19:59:45.433",-139.275300034391,134166.399868139,-139.763641690726,134.5992480731,0,0,100.190830569821,201.633970538429,-19.6416022622675,202.094568471105,60.003,0,97.1804275512695,108.885787963867,11.7053604125977 +"2011-11-29 19:59:45.466",-139.236292690296,134172.585890095,-139.704832942633,134.436244309768,90,0.21362,100.190830569821,201.633970538429,-19.5845426171969,202.022863384885,60.003,0,97.1690979003906,108.872123718262,11.7030258178711 +"2011-11-29 19:59:45.500",-139.194734208454,134171.904017294,-139.704832942633,134.436244309768,90,0.21362,100.190830569821,201.633970538429,-19.5477208839471,201.750038539293,60.003,0,97.1575698852539,108.874717712402,11.7171478271484 +"2011-11-29 19:59:45.533",-139.153175326066,134171.292733968,-139.704832942633,134.436244309768,0,0,100.250563415834,201.671875329868,-19.5477208839471,201.750038539293,60.003,0,97.1634750366211,108.882522583008,11.7190475463867 +"2011-11-29 19:59:45.566",-139.114571847069,134164.759293763,-139.635463426903,134.574496433023,0,0,100.321145286697,201.499832189454,-19.5274425094344,201.951358801922,60.003,0,97.1780853271484,108.869995117188,11.6919097900391 +"2011-11-29 19:59:45.600",-139.07557162717,134171.201525384,-139.507238645991,134.550418552217,180,0.21362,100.440618204,201.576817008727,-19.4501138323257,202.081471488634,60.003,0,97.175163269043,108.879890441895,11.7047271728516 +"2011-11-29 19:59:45.633",-139.034012105512,134170.792647786,-139.438131310936,134.689231093953,180,0.21362,100.500320318252,201.615637903857,-19.392982931598,202.010439444955,60.003,0,97.1504821777344,108.862678527832,11.7121963500977 +"2011-11-29 19:59:45.666",-138.992452352419,134170.454362322,-139.438131310936,134.689231093953,180,0.21362,100.500320318252,201.615637903857,-19.3358118962515,201.939608391928,60.003,0,97.1605453491211,108.86548614502,11.7049407958984 +"2011-11-29 19:59:45.700",-138.950892411621,134170.186669527,-139.378968607752,134.527014792456,180,0.21362,100.500320318252,201.615637903857,-19.278600797944,201.86897854112,60.003,0,97.1673812866211,108.885406494141,11.7180252075195 +"2011-11-29 19:59:45.733",-138.909332326852,134169.989569823,-139.378968607752,134.527014792456,0,0,100.559999380994,201.65467762092,-19.278600797944,201.86897854112,60.003,0,97.1601638793945,108.874443054199,11.7142791748047 +"2011-11-29 19:59:45.766",-138.867772141843,134169.863063521,-139.309981748071,134.666190322894,0,0,100.608483604742,201.903901027431,-19.2213497087532,201.798550103795,60.003,0,97.1636505126953,108.873588562012,11.7099380493164 +"2011-11-29 19:59:45.800",-138.829154896853,134163.779999992,-139.309981748071,134.666190322894,0,0,100.619655276155,201.693936032852,-19.1441611248037,201.930117176997,60.003,0,97.1630401611328,108.871978759766,11.7089385986328 +"2011-11-29 19:59:45.833",-138.790168646581,134170.677074824,-139.250654574651,134.50428550563,0,0,100.630850230978,201.483978722285,-19.1243032794232,202.131935367666,60.003,0,97.1654815673828,108.8935546875,11.7280731201172 +"2011-11-29 19:59:45.866",-138.748608683409,134170.752978159,-139.250654574651,134.50428550563,0,0,100.690542770802,201.523496830513,-19.1243032794232,202.131935367666,60.003,0,97.1504287719727,108.869758605957,11.7193298339844 +"2011-11-29 19:59:45.900",-138.707048789125,134170.899474597,-139.181788967633,134.643823450989,0,0,100.738897100905,201.773108429999,-19.0670731991242,202.062050262425,60.003,0,97.1605682373047,108.874557495117,11.7139892578125 +"2011-11-29 19:59:45.933",-138.665489007463,134171.116563908,-139.11306604944,134.783555505229,180,0.21362,100.798482799812,201.813022158029,-18.9900860134904,202.194348643605,60.003,0,97.1629333496094,108.888328552246,11.7253952026367 +"2011-11-29 19:59:45.966",-138.626863238391,134165.35280166,-139.053554231831,134.622130814135,0,0,100.858044869775,201.853154066562,-18.9900860134904,202.194348643605,60.003,0,97.1509399414063,108.876449584961,11.7255096435547 +"2011-11-29 19:59:46.000",-138.585301930109,134165.706093799,-139.053554231831,134.622130814135,0,0,100.858044869775,201.853154066562,-18.9900860134904,202.194348643605,60.003,0,97.1595458984375,108.864082336426,11.7045364379883 +"2011-11-29 19:59:46.033",-138.54632918408,134172.991638687,-138.993899586804,134.460851708791,45,0.302104301194141,100.929077064704,201.683754469784,-18.9328274231528,202.124936656034,60.003,0,97.1598281860352,108.88175201416,11.721923828125 +"2011-11-29 19:59:46.066",-138.504770516282,134173.481721379,-138.993899586804,134.460851708791,90,0.21362,100.929077064704,201.683754469784,-18.8755295500807,202.05572666967,60.003,0,97.1656951904297,108.890609741211,11.7249145507813 +"2011-11-29 19:59:46.100",-138.463212173941,134174.042393774,-138.925278805385,134.601112738314,0,0,100.929077064704,201.683754469784,-18.8181924685568,201.986718892159,60.003,0,97.1555633544922,108.887420654297,11.7318572998047 +"2011-11-29 19:59:46.133",-138.421654200783,134174.673654986,-138.85680098559,134.741566435677,-90,0.21362,100.988651096494,201.724364530187,-18.7413404451927,202.120195455627,60.003,0,97.1655044555664,108.877227783203,11.7117233276367 +"2011-11-29 19:59:46.166",-138.380096640526,134175.375504021,-138.796963955446,134.580769539576,-90,0.21362,101.10772690875,201.806238511829,-18.7413404451927,202.120195455627,60.003,0,97.1730804443359,108.870010375977,11.6969299316406 +"2011-11-29 19:59:46.200",-138.341460381553,134170.062349938,-138.796963955446,134.580769539576,0,0,101.10772690875,201.806238511829,-18.7034009793635,201.849310792654,60.003,0,97.1481094360352,108.877815246582,11.7297058105469 +"2011-11-29 19:59:46.233",-138.299901874306,134170.900411674,-138.796963955446,134.580769539576,90,0.21362,101.10772690875,201.806238511829,-18.645946722339,201.780910884324,60.003,0,97.155632019043,108.893898010254,11.7382659912109 +"2011-11-29 19:59:46.266",-138.258343908087,134171.809060844,-138.668610951527,134.561101524007,0,0,101.167228461473,201.847502167848,-18.6265727890963,201.983330014355,60.003,0,97.1577835083008,108.869239807129,11.7114562988281 +"2011-11-29 19:59:46.300",-138.216786526611,134172.788296013,-138.668610951527,134.561101524007,0,0,101.286158293014,201.930682142753,-18.5691307310378,201.915201509284,60.003,0,97.1510009765625,108.882080078125,11.7310791015625 +"2011-11-29 19:59:46.333",-138.178143249478,134167.733054323,-138.600381287203,134.702274489035,0,0,101.298033039194,201.721197465671,-18.5116499544974,201.847276088607,60.003,0,97.1550598144531,108.874542236328,11.719482421875 +"2011-11-29 19:59:46.366",-138.136585252659,134168.848509904,-138.600381287203,134.702274489035,180,0.21362,101.357520319816,201.763157035958,-18.4924169877158,202.049854584901,60.003,0,97.1707611083984,108.86750793457,11.6967468261719 +"2011-11-29 19:59:46.400",-138.095027968708,134170.034549813,-138.540221065429,134.542108987711,0,0,101.357520319816,201.763157035958,-18.4732225510388,202.252455802587,60.003,0,97.1679763793945,108.870262145996,11.7022857666016 +"2011-11-29 19:59:46.433",-138.053471441331,134171.291172178,-138.540221065429,134.542108987711,0,0.21362,101.357520319816,201.763157035958,-18.434948822922,201.982200375786,60.003,0,97.1478271484375,108.874458312988,11.7266311645508 +"2011-11-29 19:59:46.466",-138.014821773605,134166.49389131,-138.472116617586,134.683640680801,0,0,101.416982799033,201.80533400844,-18.3583502328441,202.117486148317,60.003,0,97.1645355224609,108.880447387695,11.7159118652344 +"2011-11-29 19:59:46.500",-137.973264962591,134167.886738476,-138.411795571162,134.52379221679,0,0,101.476420364342,201.847728246835,-18.3008566382552,202.050306289788,60.003,0,97.1485061645508,108.886779785156,11.7382736206055 +"2011-11-29 19:59:46.533",-137.931709036261,134169.350165145,-138.411795571162,134.52379221679,90,0.21362,101.53583290355,201.890339614274,-18.3008566382552,202.050306289788,60.003,0,97.1586151123047,108.876388549805,11.7177734375 +"2011-11-29 19:59:46.566",-137.893054570552,134164.745236965,-138.343817094784,134.665682026152,90,0.21362,101.547969241239,201.68103929949,-18.2243739024509,202.186223593733,60.003,0,97.16650390625,108.882469177246,11.7159652709961 +"2011-11-29 19:59:46.600",-137.851498607909,134166.344891104,-138.283335744879,134.506151487315,0,0,101.607415675795,201.723912095443,-18.1857549663926,201.916557524606,60.003,0,97.1452026367188,108.882675170898,11.7374725341797 +"2011-11-29 19:59:46.633",-137.809943658051,134168.015120836,-138.283335744879,134.506151487315,0,0.21362,101.607415675795,201.723912095443,-18.1281470456721,201.849989022779,60.003,0,97.1723709106445,108.864753723145,11.6923828125 +"2011-11-29 19:59:46.666",-137.768389764654,134169.755923523,-138.283335744879,134.506151487315,0,0,101.607415675795,201.723912095443,-18.1281470456721,201.849989022779,60.003,0,97.1499481201172,108.876182556152,11.7262344360352 +"2011-11-29 19:59:46.700",-137.729730004495,134165.409028588,-138.215483991748,134.648398795233,0,0,101.666836783242,201.76700195093,-18.0517051772873,201.986718892159,60.003,0,97.1522369384766,108.899604797363,11.7473678588867 +"2011-11-29 19:59:46.733",-137.688176406527,134167.286057338,-138.147775544007,134.790834537517,180,0.21362,101.785602570889,201.853832283773,-18.0329469432454,202.189834767319,60.003,0,97.15966796875,108.887786865234,11.7281188964844 +"2011-11-29 19:59:46.766",-137.646623993086,134169.233653852,-138.087118583445,134.631791248163,90,0.21362,101.844947028917,201.897572481316,-17.975366865392,202.123807808881,60.003,0,97.1501922607422,108.87467956543,11.7244873046875 +"2011-11-29 19:59:46.800",-137.607960252301,134165.079163608,-138.019537713803,134.774583133831,90,0.21362,101.832516303037,202.106648555887,-17.9177492145836,202.057985118372,60.003,0,97.1698608398438,108.873428344727,11.7035675048828 +"2011-11-29 19:59:46.833",-137.566408381622,134167.162984532,-138.019537713803,134.774583133831,0,0,101.844947028917,201.897572481316,-17.8991321701716,202.26125504288,60.003,0,97.1686019897461,108.886985778809,11.7183837890625 +"2011-11-29 19:59:46.866",-137.524857823503,134169.31736707,-137.958722146781,134.615859635019,180,0.21362,101.916780965795,201.732508182059,-17.8991321701716,202.26125504288,60.003,0,97.1752014160156,108.872535705566,11.6973342895508 +"2011-11-29 19:59:46.900",-137.483308621584,134171.542307824,-137.891269596221,134.7590070329,0,0,102.035457851258,201.821162232492,-17.7838884426925,202.130355034608,60.003,0,97.156852722168,108.906776428223,11.7499237060547 +"2011-11-29 19:59:46.933",-137.444640683308,134167.645904084,-137.830295960524,134.600604195818,0,0,102.035457851258,201.821162232492,-17.7838884426925,202.130355034608,60.003,0,97.1685791015625,108.874839782715,11.7062606811523 +"2011-11-29 19:59:46.966",-137.40309235583,134170.007062043,-137.830295960524,134.600604195818,90,0.21362,102.035457851258,201.821162232492,-17.7838884426925,202.130355034608,60.003,0,97.1631622314453,108.874130249023,11.7109680175781 +"2011-11-29 19:59:47.000",-137.364421701639,134166.237435927,-137.830295960524,134.600604195818,90,0.21362,102.094757077012,201.865813745448,-17.6684958219111,202.000273834834,60.003,0,97.1704711914063,108.894302368164,11.7238311767578 +"2011-11-29 19:59:47.033",-137.322874411539,134168.734809451,-137.762972466676,134.744106468914,90,0.21362,102.15403001184,201.910681392438,-17.6107438791419,201.93554078301,60.003,0,97.1584548950195,108.868209838867,11.7097549438477 +"2011-11-29 19:59:47.066",-137.281328689949,134171.302729425,-137.701841305233,134.586025160493,0,0,102.166805877835,201.701854671027,-17.5924245621816,202.139159590021,60.003,0,97.1708908081055,108.861839294434,11.6909484863281 +"2011-11-29 19:59:47.100",-137.242655103151,134167.72555753,-137.634647602325,134.729881666008,0,0,102.226110874761,201.746984973723,-17.5346880329487,202.074696854276,60.003,0,97.1410446166992,108.882255554199,11.7412109375 +"2011-11-29 19:59:47.133",-137.201110666192,134170.429685879,-137.573359463177,134.572122748881,0,0,102.226110874761,201.746984973723,-17.476914714246,202.010439444955,60.003,0,97.1762008666992,108.883354187012,11.7071533203125 +"2011-11-29 19:59:47.166",-137.159567925649,134173.204351663,-137.573359463177,134.572122748881,45,0.302104301194141,102.285389281384,201.792331324191,-17.476914714246,202.010439444955,60.003,0,97.1480941772461,108.874694824219,11.7266006469727 +"2011-11-29 19:59:47.200",-137.118231280246,134163.110889898,-137.573359463177,134.572122748881,90,0.21362,102.344640988762,201.837893576814,-17.476914714246,202.010439444955,60.003,0,97.1662521362305,108.881622314453,11.7153701782227 +"2011-11-29 19:59:47.233",-137.079350547009,134172.730510404,-137.506296281988,134.716332838244,0,0,102.344640988762,201.837893576814,-17.400979497695,202.150221180169,60.003,0,97.1623992919922,108.89599609375,11.7335968017578 +"2011-11-29 19:59:47.266",-137.037811162558,134175.711902991,-137.506296281988,134.716332838244,180,0.21362,102.416902032085,201.675043168929,-17.3431854802209,202.086439409489,60.003,0,97.1620407104492,108.895797729492,11.733757019043 +"2011-11-29 19:59:47.300",-136.996466254859,134165.824170009,-137.444851718264,134.558897170707,0,0,102.416902032085,201.675043168929,-17.3033748475239,201.81890113363,60.003,0,97.1614837646484,108.874618530273,11.713134765625 +"2011-11-29 19:59:47.333",-136.954926639205,134168.946279721,-137.31631935596,134.546348625562,0,0,102.476158259681,201.721084355305,-17.2274882264509,201.959493300661,60.003,0,97.1415863037109,108.864082336426,11.7224960327148 +"2011-11-29 19:59:47.366",-136.916244372496,134165.885082299,-137.311131452761,134.848206637359,-90,0.21362,102.535387380633,201.767341204615,-17.151707320088,202.100439256699,60.003,0,97.1747283935547,108.880859375,11.7061309814453 +"2011-11-29 19:59:47.400",-136.874706704259,134169.143380958,-137.311131452761,134.848206637359,-135,0.302104301194141,102.535387380633,201.767341204615,-17.1338655591548,202.304568799645,60.003,0,97.1539154052734,108.875396728516,11.7214813232422 +"2011-11-29 19:59:47.433",-136.833171075286,134172.472192809,-137.249519396514,134.691263913935,-135,0.302104301194141,102.607827237739,201.605339211239,-17.1338655591548,202.304568799645,60.003,0,97.167106628418,108.889541625977,11.7224349975586 +"2011-11-29 19:59:47.466",-136.791637529082,134175.871512606,-137.187763663216,134.534477302895,0,0,102.667059925008,201.652075208256,-17.0938210432048,202.037545238008,60.003,0,97.1522903442383,108.878036499023,11.7257461547852 +"2011-11-29 19:59:47.500",-136.750274973976,134166.399868139,-137.187763663216,134.534477302895,0,0,102.785442653161,201.746193301031,-17.0358987744225,201.97485757108,60.003,0,97.1749572753906,108.894683837891,11.7197265625 +"2011-11-29 19:59:47.533",-136.711587596985,134163.662234358,-137.121096396661,134.679744195012,0,0,102.726265099209,201.699026621652,-17.018162898964,202.179113907242,60.003,0,97.1705932617188,108.894546508789,11.7239532470703 +"2011-11-29 19:59:47.566",-136.670054529475,134167.267940029,-137.121096396661,134.679744195012,-90,0.21362,102.71291102624,201.907404244449,-16.9602578240089,202.116695926844,60.003,0,97.1629943847656,108.893630981445,11.7306365966797 +"2011-11-29 19:59:47.600",-136.628523716103,134170.944141923,-137.121096396661,134.679744195012,-90,0.21362,102.772030644891,201.954522257032,-16.9602578240089,202.116695926844,60.003,0,97.1537628173828,108.874443054199,11.7206802368164 +"2011-11-29 19:59:47.633",-136.586995200325,134174.690834246,-137.121096396661,134.679744195012,180,0.21362,102.831122620699,202.001855185564,-16.9779405986646,201.912376448114,60.003,0,97.1554489135742,108.879821777344,11.7243728637695 +"2011-11-29 19:59:47.666",-136.548307076732,134172.211375871,-136.992652071241,134.668901206449,180,0.21362,102.844592480019,201.793575095444,-16.902317032564,202.054484512124,60.003,0,97.1550903320313,108.896492004395,11.7414016723633 +"2011-11-29 19:59:47.700",-136.509617540866,134169.793094553,-136.992652071241,134.668901206449,180,0.21362,102.903714473275,201.841171853398,-16.826799897505,202.19694407684,60.003,0,97.1556015014648,108.878448486328,11.7228469848633 +"2011-11-29 19:59:47.733",-136.46809210984,134173.741598792,-136.864187706259,134.65873511172,0,0,102.976421880012,201.680813033649,-16.7688412596035,202.135208875411,60.003,0,97.1578140258789,108.870445251465,11.7126312255859 +"2011-11-29 19:59:47.766",-136.426706800697,134164.817082805,-136.864187706259,134.65873511172,0,0,103.035545590068,201.728888821814,-16.7688412596035,202.135208875411,60.003,0,97.1774978637695,108.874992370605,11.6974945068359 +"2011-11-29 19:59:47.800",-136.385182334852,134168.906297185,-136.864187706259,134.65873511172,0,0,103.035545590068,201.728888821814,-16.693448585671,202.278288381836,60.003,0,97.1641540527344,108.86743927002,11.7032852172852 +"2011-11-29 19:59:47.833",-136.346489099676,134166.745973042,-136.735704588928,134.649246064143,0,0,103.094641063362,201.777179313376,-16.6354727765022,202.21702934668,60.003,0,97.1746826171875,108.87718963623,11.702507019043 +"2011-11-29 19:59:47.866",-136.304967737408,134170.971317142,-136.735704588928,134.649246064143,0,0,103.094641063362,201.777179313376,-16.5947535665292,201.951245820466,60.003,0,97.1656799316406,108.888809204102,11.7231292724609 +"2011-11-29 19:59:47.900",-136.260746070844,134168.652345326,-136.735704588928,134.649246064143,135,0.302104301194141,103.139921991927,202.033705471761,-16.5947535665292,201.951245820466,60.003,0,97.1633148193359,108.87956237793,11.7162475585938 +"2011-11-29 19:59:47.933",-136.222050878416,134166.688809568,-136.669583631809,134.795743430377,180,0.21362,103.271757010203,201.923337464622,-16.5947535665292,201.951245820466,60.003,0,97.1432495117188,108.876403808594,11.733154296875 +"2011-11-29 19:59:47.966",-136.180533547886,134171.125309945,-136.607204007592,134.640434206865,0,0,103.285686671562,201.715428756107,-16.5194160136143,202.09513297713,60.003,0,97.1741104125977,108.876518249512,11.7024078369141 +"2011-11-29 19:59:48.000",-136.141837950997,134169.288629703,-136.607204007592,134.640434206865,0,0,103.358741406805,201.556781143903,-16.5022128974485,202.299944595964,60.003,0,97.1464157104492,108.877914428711,11.7314987182617 +"2011-11-29 19:59:48.033",-136.100324138934,134173.861229691,-136.541218643724,134.787279710394,180,0.21362,103.344725522351,201.764627159158,-16.4441857914888,202.23936904487,60.003,0,97.1520767211914,108.871269226074,11.7191925048828 +"2011-11-29 19:59:48.066",-136.058915351961,134165.558966947,-136.541218643724,134.787279710394,180,0.21362,103.330738485691,201.972485223274,-16.3861239736839,202.17900105306,60.003,0,97.1639633178711,108.88444519043,11.7204818725586 +"2011-11-29 19:59:48.100",-136.020216599611,134163.914633786,-136.478687251648,134.632299672857,180,0.21362,103.389691200752,202.021846909408,-16.3280275322339,202.118840806512,60.003,0,97.1706771850586,108.877624511719,11.7069473266602 +"2011-11-29 19:59:48.133",-135.975988316184,134162.110342295,-136.350155611466,134.624842584897,-90,0.21362,103.417808801808,201.606244611902,-16.2698965557288,202.058888490785,60.003,0,97.1668472290039,108.898704528809,11.7318572998047 +"2011-11-29 19:59:48.166",-135.93447815286,134166.964318545,-136.350155611466,134.624842584897,-90,0.21362,103.491006881177,201.448190595924,-16.1948317630975,202.204278816742,60.003,0,97.1578369140625,108.869781494141,11.7119445800781 +"2011-11-29 19:59:48.200",-135.895778400421,134165.5167968,-136.350155611466,134.624842584897,0,0,103.550073412489,201.498133663347,-16.2117311331485,201.999144291019,60.003,0,97.1602935791016,108.892654418945,11.7323608398438 +"2011-11-29 19:59:48.233",-135.854272254528,134170.506838793,-136.350155611466,134.624842584897,90,0.21362,103.594836334075,201.755919350177,-16.1948317630975,202.204278816742,60.003,0,97.1831207275391,108.88631439209,11.7031936645508 +"2011-11-29 19:59:48.266",-135.815572714782,134169.18617469,-136.284443521801,134.772382272262,90,0.21362,103.594836334075,201.755919350177,-16.1366860783772,202.144803334095,60.003,0,97.1601028442383,108.893997192383,11.7338943481445 +"2011-11-29 19:59:48.300",-135.776872430824,134167.926721317,-136.221610378318,134.618063055566,90,0.21362,103.653786948864,201.806238511829,-16.1366860783772,202.144803334095,60.003,0,97.1725692749023,108.890472412109,11.717903137207 +"2011-11-29 19:59:48.333",-135.732642668865,134166.562300154,-136.221610378318,134.618063055566,90,0.21362,103.653786948864,201.806238511829,-16.0617492241782,202.290808663354,60.003,0,97.1533508300781,108.880867004395,11.7275161743164 +"2011-11-29 19:59:48.366",-135.693940909012,134165.434018326,-136.156035961829,134.765948778516,0,0,103.653786948864,201.806238511829,-16.0035895049099,202.231809928291,60.003,0,97.1742553710938,108.869537353516,11.6952819824219 +"2011-11-29 19:59:48.400",-135.652442554665,134170.766409609,-136.093052844293,134.611961187236,0,0,103.712708110687,201.856771198689,-15.9453959009229,202.173019691254,60.003,0,97.1594161987305,108.876838684082,11.7174224853516 +"2011-11-29 19:59:48.433",-135.613741389281,134169.76498201,-136.027616786442,134.760192234294,0,0.21362,103.771599717082,201.907517250437,-15.9453959009229,202.173019691254,60.003,0,97.1606674194336,108.886085510254,11.7254180908203 +"2011-11-29 19:59:48.466",-135.569510802246,134168.69545158,-136.027616786442,134.760192234294,0,0,103.903852942152,201.802281279571,-15.8706081238731,202.319906864868,60.003,0,97.1637420654297,108.885765075684,11.7220230102539 +"2011-11-29 19:59:48.500",-135.530808479946,134167.825202363,-135.964484302227,134.606537072065,90,0.21362,103.977357795429,201.646417673551,-15.812401439037,202.261593467554,60.003,0,97.1440887451172,108.871643066406,11.7275543212891 +"2011-11-29 19:59:48.533",-135.489364781722,134160.487208926,-135.964484302227,134.606537072065,0,0.21362,103.962711963746,201.853719247729,-15.812401439037,202.261593467554,60.003,0,97.161735534668,108.885772705078,11.7240371704102 +"2011-11-29 19:59:48.566",-135.447873346276,134166.166527957,-135.899187284476,134.755112726353,0,0.21362,103.962711963746,201.853719247729,-15.7541612419003,202.203488934459,60.003,0,97.1526031494141,108.898345947266,11.7457427978516 +"2011-11-29 19:59:48.600",-135.409169620447,134165.488683362,-135.835906045615,134.601790791988,0,0,104.021540933091,201.905370125839,-15.6958876239683,202.145593445692,60.003,0,97.1523590087891,108.895469665527,11.7431106567383 +"2011-11-29 19:59:48.633",-135.364936335731,134164.78896922,-135.770748745392,134.750710331254,0,0,104.080339749251,201.957233750543,-15.6375806771284,202.087907180916,60.003,0,97.1382904052734,108.874855041504,11.7365646362305 +"2011-11-29 19:59:48.666",-135.326231852949,134164.242315007,-135.707319368544,134.597722418711,-90,0.21362,104.153923979238,201.802168214652,-15.6375806771284,202.087907180916,60.003,0,97.1546630859375,108.875999450684,11.7213363647461 +"2011-11-29 19:59:48.700",-135.284748694964,134170.19822687,-135.707319368544,134.597722418711,-90,0.21362,104.139108311651,202.009309957982,-15.6375806771284,202.087907180916,60.003,0,97.157341003418,108.855400085449,11.6980590820313 +"2011-11-29 19:59:48.733",-135.246045502099,134169.778413559,-135.707319368544,134.597722418711,0,0,104.153923979238,201.802168214652,-15.5629863359292,202.236210045442,60.003,0,97.1549301147461,108.892021179199,11.7370910644531 +"2011-11-29 19:59:48.766",-135.20181300879,134169.373592337,-135.578725565608,134.594332013709,0,0.21362,104.212718616779,201.854510498705,-15.5046678281618,202.17900105306,60.003,0,97.1770095825195,108.875717163086,11.6987075805664 +"2011-11-29 19:59:48.800",-135.16310937801,134169.084969052,-135.578725565608,134.594332013709,0,0.21362,104.271482708664,201.907065226103,-15.4624607877485,201.916105520511,60.003,0,97.1589736938477,108.896118164063,11.7371444702148 +"2011-11-29 19:59:48.833",-135.124405598373,134168.857568452,-135.578725565608,134.594332013709,0,0.21362,104.330216155158,201.959832230998,-15.4463163676926,202.122001640324,60.003,0,97.1777877807617,108.880722045898,11.7029342651367 +"2011-11-29 19:59:48.866",-135.080172570395,134168.672648998,-135.578725565608,134.594332013709,0,0,104.345231579237,201.752865873614,-15.3879320477292,202.065211984592,60.003,0,97.1533432006836,108.88501739502,11.7316741943359 +"2011-11-29 19:59:48.900",-135.041468590718,134168.576440803,-135.45012593183,134.591619628215,90,0.21362,104.345231579237,201.752865873614,-15.3295149618577,202.008632262766,60.003,0,97.1517639160156,108.887115478516,11.7353515625 +"2011-11-29 19:59:48.933",-135,134175.015053306,-135.45012593183,134.591619628215,90,0.21362,104.403990532937,201.805899323533,-15.2710652040413,201.952262651296,60.003,0,97.1535949707031,108.88102722168,11.7274322509766 +"2011-11-29 19:59:48.966",-134.958531409282,134168.576440803,-135.45012593183,134.591619628215,0,0,104.462718549981,201.859144906423,-15.2551187030578,202.158347677033,60.003,0,97.1497192382813,108.880233764648,11.7305145263672 +"2011-11-29 19:59:49.000",-134.917066863603,134175.155610459,-135.385391807733,134.741566435677,180,0.21362,104.521415531491,201.912602454462,-15.1966915818766,202.102245617957,60.003,0,97.1803283691406,108.887062072754,11.7067337036133 +"2011-11-29 19:59:49.033",-134.875594401627,134168.857568452,-135.321521762588,134.589585303222,180,0.21362,104.521415531491,201.912602454462,-15.1966915818766,202.102245617957,60.003,0,97.1559677124023,108.903533935547,11.7475662231445 +"2011-11-29 19:59:49.066",-134.83689062199,134169.084969052,-135.256930024504,134.739873053584,180,0.21362,104.654043077092,201.813474393002,-15.1540680503126,201.840154462915,60.003,0,97.1585159301758,108.876556396484,11.7180404663086 +"2011-11-29 19:59:49.100",-134.79818699121,134169.373592337,-135.192914353533,134.588229069477,0,0,104.63871599422,202.020152772248,-15.0797402762983,201.990672511069,60.003,0,97.1576309204102,108.886871337891,11.7292404174805 +"2011-11-29 19:59:49.133",-134.753954497901,134169.778413559,-135.128465658072,134.738857014113,0,0,104.712702245082,201.867622206193,-15.0639919043407,202.19694407684,60.003,0,97.156982421875,108.8935546875,11.736572265625 +"2011-11-29 19:59:49.166",-134.715251305036,134170.19822687,-135.128465658072,134.738857014113,0,0.21362,104.786800264291,201.715428756107,-15.0482756322805,202.403230887159,60.003,0,97.1657485961914,108.882583618164,11.7168350219727 +"2011-11-29 19:59:49.200",-134.673768147051,134164.242315007,-135.064305000512,134.58755094748,0,0,104.845452082084,201.770055213565,-15.0212162820411,201.935201811902,60.003,0,97.1635513305664,108.8671875,11.7036361694336 +"2011-11-29 19:59:49.233",-134.632316812098,134171.303978858,-135.064305000512,134.58755094748,0,0,104.829925918479,201.976552088167,-14.9626601875216,201.879941913906,60.003,0,97.1441497802734,108.860763549805,11.7166137695313 +"2011-11-29 19:59:49.266",-134.593614554859,134171.916199202,-135.064305000512,134.58755094748,0,0.21362,104.845452082084,201.770055213565,-14.8884902297165,202.031333814975,60.003,0,97.1509246826172,108.877365112305,11.7264404296875 +"2011-11-29 19:59:49.300",-134.552126653724,134166.166527957,-134.935694999488,134.58755094748,0,0.21362,104.904072088744,201.824892990234,-14.8299259184788,201.976552088167,60.003,0,97.1450042724609,108.886421203613,11.7414169311523 +"2011-11-29 19:59:49.333",-134.513423336637,134166.905593323,-134.935694999488,134.58755094748,0,0.21362,104.888490229716,202.031333814975,-14.7558911374129,202.128548924555,60.003,0,97.1531219482422,108.8955078125,11.7423858642578 +"2011-11-29 19:59:49.366",-134.47198146776,134174.238862822,-134.871534341928,134.738857014113,0,0,104.904072088744,201.824892990234,-14.7558911374129,202.128548924555,60.003,0,97.1499633789063,108.884658813477,11.7346954345703 +"2011-11-29 19:59:49.400",-134.430489197754,134168.69545158,-134.871534341928,134.738857014113,0,0.21362,104.962660187522,201.879941913906,-14.6973192795119,202.07424520391,60.003,0,97.154411315918,108.876861572266,11.7224502563477 +"2011-11-29 19:59:49.433",-134.391787395174,134169.626918106,-134.807085646467,134.588229069477,0,0,105.021216282041,201.935201811902,-14.6973192795119,202.07424520391,60.003,0,97.156135559082,108.883842468262,11.7277069091797 +"2011-11-29 19:59:49.466",-134.347557445335,134170.766409609,-134.807085646467,134.588229069477,0,0,105.095520844211,201.784416236596,-14.6234202413859,202.226845578619,60.003,0,97.1446380615234,108.90104675293,11.7564086914063 +"2011-11-29 19:59:49.500",-134.308856875321,134171.829051681,-134.743069975496,134.739873053584,0,0,105.154068050313,201.840154462915,-14.5648415051927,202.173019691254,60.003,0,97.1651000976563,108.895469665527,11.7303695678711 +"2011-11-29 19:59:49.533",-134.267357331135,134166.562300154,-134.678478237412,134.589585303222,-45,0.302104301194141,105.154068050313,201.840154462915,-14.5648415051927,202.173019691254,60.003,0,97.1473083496094,108.886901855469,11.7395935058594 +"2011-11-29 19:59:49.566",-134.225854550441,134161.365940033,-134.678478237412,134.589585303222,0,0,105.154068050313,201.840154462915,-14.5062316303705,202.119405244746,60.003,0,97.1590270996094,108.872604370117,11.7135772705078 +"2011-11-29 19:59:49.600",-134.184427285218,134169.18617469,-134.614608192267,134.741566435677,0,0,105.271065204041,201.952262651296,-14.4475907148403,202.066002407403,60.003,0,97.1599197387695,108.880615234375,11.7206954956055 +"2011-11-29 19:59:49.633",-134.14292216944,134164.130484899,-134.614608192267,134.741566435677,180,0.21362,105.271065204041,201.952262651296,-14.4324938221835,202.272873966021,60.003,0,97.1477279663086,108.868843078613,11.7211151123047 +"2011-11-29 19:59:49.666",-134.104221599579,134165.5167968,-134.54987406817,134.591619628215,180,0.21362,105.345549252026,201.802620473948,-14.4324938221835,202.272873966021,60.003,0,97.1417999267578,108.884384155273,11.7425842285156 +"2011-11-29 19:59:49.700",-134.06280283041,134173.542942546,-134.54987406817,134.591619628215,0,0,105.404021451768,201.859257939429,-14.3889188568866,202.012811347044,60.003,0,97.1451263427734,108.871383666992,11.7262573242188 +"2011-11-29 19:59:49.733",-134.021294604824,134168.693577395,-134.421274434392,134.594332013709,-45,0.302104301194141,105.446316367693,202.122001640324,-14.3302161551577,201.959832230998,60.003,0,97.1863861083984,108.895553588867,11.7091674804688 +"2011-11-29 19:59:49.766",-133.98259672281,134170.272256313,-134.357697540806,134.746985115366,-90,0.21362,105.446316367693,202.122001640324,-14.2565542746562,202.114099463108,60.003,0,97.1583557128906,108.875564575195,11.7172088623047 +"2011-11-29 19:59:49.800",-133.941084648039,134165.558966947,-134.357697540806,134.746985115366,180,0.21362,105.520867166179,201.973163039776,-14.1978465200721,202.061598583791,60.003,0,97.1568908691406,108.874496459961,11.7176055908203 +"2011-11-29 19:59:49.833",-133.902386861914,134167.264503987,-134.292680631456,134.597722418711,0,0,105.611848340089,201.618919794266,-14.2127186167793,201.854510498705,60.003,0,97.1486968994141,108.894691467285,11.7459945678711 +"2011-11-29 19:59:49.866",-133.858162049003,134169.288629703,-134.292680631456,134.597722418711,0,0,105.595527795422,201.824666885667,-14.1539239792375,201.802168214652,60.003,0,97.1601715087891,108.885673522949,11.7255020141602 +"2011-11-29 19:59:49.900",-133.819466452113,134171.125309945,-134.229251254608,134.750710331254,0,0,105.595527795422,201.824666885667,-14.0803397492507,201.957233750543,60.003,0,97.1415786743164,108.899520874023,11.757942199707 +"2011-11-29 19:59:49.933",-133.777949121584,134166.688809568,-134.164093954385,134.601790791988,0,0,105.712284454489,201.939947355639,-14.0068685514984,202.112631881894,60.003,0,97.1699523925781,108.883811950684,11.7138595581055 +"2011-11-29 19:59:49.966",-133.739253929156,134168.652345326,-134.164093954385,134.601790791988,0,0,105.77061268804,201.997901785527,-14.0803397492507,201.957233750543,60.003,0,97.1632614135742,108.877532958984,11.7142715454102 +"2011-11-29 19:59:50.000",-133.697733242673,134164.351958402,-134.098792402826,134.453045711323,0,0,105.803616241003,201.586777601501,-14.0803397492507,201.957233750543,60.003,0,97.1470718383789,108.873008728027,11.7259368896484 +"2011-11-29 19:59:50.033",-133.659038606451,134166.442350377,-134.098792402826,134.453045711323,0,0,105.803616241003,201.586777601501,-14.0068685514984,202.112631881894,60.003,0,97.1551742553711,108.874130249023,11.7189559936523 +"2011-11-29 19:59:50.066",-133.614817665148,134168.906297185,-134.035515697773,134.606537072065,-90,0.21362,105.787097654469,201.792331324191,-13.889293855505,202.009648804737,60.003,0,97.1576538085938,108.88671875,11.7290649414063 +"2011-11-29 19:59:50.100",-133.573293199303,134164.817082805,-133.972383213558,134.760192234294,-135,0.302104301194141,105.828907401364,202.056065438585,-13.7571839440321,202.115002584713,60.003,0,97.1747741699219,108.897018432617,11.7222442626953 +"2011-11-29 19:59:50.133",-133.534600755702,134167.104259397,-133.972383213558,134.760192234294,135,0.302104301194141,105.887168502764,202.114438134183,-13.7571839440321,202.115002584713,60.003,0,97.151985168457,108.886451721191,11.7344665527344 +"2011-11-29 19:59:50.166",-133.493073348916,134163.151186539,-133.972383213558,134.760192234294,0,0,105.903762584959,201.908986322533,-13.8159891216365,202.165909540414,60.003,0,97.1449661254883,108.890914916992,11.7459487915039 +"2011-11-29 19:59:50.200",-133.451692923268,134172.211375871,-133.843964038171,134.765948778516,0,0,106.020292302071,202.026477478495,-13.8159891216365,202.165909540414,60.003,0,97.1641159057617,108.876510620117,11.7123947143555 +"2011-11-29 19:59:50.233",-133.410164719717,134168.399017717,-133.778389621682,134.618063055566,-90,0.21362,106.037029084595,201.821162232492,-13.6983491983109,202.064308640449,60.003,0,97.1718597412109,108.890815734863,11.7189559936523 +"2011-11-29 19:59:50.266",-133.371476283897,134170.944141923,-133.778389621682,134.618063055566,-90,0.21362,106.053799953448,201.615864242842,-13.6252123879063,202.22142978544,60.003,0,97.1608047485352,108.895133972168,11.7343292236328 +"2011-11-29 19:59:50.300",-133.329945470525,134167.267940029,-133.778389621682,134.618063055566,0,0,106.095297307629,201.880280977799,-13.5805914103189,201.963560427167,60.003,0,97.169563293457,108.901206970215,11.7316436767578 +"2011-11-29 19:59:50.333",-133.291258286472,134169.9399044,-133.649844388534,134.624842584897,0,0,106.153531353862,201.939608391928,-13.5216685728249,201.913506477325,60.003,0,97.1474456787109,108.888717651367,11.7412719726563 +"2011-11-29 19:59:50.366",-133.249725026024,134166.399868139,-133.649844388534,134.624842584897,0,0,106.153531353862,201.939608391928,-13.5075099351381,202.121211436505,60.003,0,97.1648254394531,108.892440795898,11.7276153564453 +"2011-11-29 19:59:50.400",-133.2081895956,134162.930335809,-133.649844388534,134.624842584897,180,0.21362,106.211731133149,201.999144291019,-13.4627165767664,201.86366617727,60.003,0,97.1532211303711,108.864227294922,11.7110061645508 +"2011-11-29 19:59:50.433",-133.169503700706,134165.794807152,-133.649844388534,134.624842584897,180,0.21362,106.269896555729,202.058888490785,-13.4486150516865,202.071422366252,60.003,0,97.1606750488281,108.871894836426,11.7112197875977 +"2011-11-29 19:59:50.466",-133.125293295741,134169.143380958,-133.587161821781,134.779492618594,-135,0.302104301194141,106.345069321789,201.913845484855,-13.4486150516865,202.071422366252,60.003,0,97.1511001586914,108.887557983398,11.736457824707 +"2011-11-29 19:59:50.500",-133.083755627504,134165.885082299,-133.521312748352,134.632299672857,-90,0.21362,106.420350035051,201.769150547972,-13.4486150516865,202.071422366252,60.003,0,97.1553573608398,108.875144958496,11.7197875976563 +"2011-11-29 19:59:50.533",-133.045073360795,134168.946279721,-133.458781356276,134.787279710394,-90,0.21362,106.420350035051,201.769150547972,-13.3167802095148,202.180355299089,60.003,0,97.1585159301758,108.879783630371,11.7212677001953 +"2011-11-29 19:59:50.566",-133.003533745141,134165.824170009,-133.392795992408,134.640434206865,-90,0.21362,106.420350035051,201.769150547972,-13.2439835700925,202.339190576273,60.003,0,97.1559600830078,108.893592834473,11.7376327514648 +"2011-11-29 19:59:50.600",-132.964853347409,134169.012188408,-133.330416368191,134.795743430377,-45,0.302104301194141,106.461335234687,202.034496017837,-13.198903231376,202.082374756055,60.003,0,97.1582794189453,108.913208007813,11.7549285888672 +"2011-11-29 19:59:50.633",-132.923311947201,134166.026273758,-133.264295411072,134.649246064143,0,0.21362,106.519416013614,202.09513297713,-13.1399219919268,202.033705471761,60.003,0,97.1628875732422,108.876373291016,11.7134857177734 +"2011-11-29 19:59:50.666",-132.88463357009,134169.34110663,-133.264295411072,134.649246064143,90,0.21362,106.536654032303,201.890339614274,-13.1399219919268,202.033705471761,60.003,0,97.1601867675781,108.867332458496,11.707145690918 +"2011-11-29 19:59:50.700",-132.843090548212,134166.491392356,-133.264295411072,134.649246064143,90,0.21362,106.652818007336,202.012359558317,-13.1399219919268,202.033705471761,60.003,0,97.1408843994141,108.881988525391,11.7411041259766 +"2011-11-29 19:59:50.733",-132.798889333808,134170.429685879,-133.202068143099,134.804883651096,-90,0.21362,106.652818007336,202.012359558317,-13.0809123914078,201.985250385425,60.003,0,97.1601715087891,108.874786376953,11.7146148681641 +"2011-11-29 19:59:50.766",-132.757344896849,134167.72555753,-133.135812293741,134.65873511172,0,0,106.710847267353,202.073680639533,-13.0218745346332,201.937009651238,60.003,0,97.161376953125,108.87907409668,11.7176971435547 +"2011-11-29 19:59:50.800",-132.721323723393,134164.576555276,-133.135812293741,134.65873511172,0,0,106.710847267353,202.073680639533,-12.9492232191664,202.097165185767,60.003,0,97.1674423217773,108.883728027344,11.7162857055664 +"2011-11-29 19:59:50.833",-132.677125588461,134168.734809451,-133.007347928759,134.668901206449,0,0.21362,106.786328642839,201.930682142753,-12.9492232191664,202.097165185767,60.003,0,97.1595153808594,108.888687133789,11.7291717529297 +"2011-11-29 19:59:50.866",-132.635578298361,134166.237435927,-133.007347928759,134.668901206449,0,0,106.844340610189,201.99247985394,-12.8901868474252,202.049402879004,60.003,0,97.1515045166016,108.885078430176,11.7335739135742 +"2011-11-29 19:59:50.900",-132.59690764417,134170.007062043,-133.007347928759,134.668901206449,180,0.21362,106.902317032564,202.054484512124,-12.8311226206992,202.001855185564,60.003,0,97.1613922119141,108.889999389648,11.7286071777344 +"2011-11-29 19:59:50.933",-132.555359316692,134167.645904084,-132.945427119074,134.825193034216,0,0,106.902317032564,202.054484512124,-12.8176805105167,202.210146417106,60.003,0,97.143196105957,108.886306762695,11.7431106567383 +"2011-11-29 19:59:50.966",-132.513809548657,134165.355300635,-132.878903603339,134.679744195012,0,0,106.977940598665,201.912376448114,-12.7586462795207,202.16286225636,60.003,0,97.1649856567383,108.878784179688,11.7137985229492 +"2011-11-29 19:59:51.000",-132.475142176497,134169.31736707,-132.817136885938,134.836361891012,180,0.21362,107.035898774423,201.97485757108,-12.6995844895974,202.115792812806,60.003,0,97.1530532836914,108.878646850586,11.7255935668945 +"2011-11-29 19:59:51.033",-132.433591618378,134167.162984532,-132.817136885938,134.836361891012,0,0,107.035898774423,201.97485757108,-12.6404952470495,202.068938236492,60.003,0,97.1544570922852,108.870193481445,11.7157363891602 +"2011-11-29 19:59:51.066",-132.394927192173,134171.251815056,-132.750480603486,134.691263913935,-90,0.21362,107.018162898964,202.179113907242,-12.6404952470495,202.068938236492,60.003,0,97.175651550293,108.895645141602,11.7199935913086 +"2011-11-29 19:59:51.100",-132.353376006914,134169.233653852,-132.750480603486,134.691263913935,0,0,107.076032172267,202.24173826206,-12.5945892870371,201.813813568566,60.003,0,97.1697998046875,108.874526977539,11.7047271728516 +"2011-11-29 19:59:51.133",-132.311823593473,134167.286057338,-132.750480603486,134.691263913935,0,0,107.133865559155,202.304568799645,-12.5945892870371,201.813813568566,60.003,0,97.1496505737305,108.866012573242,11.7163619995117 +"2011-11-29 19:59:51.166",-132.270269995505,134165.409028588,-132.68368064404,134.546348625562,0,0,107.151707320088,202.100439256699,-12.5222348309524,201.975874283038,60.003,0,97.1587219238281,108.896682739258,11.7379608154297 +"2011-11-29 19:59:51.200",-132.228715256675,134163.602570563,-132.622080213924,134.703460189596,0,0,107.227488226451,201.959493300661,-12.5222348309524,201.975874283038,60.003,0,97.1484832763672,108.884902954102,11.7364196777344 +"2011-11-29 19:59:51.233",-132.19005634195,134168.015120836,-132.622080213924,134.703460189596,0,0,107.26737156046,202.226845578619,-12.4630638716676,201.929665203253,60.003,0,97.1644515991211,108.870674133301,11.7062225341797 +"2011-11-29 19:59:51.266",-132.148501392091,134166.344891104,-132.493703718012,134.716332838244,0,0,107.285355028647,202.022863384885,-12.3316899793533,202.046579694268,60.003,0,97.1667861938477,108.875076293945,11.7082901000977 +"2011-11-29 19:59:51.300",-132.106945429448,134164.745236965,-132.493703718012,134.716332838244,0,0,107.343185480221,202.086439409489,-12.3316899793533,202.046579694268,60.003,0,97.1574859619141,108.894569396973,11.7370834350586 +"2011-11-29 19:59:51.333",-132.065388497707,134163.216160942,-132.493703718012,134.716332838244,-135,0.302104301194141,107.343185480221,202.086439409489,-12.3316899793533,202.046579694268,60.003,0,97.1604690551758,108.867454528809,11.7069854736328 +"2011-11-29 19:59:51.366",-132.026735037409,134167.886738476,-132.493703718012,134.716332838244,180,0.21362,107.36125803851,201.882541389203,-12.2724965718291,202.001064511747,60.003,0,97.1684875488281,108.880043029785,11.711555480957 +"2011-11-29 19:59:51.400",-131.985178226395,134166.49389131,-132.365352397675,134.729881666008,0,0,107.476914714246,202.010439444955,-12.2132765464394,201.95576502941,60.003,0,97.1538314819336,108.886337280273,11.7325057983398 +"2011-11-29 19:59:51.433",-131.946528558669,134171.291172178,-132.298158694767,134.586025160493,0,0.21362,107.534688032949,202.074696854276,-12.2132765464394,201.95576502941,60.003,0,97.1460876464844,108.873435974121,11.7273483276367 +"2011-11-29 19:59:51.466",-131.904972031292,134170.034549813,-132.365352397675,134.729881666008,0,0,107.534688032949,202.074696854276,-12.2132765464394,201.95576502941,60.003,0,97.1538391113281,108.875625610352,11.7217864990234 +"2011-11-29 19:59:51.500",-131.863414747341,134168.848509904,-132.298158694767,134.586025160493,0,0,107.534688032949,202.074696854276,-12.0820660451361,202.074696854276,60.003,0,97.1713104248047,108.896575927734,11.7252655029297 +"2011-11-29 19:59:51.533",-131.821856750522,134167.733054323,-132.237027533324,134.744106468914,0,0,107.610743879142,201.93554078301,-12.0820660451361,202.074696854276,60.003,0,97.1534042358398,108.88298034668,11.7295761108398 +"2011-11-29 19:59:51.566",-131.780298084545,134166.68818483,-132.169704039476,134.600604195818,0,0,107.668495821911,202.000273834834,-12.0820660451361,202.074696854276,60.003,0,97.1479644775391,108.871879577637,11.7239151000977 +"2011-11-29 19:59:51.600",-131.741656091913,134171.809060844,-132.169704039476,134.600604195818,180,0.21362,107.726210703544,202.065211984592,-12.0228253334196,202.030091507452,60.003,0,97.1542434692383,108.869186401367,11.7149429321289 +"2011-11-29 19:59:51.633",-131.702699066534,134164.06488619,-132.108730403779,134.7590070329,0,0,107.726210703544,202.065211984592,-11.9510105882127,202.194687180264,60.003,0,97.1664581298828,108.879898071289,11.7134399414063 +"2011-11-29 19:59:51.666",-131.658539618447,134170.062349938,-132.041277853219,134.615859635019,0,0,107.726210703544,202.065211984592,-11.8917763469893,202.150559790727,60.003,0,97.1656799316406,108.900276184082,11.7345962524414 +"2011-11-29 19:59:51.700",-131.616980613891,134169.294876957,-132.041277853219,134.615859635019,0,0,107.783888442693,202.130355034608,-11.8449470289167,201.897572481316,60.003,0,97.1622695922852,108.880653381348,11.7183837890625 +"2011-11-29 19:59:51.733",-131.578015782921,134161.749231181,-132.041277853219,134.615859635019,90,0.21362,107.841528958414,202.195702786841,-11.8325163030373,202.106648555887,60.003,0,97.1611633300781,108.882164001465,11.7210006713867 +"2011-11-29 19:59:51.766",-131.539380375299,134167.189535782,-131.912881416555,134.631791248163,0,0,107.917749214584,202.057985118372,-11.773230566362,202.062953616664,60.003,0,97.1522750854492,108.890647888184,11.7383728027344 +"2011-11-29 19:59:51.800",-131.497819920469,134166.624461584,-131.852224455993,134.790834537517,0,0,107.994073305973,201.920625515934,-11.7016315143666,202.228650810782,60.003,0,97.1535186767578,108.885055541992,11.7315368652344 +"2011-11-29 19:59:51.833",-131.456259137422,134166.129980663,-131.852224455993,134.790834537517,90,0.21362,108.051705177287,201.986718892159,-11.7016315143666,202.228650810782,60.003,0,97.1591033935547,108.872146606445,11.7130432128906 +"2011-11-29 19:59:51.866",-131.414698069891,134165.706093799,-131.852224455993,134.790834537517,0,0,108.032946943245,202.189834767319,-11.642353490505,202.185433640913,60.003,0,97.1572265625,108.888328552246,11.7311019897461 +"2011-11-29 19:59:51.900",-131.373136761609,134165.35280166,-131.784516008252,134.648398795233,0,0,108.10929928652,202.053016497905,-11.5952203047726,201.933167973303,60.003,0,97.1603088378906,108.884048461914,11.7237396240234 +"2011-11-29 19:59:51.933",-131.331575256311,134165.070104805,-131.716664255121,134.506151487315,0,0.21362,108.10929928652,202.053016497905,-11.5479692412385,201.68103929949,60.003,0,97.1576995849609,108.891662597656,11.7339630126953 +"2011-11-29 19:59:51.966",-131.290013597736,134164.858003679,-131.656182905216,134.665682026152,0,0.21362,108.185754966393,201.916557524606,-11.5358329035496,201.890339614274,60.003,0,97.1643371582031,108.907920837402,11.7435836791992 +"2011-11-29 19:59:52.000",-131.251391316591,134170.752978159,-131.527883382414,134.683640680801,-45,0.302104301194141,108.300856638255,202.050306289788,-11.4764203643417,201.847728246835,60.003,0,97.1702117919922,108.890197753906,11.7199859619141 +"2011-11-29 19:59:52.033",-131.212407225521,134163.789683633,-131.595844750224,134.825362266222,-90,0.42724,108.281854252029,202.253132680817,-11.4643681633925,202.057081741921,60.003,0,97.1667327880859,108.899765014648,11.7330322265625 +"2011-11-29 19:59:52.066",-131.173788099672,134169.807150821,-131.595844750224,134.825362266222,-90,0.21362,108.300856638255,202.050306289788,-11.4643681633925,202.057081741921,60.003,0,97.1690979003906,108.881050109863,11.7119522094727 +"2011-11-29 19:59:52.100",-131.132227858157,134169.863063521,-131.527883382414,134.683640680801,0,0,108.300856638255,202.050306289788,-11.4049896734304,202.014731437861,60.003,0,97.1707534790039,108.882186889648,11.7114334106445 +"2011-11-29 19:59:52.133",-131.090667673148,134169.989569823,-131.459778934571,134.542108987711,0,0.21362,108.358350232844,202.117486148317,-11.3455863459042,201.972598192849,60.003,0,97.1581726074219,108.878273010254,11.720100402832 +"2011-11-29 19:59:52.166",-131.049107588379,134170.186669527,-131.459778934571,134.542108987711,0,0,108.358350232844,202.117486148317,-11.357520319816,201.763157035958,60.003,0,97.1632843017578,108.874633789063,11.7113494873047 +"2011-11-29 19:59:52.200",-131.007547647581,134170.454362322,-131.459778934571,134.542108987711,0,0,108.415805562855,202.184869387009,-11.2980330391938,201.721197465671,60.003,0,97.162841796875,108.871246337891,11.7084045410156 +"2011-11-29 19:59:52.233",-130.965987894488,134170.792647786,-131.399618712797,134.702274489035,90,0.21362,108.434948822922,201.982200375786,-11.2267056272666,201.888983422855,60.003,0,97.1456756591797,108.889945983887,11.744270324707 +"2011-11-29 19:59:52.266",-130.926989551948,134164.28417318,-131.331389048473,134.561101524007,90,0.21362,108.569130731038,201.915201509284,-11.1672284614734,201.847502167848,60.003,0,97.1612548828125,108.897727966309,11.7364730834961 +"2011-11-29 19:59:52.300",-130.888383913141,134170.752041081,-131.271390167229,134.721583170704,0,0,108.549846622474,202.117711925313,-11.0960545725362,202.015860894523,60.003,0,97.1746368408203,108.890785217285,11.7161483764648 +"2011-11-29 19:59:52.333",-130.846824673934,134171.292733968,-131.271390167229,134.721583170704,0,0,108.549846622474,202.117711925313,-11.0960545725362,202.015860894523,60.003,0,97.1508712768555,108.867088317871,11.7162170410156 +"2011-11-29 19:59:52.366",-130.805265791546,134171.904017294,-131.203036044554,134.580769539576,0,0,108.626572789096,201.983330014355,-11.0365881614305,201.97485757108,60.003,0,97.15771484375,108.892074584961,11.7343597412109 +"2011-11-29 19:59:52.400",-130.763707309704,134172.585890095,-131.203036044554,134.580769539576,0,0,108.683976052426,202.051661398391,-10.9770976647436,201.934071904098,60.003,0,97.1575088500977,108.884780883789,11.7272720336914 +"2011-11-29 19:59:52.433",-130.722149272128,134173.338351293,-131.14319901441,134.741566435677,0,0,108.741340445193,202.120195455627,-10.9770976647436,201.934071904098,60.003,0,97.1483459472656,108.884750366211,11.7364044189453 +"2011-11-29 19:59:52.466",-130.683140250586,134167.218585966,-131.015046520803,134.762223983863,0,0,108.79866589198,202.188931979969,-10.9770976647436,201.934071904098,60.003,0,97.1460723876953,108.875106811523,11.7290344238281 +"2011-11-29 19:59:52.500",-130.641581064638,134168.107893413,-131.015046520803,134.762223983863,0,0,108.875529550081,202.05572666967,-10.8580448697747,201.853154066562,60.003,0,97.1656494140625,108.892242431641,11.7265930175781 +"2011-11-29 19:59:52.533",-130.602566904438,134162.116589883,-130.946445768169,134.622130814135,90,0.21362,108.875529550081,202.05572666967,-10.7984827998122,201.813022158029,60.003,0,97.1601791381836,108.885986328125,11.7258071899414 +"2011-11-29 19:59:52.566",-130.561006734441,134163.142752359,-130.946445768169,134.622130814135,0,0,108.895145990901,201.853606211623,-10.7871319072058,202.022863384885,60.003,0,97.1379928588867,108.883323669434,11.7453308105469 +"2011-11-29 19:59:52.600",-130.519447222061,134164.239503637,-130.88693395056,134.783555505229,0,0,108.9524944811,201.922885475703,-10.716338093744,202.192881644865,60.003,0,97.1658706665039,108.875862121582,11.7099914550781 +"2011-11-29 19:59:52.633",-130.477888411013,134165.406841986,-130.818211032367,134.643823450989,0,0,108.99008601349,202.194348643605,-10.6568482469213,202.153268654776,60.003,0,97.1637878417969,108.879539489746,11.7157516479492 +"2011-11-29 19:59:52.666",-130.436330345007,134166.644765563,-130.818211032367,134.643823450989,0,0,109.009803575165,201.992366895484,-10.6568482469213,202.153268654776,60.003,0,97.1775512695313,108.885192871094,11.7076416015625 +"2011-11-29 19:59:52.700",-130.397750564249,134173.886530207,-130.758862565449,134.80556067983,0,0,109.086880694752,201.860162201193,-10.5973351450236,202.113873682077,60.003,0,97.1629257202148,108.87565612793,11.7127304077148 +"2011-11-29 19:59:52.733",-130.358727605948,134168.284067424,-130.690018251929,134.666190322894,-90,0.21362,109.144161124804,201.930117176997,-10.6084836047421,201.903901027431,60.003,0,97.1670227050781,108.884536743164,11.7175140380859 +"2011-11-29 19:59:52.766",-130.317171651801,134169.724374994,-130.690018251929,134.666190322894,-90,0.21362,109.144161124804,201.930117176997,-10.6084836047421,201.903901027431,60.003,0,97.1654663085938,108.869232177734,11.7037658691406 +"2011-11-29 19:59:52.800",-130.278144175349,134164.250436743,-130.690018251929,134.666190322894,0,0,109.201401823933,202.000273834834,-10.4892684867376,201.825684354222,60.003,0,97.1692962646484,108.893081665039,11.7237854003906 +"2011-11-29 19:59:52.833",-130.233603108415,134159.913984501,-130.561868689064,134.689231093953,135,0.302104301194141,109.25860271932,202.070631964641,-10.4186574588601,201.996998140369,60.003,0,97.1500625610352,108.886566162109,11.7365036010742 +"2011-11-29 19:59:52.866",-130.195032621968,134167.475351841,-130.621031392248,134.527014792456,116.565051177078,0.477668841353505,109.315763738564,202.14119135604,-10.4782396357062,202.035738298276,60.003,0,97.1507110595703,108.872993469238,11.722282409668 +"2011-11-29 19:59:52.900",-130.153478387259,134169.193671401,-130.621031392248,134.527014792456,90,0.21362,109.315763738564,202.14119135604,-10.4296263992079,201.786903869009,60.003,0,97.1658096313477,108.887413024902,11.7216033935547 +"2011-11-29 19:59:52.933",-130.111925238772,134170.982562058,-130.492761354009,134.550418552217,90,0.21362,109.335811896252,201.939608391928,-10.4296263992079,201.786903869009,60.003,0,97.1715393066406,108.879486083984,11.7079467773438 +"2011-11-29 19:59:52.966",-130.069898058523,134159.942411492,-130.492761354009,134.550418552217,45,0.302104301194141,109.392982931598,202.010439444955,-10.3590524880837,201.958476506236,60.003,0,97.184211730957,108.883392333984,11.6991806030273 +"2011-11-29 19:59:53.000",-130.031337000771,134167.761792023,-130.433763603403,134.712945418384,0,0,109.450113832326,202.081471488634,-10.2885984931604,202.130355034608,60.003,0,97.1458358764648,108.888763427734,11.7429275512695 +"2011-11-29 19:59:53.033",-129.989785163876,134169.758110055,-130.364536573097,134.574496433023,0,0,109.470302009467,201.880054935267,-10.2290082873595,202.092310431233,60.003,0,97.1659393310547,108.889389038086,11.7234497070313 +"2011-11-29 19:59:53.066",-129.950745052994,134164.806462118,-130.305704251921,134.73733294054,0,0,109.507204527197,202.152704311092,-10.1097608647243,202.016877400119,60.003,0,97.1641540527344,108.885887145996,11.7217330932617 +"2011-11-29 19:59:53.100",-129.909193562281,134166.93964146,-130.236358309274,134.5992480731,0,0,109.564254945393,202.22413770016,-10.050103881228,201.979489217441,60.003,0,97.1565399169922,108.880920410156,11.7243804931641 +"2011-11-29 19:59:53.133",-129.86764341469,134169.143380958,-130.236358309274,134.5992480731,0,0,109.584542617197,202.022863384885,-10.1097608647243,202.016877400119,60.003,0,97.1690368652344,108.889427185059,11.7203903198242 +"2011-11-29 19:59:53.166",-129.828598734075,134164.386631936,-130.236358309274,134.5992480731,-90,0.21362,109.604870751762,201.821614449225,-10.060689795323,201.769150547972,60.003,0,97.1728363037109,108.885452270508,11.7126159667969 +"2011-11-29 19:59:53.200",-129.78704918194,134166.727230922,-130.177691888871,134.762393294944,0,0,109.641602262267,202.094568471105,-10.0009505069713,201.731942661301,60.003,0,97.1687316894531,108.892417907715,11.7236862182617 +"2011-11-29 19:59:53.233",-129.74550110133,134169.138383149,-130.108227819523,134.624673100825,0,0,109.719048681049,201.965368012658,-9.93072395531613,201.905370125839,60.003,0,97.1709136962891,108.888740539551,11.7178268432617 +"2011-11-29 19:59:53.266",-129.706452205843,134164.576555276,-130.108227819523,134.624673100825,0,0,109.719048681049,201.965368012658,-9.92028045844306,202.115792812806,60.003,0,97.1594543457031,108.884086608887,11.7246322631836 +"2011-11-29 19:59:53.300",-129.664904969951,134167.124563303,-130.108227819523,134.624673100825,0,0,109.776076602639,202.037545238008,-9.93072395531613,201.905370125839,60.003,0,97.1669692993164,108.891235351563,11.7242660522461 +"2011-11-29 19:59:53.333",-129.623359333945,134169.743116695,-129.98014635798,134.650771134745,0,0,109.776076602639,202.037545238008,-9.81125686799605,201.832128202625,60.003,0,97.1558074951172,108.878089904785,11.722282409668 +"2011-11-29 19:59:53.366",-129.58430657856,134165.37622955,-129.98014635798,134.650771134745,0,0,109.853630606723,201.908986322533,-9.81125686799605,201.832128202625,60.003,0,97.1815414428711,108.888305664063,11.7067642211914 +"2011-11-29 19:59:53.400",-129.542762036505,134168.131633187,-129.92181313102,134.814530989565,-90,0.21362,109.890010013177,202.182499503418,-9.75149093377187,201.795836478081,60.003,0,97.1588363647461,108.870109558105,11.7112731933594 +"2011-11-29 19:59:53.433",-129.503706246056,134163.893392268,-129.852115175864,134.677541783613,0,0,109.946915364776,202.255276113598,-9.74122852839484,202.006373262295,60.003,0,97.1452102661133,108.871482849121,11.7262725830078 +"2011-11-29 19:59:53.466",-129.462162962438,134166.785643853,-129.852115175864,134.677541783613,0,0,110.02449398523,202.127532980559,-9.68150165519143,201.970338789343,60.003,0,97.1631393432617,108.877655029297,11.7145156860352 +"2011-11-29 19:59:53.500",-129.417601127321,134163.934938174,-129.782275391368,134.540752275383,90,0.21362,110.081366179226,202.200780743207,-9.62175353083622,201.934523867979,60.003,0,97.1567840576172,108.888565063477,11.7317810058594 +"2011-11-29 19:59:53.533",-129.378540283477,134159.896490965,-129.782275391368,134.540752275383,0,0.21362,110.081366179226,202.200780743207,-9.62175353083622,201.934523867979,60.003,0,97.1786651611328,108.883483886719,11.7048187255859 +"2011-11-29 19:59:53.566",-129.33699859255,134163.001245489,-129.724135521399,134.70498464641,0,0,110.102170583329,202.000160880737,-9.56198427399877,201.89892861504,60.003,0,97.1651382446289,108.880676269531,11.7155380249023 +"2011-11-29 19:59:53.600",-129.295458846102,134166.176523797,-129.654180157251,134.568562144164,0,0,110.159050378491,202.073680639533,-9.50219400361659,201.863553146733,60.003,0,97.1673049926758,108.872856140137,11.7055511474609 +"2011-11-29 19:59:53.633",-129.256395095401,134162.333068648,-129.59620863975,134.733099312381,0,0,110.194986764681,202.347873284846,-9.43244434900269,202.039126297016,60.003,0,97.1736297607422,108.890563964844,11.7169342041016 +"2011-11-29 19:59:53.666",-129.214857111994,134165.645181428,-129.59620863975,134.733099312381,0,0,110.194986764681,202.347873284846,-9.43244434900269,202.039126297016,60.003,0,97.1478958129883,108.889938354492,11.7420425415039 +"2011-11-29 19:59:53.700",-129.175790954903,134161.930411619,-129.59620863975,134.733099312381,0,0,110.27268561331,202.221316954873,-9.43244434900269,202.039126297016,60.003,0,97.1635665893555,108.888671875,11.7251052856445 +"2011-11-29 19:59:53.733",-129.134254898974,134165.379353268,-129.526138496063,134.597044344543,180,0.21362,110.35048163223,202.09513297713,-9.43244434900269,202.039126297016,60.003,0,97.1626129150391,108.902046203613,11.7394332885742 +"2011-11-29 19:59:53.766",-129.092721000321,134168.898800458,-129.455926656042,134.461191089706,90,0.21362,110.428374716448,201.969322049519,-9.31288128578439,201.969547992145,60.003,0,97.1719665527344,108.87459564209,11.7026290893555 +"2011-11-29 19:59:53.800",-129.053652526065,134165.379040896,-129.398151652292,134.626198449795,90,0.21362,110.485143412546,202.043982329469,-9.25306898712307,201.935088821406,60.003,0,97.1499252319336,108.901016235352,11.751091003418 +"2011-11-29 19:59:53.833",-129.012120803905,134169.035303295,-129.398151652292,134.626198449795,0,0,110.463964060924,202.244107451495,-9.19323633689339,201.90084978889,60.003,0,97.1632308959961,108.886688232422,11.7234573364258 +"2011-11-29 19:59:53.866",-128.973050312294,134165.644244314,-129.340518159838,134.791342362311,0,0,110.463964060924,202.244107451495,-9.1835612752765,202.111728749696,60.003,0,97.1456909179688,108.891525268555,11.7458343505859 +"2011-11-29 19:59:53.900",-128.931520930994,134169.437314277,-129.340518159838,134.791342362311,0,0,110.520642493297,202.318891881775,-9.1835612752765,202.111728749696,60.003,0,97.1562423706055,108.882034301758,11.7257919311523 +"2011-11-29 19:59:53.933",-128.892448576684,134166.174961947,-129.270220867176,134.656024023502,0,0,110.598554755134,202.193897260511,-9.08308377813584,201.622088465351,60.003,0,97.1613235473633,108.891120910645,11.7297973632813 +"2011-11-29 19:59:53.966",-128.850921700579,134170.104831016,-129.199782252563,134.520908794177,0,0,110.619872649006,201.993948308115,-9.01361747982354,201.799454637591,60.003,0,97.1549682617188,108.878768920898,11.7238006591797 +"2011-11-29 19:59:54.000",-128.808801003705,134161.23317797,-129.142347378627,134.686520619585,0,0,110.676563261555,202.069276983257,-9.00412511612837,202.010439444955,60.003,0,97.1621627807617,108.881423950195,11.7192611694336 +"2011-11-29 19:59:54.033",-128.767275114384,134165.305008753,-129.142347378627,134.686520619585,0,0,110.733211567467,202.144803334095,-8.94427328705095,201.977116924037,60.003,0,97.1583633422852,108.885162353516,11.7267990112305 +"2011-11-29 19:59:54.066",-128.728197761485,134162.304954542,-129.085053633569,134.85226745375,-90,0.21362,110.711797603666,202.344603217562,-8.88440177116376,201.944014875799,60.003,0,97.156867980957,108.885055541992,11.7281875610352 +"2011-11-29 19:59:54.100",-128.686674712382,134166.51357057,-129.085053633569,134.85226745375,0,0,110.733211567467,202.144803334095,-8.87505108076526,202.155074543976,60.003,0,97.1624221801758,108.884765625,11.7223434448242 +"2011-11-29 19:59:54.133",-128.647595966591,134163.642242304,-129.014532421168,134.717687782338,180,0.21362,110.789817503457,202.220527139142,-8.88440177116376,201.944014875799,60.003,0,97.169548034668,108.901908874512,11.7323608398438 +"2011-11-29 19:59:54.166",-128.606075921946,134167.987632652,-129.014532421168,134.717687782338,0,0,110.86793305803,202.096826485747,-8.8338198003115,201.700044723995,60.003,0,97.1622161865234,108.882118225098,11.7199020385742 +"2011-11-29 19:59:54.200",-128.563938820128,134159.53756059,-128.943870277242,134.583312607583,0,0,110.946144152471,201.973501947174,-8.8338198003115,201.700044723995,60.003,0,97.1586837768555,108.882545471191,11.7238616943359 +"2011-11-29 19:59:54.233",-128.522420280962,134164.024902198,-128.88677722586,134.749525046461,0,0,110.981027754596,202.249409822523,-8.70467031489863,201.846032648259,60.003,0,97.1760482788086,108.86994934082,11.6939010620117 +"2011-11-29 19:59:54.266",-128.483337493688,134161.415921011,-128.88677722586,134.749525046461,0,0,110.981027754596,202.249409822523,-8.635615031911,202.025009260764,60.003,0,97.1738204956055,108.887481689453,11.7136611938477 +"2011-11-29 19:59:54.300",-128.441822293839,134166.040018051,-128.82982490497,134.915870953243,180,0.21362,110.981027754596,202.249409822523,-8.635615031911,202.025009260764,60.003,0,97.16259765625,108.895782470703,11.7331848144531 +"2011-11-29 19:59:54.333",-128.402738583672,134163.559775049,-128.759083020237,134.782031937093,0,0,111.037511025422,202.325996656501,-8.57570816689173,201.993044645271,60.003,0,97.1613235473633,108.888061523438,11.7267379760742 +"2011-11-29 19:59:54.366",-128.36122688725,134168.320614131,-128.688200610296,134.648398795233,0,0.21362,111.059248553597,202.126629914941,-8.52476605190586,201.750038539293,60.003,0,97.1561508178711,108.884986877441,11.7288360595703 +"2011-11-29 19:59:54.400",-128.322142408942,134165.969109977,-128.688200610296,134.648398795233,0,0,111.137564293153,202.004227188448,-8.51578240435006,201.961300922553,60.003,0,97.1584091186523,108.877426147461,11.7190170288086 +"2011-11-29 19:59:54.433",-128.277565246868,134165.195053765,-128.688200610296,134.648398795233,0,0,111.194056481542,202.081358579922,-8.45583786651143,201.929778196784,60.003,0,97.1740417480469,108.881629943848,11.7075881958008 +"2011-11-29 19:59:54.466",-128.238478452797,134162.97719243,-128.631451028238,134.81520796985,0,0,111.250505507133,202.158686273979,-8.45583786651143,201.929778196784,60.003,0,97.1560134887695,108.883834838867,11.7278213500977 +"2011-11-29 19:59:54.500",-128.196972618445,134168.016682664,-128.560459714423,134.681946570397,0,0,111.250505507133,202.158686273979,-8.45583786651143,201.929778196784,60.003,0,97.1864395141602,108.894996643066,11.7085571289063 +"2011-11-29 19:59:54.533",-128.155469923758,134173.126575592,-128.560459714423,134.681946570397,0,0,111.328924076794,202.037206438039,-8.45583786651143,201.929778196784,60.003,0,97.1517028808594,108.906158447266,11.7544555664063 +"2011-11-29 19:59:54.566",-128.116383539209,134171.10375721,-128.432783074644,134.716163469273,-45,0.302104301194141,111.328924076794,202.037206438039,-8.39587467584227,201.898476571478,60.003,0,97.1628341674805,108.884307861328,11.7214736938477 +"2011-11-29 19:59:54.600",-128.074218245432,134163.497299822,-128.432783074644,134.716163469273,-45,0.302104301194141,111.385333612613,202.115002584713,-8.26717333551064,202.047934827864,60.003,0,97.1712646484375,108.852485656738,11.6812210083008 +"2011-11-29 19:59:54.633",-128.035127888651,134161.604286654,-128.361543380267,134.583482143742,0,0.21362,111.44169968533,202.1929944913,-8.2158744151031,201.805899323533,60.003,0,97.158576965332,108.859115600586,11.7005386352539 +"2011-11-29 19:59:54.666",-127.993629582437,134166.988683258,-128.361543380267,134.583482143742,0,0,111.498022236182,202.271181931357,-8.2158744151031,201.805899323533,60.003,0,97.1622467041016,108.860633850098,11.6983871459961 +"2011-11-29 19:59:54.700",-127.954539163257,134165.224416753,-128.305171909519,134.751048982137,180,0.21362,111.55430120683,202.349564678222,-8.1558378425494,201.77548312195,60.003,0,97.1585998535156,108.871658325195,11.7130584716797 +"2011-11-29 19:59:54.733",-127.909960661646,134165.120084403,-128.305171909519,134.751048982137,0,0,111.55430120683,202.349564678222,-8.08724837597425,201.956781837486,60.003,0,97.1658096313477,108.877555847168,11.7117462158203 +"2011-11-29 19:59:54.766",-127.870868658921,134163.489490417,-128.177627433761,134.786602589836,0,0,111.55430120683,202.349564678222,-7.96720891143352,201.897120434717,60.003,0,97.1712646484375,108.882598876953,11.7113342285156 +"2011-11-29 19:59:54.800",-127.831775724151,134161.921352603,-128.177627433761,134.786602589836,0,0,111.63282686325,202.22955342082,-8.02723751043195,201.926840344438,60.003,0,97.1639556884766,108.881813049316,11.7178573608398 +"2011-11-29 19:59:54.833",-127.79028599158,134167.650589582,-128.177627433761,134.786602589836,0,0,111.711445627781,202.109922473194,-8.0187820438234,202.138369453276,60.003,0,97.1689987182617,108.887084960938,11.7180862426758 +"2011-11-29 19:59:54.866",-127.751193384827,134166.211196859,-128.106174494034,134.654668458924,180,0.21362,111.711445627781,202.109922473194,-7.9588150333082,202.108680648734,60.003,0,97.1695175170898,108.884017944336,11.7145004272461 +"2011-11-29 19:59:54.900",-127.706615395252,134166.47733574,-128.106174494034,134.654668458924,180,0.21362,111.733870288346,201.911472420191,-7.89883046819765,202.079213302417,60.003,0,97.1680068969727,108.864212036133,11.6962051391602 +"2011-11-29 19:59:54.933",-127.667521610139,134165.171625844,-128.034581509945,134.522944157731,0,0,111.733870288346,201.911472420191,-7.84709900921375,201.83834575606,60.003,0,97.1670761108398,108.902236938477,11.7351608276367 +"2011-11-29 19:59:54.966",-127.62842708229,134163.928378295,-127.978592542709,134.691263913935,-90,0.21362,111.846400273738,202.070067390168,-7.84709900921375,201.83834575606,60.003,0,97.1837463378906,108.892593383789,11.7088470458984 +"2011-11-29 19:59:55.000",-127.589331848088,134162.747594831,-127.978592542709,134.691263913935,0,0,111.958753326436,202.229440594786,-7.78701795463245,201.809291180837,60.003,0,97.166862487793,108.899230957031,11.7323684692383 +"2011-11-29 19:59:55.033",-127.544753255634,134163.308624461,-127.906894413331,134.559914569025,90,0.21362,111.958753326436,202.229440594786,-7.78701795463245,201.809291180837,60.003,0,97.1540451049805,108.880699157715,11.7266540527344 +"2011-11-29 19:59:55.066",-127.505657165576,134162.261533857,-127.851080532121,134.728526844545,90,0.21362,111.958753326436,202.229440594786,-7.71877268482916,201.992140978384,60.003,0,97.1542205810547,108.884460449219,11.7302398681641 +"2011-11-29 19:59:55.100",-127.464182221508,134168.543642539,-127.851080532121,134.728526844545,0,0,111.981407416128,202.031333814975,-7.65871914199138,201.963560427167,60.003,0,97.1625366210938,108.889434814453,11.7268981933594 +"2011-11-29 19:59:55.133",-127.425087085528,134167.62528789,-127.779278095043,134.597552900489,-90,0.21362,112.037563471893,202.111390074082,-7.65871914199138,201.963560427167,60.003,0,97.1592864990234,108.892738342285,11.7334518432617 +"2011-11-29 19:59:55.166",-127.382884761919,134161.210686502,-127.779278095043,134.597552900489,90,0.21362,112.116465585543,201.993722392783,-7.59864866599933,201.935201811902,60.003,0,97.1561737060547,108.890197753906,11.7340240478516 +"2011-11-29 19:59:55.200",-127.341415368927,134167.700880585,-127.651733761387,134.635858591961,90,0.21362,112.172578366332,202.07424520391,-7.47845741457682,201.879150762607,60.003,0,97.1520233154297,108.868453979492,11.7164306640625 +"2011-11-29 19:59:55.233",-127.302319265377,134166.978687479,-127.651733761387,134.635858591961,0,0,112.14974195976,202.272084351606,-7.41833688970171,201.851458513564,60.003,0,97.1672134399414,108.879409790039,11.7121963500977 +"2011-11-29 19:59:55.266",-127.257743925049,134168.062600412,-127.596271147212,134.805052908598,0,0,112.205764283139,202.352721908032,-7.47845741457682,201.879150762607,60.003,0,97.1569061279297,108.883804321289,11.7268981933594 +"2011-11-29 19:59:55.300",-127.218647537686,134167.474102373,-127.524262614452,134.674831073985,0,0.21362,112.261741921046,202.433552767924,-7.42617404595522,201.639628422371,60.003,0,97.1694946289063,108.877494812012,11.7080001831055 +"2011-11-29 19:59:55.333",-127.179550825549,134166.948075401,-127.524262614452,134.674831073985,0,0,112.261741921046,202.433552767924,-7.36597496833521,201.612129617101,60.003,0,97.17138671875,108.893104553223,11.7217178344727 +"2011-11-29 19:59:55.366",-127.140453825044,134166.484520233,-127.524262614452,134.674831073985,0,0,112.284669607072,202.23587157829,-7.29804666962628,201.79674102404,60.003,0,97.1677169799805,108.891242980957,11.7235260009766 +"2011-11-29 19:59:55.400",-127.095879855074,134167.863311025,-127.524262614452,134.674831073985,0,0,112.363666015473,202.119405244746,-7.29804666962628,201.79674102404,60.003,0,97.1463241577148,108.88215637207,11.7358322143555 +"2011-11-29 19:59:55.433",-127.056782893353,134167.53345208,-127.452114805956,134.544822371326,0,0,112.442753365294,202.003323571586,-7.29034998618275,202.008632262766,60.003,0,97.1465606689453,108.865577697754,11.7190170288086 +"2011-11-29 19:59:55.466",-127.017685757593,134167.266065824,-127.396865852053,134.714469767861,0,0,112.475578562154,202.282349098589,-7.23024263925158,201.981635554132,60.003,0,97.1540145874023,108.892127990723,11.7381134033203 +"2011-11-29 19:59:55.500",-126.973113448372,134168.868501182,-127.341755925444,134.884242110593,-90,0.21362,112.531467144793,202.364110077685,-7.23024263925158,201.981635554132,60.003,0,97.1471710205078,108.896003723145,11.7488327026367 +"2011-11-29 19:59:55.533",-126.934016596069,134168.734809451,-127.341755925444,134.884242110593,-90,0.21362,112.531467144793,202.364110077685,-7.16256272590809,202.166812430572,60.003,0,97.1634063720703,108.891593933105,11.7281875610352 +"2011-11-29 19:59:55.566",-126.894919684055,134168.663590437,-127.269544667663,134.754774085682,-90,0.21362,112.587310531366,202.446063447113,-7.10248556771431,202.140288351442,60.003,0,97.1835021972656,108.867385864258,11.6838836669922 +"2011-11-29 19:59:55.600",-126.855822748739,134168.65484424,-127.142300250357,134.795743430377,0,0.21362,112.666397691414,202.331071342847,-7.10998006017388,201.928309275954,60.003,0,97.1632843017578,108.874778747559,11.7114944458008 +"2011-11-29 19:59:55.633",-126.813595769288,134163.222408479,-127.142300250357,134.795743430377,0,0,112.666397691414,202.331071342847,-7.04982508037026,201.901979882615,60.003,0,97.1823577880859,108.884941101074,11.7025833129883 +"2011-11-29 19:59:55.666",-126.774497301358,134163.34361064,-127.142300250357,134.795743430377,180,0.21362,112.666397691414,202.331071342847,-6.98965447562817,201.875873102765,60.003,0,97.1611480712891,108.889083862305,11.7279357910156 +"2011-11-29 19:59:55.700",-126.729927068674,134165.389036794,-127.069850379358,134.666868048899,180,0.21362,112.745574647743,202.216465180939,-6.9367917319562,201.637931073858,60.003,0,97.1539840698242,108.899436950684,11.7454528808594 +"2011-11-29 19:59:55.733",-126.690829368894,134165.643931943,-127.069850379358,134.666868048899,-90,0.21362,112.824841250457,202.102245617957,-6.92946837263094,201.849989022779,60.003,0,97.1744003295898,108.870712280273,11.6963119506836 +"2011-11-29 19:59:55.766",-126.651731835878,134165.961300716,-126.997261823671,134.538208402892,0,0,112.904197347952,201.988413309739,-6.86202117524377,202.036415902569,60.003,0,97.1494750976563,108.889289855957,11.7398147583008 +"2011-11-29 19:59:55.800",-126.609496067956,134160.881123582,-126.942584926244,134.708880402113,0,0,112.959992033727,202.071648194715,-6.80186676922141,202.011004186074,60.003,0,97.1737213134766,108.882904052734,11.7091827392578 +"2011-11-29 19:59:55.833",-126.568067963564,134168.681395194,-126.942584926244,134.708880402113,0,0,112.959992033727,202.071648194715,-6.80186676922141,202.011004186074,60.003,0,97.1567077636719,108.877044677734,11.7203369140625 +"2011-11-29 19:59:55.866",-126.525829951735,134163.745638677,-126.869897645844,134.5806,45,0.302104301194141,112.93638727904,202.268361842128,-6.74169729354425,201.985815196971,60.003,0,97.1740264892578,108.901489257813,11.7274627685547 +"2011-11-29 19:59:55.900",-126.486732456375,134164.326656088,-126.869897645844,134.5806,45,0.302104301194141,112.992091509316,202.351707089537,-6.68151287531138,201.960849018597,60.003,0,97.1633987426758,108.875717163086,11.7123184204102 +"2011-11-29 19:59:55.933",-126.447635317853,134164.970145553,-126.815399457289,134.751556956866,90,0.21362,113.01574072108,202.155074543976,-6.62131364181689,201.936105733593,60.003,0,97.1692276000977,108.888412475586,11.7191848754883 +"2011-11-29 19:59:55.966",-126.405391832928,134160.242300261,-126.742614308232,134.62365619191,0,0,113.095182999426,202.042175447307,-6.56803341083019,201.699365989671,60.003,0,97.1511535644531,108.888259887695,11.7371063232422 +"2011-11-29 19:59:56.000",-126.363975713649,134168.388084949,-126.66969084485,134.495973090886,0,0.21362,113.150883797352,202.126065496881,-6.56803341083019,201.699365989671,60.003,0,97.1445465087891,108.876342773438,11.7317962646484 +"2011-11-29 19:59:56.033",-126.324880465698,134169.227718958,-126.742614308232,134.62365619191,45,0.302104301194141,113.206538325986,202.210146417106,-6.56803341083019,201.699365989671,60.003,0,97.1686477661133,108.898574829102,11.7299270629883 +"2011-11-29 19:59:56.066",-126.285785725264,134170.12981988,-126.615412989004,134.667376341164,90,0.21362,113.206538325986,202.210146417106,-6.50087123918559,201.887288170771,60.003,0,97.1611557006836,108.900970458984,11.7398147583008 +"2011-11-29 19:59:56.100",-126.243538374059,134165.681416483,-126.615412989004,134.667376341164,0,0,113.230412659509,202.013827867985,-6.38037110784609,201.83936315566,60.003,0,97.1548614501953,108.880920410156,11.7260589599609 +"2011-11-29 19:59:56.133",-126.201288244225,134161.305962835,-126.561273174557,134.838900138536,180,0.21362,113.262146538066,202.294417969984,-6.32009971417484,201.815735552664,60.003,0,97.1534805297852,108.878120422363,11.7246398925781 +"2011-11-29 19:59:56.166",-126.16219214616,134162.405540537,-126.488294861575,134.711759801309,0,0,113.317708386755,202.378879917372,-6.25320767941112,202.004678995363,60.003,0,97.1620025634766,108.901679992676,11.7396774291992 +"2011-11-29 19:59:56.200",-126.119938396328,134158.170554998,-126.415178784151,134.584838425322,0,0,113.421282594158,202.071422366251,-6.25981427301696,201.792331324191,60.003,0,97.1482009887695,108.870132446289,11.7219314575195 +"2011-11-29 19:59:56.233",-126.078539556976,134166.799388069,-126.415178784151,134.584838425322,0,0.21362,113.421282594158,202.071422366251,-6.25981427301696,201.792331324191,60.003,0,97.1569366455078,108.886672973633,11.729736328125 +"2011-11-29 19:59:56.266",-126.036284618161,134162.708859959,-126.415178784151,134.584838425322,0,0,113.397229918577,202.267459405271,-6.25981427301696,201.792331324191,60.003,0,97.1673736572266,108.872253417969,11.7048797607422 +"2011-11-29 19:59:56.300",-125.99719048177,134164.072070812,-126.361261094552,134.756805916941,0,0,113.532348560901,202.241625442823,-6.19951491298899,201.769150547972,60.003,0,97.1594848632813,108.888847351074,11.729362487793 +"2011-11-29 19:59:56.333",-125.958097158025,134165.497742137,-126.288050004691,134.630265962558,-90,0.21362,113.55653533318,202.045789195472,-6.14569669456231,201.533799705404,60.003,0,97.1800765991211,108.873489379883,11.6934127807617 +"2011-11-29 19:59:56.366",-125.919004683297,134166.985871945,-126.161007613952,134.676355854864,-45,0.302104301194141,113.612041640562,202.131258083583,-6.07887495170095,201.723459659685,60.003,0,97.1493682861328,108.872230529785,11.7228622436523 +"2011-11-29 19:59:56.400",-125.876745146321,134163.170866289,-126.161007613952,134.676355854864,0,0.21362,113.643227326595,202.412587193647,-6.0724564072077,201.935879753549,60.003,0,97.1727752685547,108.873733520508,11.7009582519531 +"2011-11-29 19:59:56.433",-125.835363926278,134172.211063515,-126.161007613952,134.676355854864,45,0.302104301194141,113.698596397693,202.498351971748,-6.01217883264429,201.913393474689,60.003,0,97.1650314331055,108.875534057617,11.7105026245117 +"2011-11-29 19:59:56.466",-125.795390476709,134161.114472956,-126.161007613952,134.676355854864,90,0.21362,113.667500975372,202.216916513658,-5.95818086286931,201.678663495497,60.003,0,97.1680755615234,108.876167297363,11.7080917358398 +"2011-11-29 19:59:56.500",-125.756298725017,134162.862549868,-126.161007613952,134.676355854864,180,0.21362,113.691821640981,202.0212821986,-5.95818086286931,201.678663495497,60.003,0,97.1696929931641,108.890937805176,11.7212448120117 +"2011-11-29 19:59:56.533",-125.714033477116,134159.328574576,-126.087565030477,134.550418552217,-90,0.21362,113.747277249746,202.107213028172,-5.95188789759255,201.891130721727,60.003,0,97.158317565918,108.890197753906,11.7318801879883 +"2011-11-29 19:59:56.566",-125.672662244694,134168.643911493,-126.03405277182,134.723107422448,-90,0.21362,113.747277249746,202.107213028172,-5.89158373117236,201.869091568619,60.003,0,97.1570816040039,108.885498046875,11.7284164428711 +"2011-11-29 19:59:56.600",-125.63039668282,134165.25440448,-126.03405277182,134.723107422448,0,0,113.77827855095,202.388801036513,-5.83126646267756,201.847276088607,60.003,0,97.1822662353516,108.897537231445,11.7152709960938 +"2011-11-29 19:59:56.633",-125.591308487558,134167.266065824,-125.907186633143,134.770519976709,0,0,113.858046858678,202.279641963145,-5.77093622157434,201.825684354222,60.003,0,97.1639556884766,108.880493164063,11.7165374755859 +"2011-11-29 19:59:56.666",-125.552221482621,134169.340169542,-125.907186633143,134.770519976709,0,0,113.937901150956,202.170875386383,-5.77093622157434,201.825684354222,60.003,0,97.1505889892578,108.883575439453,11.7329864501953 +"2011-11-29 19:59:56.700",-125.509953223485,134166.158718707,-125.833558936457,134.645348583012,0,0,113.993210569228,202.257645144454,-5.71059313749964,201.804316437281,60.003,0,97.1790924072266,108.858116149902,11.6790237426758 +"2011-11-29 19:59:56.733",-125.467682982712,134163.050288726,-125.833558936457,134.645348583012,0,0,113.993210569228,202.257645144454,-5.65023734025957,201.783172408889,60.003,0,97.1486206054688,108.87654876709,11.7279281616211 +"2011-11-29 19:59:56.766",-125.428596780492,134165.32187684,-125.833558936457,134.645348583012,90,0.21362,114.07314592189,202.149543957351,-5.65023734025957,201.783172408889,60.003,0,97.167236328125,108.877380371094,11.7101440429688 +"2011-11-29 19:59:56.800",-125.386324455853,134162.353998034,-125.759794340298,134.520399948476,45,0.302104301194141,114.128402930268,202.236774156101,-5.58986895982779,201.762252339434,60.003,0,97.1610794067383,108.882858276367,11.7217788696289 +"2011-11-29 19:59:56.833",-125.347239486626,134164.755545283,-125.706691400603,134.693804895768,0,0.21362,114.128402930268,202.236774156101,-5.52948812634393,201.741556298588,60.003,0,97.1972503662109,108.888442993164,11.6911926269531 +"2011-11-29 19:59:56.866",-125.304965248551,134161.92822496,-125.653725060032,134.867325247108,0,0,114.18361224021,202.324192292904,-5.46331815063409,201.933732930525,60.003,0,97.1837997436523,108.875831604004,11.6920318603516 +"2011-11-29 19:59:56.900",-125.265881669952,134164.459727464,-125.579915734572,134.742921126029,180,0.21362,114.23877381106,202.411798124257,-5.40868962159849,201.70083657782,60.003,0,97.1591644287109,108.880500793457,11.7213363647461 +"2011-11-29 19:59:56.933",-125.223605688899,134161.772972079,-125.579915734572,134.742921126029,-90,0.21362,114.293887602585,202.499591406557,-5.41441546165087,201.488168688449,60.003,0,97.1670913696289,108.893409729004,11.726318359375 +"2011-11-29 19:59:56.966",-125.18452365855,134164.43442517,-125.505970114241,134.618741023863,0,0,114.373886601407,202.392972270926,-5.41441546165087,201.488168688449,60.003,0,97.1730804443359,108.872970581055,11.6998901367188 +"2011-11-29 19:59:57.000",-125.142246104999,134161.888240332,-125.505970114241,134.618741023863,0,0,114.373886601407,202.392972270926,-5.34827221143136,201.680813033649,60.003,0,97.1715469360352,108.903770446777,11.7322235107422 +"2011-11-29 19:59:57.033",-125.103165780503,134164.679638556,-125.379198260178,134.668901206449,0,0,114.398867615148,202.198411046106,-5.28225528771244,201.8737256416,60.003,0,97.1695251464844,108.899848937988,11.7303237915039 +"2011-11-29 19:59:57.066",-125.060886824954,134162.274029019,-125.379198260178,134.668901206449,0,0,114.453969774112,202.286748116418,-5.22187730053441,201.854171391524,60.003,0,97.1380767822266,108.87646484375,11.7383880615234 +"2011-11-29 19:59:57.100",-125.021808363891,134165.195366137,-125.379198260178,134.668901206449,0,0,114.453969774112,202.286748116418,-5.16148768128784,201.834841340405,60.003,0,97.1440734863281,108.897666931152,11.7535934448242 +"2011-11-29 19:59:57.133",-124.979528176859,134162.930335809,-125.379198260178,134.668901206449,0,0,114.534136940225,202.180919565591,-5.16148768128784,201.834841340405,60.003,0,97.169319152832,108.879898071289,11.710578918457 +"2011-11-29 19:59:57.166",-124.937246585221,134160.738364796,-125.252521428097,134.719720172929,0,0,114.534136940225,202.180919565591,-5.16148768128784,201.834841340405,60.003,0,97.1678695678711,108.87727355957,11.7094039916992 +"2011-11-29 19:59:57.200",-124.898170488792,134163.85715673,-125.252521428097,134.719720172929,0,0,114.614387917577,202.075487239988,-5.10108656082445,201.815735552664,60.003,0,97.1759948730469,108.88557434082,11.7095794677734 +"2011-11-29 19:59:57.233",-124.859096227232,134167.038349773,-125.252521428097,134.719720172929,0,0,114.589184572165,202.269715489865,-5.03535056054622,202.009648804737,60.003,0,97.1767120361328,108.879737854004,11.7030258178711 +"2011-11-29 19:59:57.266",-124.816814088812,134165.054486177,-125.125940748243,134.771197178069,-90,0.21362,114.669428918463,202.164555197616,-4.97498999786319,201.991011389089,60.003,0,97.164924621582,108.886695861816,11.7217712402344 +"2011-11-29 19:59:57.300",-124.774530722971,134163.14368949,-125.125940748243,134.771197178069,0,0,114.724421391009,202.25380955678,-4.98025034041287,201.778197021388,60.003,0,97.1566314697266,108.891799926758,11.7351684570313 +"2011-11-29 19:59:57.333",-124.735459304942,134166.522316907,-125.051594681392,134.648398795233,0,0.21362,114.724421391009,202.25380955678,-4.85936968912568,201.741556298588,60.003,0,97.1647186279297,108.876846313477,11.7121276855469 +"2011-11-29 19:59:57.366",-124.693175307813,134164.752109177,-125.051594681392,134.648398795233,0,0.21362,114.749756632142,202.059791859159,-4.85936968912568,201.741556298588,60.003,0,97.162727355957,108.874214172363,11.7114868164063 +"2011-11-29 19:59:57.400",-124.654106465169,134168.260640042,-124.977113010261,134.525827536718,0,0,114.804742046499,202.149318215907,-4.79891303061957,201.723572768719,60.003,0,97.1680297851563,108.879829406738,11.711799621582 +"2011-11-29 19:59:57.433",-124.611822007291,134166.631021332,-124.92502503413,134.700919389899,0,0,114.859678728825,202.239030583006,-4.79384239750302,201.936444703184,60.003,0,97.1591033935547,108.86799621582,11.7088928222656 +"2011-11-29 19:59:57.466",-124.57497455994,134162.731038799,-124.92502503413,134.700919389899,180,0.21362,114.914566643,202.328928713026,-4.73343833057548,201.918704530242,60.003,0,97.1684875488281,108.874038696289,11.7055511474609 +"2011-11-29 19:59:57.500",-124.53268745995,134161.238176074,-124.850457442307,134.57873505057,180,0.21362,114.994955082422,202.225378815621,-4.67796770657818,201.68827967238,60.003,0,97.1475372314453,108.872657775879,11.7251205444336 +"2011-11-29 19:59:57.533",-124.490399441897,134159.818394794,-124.798554665342,134.754096801788,0,0,115.04978637591,202.315734124032,-4.67796770657818,201.68827967238,60.003,0,97.1774063110352,108.877937316895,11.7005310058594 +"2011-11-29 19:59:57.566",-124.451334757165,134163.650676452,-124.798554665342,134.754096801788,0,0,115.04978637591,202.315734124032,-4.67302371591581,201.901188817672,60.003,0,97.1702423095703,108.870323181152,11.700080871582 +"2011-11-29 19:59:57.600",-124.409046703397,134162.371491249,-124.798554665342,134.754096801788,0,0,115.104568665234,202.406274552394,-4.61259868513758,201.883897623897,60.003,0,97.1501235961914,108.877395629883,11.7272720336914 +"2011-11-29 19:59:57.633",-124.369985144056,134166.333645799,-124.723902038361,134.632299672857,0,0,115.130248947338,202.212854482926,-4.55698058640966,201.653885585838,60.003,0,97.1458892822266,108.887428283691,11.7415390014648 +"2011-11-29 19:59:57.666",-124.327697225104,134165.195053765,-124.649114345069,134.51073151443,0,0,115.185022994094,202.3036665243,-4.49647168326508,201.637025815476,60.003,0,97.1630401611328,108.897422790527,11.7343826293945 +"2011-11-29 19:59:57.700",-124.287611201495,134156.565180327,-124.597447913061,134.686520619585,180,0.21362,115.239747837937,202.394663287415,-4.43595272794642,201.620390969178,60.003,0,97.1670532226563,108.888748168945,11.7216949462891 +"2011-11-29 19:59:57.733",-124.248551653912,134160.72118375,-124.597447913061,134.686520619585,90,0.21362,115.265558817943,202.20145779442,-4.43126241428811,201.833371728635,60.003,0,97.150749206543,108.883010864258,11.7322616577148 +"2011-11-29 19:59:57.766",-124.20729649793,134172.510924862,-124.522576403995,134.565340563475,0,0.21362,115.320274993607,202.292726115519,-4.43126241428811,201.833371728635,60.003,0,97.1583251953125,108.880897521973,11.7225723266602 +"2011-11-29 19:59:57.800",-124.167205033594,134164.078318309,-124.522576403995,134.565340563475,0,0,115.320274993607,202.292726115519,-4.37079703790748,201.81697917968,60.003,0,97.1677093505859,108.869445800781,11.7017364501953 +"2011-11-29 19:59:57.833",-124.124915002939,134163.290194237,-124.522576403995,134.565340563475,0,0,115.400883187533,202.191188940785,-4.37079703790748,201.81697917968,60.003,0,97.1616363525391,108.889060974121,11.727424621582 +"2011-11-29 19:59:57.866",-124.085862648137,134167.705878448,-124.396141740129,134.620605419075,0,0,115.455540869478,202.28291308058,-4.31032190551353,201.800811430683,60.003,0,97.1804656982422,108.890274047852,11.7098083496094 +"2011-11-29 19:59:57.900",-124.043573347858,134167.058341321,-124.396141740129,134.620605419075,0,0,115.51014895576,202.374821137541,-4.19377903824455,201.556101927143,60.003,0,97.162727355957,108.873901367188,11.7111740112305 +"2011-11-29 19:59:57.933",-124.001283662409,134166.483895494,-124.344847928247,134.796928308767,0,0,115.536220548437,202.18204809387,-4.12883929705727,201.753657520123,60.003,0,97.1711578369141,108.867958068848,11.6968002319336 +"2011-11-29 19:59:57.966",-123.958993637863,134165.982541906,-124.26981145692,134.676525273896,-90,0.21362,115.562341899724,201.989316993303,-4.18934290248063,201.769150547972,60.003,0,97.1614303588867,108.873962402344,11.712532043457 +"2011-11-29 19:59:58.000",-123.922129562639,134163.065907587,-124.26981145692,134.676525273896,-90,0.21362,115.562341899724,201.989316993303,-4.12883929705727,201.753657520123,60.003,0,97.1431350708008,108.888893127441,11.7457580566406 +"2011-11-29 19:59:58.033",-123.879838226822,134162.701362886,-124.26981145692,134.676525273896,-90,0.21362,115.562341899724,201.989316993303,-4.06832646604841,201.738389503964,60.003,0,97.1537857055664,108.898345947266,11.7445602416992 +"2011-11-29 19:59:58.066",-123.837546684219,134162.40991384,-124.143586651938,134.733099312381,180,0.21362,115.616980606537,202.081584397282,-4.00356831248804,201.936444703184,60.003,0,97.1659469604492,108.890464782715,11.7245178222656 +"2011-11-29 19:59:58.100",-123.798504088879,134167.284183134,-124.143586651938,134.733099312381,180,0.21362,115.671569392112,202.174035406675,-3.94310100213915,201.92164250096,60.003,0,97.1497192382813,108.881507873535,11.7317886352539 +"2011-11-29 19:59:58.133",-123.758386488762,134159.521628932,-124.068335222288,134.613317181879,0,0,115.752399582824,202.07424520391,-3.88262489319464,201.907065226103,60.003,0,97.1625518798828,108.876884460449,11.7143325805664 +"2011-11-29 19:59:58.166",-123.719345984488,134164.522202242,-123.992949882651,134.493767670131,0,0.21362,115.833309484414,201.97485757108,-3.82618554633005,201.679568566985,60.003,0,97.1608352661133,108.871757507324,11.7109222412109 +"2011-11-29 19:59:58.200",-123.677054876845,134164.50814542,-123.992949882651,134.493767670131,0,0.21362,115.861406692202,202.26023976546,-3.7656285835644,201.665426360879,60.003,0,97.1608276367188,108.876556396484,11.7157287597656 +"2011-11-29 19:59:58.233",-123.634763783381,134164.567184065,-123.942137081005,134.670934333304,0,0,115.861406692202,202.26023976546,-3.7656285835644,201.665426360879,60.003,0,97.1676330566406,108.86946105957,11.7018280029297 +"2011-11-29 19:59:58.266",-123.595729474292,134169.76498201,-123.942137081005,134.670934333304,0,0,115.887827639524,202.068034909008,-3.76164681107761,201.878585652637,60.003,0,97.1521453857422,108.89168548584,11.7395401000977 +"2011-11-29 19:59:58.300",-123.55560118455,134162.334942921,-123.816047488996,134.729204256979,0,0,115.970213111162,202.446965087817,-3.70114510397112,201.864683449255,60.003,0,97.158576965332,108.898628234863,11.7400512695313 +"2011-11-29 19:59:58.333",-123.513309587592,134162.603900896,-123.816047488996,134.729204256979,0,0,116.024540989947,202.540601153013,-3.64063513039763,201.851006363693,60.003,0,97.1677703857422,108.896591186523,11.7288208007813 +"2011-11-29 19:59:58.366",-123.474279528445,134167.995441796,-123.816047488996,134.729204256979,0,0,116.051080161821,202.348662603514,-3.64063513039763,201.851006363693,60.003,0,97.1569519042969,108.887763977051,11.7308120727539 +"2011-11-29 19:59:58.400",-123.43414410328,134160.764604934,-123.816047488996,134.729204256979,180,0.21362,116.077669723433,202.156767550449,-3.64063513039763,201.851006363693,60.003,0,97.1615295410156,108.89990234375,11.7383728027344 +"2011-11-29 19:59:58.433",-123.391852382904,134161.243486559,-123.69006752598,134.788126106308,0,0,116.105396927234,202.442569551456,-3.52331780630927,201.611111070802,60.003,0,97.1603851318359,108.880676269531,11.7202911376953 +"2011-11-29 19:59:58.466",-123.349560987485,134161.795463454,-123.614446215495,134.669748346369,0,0.21362,116.186331049104,202.344941502835,-3.52331780630927,201.611111070802,60.003,0,97.1730651855469,108.901214599609,11.7281494140625 +"2011-11-29 19:59:58.500",-123.310537470796,134167.448175914,-123.614446215495,134.669748346369,45,0.302104301194141,116.240585861189,202.439301013831,-3.52331780630927,201.611111070802,60.003,0,97.1746368408203,108.860580444336,11.6859436035156 +"2011-11-29 19:59:58.533",-123.268248430443,134168.140691784,-123.614446215495,134.669748346369,90,0.21362,116.267343145563,202.247717591554,-3.5195909172056,201.824327728342,60.003,0,97.1575622558594,108.879501342773,11.7219390869141 +"2011-11-29 19:59:58.566",-123.228102254429,134161.247859899,-123.614446215495,134.669748346369,180,0.21362,116.294151164949,202.05617836143,-3.45905694453434,201.811326267856,60.003,0,97.1482009887695,108.883804321289,11.7356033325195 +"2011-11-29 19:59:58.600",-123.19122413981,134159.432599045,-123.488500091889,134.72971231407,180,0.21362,116.402663951473,202.245799712671,-3.34150139830928,201.572742078912,60.003,0,97.1568298339844,108.898193359375,11.7413635253906 +"2011-11-29 19:59:58.633",-123.14893331292,134160.331329611,-123.412669352474,134.611961187236,0,0,116.375778408001,202.437159529531,-3.28088077260941,201.560403594635,60.003,0,97.1731033325195,108.878662109375,11.7055587768555 +"2011-11-29 19:59:58.666",-123.106643075673,134161.303151403,-123.488500091889,134.72971231407,180,0.21362,116.375778408001,202.437159529531,-3.27740916610742,201.773673835379,60.003,0,97.151237487793,108.882888793945,11.7316513061523 +"2011-11-29 19:59:58.700",-123.064353474134,134162.348062835,-123.412669352474,134.611961187236,180,0.21362,116.402663951473,202.245799712671,-3.27740916610742,201.773673835379,60.003,0,97.1615982055664,108.874130249023,11.712532043457 +"2011-11-29 19:59:58.733",-123.025342683927,134168.455555733,-123.362666635135,134.790326710811,0,0,116.456843978978,202.340882042229,-3.21684506594771,201.761573814379,60.003,0,97.1549530029297,108.885643005371,11.7306900024414 +"2011-11-29 19:59:58.766",-122.985184542841,134161.961337221,-123.286760297038,134.672967429466,0,0,116.510973062402,202.436145134324,-3.09569540865842,201.738050201592,60.003,0,97.1742858886719,108.896507263184,11.7222213745117 +"2011-11-29 19:59:58.800",-122.942896222833,134163.216160942,-123.286760297038,134.672967429466,0,0,116.592103006755,202.340543750169,-3.09569540865842,201.738050201592,60.003,0,97.1489715576172,108.887687683105,11.7387161254883 +"2011-11-29 19:59:58.833",-122.903891329647,134169.517279021,-123.21072168179,134.555844929596,0,0,116.592103006755,202.340543750169,-3.03832607147491,201.513306655917,60.003,0,97.1713790893555,108.879653930664,11.7082748413086 +"2011-11-29 19:59:58.866",-122.863727747524,134163.222408479,-123.160965869247,134.734623433843,0,0,116.727361733015,202.341333097429,-3.03511011988427,201.726626688684,60.003,0,97.1679153442383,108.904411315918,11.7364959716797 +"2011-11-29 19:59:58.900",-122.821441089063,134164.687135518,-123.160965869247,134.734623433843,90,0.21362,116.727361733015,202.341333097429,-3.03511011988427,201.726626688684,60.003,0,97.1602401733398,108.90355682373,11.7433166503906 +"2011-11-29 19:59:58.933",-122.781272254111,134158.527614704,-123.160965869247,134.734623433843,90,0.21362,116.673309488518,202.245348444409,-2.9713727138609,201.928761252732,60.003,0,97.1509399414063,108.889785766602,11.7388458251953 +"2011-11-29 19:59:58.966",-122.742273781217,134165.086348176,-123.084852928735,134.617893562958,0,0,116.754592289334,202.150559790727,-2.91391929366338,201.704456441431,60.003,0,97.1467895507813,108.886085510254,11.7392959594727 +"2011-11-29 19:59:59.000",-122.699989164251,134166.760966736,-123.008608010379,134.501401664835,0,0,116.808631200242,202.24681506258,-2.85633800746411,201.480354897497,60.003,0,97.1661834716797,108.865158081055,11.698974609375 +"2011-11-29 19:59:59.033",-122.659815494283,134160.800841308,-122.959100760341,134.68059126673,180,0.21362,116.889976500099,202.152704311092,-2.85331402512287,201.693709781478,60.003,0,97.1562805175781,108.891235351563,11.7349548339844 +"2011-11-29 19:59:59.066",-122.617530622126,134162.617957918,-122.959100760341,134.68059126673,180,0.21362,116.916554616951,202.439864558566,-2.73208445010529,201.672893569279,60.003,0,97.1646957397461,108.895141601563,11.7304458618164 +"2011-11-29 19:59:59.100",-122.575246918408,134164.50814542,-122.959100760341,134.68059126673,0,0,116.862618650199,202.343250070813,-2.6714604130534,201.662824086925,60.003,0,97.1593627929688,108.884353637695,11.7249908447266 +"2011-11-29 19:59:59.133",-122.532964429135,134166.471400723,-122.882782798888,134.564492766264,0,0,116.94395019456,202.249409822523,-2.72919467096423,201.886271012688,60.003,0,97.158088684082,108.892585754395,11.7344970703125 +"2011-11-29 19:59:59.166",-122.496081203349,134165.703907201,-122.833466224534,134.743937134854,0,0,117.02535708262,202.155977482526,-2.72919467096423,201.886271012688,60.003,0,97.1645431518555,108.897598266602,11.7330551147461 +"2011-11-29 19:59:59.200",-122.453800311251,134167.803961464,-122.757076124996,134.628232221538,0,0,117.07926496202,202.253132680817,-2.6714604130534,201.662824086925,60.003,0,97.1678619384766,108.888481140137,11.7206192016602 +"2011-11-29 19:59:59.233",-122.413616448136,134162.248101555,-122.757076124996,134.628232221538,90,0.21362,117.07926496202,202.253132680817,-2.61083038939413,201.652980399079,60.003,0,97.1650466918945,108.901016235352,11.735969543457 +"2011-11-29 19:59:59.266",-122.373429276505,134156.758238659,-122.757076124996,134.628232221538,90,0.21362,117.133121027816,202.350466748909,-2.55019451404429,201.643362538808,60.003,0,97.1731033325195,108.886444091797,11.7133407592773 +"2011-11-29 19:59:59.300",-122.334451309346,134163.96680044,-122.631489029759,134.692619110211,90,0.21362,117.214573993452,202.257983575169,-2.48955292199916,201.633970538429,60.003,0,97.1670379638672,108.87548828125,11.7084503173828 +"2011-11-29 19:59:59.333",-122.292172611987,134166.346140583,-122.554896803268,134.577548251114,0,0,117.29610131753,202.165909540414,-2.36574723738949,201.829301978654,60.003,0,97.1810455322266,108.887107849121,11.7060623168945 +"2011-11-29 19:59:59.366",-122.251981818576,134161.055745173,-122.554896803268,134.577548251114,0,0,117.29610131753,202.165909540414,-2.36574723738949,201.829301978654,60.003,0,97.1683578491211,108.879386901855,11.7110290527344 +"2011-11-29 19:59:59.400",-122.21301174065,134168.457742286,-122.50602254766,134.757652504257,0,0,117.29610131753,202.165909540414,-2.36825312818573,201.615864242842,60.003,0,97.1613616943359,108.897102355957,11.7357406616211 +"2011-11-29 19:59:59.433",-122.172818516129,134163.297378901,-122.50602254766,134.757652504257,0,0,117.403598083376,202.362193301908,-2.36825312818573,201.615864242842,60.003,0,97.1722106933594,108.890762329102,11.7185516357422 +"2011-11-29 19:59:59.466",-122.130542686494,134165.955990417,-122.429360383329,134.642976147957,0,0.21362,117.457268208978,202.460601913804,-2.31004222080242,201.393703423804,60.003,0,97.1649475097656,108.885452270508,11.7205047607422 +"2011-11-29 19:59:59.500",-122.088268555302,134168.687642477,-122.429360383329,134.642976147957,0,0,117.485168813572,202.271069128542,-2.30759519678425,201.607150008498,60.003,0,97.1559066772461,108.893898010254,11.7379913330078 +"2011-11-29 19:59:59.533",-122.048070727599,134163.732206524,-122.429360383329,134.642976147957,180,0.21362,117.485168813572,202.271069128542,-2.30515334874292,201.820596960152,60.003,0,97.1580963134766,108.876174926758,11.7180786132813 +"2011-11-29 19:59:59.566",-122.007869950102,134158.842813602,-122.303946510892,134.70904978024,90,0.21362,117.485168813572,202.271069128542,-2.18395022767631,201.803864181786,60.003,0,97.1691284179688,108.896385192871,11.7272567749023 +"2011-11-29 19:59:59.600",-121.965596205572,134161.786404428,-122.227085151534,134.595010101541,0,0.21362,117.538823349576,202.369747548278,-2.12559088829901,201.582363308613,60.003,0,97.156623840332,108.878456115723,11.7218322753906 +"2011-11-29 19:59:59.633",-121.926642692409,134169.644410373,-122.227085151534,134.595010101541,0,0,117.620451586243,202.279303568667,-2.12559088829901,201.582363308613,60.003,0,97.1657791137695,108.888198852539,11.7224197387695 +"2011-11-29 19:59:59.666",-121.88643938138,134164.954526913,-122.227085151534,134.595010101541,0,0,117.620451586243,202.279303568667,-2.06491306547012,201.574553169,60.003,0,97.1750717163086,108.886108398438,11.7110366821289 +"2011-11-29 19:59:59.700",-121.844170354647,134168.107893413,-122.227085151534,134.595010101541,-90,0.21362,117.648530131629,202.090052366132,-2.06491306547012,201.574553169,60.003,0,97.1716537475586,108.874664306641,11.703010559082 +"2011-11-29 19:59:59.733",-121.803963762201,134163.553527528,-122.101727121841,134.662123895238,0,0,117.702152685486,202.189270525697,-2.00423060851808,201.566969120655,60.003,0,97.1612319946289,108.900421142578,11.7391891479492 +"2011-11-29 19:59:59.766",-121.761696298772,134166.849367023,-122.101727121841,134.662123895238,0,0,117.783926412209,202.099648968572,-1.94148639091438,201.773108429999,60.003,0,97.1667633056641,108.889183044434,11.7224197387695 +"2011-11-29 19:59:59.800",-121.721486591409,134162.430530835,-122.024668222338,134.548722764405,0,0,117.755722591053,202.288665607073,-1.82022783778018,201.759085869654,60.003,0,97.1659469604492,108.889495849609,11.7235488891602 +"2011-11-29 19:59:59.833",-121.681274255034,134158.077775549,-121.976494582206,134.729881666008,-90,0.21362,117.837479773982,202.199313791133,-1.82215678943135,201.545573774657,60.003,0,97.1578903198242,108.878242492676,11.7203521728516 +"2011-11-29 19:59:59.866",-121.639008210778,134161.585543816,-121.899369271094,134.61687660283,0,0,117.972792664952,202.210484927317,-1.82215678943135,201.545573774657,60.003,0,97.1689834594727,108.895782470703,11.7267990112305 +"2011-11-29 19:59:59.900",-121.602123202655,134162.165633444,-121.899369271094,134.61687660283,0,0,118.026223273009,202.310771833712,-1.76145715279017,201.538894339023,60.003,0,97.1633148193359,108.890731811523,11.7274169921875 +"2011-11-29 19:59:59.933",-121.559860577459,134165.810113323,-121.822114504704,134.504115869648,0,0.21362,118.026223273009,202.310771833712,-1.75959237605879,201.752413502785,60.003,0,97.1668395996094,108.893127441406,11.7262878417969 +"2011-11-29 19:59:59.966",-121.519644210047,134161.722991235,-121.822114504704,134.504115869648,0,0,118.026223273009,202.310771833712,-1.7007535607164,201.532441114688,60.003,0,97.163215637207,108.882369995117,11.7191543579102 +"2011-11-29 20:00:00.000",-121.477383752106,134165.509924627,-121.822114504704,134.504115869648,0,0,118.054676622621,202.122227412276,-1.7007535607164,201.532441114688,60.003,0,97.1730041503906,108.886024475098,11.713020324707 +"2011-11-29 20:00:00.033",-121.437164844108,134161.558366696,-121.822114504704,134.504115869648,0,0,118.083183098675,201.933732930525,-1.64004614911509,201.526214123382,60.003,0,97.1589202880859,108.887268066406,11.7283477783203 +"2011-11-29 20:00:00.066",-121.394906728581,134165.487746247,-121.696877869753,134.573309596186,0,0,118.108089851492,202.222783747333,-1.57933505394269,201.520213386077,60.003,0,97.1499252319336,108.881088256836,11.7311630249023 +"2011-11-29 20:00:00.100",-121.354685446673,134161.671760849,-121.649154586672,134.755112726353,-90,0.21362,118.214756876277,202.424422865393,-1.51862041120524,201.514438922985,60.003,0,97.1751480102539,108.885147094727,11.7099990844727 +"2011-11-29 20:00:00.133",-121.317802204656,134162.680433555,-121.571770551777,134.64314560899,0,0,118.29665882075,202.337386330334,-1.45790235695655,201.50889075356,60.003,0,97.1443634033203,108.866333007813,11.7219696044922 +"2011-11-29 20:00:00.166",-121.275548062507,134166.815943599,-121.571770551777,134.64314560899,45,0.302104301194141,118.29665882075,202.337386330334,-1.45790235695655,201.50889075356,60.003,0,97.1742706298828,108.903137207031,11.7288665771484 +"2011-11-29 20:00:00.200",-121.233296548108,134171.024418128,-121.571770551777,134.64314560899,45,0.302104301194141,118.29665882075,202.337386330334,-1.39718102729638,201.503568896492,60.003,0,97.1682891845703,108.876564025879,11.7082748413086 +"2011-11-29 20:00:00.233",-121.193072529319,134167.474102373,-121.494257848747,134.531424507748,0,0.21362,118.349894501397,202.438737467527,-1.39570154839276,201.717125452516,60.003,0,97.163688659668,108.899597167969,11.7359085083008 +"2011-11-29 20:00:00.266",-121.152846401499,134163.989916196,-121.446793541708,134.71362290917,0,0,118.431848411871,202.352383635765,-1.33645655836857,201.498473369714,60.003,0,97.1545944213867,108.876022338867,11.7214279174805 +"2011-11-29 20:00:00.300",-121.112618204142,134160.57186475,-121.369217990962,134.602299330001,0,0,118.431848411871,202.352383635765,-1.27572908635927,201.493604190396,60.003,0,97.1567687988281,108.887855529785,11.731086730957 +"2011-11-29 20:00:00.333",-121.07037004924,134165.061670746,-121.369217990962,134.602299330001,0,0,118.431848411871,202.352383635765,-1.2743781243249,201.707171296508,60.003,0,97.1704940795898,108.884475708008,11.713981628418 +"2011-11-29 20:00:00.366",-121.030140133998,134161.779219684,-121.369217990962,134.602299330001,0,0,118.513872131848,202.266444158993,-1.21371205775381,201.702533396976,60.003,0,97.1675796508789,108.906814575195,11.7392349243164 +"2011-11-29 20:00:00.400",-120.98789518556,134166.411425808,-121.244310337483,134.673814543808,180,0.21362,118.567017212991,202.368507318222,-1.15304326925641,201.698121637478,60.003,0,97.1589508056641,108.89128112793,11.7323303222656 +"2011-11-29 20:00:00.433",-120.947663719226,134163.264579346,-121.244310337483,134.673814543808,0,0,118.595965413931,202.180919565591,-1.03279189260779,201.476391264503,60.003,0,97.1707229614258,108.882598876953,11.7118759155273 +"2011-11-29 20:00:00.466",-120.910784990079,134164.886741996,-121.16654499477,134.563136279617,-90,0.21362,118.649091454136,202.28325146902,-1.03279189260779,201.476391264503,60.003,0,97.164192199707,108.865310668945,11.7011184692383 +"2011-11-29 20:00:00.500",-120.867195223631,134157.169345768,-121.16654499477,134.563136279617,-90,0.21362,118.702163724694,202.385757108494,-1.03279189260779,201.476391264503,60.003,0,97.1677322387695,108.88249206543,11.7147598266602 +"2011-11-29 20:00:00.533",-120.824954664745,134162.082852902,-121.119535864135,134.745969129523,-90,0.21362,118.755182216261,202.488436220162,-0.97205144933527,201.472654053402,60.003,0,97.1568832397461,108.882308959961,11.7254257202148 +"2011-11-29 20:00:00.566",-120.784718281292,134159.203932539,-121.041709925489,134.635689121756,0,0,118.755182216261,202.488436220162,-0.97205144933527,201.472654053402,60.003,0,97.1584167480469,108.890975952148,11.7325592041016 +"2011-11-29 20:00:00.600",-120.742481449712,134164.259807976,-121.041709925489,134.635689121756,0,0,118.78428755523,202.301185246351,-0.910343613915931,201.682736285207,60.003,0,97.159782409668,108.903335571289,11.7435531616211 +"2011-11-29 20:00:00.633",-120.70224401141,134161.516507672,-121.041709925489,134.635689121756,135,0.302104301194141,118.866479909073,202.21702934668,-0.848764271553587,201.89305196978,60.003,0,97.1782150268555,108.886207580566,11.7079925537109 +"2011-11-29 20:00:00.666",-120.662004947391,134158.839377344,-120.917009917877,134.708880402113,0,0,118.866479909073,202.21702934668,-0.849663254506303,201.679455433271,60.003,0,97.1726455688477,108.88062286377,11.7079772949219 diff --git a/PMUSimulator/DataDir/60Hz_measurement_files/Rect Floating Point - 5 phasors, 3 analogs.csv b/PMUSimulator/DataDir/60Hz_measurement_files/Rect Floating Point - 5 phasors, 3 analogs.csv new file mode 100755 index 0000000..a09a173 --- /dev/null +++ b/PMUSimulator/DataDir/60Hz_measurement_files/Rect Floating Point - 5 phasors, 3 analogs.csv @@ -0,0 +1,439 @@ +"2011-11-29 19:40:43.633",-95.0310743232002,134161.730967817,-95.3216458058462,134.394078790761,152.082295719901,0.224515566615434,144.620902608586,202.174150342431,24.7951722724383,201.09485608737,60.0033798217773,-0.00143686775118113,97.1672668457031,108.887168884277,11.7199020385742 +"2011-11-29 19:40:43.666",-94.9904572707172,134162.222746533,-95.2942222018394,134.330284596241,164.916629940283,0.168585744473886,144.670616027105,201.981151164186,24.7884525561667,201.038616504483,60.0033645629883,0,97.1768341064453,108.871559143066,11.6947250366211 +"2011-11-29 19:40:43.700",-94.9484913081514,134161.379156871,-95.2638708705613,134.357145478983,-154.675963052207,0.178969453840998,144.763306427608,202.031457112628,24.7527349644707,200.94895356039,60.0033798217773,0.00091552734375,97.1564178466797,108.878135681152,11.7217178344727 +"2011-11-29 19:40:43.733",-94.9073668559927,134160.635667951,-95.1969162552389,134.419750106433,-61.0468455073268,0.106797205837561,144.767640537246,202.121296097205,24.8216331728244,201.049611556633,60.0034065246582,0.000521326437592506,97.1714477539063,108.876640319824,11.705192565918 +"2011-11-29 19:40:43.766",-94.8670899704525,134162.4825921,-95.1350454316096,134.432779383672,32.5759098009058,0.184333953029801,144.782452445129,202.146825496707,24.9063055162958,201.264532926077,60.0033874511719,-0.000737523660063744,97.1837844848633,108.868919372559,11.6851348876953 +"2011-11-29 19:40:43.800",-94.826637906337,134163.702365177,-95.1076532180205,134.482292595141,80.088461482231,0.105673171286607,144.85160402822,202.23466867411,24.9307552784911,201.317579000701,60.0034027099609,0.000597629696130753,97.1774597167969,108.882843017578,11.7053833007813 +"2011-11-29 19:40:43.833",-94.7850190031084,134162.517929697,-95.0671366540961,134.477395853483,-70.0299529070302,0.0368803866519226,144.882499313102,202.237658082874,24.9790511725274,201.161215112857,60.0034255981445,0.000457763671875,97.1944808959961,108.889358520508,11.6948776245117 +"2011-11-29 19:40:43.866",-94.7450897300249,134161.638699808,-95.0056512574809,134.398094627588,-59.2030769963558,0.121845243826427,144.924095610146,202.182686389489,25.04471747119,200.913014554698,60.0033950805664,-0.00113168265670538,97.1801147460938,108.90209197998,11.7219772338867 +"2011-11-29 19:40:43.900",-94.7058129127841,134162.486906616,-94.9637880661408,134.428632412013,-50.7831576856941,0.112778986952877,144.981191448447,202.205017683012,25.06915879494,201.000120764168,60.003360748291,-0.000928239896893501,97.1677017211914,108.861328125,11.6936264038086 +"2011-11-29 19:40:43.933",-94.6638690922965,134163.782027835,-94.9570474182345,134.499490398722,-28.8493154270065,0.158222297277681,144.963120933155,202.14314450037,25.0819429980463,201.291458322987,60.0033950805664,0.00122069846838713,97.1804656982422,108.876541137695,11.6960754394531 +"2011-11-29 19:40:43.966",-94.6220197945516,134162.9564704,-94.9480596916789,134.460245488877,-68.4183323480074,0.0976639853477601,144.986687662049,202.103883097152,25.1050646650457,201.189658546981,60.0034255981445,0.000699372030794621,97.1762847900391,108.857940673828,11.6816558837891 +"2011-11-29 19:40:44.000",-94.5808373625705,134161.199078223,-94.9241499290373,134.409285150266,-160.809661235492,0.193450207497738,145.053736543942,202.125760072331,25.1484111906267,201.023210242892,60.0034141540527,-0.000635781325399876,97.1669235229492,108.871627807617,11.704704284668 +"2011-11-29 19:40:44.033",-94.5401579804223,134161.3132107,-94.8588079941592,134.414038851786,-154.744296231574,0.2035663683276,145.098886358583,202.095734438724,25.2339007635334,201.044562105137,60.0034294128418,0.000762934796512127,97.1847534179688,108.884483337402,11.6997299194336 +"2011-11-29 19:40:44.066",-94.4989894809675,134161.62425985,-94.7954339944332,134.408726873819,-95.1365979432741,0.206603922549514,145.148623719382,201.964569038931,25.261110344009,201.055222440523,60.0034408569336,0.000508641824126244,97.1720581054688,108.875228881836,11.7031707763672 +"2011-11-29 19:40:44.100",-94.4587847010597,134160.707273445,-94.7442598441896,134.386445831922,-85.7649935386405,0.157510965484768,145.219562101664,201.94004023918,25.28507075013,201.063786531208,60.00341796875,-0.000762948766350746,97.1693267822266,108.879608154297,11.7102813720703 +"2011-11-29 19:40:44.133",-94.4192600375934,134160.120553969,-94.6991286282127,134.416269454222,-129.744963738586,0.184224947098007,145.276796329353,202.035486900985,25.3552110353973,201.062584192394,60.0033874511719,-0.00125882215797901,97.1715621948242,108.87922668457,11.7076644897461 +"2011-11-29 19:40:44.166",-94.3781150606582,134162.347329085,-94.6697117804961,134.439917226856,-137.056942703585,0.168037440724075,145.299400459623,202.136051787005,25.3936239361561,201.059758738138,60.0033836364746,"5.08641824126244E-05",97.1907501220703,108.882484436035,11.6917343139648 +"2011-11-29 19:40:44.200",-94.337040445026,134163.417617171,-94.6458194050476,134.40228217858,-155.813873208808,0.148440449017497,145.323499205501,202.063745035742,25.4220675160319,201.071696865484,60.0033950805664,0.000152592547237873,97.1713409423828,108.863510131836,11.6921691894531 +"2011-11-29 19:40:44.233",-94.2963398144119,134162.710900816,-94.6136849435805,134.454977541023,-149.80590606033,0.145887817863156,145.339572547345,202.025749889579,25.4673359442858,201.256156585962,60.0033836364746,-0.000432338565587997,97.1721038818359,108.878028869629,11.705924987793 +"2011-11-29 19:40:44.266",-94.2548432442981,134160.679829932,-94.5872771098478,134.484188739903,-131.084447116469,0.12002406390454,145.346956080851,202.039824276332,25.4990424518513,201.316615874967,60.0034103393555,0.00123339705169201,97.1785430908203,108.897315979004,11.7187728881836 +"2011-11-29 19:40:44.300",-94.2130117063426,134160.447644123,-94.557702202986,134.406999496908,177.574424036831,0.0578178899911743,145.38286902792,202.026679860059,25.5184274769381,201.192447206745,60.0034370422363,0.00080108642578125,97.1839828491211,108.880935668945,11.6969528198242 +"2011-11-29 19:40:44.333",-94.1728782861622,134162.378687192,-94.5042629946535,134.309775128573,71.529634484935,0.185071156643358,145.425322297764,201.988632841041,25.5537299123019,201.120551114076,60.0034255981445,-0.000635753385722637,97.1754531860352,108.871444702148,11.6959915161133 +"2011-11-29 19:40:44.366",-94.133777282001,134163.030477833,-94.4339384398064,134.358691077431,80.7694417974277,0.193307514733804,145.516298770465,202.07881806907,25.6114414969262,201.189977099591,60.0033988952637,-0.00110625755041838,97.1768341064453,108.877868652344,11.7010345458984 +"2011-11-29 19:40:44.400",-94.0928938136511,134161.37818328,-94.3589631522994,134.425270501989,141.725573747322,0.0807116046028729,145.628229268196,202.113794226942,25.672976015425,201.20707668169,60.0034027099609,0.000623054802417755,97.1763610839844,108.886962890625,11.7106018066406 +"2011-11-29 19:40:44.433",-94.0508085629656,134160.111967316,-94.3385206654808,134.468326933481,-159.620949116855,0.157338378983016,145.634596796706,202.049594777762,25.7291457744972,201.289737895807,60.0034141540527,0.000178031623363495,97.1847610473633,108.880973815918,11.6962127685547 +"2011-11-29 19:40:44.466",-94.0094375344308,134162.058495589,-94.3311992898102,134.444621610027,178.748889136165,0.121638022728872,145.637905142672,202.071266728882,25.7344019735779,201.256205950281,60.0033988952637,-0.00057220458984375,97.1832427978516,108.886177062988,11.7029342651367 +"2011-11-29 19:40:44.500",-93.9688489710612,134164.092241769,-94.2693936128932,134.353538107402,104.303517131175,0.144246754312523,145.710651973988,202.11382814135,25.7637537997236,201.083545743358,60.0034103393555,0.000826511532068253,97.1794128417969,108.872192382813,11.6927795410156 +"2011-11-29 19:40:44.533",-93.9281617815774,134165.550782778,-94.2345136613615,134.322119641582,88.9879878464451,0.243845516163105,145.737825213076,202.079379717069,25.7971812652365,201.130506090004,60.0034217834473,0.000165291130542755,97.1799087524414,108.875831604004,11.6959228515625 +"2011-11-29 19:40:44.566",-93.8877303208897,134165.065932838,-94.1922109384804,134.362395923581,67.2325744020417,0.0251067898487863,145.771076330516,202.024713664535,25.8423937108356,201.086327681144,60.0034065246582,-0.00080108642578125,97.1574859619141,108.876998901367,11.7195129394531 +"2011-11-29 19:40:44.600",-93.8471452128822,134162.47828073,-94.1440394147442,134.479460762775,-116.039184928105,0.315056324024734,145.812958169233,202.110709903113,25.9326781705408,201.035588165711,60.0033836364746,-0.000356035307049751,97.1762466430664,108.864761352539,11.6885147094727 +"2011-11-29 19:40:44.633",-93.8064295825013,134161.378531962,-94.1382311462402,134.540418063077,-154.726849257342,0.365639202296234,145.836386874828,202.253417058708,25.9779934519268,201.188701857816,60.0033836364746,0,97.1653823852539,108.884338378906,11.7189559936523 +"2011-11-29 19:40:44.666",-93.7653691895364,134162.031628747,-94.1187052706334,134.494961813024,164.88451009479,0.346039378033984,145.870176044781,202.255395057214,25.98915443059,201.295854804413,60.0033874511719,0.000279759988188744,97.1782073974609,108.877807617188,11.6996002197266 +"2011-11-29 19:40:44.700",-93.7247840171396,134162.872974943,-94.0234110275017,134.421129391827,135.97803926842,0.19426819700601,145.950251974182,202.196331851371,26.0454380945199,201.192075340884,60.0033874511719,-0.000190730206668377,97.1775588989258,108.871246337891,11.6936874389648 +"2011-11-29 19:40:44.733",-93.684138495425,134162.879988519,-93.9464030123037,134.374084516773,75.6482828204304,0.0650541159720172,146.004055392781,202.16319638399,26.1000693960942,201.023190671023,60.0033912658691,0.000216155312955379,97.176025390625,108.870178222656,11.6941528320313 +"2011-11-29 19:40:44.766",-93.6431148389992,134163.383492391,-93.9541469369287,134.403160633115,-126.059655213813,0.0748018767860808,146.003631044103,202.126550276385,26.0996372873881,201.019695360732,60.0034027099609,0.000356035307049751,97.1793518066406,108.89037322998,11.7110214233398 +"2011-11-29 19:40:44.800",-93.6019639517869,134162.778433517,-93.9093555449715,134.494113933072,-94.3224220075558,0.170449612495142,146.040191097316,202.203137263864,26.1417216628793,201.108901599775,60.0034103393555,0.000165319070219994,97.1462860107422,108.881278991699,11.734992980957 +"2011-11-29 19:40:44.833",-93.5614836224927,134161.57324323,-93.8397278136012,134.497451124105,-39.2709991246148,0.152255906235452,146.059973949444,202.2214332607,26.2257556183188,201.183091643179,60.0033988952637,-0.000432338565587997,97.1767349243164,108.860534667969,11.6837997436523 +"2011-11-29 19:40:44.866",-93.5211936481665,134163.483879781,-93.8062324198685,134.400763113309,9.86415543917293,0.0982742986082439,146.074397777491,202.07328160332,26.2864834636545,201.152919352617,60.0033950805664,"-7.62892886996269E-05",97.1872787475586,108.872047424316,11.6847686767578 +"2011-11-29 19:40:44.900",-93.4809234579765,134165.886162059,-93.7953632116952,134.390245632483,152.528979893894,0.0728746309735915,146.138422145419,202.067836960598,26.2901719676654,201.132493944249,60.0033836364746,-0.000432310625910759,97.1711654663086,108.876129150391,11.704963684082 +"2011-11-29 19:40:44.933",-93.4400687670375,134163.106671404,-93.7768451472028,134.482869832644,-174.316881512688,0.153059217603898,146.186914327661,202.133290203984,26.3025218097064,201.290409751564,60.0033798217773,"2.79396772384644E-08",97.1762847900391,108.872589111328,11.6963043212891 +"2011-11-29 19:40:44.966",-93.3986271896533,134161.362731642,-93.6955252972093,134.474595872795,157.928305248341,0.0696482121379085,146.266901129981,202.087209258349,26.3609911145363,201.358635456827,60.0033798217773,"1.27265229821205E-05",97.1451797485352,108.86572265625,11.7205429077148 +"2011-11-29 19:40:45.000",-93.3571694449046,134161.267742595,-93.6108469301446,134.388825349157,108.534006775428,0.079345772420714,146.347896884478,202.038799159059,26.4390978981123,201.201306829579,60.0034065246582,0.000953665003180504,97.1782989501953,108.885803222656,11.7075042724609 +"2011-11-29 19:40:45.033",-93.3169888520407,134159.913771664,-93.5740785263399,134.388731411732,-131.873368764119,0.0235452392197645,146.370328083481,202.071754150284,26.4859469709546,201.076147898231,60.0034065246582,"-6.35627657175064E-05",97.1798858642578,108.856033325195,11.6761474609375 +"2011-11-29 19:40:45.066",-93.2767565954633,134160.450080553,-93.5787542607399,134.451152247969,-147.67573607966,0.148780809327902,146.379029832679,202.121874902371,26.4979962322404,201.144572226999,60.0034103393555,0.000292444601655006,97.1577758789063,108.879211425781,11.721435546875 +"2011-11-29 19:40:45.100",-93.2351382024273,134162.058389414,-93.5602220675758,134.443119170013,-169.351593893099,0.226717294687116,146.392871606267,202.137712467719,26.5495254945199,201.136406673568,60.0034294128418,0.000330610200762749,97.1667022705078,108.865234375,11.6985321044922 +"2011-11-29 19:40:45.133",-93.1943838822346,134163.286881728,-93.4909754742364,134.408832635524,-116.465800070328,0.136064673203711,146.439572194592,202.018547693383,26.5939330716269,201.083047994418,60.0034103393555,-0.000890102237462997,97.1697692871094,108.884857177734,11.715087890625 +"2011-11-29 19:40:45.166",-93.1542816941546,134163.571887267,-93.4238179623373,134.459954644009,-66.469617987101,0.115714763364952,146.523862372264,202.095556521528,26.613802263061,201.181278090583,60.0033721923828,-0.00109355896711349,97.1782150268555,108.864547729492,11.6863327026367 +"2011-11-29 19:40:45.200",-93.1137655222721,134164.464483283,-93.3953089525046,134.532534334457,-136.359531931062,0.135286324672407,146.591806549609,202.254830838292,26.6438913137609,201.243800698386,60.0033798217773,0.000470490194857121,97.1662216186523,108.875450134277,11.709228515625 +"2011-11-29 19:40:45.233",-93.0725212521204,134163.314043274,-93.4166578555711,134.553310628577,-140.303460070949,0.283966230636533,146.590177225312,202.197754222855,26.6354877947937,201.268188552231,60.0034027099609,0.000737509690225124,97.1663284301758,108.864112854004,11.6977844238281 +"2011-11-29 19:40:45.266",-93.0311643349657,134162.031479972,-93.4025345412772,134.552053005123,-128.841833591464,0.32421497824512,146.601764001024,202.100624716385,26.6466599659446,201.29142838962,60.0033988952637,-0.000356049276888371,97.190559387207,108.871307373047,11.6807479858398 +"2011-11-29 19:40:45.300",-92.9916340625424,134164.781846796,-93.3310863039507,134.512606767117,-146.430109996269,0.235343155652227,146.642638788593,202.110154030481,26.7488664964686,201.286551844068,60.0033798217773,-0.000279732048511505,97.1825408935547,108.869934082031,11.6873931884766 +"2011-11-29 19:40:45.333",-92.9520882555624,134165.560051442,-93.248020708126,134.453653425718,174.194162113378,0.105290297478587,146.690362408384,202.17585579913,26.8438529902609,201.190168844326,60.0033798217773,"8.90158116817474E-05",97.1871185302734,108.866279602051,11.6791610717773 +"2011-11-29 19:40:45.366",-92.9096339798773,134162.394811721,-93.1993327892975,134.381625474802,92.8324497903678,0.149001733690765,146.719387290228,202.171610187156,26.8868311233843,201.121897054214,60.0034103393555,0.000813798978924751,97.1711883544922,108.874565124512,11.7033767700195 +"2011-11-29 19:40:45.400",-92.8676473558242,134159.827651591,-93.20327772294,134.368633101976,102.293160521314,0.209598518671207,146.710338825752,202.169006079052,26.8995004269257,201.139440476982,60.0034217834473,-0.000127153471112251,97.1585083007813,108.881759643555,11.7232513427734 +"2011-11-29 19:40:45.433",-92.8273436368254,134159.748725519,-93.1558664659838,134.396138101713,115.581892536453,0.127267248749613,146.768350433734,202.139027551947,26.9377151620391,201.161440035662,60.0033912658691,-0.000788387842476368,97.148796081543,108.873352050781,11.7245559692383 +"2011-11-29 19:40:45.466",-92.7868928534878,134160.110511494,-93.0576639590034,134.356467328627,138.358070932345,0.028215945380436,146.867420742751,202.117570923342,27.0239677521858,200.969783850335,60.0034027099609,0.000432338565587997,97.1795043945313,108.86882019043,11.6893157958984 +"2011-11-29 19:40:45.500",-92.7459613419152,134160.313074001,-93.0073892247641,134.319539978533,157.980088709024,0.0314285488999192,146.926731493825,202.096327533877,27.067366339634,200.872799132871,60.0034217834473,0.00057220458984375,97.1768341064453,108.86971282959,11.6928787231445 +"2011-11-29 19:40:45.533",-92.7052852843788,134159.705090564,-93.0139471019723,134.393065717561,174.327247976945,0.153004128422788,146.967419010424,202.140758687939,27.0483458789535,201.045651884649,60.0033950805664,-0.000686673447489738,97.1856231689453,108.898574829102,11.7129516601563 +"2011-11-29 19:40:45.566",-92.6650390777162,134160.290901027,-92.9773584850079,134.474765740267,175.905994008935,0.1559366330547,146.995977556642,202.225181519258,27.0938394189181,201.202309603796,60.0033760070801,-0.00057220458984375,97.1657104492188,108.8779296875,11.7122192382813 +"2011-11-29 19:40:45.600",-92.6248766465936,134161.608798821,-92.9129868297548,134.433044156912,158.085260809686,0.0668306940595424,147.007806992199,202.153609021338,27.1846040777778,201.167768643104,60.0033721923828,"7.62892886996269E-05",97.1608734130859,108.880699157715,11.7198257446289 +"2011-11-29 19:40:45.633",-92.5845457812975,134161.301149552,-92.8785621711283,134.337274853244,155.046373611585,0.0827478668127438,147.053002432658,201.98048676674,27.2120365434033,201.062833666206,60.0033683776855,-0.000317883677780628,97.1881713867188,108.873115539551,11.684944152832 +"2011-11-29 19:40:45.666",-92.5434299965929,134160.978338357,-92.8271913394368,134.321617486694,146.816513395837,0.114022352588437,147.114578342928,202.114357899633,27.2594470719787,200.908450453225,60.0033683776855,"-1.39698386192322E-08",97.1709289550781,108.856018066406,11.6850891113281 +"2011-11-29 19:40:45.700",-92.501330547581,134162.109786067,-92.7782329671411,134.380420719332,135.330807143711,0.17158350203804,147.166802334267,202.317353465959,27.3135304789373,200.938842910438,60.0033798217773,0.000813798978924751,97.1631317138672,108.875793457031,11.7126617431641 +"2011-11-29 19:40:45.733",-92.4608633416893,134162.883498049,-92.7591613628711,134.399018324044,134.215172804137,0.137136051088614,147.195556486453,202.153888025929,27.3149102159693,201.136967471936,60.0033950805664,0,97.1553802490234,108.864059448242,11.7086791992188 +"2011-11-29 19:40:45.766",-92.4215401620861,134162.382922313,-92.7277453725527,134.430866539961,14.1653513281858,0.0362668425495694,147.207643861366,202.060953255111,27.327248012136,201.242387861012,60.0033874511719,-0.000406885519623756,97.1701202392578,108.884994506836,11.7148742675781 +"2011-11-29 19:40:45.800",-92.3800445063005,134162.437770808,-92.6690314367624,134.437067890408,22.2213096025085,0.0472850542099801,147.247942150737,202.068055291648,27.4021172015141,201.263365496324,60.00341796875,0.00150045845657587,97.1780624389648,108.880561828613,11.7024993896484 +"2011-11-29 19:40:45.833",-92.3382197333711,134162.015460007,-92.6236113324362,134.42447426834,-21.0438639641826,0.0399931119162701,147.307222940743,202.09054467195,27.4350636987436,201.170451233307,60.0034370422363,"-7.63032585382462E-05",97.1662216186523,108.865074157715,11.6988525390625 +"2011-11-29 19:40:45.866",-92.2978531439538,134161.44196509,-92.5883824699938,134.427662278034,-42.3877762569903,0.115783098836221,147.357373771397,202.159507696576,27.4408094370306,201.049465994357,60.0033874511719,-0.00164032448083162,97.1801223754883,108.880699157715,11.7005767822266 +"2011-11-29 19:40:45.900",-92.2572272129492,134162.052666692,-92.538196720998,134.468624872034,-23.3085759164485,0.0765374345161258,147.409018221631,202.21516274435,27.4944815616454,201.163633598385,60.0033912658691,0.000890102237462997,97.1815948486328,108.875160217285,11.6935653686523 +"2011-11-29 19:40:45.933",-92.2162355559365,134162.635092467,-92.5000784673295,134.451615093452,120.528293106887,0.0398911773906751,147.441580441032,202.066710675957,27.5646647853771,201.321784322095,60.0034141540527,0.000534052960574627,97.1707229614258,108.89404296875,11.7233200073242 +"2011-11-29 19:40:45.966",-92.1752120309436,134164.643676579,-92.4819120259735,134.390531417336,95.0602151758246,0.105207074625319,147.492389597015,202.102021766162,27.5478375246782,201.173888603182,60.0034103393555,-0.000292444601655006,97.1636123657227,108.872611999512,11.7089996337891 +"2011-11-29 19:40:46.000",-92.134102969795,134165.290603118,-92.4477501899707,134.335490988022,94.2589486411102,0.106407356686507,147.55549243084,202.112207839376,27.5525305721933,200.999913875714,60.0034065246582,"-7.63032585382462E-05",97.1756973266602,108.862922668457,11.6872253417969 +"2011-11-29 19:40:46.033",-92.0934376012375,134162.338936002,-92.3941969453148,134.357794487735,-161.900383755847,0.140975966462318,147.607286905539,201.973674863645,27.6419462378528,201.050335062135,60.0034103393555,"-2.79396772384644E-08",97.1825714111328,108.892211914063,11.7096405029297 +"2011-11-29 19:40:46.066",-92.0523529108457,134161.405462732,-92.3531769172598,134.458051587297,-137.018713057571,0.181013395551935,147.603146136396,202.053596023603,27.7269241970141,201.192071153489,60.0034141540527,0.000190716236829758,97.1721343994141,108.896614074707,11.724479675293 +"2011-11-29 19:40:46.100",-92.0104870542504,134162.978336163,-92.3258489056594,134.495870108347,-143.358808171813,0.152130635597796,147.617867031943,202.153326112941,27.764366858978,201.23896514653,60.0034217834473,0.000241608358919621,97.1799392700195,108.872787475586,11.6928482055664 +"2011-11-29 19:40:46.133",-91.9690284580437,134164.123977844,-92.2886033979621,134.484147049617,-136.461224627434,0.14162927952803,147.679817633382,202.165076839709,27.7712358817168,201.18589529999,60.0034332275391,0.000139866024255753,97.1949310302734,108.863906860352,11.6689758300781 +"2011-11-29 19:40:46.166",-91.9286625388425,134162.893257736,-92.206245699797,134.44747126691,-101.262095571335,0.101572352609186,147.760562977075,202.118449742583,27.8316627718308,201.123754453733,60.0034217834473,-0.000279746018350124,97.1660919189453,108.870101928711,11.7040100097656 +"2011-11-29 19:40:46.200",-91.8893845517279,134162.23530149,-92.1639418393212,134.341834931772,175.267836359881,0.0578074409614177,147.825250316398,202.028193307849,27.8633833511162,200.999927587048,60.0034141540527,-0.000470490194857121,97.1824722290039,108.881530761719,11.6990585327148 +"2011-11-29 19:40:46.233",-91.8496210938084,134163.260822302,-92.1472386561604,134.361585427461,-169.896079225109,0.0620846287523393,147.848330039508,202.032949215668,27.8745037475974,201.038630028441,60.0033760070801,-0.0011189840734005,97.2001724243164,108.898338317871,11.6981658935547 +"2011-11-29 19:40:46.266",-91.8090057931572,134163.052909562,-92.0869311882766,134.47557721263,-81.0942248286638,0.0743083192564408,147.894068101069,202.157258830101,27.9281241355501,201.196563286048,60.0033531188965,-0.000305157154798508,97.1736450195313,108.862861633301,11.6892166137695 +"2011-11-29 19:40:46.300",-91.767433113117,134161.780221351,-92.0541712988383,134.46104060498,-77.2296375160192,0.0977581921813881,147.907505009208,202.044130900836,27.9771843528274,201.244583274294,60.0033531188965,"-1.39698386192322E-08",97.1490325927734,108.891441345215,11.7424087524414 +"2011-11-29 19:40:46.333",-91.7264376987325,134161.369295617,-92.0387142825879,134.451071961762,-95.9920508427176,0.155937096421113,147.909571464448,201.99869523505,28.016266305086,201.199108269475,60.0033721923828,0.000457763671875,97.1880569458008,108.877182006836,11.6891250610352 +"2011-11-29 19:40:46.366",-91.6864334777271,134161.751917573,-92.0052187620051,134.535600225674,-104.395550986281,0.197809733775715,147.932626169537,202.150846845097,28.069294178118,201.263061835916,60.0033798217773,"-1.39698386192322E-08",97.1741638183594,108.87671661377,11.7025527954102 +"2011-11-29 19:40:46.400",-91.646678537939,134163.045171359,-91.9707505374799,134.539936293904,-106.42999253219,0.167111921023857,147.956712981153,202.16074906228,28.1139736578683,201.297615312415,60.0033798217773,"-2.54251062870026E-05",97.1701507568359,108.870208740234,11.7000579833984 +"2011-11-29 19:40:46.433",-91.6058654724433,134163.630076029,-91.9203275517432,134.450569798513,-94.6255409298624,0.0767539999937714,147.993990478557,202.118805354337,28.1667939557541,201.156687641813,60.0033874511719,0.000165319070219994,97.1924667358398,108.878913879395,11.6864471435547 +"2011-11-29 19:40:46.466",-91.5641344275106,134162.958221334,-91.8917909919156,134.43637188699,69.6629007390817,0.0464897957089011,148.007438482106,202.116475645132,28.2052293466513,201.237341220525,60.0033874511719,0,97.1664428710938,108.875617980957,11.7091751098633 +"2011-11-29 19:40:46.500",-91.5225100898104,134162.395465352,-91.8552957342808,134.432410553298,139.416765783158,0.0553948924776034,148.069741382241,202.059653373246,28.232259641271,201.272618778757,60.0033988952637,0.000661206431686878,97.1793212890625,108.866470336914,11.6871490478516 +"2011-11-29 19:40:46.533",-91.4819704973431,134162.172418846,-91.7940911202979,134.436674923172,-125.436062907828,0.0792138917925809,148.154220557393,202.0392264775,28.2703088084885,201.20503782844,60.0034141540527,0.000292430631816387,97.177619934082,108.894561767578,11.7169418334961 +"2011-11-29 19:40:46.566",-91.4413508048112,134161.99619499,-91.7395444945823,134.44457332691,-56.97474381383,0.0584643157570072,148.196854118906,202.150375228171,28.314880977239,201.135534245178,60.00341796875,0.000356035307049751,97.1858825683594,108.889045715332,11.7031631469727 +"2011-11-29 19:40:46.600",-91.4000351578337,134162.23831051,-91.6810286210685,134.479552842254,-77.9201603050845,0.072166329324206,148.250949832099,202.392549088709,28.3825786192783,200.976275520701,60.0034332275391,0.000254306942224503,97.1878433227539,108.883041381836,11.695198059082 +"2011-11-29 19:40:46.633",-91.3585946193474,134163.262193605,-91.644506660578,134.524630452402,-86.1526973051771,0.130127503222549,148.280500345874,202.442879837975,28.427473618318,201.001806907848,60.0034332275391,0,97.1767807006836,108.874069213867,11.6972885131836 +"2011-11-29 19:40:46.666",-91.3179227883437,134161.865704056,-91.6464231359148,134.552816950896,-124.366804758814,0.147872880562715,148.280748296554,202.310851884055,28.4495573126091,201.223630882901,60.0034103393555,-0.000826511532068253,97.1685256958008,108.882675170898,11.7141494750977 +"2011-11-29 19:40:46.700",-91.2777846516657,134160.314669011,-91.5994286743579,134.477777949759,172.189570223723,0.0975072338321269,148.351269205968,202.187167283129,28.4776980520578,201.256959309068,60.0034065246582,0,97.1823577880859,108.863777160645,11.6814193725586 +"2011-11-29 19:40:46.733",-91.2369135738982,134161.511839359,-91.5024433016779,134.415687385152,39.7211761050188,0.143301239699778,148.435645418214,202.168317120509,28.5290771400788,201.173320669474,60.0034141540527,0.000267033465206623,97.1770477294922,108.887084960938,11.7100372314453 +"2011-11-29 19:40:46.766",-91.1961173087457,134163.687344447,-91.4851078185334,134.413848396061,27.7277802794282,0.0864526309207602,148.443334714696,202.111916867493,28.5652937019978,201.17206109586,60.0033988952637,-0.0006866455078125,97.17431640625,108.87621307373,11.7018966674805 +"2011-11-29 19:40:46.800",-91.1562202451741,134163.754081074,-91.4765054166574,134.442556992082,168.886969917052,0.130236968893499,148.461748542767,202.124570370942,28.6220763197072,201.225292952044,60.0033721923828,-0.000737523660063744,97.1788787841797,108.876182556152,11.6973037719727 +"2011-11-29 19:40:46.833",-91.1157669749313,134162.672770895,-91.4260713250915,134.463598852224,174.230288913772,0.151813966098477,148.520303007578,202.223976817659,28.6709462055602,201.178674551059,60.0033645629883,0.000356021337211132,97.1840438842773,108.887763977051,11.7037200927734 +"2011-11-29 19:40:46.866",-91.0739516635931,134160.004513931,-91.3894319834593,134.531986841651,-133.888005651876,0.0896587908726522,148.566823849013,202.311292541887,28.6717965501316,201.218724573139,60.0033912658691,0.000839210115373135,97.1651229858398,108.876724243164,11.7116012573242 +"2011-11-29 19:40:46.900",-91.0328661154813,134160.095263904,-91.3383921036136,134.495387110851,46.6447407340996,0.105999647081378,148.59169411798,202.322264969703,28.711696979407,201.242854085704,60.0033988952637,-0.000394186936318874,97.1840286254883,108.878776550293,11.6947479248047 +"2011-11-29 19:40:46.933",-90.992448880681,134161.579165159,-91.296023465091,134.406576071746,83.3933369700304,0.26511035468071,148.613522338158,202.246054876465,28.7878982289287,201.23809555454,60.0033874511719,"-6.35627657175064E-05",97.1611175537109,108.89330291748,11.7321853637695 +"2011-11-29 19:40:46.966",-90.9518772030847,134160.967232577,-91.2289556157224,134.381527953693,107.296864859727,0.184058497430567,148.707020864158,202.133601065471,28.8520259804377,201.1857903968,60.0033950805664,"6.35767355561256E-05",97.1761169433594,108.878829956055,11.7027130126953 +"2011-11-29 19:40:47.000",-90.9118938871737,134160.42887868,-91.1779080165022,134.435375496923,-109.000492502445,0.110045666197041,148.782184269072,202.122704922509,28.8718043125464,201.078802437856,60.0033912658691,-0.000356049276888371,97.1924743652344,108.883895874023,11.6914215087891 +"2011-11-29 19:40:47.033",-90.8706124166142,134161.878620997,-91.150658766171,134.507485686326,-81.2428025795992,0.200937316423496,148.78836513865,202.190241504265,28.9007876021993,201.134458451796,60.0033836364746,0,97.1760406494141,108.872016906738,11.6959762573242 +"2011-11-29 19:40:47.066",-90.8286750732082,134162.953834777,-91.1460408284798,134.51384622945,-115.734587712371,0.147469253350332,148.774334998952,202.285433867824,28.9515251365806,201.122511628524,60.0033950805664,0.000839224085211754,97.1721343994141,108.876968383789,11.704833984375 +"2011-11-29 19:40:47.100",-90.7875977830967,134161.862732972,-91.127978418503,134.391917910391,161.035805254818,0.254800047315537,148.814724787713,202.22488217645,28.9987903300512,201.029495392954,60.0034141540527,0.000419626012444496,97.1819610595703,108.89225769043,11.7102966308594 +"2011-11-29 19:40:47.133",-90.7472688607582,134160.144643699,-91.0815562942425,134.337639032462,153.390554825925,0.271910966930848,148.879115615812,202.070897740708,29.0278902893813,201.059587066321,60.0034065246582,-0.000330624170601368,97.1687469482422,108.876808166504,11.7080612182617 +"2011-11-29 19:40:47.166",-90.7074102344219,134161.194350365,-91.0208978879032,134.423346000174,-168.331518557244,0.0873708409964055,148.94818838258,202.048274483208,29.0344173943103,201.202701421065,60.0034065246582,"-1.27125531435013E-05",97.1712036132813,108.866592407227,11.6953887939453 +"2011-11-29 19:40:47.200",-90.6669931090124,134164.215739759,-90.9586436889009,134.470481733032,-44.4958339555654,0.0683361502923621,148.992172530948,202.108681220957,29.076644503041,201.255823983496,60.0033836364746,-0.000839238055050373,97.165397644043,108.879341125488,11.7139434814453 +"2011-11-29 19:40:47.233",-90.6259154353325,134162.630404999,-90.9210701409629,134.450310133351,-47.3953870205201,0.151229096641085,148.985472008388,201.954729870918,29.1430535422503,201.28694035146,60.0033836364746,"1.39698386192322E-08",97.1723175048828,108.884086608887,11.7117691040039 +"2011-11-29 19:40:47.266",-90.5853054516977,134159.85954676,-90.8850461160156,134.467092004373,-59.989394010673,0.182064411692753,149.029487462733,201.932831291567,29.1740750552572,201.312540737086,60.0033721923828,-0.000381460413336754,97.1721954345703,108.869621276855,11.6974258422852 +"2011-11-29 19:40:47.300",-90.5442152880159,134161.067493115,-90.8470647979172,134.50090463204,-94.5074813065045,0.113113127978605,149.106437293187,202.150390381648,29.2016982999922,201.239558947814,60.0033874511719,0.000864649191498756,97.1631088256836,108.87361907959,11.7105102539063 +"2011-11-29 19:40:47.333",-90.5021875594518,134163.200196859,-90.8242977354729,134.469665363242,146.851967532469,0.166596092053843,149.139740260494,202.161592023524,29.2518719822897,201.336710820309,60.0034141540527,0.000673946924507618,97.1640472412109,108.869468688965,11.7054214477539 +"2011-11-29 19:40:47.366",-90.4611205012562,134162.469925186,-90.760403024165,134.440703119419,144.271490228679,0.116760975543326,149.181236080475,202.052677476218,29.3253943681832,201.336625646194,60.0034255981445,0,97.1699600219727,108.866470336914,11.6965103149414 +"2011-11-29 19:40:47.400",-90.4213517877685,134161.518400713,-90.6935911033533,134.487209841071,-71.0781617416182,0.105348639920649,149.234420014338,202.171152977817,29.3686772742981,201.191496409889,60.0034103393555,-0.000457763671875,97.1664199829102,108.880584716797,11.7141647338867 +"2011-11-29 19:40:47.433",-90.380386960706,134162.659816731,-90.6518250567775,134.460452860423,-15.4208775376811,0.0427906333903123,149.284453489554,202.194899393676,29.400433246867,201.175746639219,60.0034217834473,0.000813812948763371,97.1822357177734,108.875679016113,11.6934432983398 +"2011-11-29 19:40:47.466",-90.3382201477489,134164.259416155,-90.6340979286181,134.375752322627,141.152856084333,0.124417794487365,149.329137150787,202.016004633407,29.430659491412,201.188396495884,60.0034446716309,0.000661220401525497,97.1835784912109,108.855445861816,11.6718673706055 +"2011-11-29 19:40:47.500",-90.2969222697853,134163.645291044,-90.605322885621,134.342061543626,138.206202626127,0.176523524546836,149.378445881001,201.997638407992,29.4488172076584,201.144900834493,60.0034255981445,-0.00108084641396999,97.172737121582,108.881317138672,11.7085800170898 +"2011-11-29 19:40:47.533",-90.2572574125815,134162.024225939,-90.5537716057357,134.422248319471,118.237029303784,0.0948550935535922,149.410210674087,202.137855290031,29.4954200521834,201.212118764895,60.0033912658691,-0.000610342249274254,97.1691970825195,108.865196228027,11.6959991455078 +"2011-11-29 19:40:47.566",-90.2174888923836,134162.185309302,-90.4980060031285,134.503051278083,-133.126035624667,0.0604649101256136,149.464981500712,202.199220408165,29.5508367511043,201.265545886937,60.0033950805664,0.000305199064314365,97.188850402832,108.893852233887,11.7050018310547 +"2011-11-29 19:40:47.600",-90.176908967371,134163.405150936,-90.4542093022114,134.475966233176,79.0325731507784,0.0212438030024965,149.502066565284,202.307983133425,29.5886642610694,201.140881203019,60.0033874511719,-0.000775661319494247,97.1630401611328,108.869750976563,11.7067108154297 +"2011-11-29 19:40:47.633",-90.1368127308824,134162.913731152,-90.4175664111842,134.442687784318,77.0960583590248,0.0653339103119637,149.528972717641,202.166695383392,29.6321240823783,201.225272875106,60.0033531188965,-0.000699358060956001,97.1675720214844,108.881271362305,11.7136993408203 +"2011-11-29 19:40:47.666",-90.0956829119725,134161.608952546,-90.3770937888341,134.496366925824,-154.243779306577,0.0924696490307016,149.571056673694,202.076110948883,29.6985589659916,201.372495769249,60.0033531188965,"1.39698386192322E-08",97.1724243164063,108.88501739502,11.7125930786133 +"2011-11-29 19:40:47.700",-90.0539424883638,134161.684458666,-90.3445039928854,134.543737608455,-107.632901599239,0.0153441530674608,149.590423073211,202.267928074377,29.7221628080062,201.348873205156,60.0033836364746,0.00127157662063837,97.1824493408203,108.865531921387,11.6830825805664 +"2011-11-29 19:40:47.733",-90.0134474212648,134160.83182012,-90.3293172965948,134.468331352663,63.5722600116512,0.106243129193275,149.616000897166,202.225065474057,29.7123175762549,201.275471375133,60.0033912658691,"5.08641824126244E-05",97.1825485229492,108.875938415527,11.6933898925781 +"2011-11-29 19:40:47.766",-89.9724902966876,134160.17171394,-90.3035222573985,134.403741357932,97.404623267171,0.106263900640299,149.672553329438,202.113292278731,29.7245703103459,201.203280237007,60.0034027099609,0.000635781325399876,97.1754837036133,108.879951477051,11.7044677734375 +"2011-11-29 19:40:47.800",-89.9307164458645,134160.363711498,-90.2670424682334,134.380594689235,103.717823570251,0.14424327338574,149.689255754467,202.145315105924,29.7868060804278,201.13656684654,60.0034408569336,0.000966377556324005,97.1874542236328,108.882904052734,11.6954498291016 +"2011-11-29 19:40:47.833",-89.8901894031469,134163.074528069,-90.2212595856401,134.380945843875,111.378231765455,0.16934924741944,149.710859576115,202.153599213366,29.8647171381207,201.147053870698,60.0034294128418,-0.000890102237462997,97.1804733276367,108.864143371582,11.6836700439453 +"2011-11-29 19:40:47.866",-89.8499201067929,134164.679014746,-90.1583766955604,134.409555854515,142.032404332403,0.0938135970355373,149.816980253692,202.136945572556,29.8874986526618,201.149322722457,60.0033912658691,-0.000940952450037003,97.1717681884766,108.871673583984,11.6999053955078 +"2011-11-29 19:40:47.900",-89.809344371037,134164.399031182,-90.0935319593301,134.43496306085,-154.335269505496,0.0858604087632557,149.882188176864,202.166712716727,29.9529086453109,201.100955122948,60.0033950805664,0.000292458571493626,97.1735076904297,108.866889953613,11.6933822631836 +"2011-11-29 19:40:47.933",-89.7689339481215,134163.450389839,-90.0550503400171,134.458008840148,-53.7039948795721,0.0892318932379093,149.849202975104,202.128777916284,30.026088874457,201.173881311155,60.0033798217773,-0.000775661319494247,97.1774520874023,108.875419616699,11.6979675292969 +"2011-11-29 19:40:47.966",-89.7282360054871,134161.915415992,-90.0414592422105,134.438694863841,56.7509000036517,0.0735895411144268,149.89814362656,202.128035387081,30.0077284464153,201.249782378641,60.0033760070801,"2.79396772384644E-08",97.1576232910156,108.868957519531,11.7113342285156 +"2011-11-29 19:40:48.000",-89.687086005966,134161.672667709,-90.0110569407544,134.378222106701,101.691708548021,0.180561703079932,149.964008187956,202.109057206795,30.0244204272045,201.20248264561,60.0033798217773,0.000305171124637127,97.1841583251953,108.865493774414,11.6813354492188 +"2011-11-29 19:40:48.033",-89.6455792114222,134162.160548479,-89.9707356024888,134.406145461347,-176.402184192342,0.10794843181181,149.984561749007,202.016795192778,30.1048307995668,201.195125133237,60.0033988952637,0.000712084583938122,97.1732482910156,108.87873840332,11.7054901123047 +"2011-11-29 19:40:48.066",-89.6050276698188,134160.031465216,-89.9287818292374,134.432965179462,-140.838591673864,0.159346955150717,150.018916637752,202.045879266275,30.1589789713269,201.152883821136,60.0034027099609,-0.000152606517076492,97.1843719482422,108.872177124023,11.6878051757813 +"2011-11-29 19:40:48.100",-89.5650249203594,134159.459846653,-89.8873097492715,134.405594437509,-154.32092825767,0.0660569449214884,150.037451593222,202.207001460056,30.2053755042501,200.98172463412,60.0033988952637,-0.000203456729650497,97.1600952148438,108.875061035156,11.7149658203125 +"2011-11-29 19:40:48.133",-89.5242166896055,134161.609983929,-89.8371375500083,134.422234941616,-72.7868724028673,0.0581539763680774,150.0634690433,202.214675522054,30.2579954311246,200.997033901172,60.0034027099609,0.000241580419242382,97.1582183837891,108.882827758789,11.724609375 +"2011-11-29 19:40:48.166",-89.4831627702491,134160.895773886,-89.7751771602488,134.408062936157,42.5273362286443,0.0964711249710038,150.1262985432,202.007993983829,30.3033929856212,201.281610199845,60.0033988952637,-0.000190744176506996,97.1710891723633,108.86882019043,11.6977310180664 +"2011-11-29 19:40:48.200",-89.4421567220991,134161.155636083,-89.7593907778446,134.380976172675,79.7157725895751,0.184682451395127,150.187455878833,201.983936222424,30.2843324592421,201.340706115884,60.0033988952637,"-6.35767355561256E-05",97.1788024902344,108.884773254395,11.7059707641602 +"2011-11-29 19:40:48.233",-89.4008808399729,134163.397181272,-89.7461851811822,134.326620138152,99.3416186202999,0.168708826369347,150.218548907761,202.038336411757,30.2968349150876,201.108194717705,60.0034141540527,0.000750194303691387,97.1708755493164,108.878120422363,11.7072448730469 +"2011-11-29 19:40:48.266",-89.3601728736049,134164.709094236,-89.6941258732949,134.33069531534,107.935696722147,0.120050561748799,150.257127590082,202.019047438845,30.3652076890469,201.08763620438,60.00341796875,"1.39698386192322E-08",97.1692504882813,108.866813659668,11.6975631713867 +"2011-11-29 19:40:48.300",-89.3199873617149,134164.964774738,-89.6255882415525,134.436265760441,125.691917509769,0.0609761047130533,150.325048350533,202.15948833222,30.434048098801,201.199259188431,60.0034103393555,-0.000534038990736008,97.1772842407227,108.869064331055,11.691780090332 +"2011-11-29 19:40:48.333",-89.278947943143,134164.217771739,-89.5990394100825,134.54308940843,-79.5461085778763,0.0332351539659192,150.327229293158,202.264969873222,30.4733836921633,201.331868548141,60.0034103393555,"3.81376594305038E-05",97.1791915893555,108.871711730957,11.6925201416016 +"2011-11-29 19:40:48.366",-89.2381598260336,134163.094223677,-89.5870309021918,134.527969481078,-114.417127430138,0.135034741592593,150.336817797619,202.097938442043,30.5055313216315,201.363821855626,60.0034027099609,-0.000228867866098881,97.1799926757813,108.884864807129,11.7048721313477 +"2011-11-29 19:40:48.400",-89.1975597000916,134162.173119226,-89.5321595104139,134.474484108038,-107.535010277202,0.0586641911922962,150.429461064911,202.064506646054,30.5115260807525,201.303230571312,60.0033912658691,-0.000279759988188744,97.1784439086914,108.878746032715,11.7003021240234 +"2011-11-29 19:40:48.433",-89.1570040932408,134164.083753461,-89.4518430036726,134.466206306173,36.1044401130139,0.136050916951629,150.504269836072,202.225093493167,30.5607446640405,201.252692024668,60.0033874511719,"1.27125531435013E-05",97.1848754882813,108.88655090332,11.7016754150391 +"2011-11-29 19:40:48.466",-89.1161267305269,134165.104403736,-89.3988450476275,134.445205298682,54.3785622501179,0.172546300211377,150.531830574527,202.307896316516,30.6418310442338,201.167120522908,60.0033950805664,0.000381460413336754,97.1823120117188,108.855911254883,11.6735992431641 +"2011-11-29 19:40:48.500",-89.0750459798551,134163.060021771,-89.3553387683615,134.40627362989,98.4635828943797,0.0490123708726267,150.561602034252,202.211136018548,30.7300986948196,201.056653583837,60.0033950805664,-0.000190730206668377,97.1820831298828,108.88306427002,11.7009811401367 +"2011-11-29 19:40:48.533",-89.0355047301978,134161.680170578,-89.327227984293,134.416630239259,-80.452554750668,0.0646008985227541,150.606960253594,202.079829094449,30.73606289119,201.106483718121,60.0033874511719,-0.0002288818359375,97.1827545166016,108.866439819336,11.6836853027344 +"2011-11-29 19:40:48.566",-88.9952423320522,134162.315960365,-89.3003216993823,134.384348546873,33.2629365377603,0.107388606089072,150.648913215342,202.147695712269,30.7249243363742,201.063220939496,60.0033760070801,"1.27125531435013E-05",97.1560974121094,108.862571716309,11.7064743041992 +"2011-11-29 19:40:48.600",-88.9540887002249,134164.056266621,-89.2556995551378,134.376847116318,89.7868312623194,0.245099616642461,150.688267982401,202.282360256268,30.7994948673717,201.093432034511,60.0033912658691,0.000597629696130753,97.1776580810547,108.881332397461,11.7036743164063 +"2011-11-29 19:40:48.633",-88.9131073750077,134165.092417313,-89.1993038910462,134.500361775061,94.334341140144,0.113630647532288,150.713570724357,202.348754052898,30.8902841912755,201.26622710217,60.0033950805664,-0.000216155312955379,97.1610794067383,108.883140563965,11.7220611572266 +"2011-11-29 19:40:48.666",-88.8723984437127,134163.949871323,-89.1417990470782,134.495586258779,-28.7466198509956,0.0499872482332828,150.783566389764,202.287926194643,30.9208724030207,201.174427097707,60.0033874511719,"-8.90158116817474E-05",97.1419143676758,108.879028320313,11.7371139526367 +"2011-11-29 19:40:48.700",-88.8309533372353,134161.441132877,-89.0945801385097,134.401546708661,-29.5364739561483,0.0261660094234826,150.857825543444,202.171590639568,30.9468569414829,201.019900969328,60.0034141540527,0.000457749702036381,97.1645355224609,108.875686645508,11.7111511230469 +"2011-11-29 19:40:48.733",-88.7899247817325,134160.075908046,-89.0847390681537,134.381143657741,-89.673596424608,0.0755313299723084,150.853484691626,202.057153150996,30.9775796400082,201.01100729086,60.0034217834473,0,97.169189453125,108.903800964355,11.7346115112305 +"2011-11-29 19:40:48.766",-88.7502601344397,134160.600803515,-89.0653967522204,134.400463738971,-106.183805547806,0.126345844831568,150.857669927845,202.109160916772,31.0225766135489,200.971896303337,60.0034065246582,-0.000483188778162003,97.1847839355469,108.882919311523,11.6981353759766 +"2011-11-29 19:40:48.800",-88.7095947397928,134163.055735981,-89.0220055194426,134.397248696356,178.137903774383,0.0929646192650591,150.909745887967,202.153725203496,31.0730820935861,201.043065454764,60.0033988952637,"2.54251062870026E-05",97.1852493286133,108.890625,11.7053756713867 +"2011-11-29 19:40:48.833",-88.6684077355292,134162.12140096,-88.9864902749656,134.417696823506,125.828883709799,0.08229531348924,150.928132380396,202.077180695244,31.1126166708511,201.244013397877,60.0034103393555,0.000508641824126244,97.1755218505859,108.865417480469,11.6898956298828 +"2011-11-29 19:40:48.866",-88.626336921059,134161.634192107,-88.9418518018832,134.486129963282,159.078980913973,0.0571160450264924,150.948789312938,202.092169629726,31.1829599750712,201.388452757777,60.0034141540527,0,97.1672973632813,108.876861572266,11.7095642089844 +"2011-11-29 19:40:48.900",-88.5847073031428,134164.085280935,-88.9139126182038,134.458161927555,179.664972211129,0.103053498715579,151.00173135741,202.058190575565,31.200073540908,201.31944522532,60.0034255981445,0.000457763671875,97.1693267822266,108.879806518555,11.7104797363281 +"2011-11-29 19:40:48.933",-88.5440136707844,134164.269572698,-88.8656270490154,134.42754508954,-145.218152597691,0.107704103297596,151.086958567507,202.023829144083,31.2075158340606,201.199341651861,60.0034294128418,"-1.39698386192322E-08",97.1789932250977,108.873413085938,11.6944198608398 +"2011-11-29 19:40:48.966",-88.5031313219841,134163.860992216,-88.7913706374861,134.517964937783,-104.208371061959,0.157438832418872,151.1724532361,202.233501880459,31.2569160197251,201.168725559627,60.0034332275391,"-2.54251062870026E-05",97.1872711181641,108.858375549316,11.6711044311523 +"2011-11-29 19:40:49.000",-88.4631308959639,134163.74663308,-88.7251029097744,134.52722876884,-62.8882820200784,0.11298640559424,151.233936922665,202.324819472698,31.302068925905,201.155215369385,60.00341796875,-0.000559478066861629,97.1639862060547,108.864051818848,11.700065612793 +"2011-11-29 19:40:49.033",-88.4234359242271,134161.630324045,-88.6738367546271,134.47863243255,-136.124129244511,0.0377844841373671,151.284592699084,202.241220920425,31.3758829686933,201.169247404517,60.0033798217773,-0.00113168265670538,97.1842193603516,108.882019042969,11.6977996826172 +"2011-11-29 19:40:49.066",-88.3827945487569,134160.907007123,-88.684340847119,134.460557504956,-161.004882983,0.243421135399351,151.299271373914,202.163476910619,31.3981918891239,201.144479742751,60.0033721923828,0,97.1724700927734,108.872718811035,11.7002487182617 +"2011-11-29 19:40:49.100",-88.341877262334,134161.473494053,-88.6590462509812,134.466818090083,-145.09964535138,0.220043622213906,151.328999029382,202.062753509678,31.4051705557214,201.21618007763,60.0033760070801,0.000165291130542755,97.1795806884766,108.882446289063,11.7028656005859 +"2011-11-29 19:40:49.133",-88.3011106327013,134163.160931455,-88.5895747547297,134.464841908459,-80.2411579269813,0.136773932206128,151.368075290851,202.043171561548,31.4472932908112,201.216087925166,60.0033760070801,-0.00021614134311676,97.1714096069336,108.857299804688,11.6858901977539 +"2011-11-29 19:40:49.166",-88.2598894007551,134163.338579468,-88.5266366164133,134.463828112271,-28.6789838966108,0.120466667235948,151.425761632119,202.257072321931,31.4915619351976,201.074005511294,60.0033950805664,0.000902814790606499,97.1818084716797,108.883041381836,11.7012329101563 +"2011-11-29 19:40:49.200",-88.2181477563283,134161.950900331,-88.5334982341925,134.488264342524,-9.06171210547912,0.00475549110946129,151.425399616981,202.36193247833,31.5065270090479,201.102073897862,60.00341796875,0.000712098553776741,97.178581237793,108.86279296875,11.684211730957 +"2011-11-29 19:40:49.233",-88.1785327738161,134159.647370762,-88.5284398529178,134.484874990317,-151.522437981969,0.055229081760316,151.415814666862,202.203340369939,31.5415866158453,201.226409485982,60.0034141540527,-0.000241608358919621,97.1784210205078,108.869682312012,11.6912612915039 +"2011-11-29 19:40:49.266",-88.1385751502964,134158.40320942,-88.4632472481447,134.490434829733,-137.808459901245,0.116430331477123,151.47367928243,202.210439541761,31.6253034674478,201.185387903657,60.0033950805664,-0.000317883677780628,97.1730499267578,108.880966186523,11.7079162597656 +"2011-11-29 19:40:49.300",-88.0965929914879,134160.023779023,-88.3836654708284,134.525434329253,-151.908380333775,0.0814776685155317,151.550041694624,202.362147350002,31.7037866090934,201.178173981077,60.0034217834473,0.000928239896893501,97.1698913574219,108.873626708984,11.7037353515625 +"2011-11-29 19:40:49.333",-88.0551554018481,134162.579924578,-88.3681894506272,134.506207949437,173.342096959505,0.145953625452681,151.595909429874,202.240595765664,31.7089884442035,201.29928066802,60.0034255981445,-0.000457763671875,97.1864624023438,108.866088867188,11.6796264648438 +"2011-11-29 19:40:49.366",-88.0145295905717,134163.23306509,-88.3396340847343,134.443211523575,175.269964241577,0.076486321889598,151.639841166119,202.110064473767,31.7026226324063,201.22812705676,60.0033988952637,-0.000635753385722637,97.1726531982422,108.876930236816,11.7042770385742 +"2011-11-29 19:40:49.400",-87.9728615286007,134162.820538445,-88.2679937103278,134.422711022329,-44.904221997551,0.138320918596107,151.657787638593,202.099399296034,31.7795426466829,201.06841047478,60.0034332275391,0.00106810592114925,97.1750183105469,108.890998840332,11.7159805297852 +"2011-11-29 19:40:49.433",-87.9317577210901,134162.009078049,-88.2516898585778,134.440314487156,-90.8101666553087,0.17360789632907,151.675993369164,202.020939249393,31.8231571322635,201.12688164805,60.0034484863281,0,97.1831283569336,108.896179199219,11.7130508422852 +"2011-11-29 19:40:49.466",-87.8928142147597,134160.642612785,-88.2065817075426,134.455250328657,-128.783722864074,0.102064060994251,151.754536570364,202.086099098682,31.8513791052183,201.202255347758,60.00341796875,-0.00106811989098787,97.1766052246094,108.890960693359,11.71435546875 +"2011-11-29 19:40:49.500",-87.8536271459267,134161.392109828,-88.1416042907173,134.475500314961,62.4649401547352,0.0148386059675978,151.822779215623,202.303863128578,31.8921454113245,201.135613263678,60.0033645629883,-0.00122069846838713,97.1872100830078,108.888168334961,11.7009582519531 +"2011-11-29 19:40:49.533",-87.8119096920252,134164.635391602,-88.1160304029888,134.458209534216,1.02852170342075,0.0907301829161989,151.818820257878,202.243701210691,31.9236362277149,201.129722101082,60.0033836364746,0.000712070614099503,97.1741409301758,108.878059387207,11.7039184570313 +"2011-11-29 19:40:49.566",-87.7696451755248,134165.247783186,-88.0550769470089,134.409737576737,13.1718317957163,0.144495349552961,151.836416506118,202.111956077605,32.0135798683076,201.1458732655,60.0033912658691,"3.81516292691231E-05",97.1694488525391,108.882652282715,11.7132034301758 +"2011-11-29 19:40:49.600",-87.7293841369895,134164.386673865,-88.0043933788995,134.437340672057,86.8018820025162,0.0197420060075476,151.876817928608,202.177935584401,32.1144925965935,201.154563273435,60.0033645629883,-0.000712070614099503,97.1769790649414,108.867782592773,11.690803527832 +"2011-11-29 19:40:49.633",-87.68927553851,134162.826750304,-87.9798827885445,134.448212518616,-112.688441379172,0.0768220016356268,151.919233137602,202.170735394586,32.1306845116637,201.104795522925,60.0033836364746,0.000699372030794621,97.1867065429688,108.877891540527,11.6911849975586 +"2011-11-29 19:40:49.666",-87.6477325939637,134160.782327859,-87.9311315996279,134.391114536669,-28.4995287775338,0.111578132885404,151.981252813313,202.114403262127,32.1295827206557,201.002545169479,60.0034332275391,0.00175476539880037,97.184211730957,108.878692626953,11.6944808959961 +"2011-11-29 19:40:49.700",-87.6063239871711,134157.856847879,-87.8861624806042,134.397730079946,-30.5035550691832,0.101553115308923,152.021612618266,202.096154299892,32.1821669772557,201.042720778673,60.0034332275391,-0.000762934796512127,97.1795043945313,108.87279510498,11.6932907104492 +"2011-11-29 19:40:49.733",-87.5662553903925,134157.260659128,-87.8731121521442,134.506145627425,-92.423399563679,0.196046792929313,152.058363180183,202.144290972722,32.2001736015569,201.179044364398,60.0033836364746,-0.00158944632858038,97.1935806274414,108.860412597656,11.6668319702148 +"2011-11-29 19:40:49.766",-87.5260813498242,134159.336884481,-87.8581232439171,134.545294763304,-109.88968303709,0.171568943053474,152.094578126708,202.257606883691,32.2077474720345,201.219418839513,60.0033798217773,0.000394172966480255,97.1724472045898,108.880561828613,11.7081146240234 +"2011-11-29 19:40:49.800",-87.4854551344518,134161.040846747,-87.7821377300487,134.483309774011,80.0181570925991,0.0444821674920484,152.170634945885,202.288982578933,32.2626645717893,201.2045849283,60.0033912658691,0.000228895805776119,97.1777725219727,108.882293701172,11.7045211791992 +"2011-11-29 19:40:49.833",-87.4445984504862,134160.959586576,-87.7283053065512,134.404242914234,110.848790440017,0.178080305944098,152.222584040029,202.160763706755,32.3371892810752,201.220979123935,60.0033836364746,"-8.90158116817474E-05",97.1819534301758,108.863998413086,11.6820449829102 +"2011-11-29 19:40:49.866",-87.4031774902057,134161.851079151,-87.6821483648957,134.416309125579,137.242400986101,0.201103565374664,152.263513009003,202.14509808952,32.4128650046518,201.246579754409,60.0033836364746,"1.39698386192322E-08",97.1865158081055,108.874740600586,11.6882247924805 +"2011-11-29 19:40:49.900",-87.3614944420007,134164.65545305,-87.6229714784312,134.519068736125,-150.788257791948,0.0769452821253128,152.291507090475,202.324792054726,32.4825819045858,201.19821587096,60.0034141540527,0.00100454315543175,97.1712036132813,108.890640258789,11.7194366455078 +"2011-11-29 19:40:49.933",-87.3205409024461,134164.963975153,-87.5916236309987,134.517256942615,-71.7320639962378,0.0926571416408092,152.28833804575,202.303109908596,32.521885462067,201.160343792338,60.0034255981445,"-2.79396772384644E-08",97.1850662231445,108.872848510742,11.6877822875977 +"2011-11-29 19:40:49.966",-87.2809777925827,134162.433300169,-87.5674789420141,134.433485351134,4.21330356963284,0.0193632311369967,152.334849658901,202.242155338391,32.5252527194163,201.059461607016,60.0034217834473,-0.000101742334663868,97.1673965454102,108.882606506348,11.7152099609375 +"2011-11-29 19:40:50.000",-87.2407245008632,134162.077916177,-87.492900175402,134.427974421406,-8.78295773296357,0.11697121794669,152.426346464003,202.255403479894,32.5556571139605,201.005895604375,60.0034065246582,-0.000152578577399254,97.1622924804688,108.875030517578,11.7127380371094 +"2011-11-29 19:40:50.033",-87.1994985921127,134163.370622636,-87.4649356587079,134.461196904712,-43.9911106580988,0.117621396935402,152.45646354857,202.241506921938,32.5910663448858,201.056985302819,60.0034027099609,-0.000267033465206623,97.1853790283203,108.874771118164,11.6893920898438 +"2011-11-29 19:40:50.066",-87.1586375252332,134163.783111994,-87.4519776506819,134.452282666699,154.017217316463,0.0790706676618609,152.474677513908,202.271673699975,32.6415745736675,201.123359632513,60.0033912658691,-0.000445037148892879,97.1695938110352,108.863121032715,11.6935272216797 +"2011-11-29 19:40:50.100",-87.1180562067078,134163.02624116,-87.3879127790871,134.496984134857,131.097625385266,0.0980193300204524,152.516212224954,202.368597499903,32.725889493025,201.199795483124,60.0033798217773,"-2.54390761256218E-05",97.1662445068359,108.870979309082,11.7047348022461 +"2011-11-29 19:40:50.133",-87.0774764816849,134161.663682136,-87.3652577474605,134.496732470876,-139.929656393639,0.0528117423330382,152.545890412049,202.273253379452,32.7360163598626,201.185376423971,60.0033912658691,0.000101714394986629,97.1632232666016,108.875648498535,11.7124252319336 +"2011-11-29 19:40:50.166",-87.0369608497658,134160.923809732,-87.3419133635401,134.452324617419,-118.618906168849,0.175232959260744,152.59860025826,202.176533699293,32.7438408176962,201.031006367968,60.0033912658691,-0.000152592547237873,97.1735916137695,108.89697265625,11.7233810424805 +"2011-11-29 19:40:50.200",-86.9959731602947,134162.202199092,-87.2779326128958,134.400581720288,-120.458448698773,0.161059328339368,152.663157622938,202.133071756974,32.8064641353118,200.934157510861,60.0033874511719,"1.39698386192322E-08",97.1769561767578,108.861366271973,11.6844100952148 +"2011-11-29 19:40:50.233",-86.954933967293,134163.618348976,-87.2556120165411,134.426683222458,-145.153776524322,0.15187650461739,152.668787925613,202.150183867198,32.8570663732667,201.049711937995,60.0033912658691,0.000216183252632618,97.1793670654297,108.877258300781,11.6978912353516 +"2011-11-29 19:40:50.266",-86.9138615589252,134163.386388026,-87.2301243093834,134.423956538153,179.915646010055,0.112725223579219,152.686314345861,202.119321448349,32.8859034899602,201.158813355666,60.0034065246582,0.000406913459300995,97.1873245239258,108.885055541992,11.6977310180664 +"2011-11-29 19:40:50.300",-86.8729571938972,134161.91869664,-87.1650004640193,134.420283360416,127.479786046988,0.118056074350971,152.739260195839,202.180178600364,32.9503307426987,201.178451183664,60.0034141540527,0.000254306942224503,97.1795349121094,108.875518798828,11.6959838867188 +"2011-11-29 19:40:50.333",-86.8316326706967,134161.309227331,-87.1300252175233,134.426266379693,136.71870000191,0.0987996080830243,152.783944765677,202.127405364193,32.9758780499685,201.223225582786,60.00341796875,0.000152578577399254,97.1714324951172,108.873573303223,11.7021408081055 +"2011-11-29 19:40:50.366",-86.7903966627288,134162.90186817,-87.0924901095334,134.433521479636,2.48855806109893,0.0182735103664011,152.839844369911,202.054380193253,32.970244735815,201.246294066831,60.0034255981445,0.00011444091796875,97.1602172851563,108.874153137207,11.7139358520508 +"2011-11-29 19:40:50.400",-86.7503376746497,134164.251115467,-87.0441447327906,134.491600626172,-127.598989306893,0.0343425816784331,152.877816980973,202.191729927684,33.04061187881,201.257383368176,60.0034217834473,-0.000203456729650497,97.1713409423828,108.86759185791,11.6962509155273 +"2011-11-29 19:40:50.433",-86.7104593447552,134164.780946981,-87.0120439289827,134.512029814347,-149.973468751136,0.173168192057891,152.908389634134,202.244112583892,33.1118484664929,201.213912142067,60.0033988952637,-0.000826525501906872,97.1890106201172,108.864654541016,11.6756439208984 +"2011-11-29 19:40:50.466",-86.6695805596364,134164.213053972,-86.946154953447,134.46082870146,-135.520373919598,0.11566339337367,152.984744296654,202.191674766949,33.1480236740261,201.114685863154,60.0033988952637,0.000279732048511505,97.1832427978516,108.893127441406,11.7098846435547 +"2011-11-29 19:40:50.500",-86.6272872732022,134162.891181005,-86.8782688774085,134.420721027885,27.2487457824344,0.070318216156367,153.036059341907,202.191847895482,33.1895846652004,201.099400858478,60.0033988952637,"1.39698386192322E-08",97.1635437011719,108.878570556641,11.7150268554688 +"2011-11-29 19:40:50.533",-86.5860307290984,134162.107914944,-86.8437149911418,134.391454824557,32.7686309875714,0.15923874131467,153.058854450102,202.106531663009,33.2147486486841,201.146887039716,60.0033988952637,-0.000457791611552238,97.1670761108398,108.872856140137,11.7057800292969 +"2011-11-29 19:40:50.566",-86.5463990335378,134163.355960723,-86.8181281193342,134.415775731902,12.6468909389453,0.224988148348958,153.080637021618,202.129264206953,33.2203844856708,201.155429441579,60.0033874511719,"1.39698386192322E-08",97.1791152954102,108.887870788574,11.7087554931641 +"2011-11-29 19:40:50.600",-86.5060235067636,134163.898010799,-86.8143424564795,134.482503684876,5.08041646518246,0.0938054964198629,153.112140695758,202.23149021254,33.232846593368,201.219353599677,60.0034027099609,0.000483202748000622,97.1811370849609,108.877334594727,11.6961975097656 +"2011-11-29 19:40:50.633",-86.4656006521969,134161.226075851,-86.7754841770832,134.451772550141,-126.072234572095,0.07052701057887,153.181233675163,202.08218577036,33.2807023673996,201.218700485688,60.0033912658691,-0.000788359902799129,97.1940841674805,108.858825683594,11.6647415161133 +"2011-11-29 19:40:50.666",-86.4251420508492,134160.802027758,-86.6915778238043,134.432151487381,-106.603917144551,0.086056692899083,153.249709820702,202.135180247066,33.3757924145282,201.080576442656,60.0033683776855,-0.000114426948130131,97.1656875610352,108.865814208984,11.7001266479492 +"2011-11-29 19:40:50.700",-86.3846059775217,134161.082549632,-86.6765861891745,134.461013751635,179.387237459464,0.0915179361344831,153.249222733286,202.331340936105,33.4240950808149,201.058447662615,60.0033645629883,"-2.79396772384644E-08",97.1639938354492,108.869972229004,11.7059783935547 +"2011-11-29 19:40:50.733",-86.3436789054409,134161.567038601,-86.6723417571081,134.415051056388,173.02141321766,0.133297130247005,153.268948978606,202.185708393867,33.4240591015055,201.083667167315,60.0033760070801,0.000241608358919621,97.1851196289063,108.857688903809,11.6725692749023 +"2011-11-29 19:40:50.766",-86.3019516591877,134162.977024353,-86.6067833358857,134.367861752497,141.112759537772,0.0493500536189487,153.356473565223,202.094806211213,33.4405579940888,201.042080538256,60.0033874511719,0.000470462255179882,97.1928024291992,108.873802185059,11.6809997558594 +"2011-11-29 19:40:50.800",-86.2605647737193,134162.934328594,-86.5301240103262,134.435295265103,-14.5955454350037,0.0445949456926267,153.413676112932,202.175057518844,33.5142916481771,201.117149060737,60.0034103393555,0.000495901331305504,97.1897888183594,108.866767883301,11.6769790649414 +"2011-11-29 19:40:50.833",-86.2202634530578,134161.869793114,-86.5254900827515,134.512496427777,-101.574853064974,0.159988885040719,153.404022998602,202.218405046887,33.5571975739944,201.164954787255,60.0034103393555,0,97.193733215332,108.875923156738,11.6821899414063 +"2011-11-29 19:40:50.866",-86.1798565584643,134161.984231637,-86.490928151583,134.394093175674,-154.584434991936,0.189258111550158,153.435585253753,202.116787638583,33.6330237712789,200.995524430194,60.0034103393555,0,97.1854934692383,108.87328338623,11.6877899169922 +"2011-11-29 19:40:50.900",-86.1388470960548,134162.197988759,-86.4098042626848,134.372934897386,-165.873717000992,0.205252567004418,153.518840627054,202.054019265536,33.7194291395653,201.027885462971,60.0034141540527,-0.00011444091796875,97.1873397827148,108.873992919922,11.686653137207 +"2011-11-29 19:40:50.933",-86.0984803292875,134161.391195532,-86.3766436658408,134.520517318114,-123.232317869467,0.154824047592715,153.543590281018,202.143167281001,33.729889956167,201.295012048222,60.0033874511719,-0.000699344091117382,97.1750259399414,108.877281188965,11.7022552490234 +"2011-11-29 19:40:50.966",-86.0586736254954,134159.824445392,-86.3712917963721,134.536832375126,-137.611929843912,0.148733323268704,153.571278977355,202.245322624989,33.7194314167805,201.272411998644,60.0033645629883,-0.000737495720386505,97.1949462890625,108.864654541016,11.6697082519531 +"2011-11-29 19:40:51.000",-86.0172949630908,134159.674919565,-86.343144897772,134.456441016952,-170.985866604656,0.171362783344286,153.629030075331,202.209009756525,33.7334265223431,201.144487836565,60.0033798217773,0.000661220401525497,97.1721801757813,108.879653930664,11.7074737548828 +"2011-11-29 19:40:51.033",-85.9745324042215,134162.031930042,-86.2887196585567,134.421957536059,161.844363041506,0.197616443080913,153.655931196958,202.133522066865,33.8191091637274,201.206393800177,60.0034103393555,0.00105539336800575,97.1907577514648,108.866363525391,11.6756057739258 +"2011-11-29 19:40:51.066",-85.9333498519731,134164.138178427,-86.2243820460755,134.491961946283,-171.279079264106,0.0362658040379948,153.685896089369,202.111141379077,33.8759536499615,201.362165505134,60.0034141540527,-0.000381474383175373,97.1712646484375,108.88729095459,11.7160263061523 +"2011-11-29 19:40:51.100",-85.8939121816086,134163.65513348,-86.1762749230204,134.495562182497,-38.2767118253382,0.0365899025833053,153.731498547559,202.142713627543,33.9086012229495,201.319898607788,60.0033988952637,-0.000381474383175373,97.1997451782227,108.861915588379,11.6621704101563 +"2011-11-29 19:40:51.133",-85.8540923480013,134162.799159039,-86.1320271039821,134.444765365229,-112.048500739504,0.0974339662257667,153.808336417985,202.106694408812,33.9400267408893,201.140216351331,60.0033988952637,"3.81376594305038E-05",97.1694564819336,108.860946655273,11.6914901733398 +"2011-11-29 19:40:51.166",-85.8134906391051,134161.812901094,-86.0899578533104,134.479526174247,-112.87312318704,0.101877906310221,153.874971909495,202.193487235483,33.9583675627708,201.154261789673,60.0033760070801,-0.000826525501906872,97.1832504272461,108.864212036133,11.6809616088867 +"2011-11-29 19:40:51.200",-85.7720060812815,134160.169335257,-86.0583252140013,134.557104328929,-139.7524475733,0.0473462262968487,153.909318160804,202.324284299301,33.9850512567901,201.319083688367,60.0033721923828,0,97.1842193603516,108.875350952148,11.6911315917969 +"2011-11-29 19:40:51.233",-85.7306235584995,134159.925582178,-86.0326445633677,134.574993589052,-66.4220549740864,0.1048314579439,153.893531163284,202.212699031255,34.0314628279851,201.413861581252,60.0033798217773,0.000470462255179882,97.1766815185547,108.867340087891,11.6906585693359 +"2011-11-29 19:40:51.266",-85.6901039558466,134162.890055473,-85.9915224158048,134.531892246372,-50.8475724540774,0.175939405290141,153.904888348664,202.044105206568,34.0835841611503,201.408180629181,60.0033988952637,0.000254306942224503,97.1735305786133,108.872192382813,11.6986618041992 +"2011-11-29 19:40:51.300",-85.6496224833604,134163.12586866,-85.9186901535091,134.511493702588,-51.2426016269982,0.142160491482458,153.983825159642,202.076350917247,34.1561335680982,201.341689201663,60.0034027099609,0.000317897647619247,97.1851577758789,108.870735168457,11.6855773925781 +"2011-11-29 19:40:51.333",-85.6086663858679,134160.787271359,-85.8680336275589,134.543041479018,-99.0883754491333,0.150818112768679,154.049013363427,202.125847234791,34.2250501747848,201.3569120441,60.0034141540527,"7.62892886996269E-05",97.1737976074219,108.875312805176,11.7015151977539 +"2011-11-29 19:40:51.366",-85.5676031969555,134161.200627734,-85.8504377522424,134.547654525483,-143.798421034858,0.195047476072391,154.079775766905,202.132980117044,34.2666285665521,201.407076421975,60.0034103393555,"-8.90018418431282E-05",97.1879425048828,108.880798339844,11.6928558349609 +"2011-11-29 19:40:51.400",-85.526359753954,134162.264512966,-85.8265136670067,134.487576816321,149.668870062565,0.117925459111617,154.089813096378,202.145020745585,34.2851234895173,201.385073207372,60.0034103393555,0,97.1618499755859,108.858840942383,11.6969909667969 +"2011-11-29 19:40:51.433",-85.4850931990703,134163.151534788,-85.7773827572047,134.423334771657,34.2136402722628,0.127192791901931,154.127466900266,202.014410574946,34.2867443831429,201.319591740574,60.00341796875,0.000317883677780628,97.18212890625,108.871810913086,11.6896820068359 +"2011-11-29 19:40:51.466",-85.4451249599077,134161.389456975,-85.7115722643774,134.480269967141,-30.7538304934622,0.211943477942657,154.207160616415,202.084756820758,34.3206321003183,201.23458345506,60.00341796875,0,97.1714553833008,108.871475219727,11.7000198364258 +"2011-11-29 19:40:51.500",-85.4052632998232,134158.841620693,-85.6859659678414,134.52843208387,-91.8889596039533,0.101469828046517,154.232681809419,202.228985961473,34.398900532764,201.255826535336,60.0033988952637,-0.000699330121278763,97.1783676147461,108.862144470215,11.6837768554688 +"2011-11-29 19:40:51.533",-85.364486160825,134158.397703508,-85.6680565407759,134.452313312568,119.762198381557,0.157922211139393,154.238667660536,202.180447750934,34.4449175957583,201.319756176003,60.0033912658691,-0.000127139501273632,97.1860580444336,108.867576599121,11.6815185546875 +"2011-11-29 19:40:51.566",-85.3243022886552,134160.134228556,-85.6346162039746,134.422716235095,119.268805883159,0.148162438817786,154.266712679568,202.17864586396,34.4822886251807,201.224585241213,60.0033645629883,-0.000953678973019123,97.1755523681641,108.883895874023,11.7083435058594 +"2011-11-29 19:40:51.600",-85.2839567092187,134163.065649545,-85.5675382492916,134.473910841332,-147.641563633961,0.0716371981568353,154.336324107505,202.173352598861,34.5470815767139,201.215488932907,60.0033531188965,"-7.62753188610077E-05",97.1586456298828,108.883628845215,11.724983215332 +"2011-11-29 19:40:51.633",-85.2427329367675,134163.334443041,-85.5268645921653,134.531056880319,-141.687683303114,0.139403802400988,154.386959436782,202.236765710046,34.592682255964,201.279438767692,60.0033721923828,0.000788359902799129,97.1720657348633,108.858070373535,11.6860046386719 +"2011-11-29 19:40:51.666",-85.2019759719821,134163.25169128,-85.5015069854794,134.578247924655,-157.390459837769,0.127542340189918,154.402978969548,202.462563364492,34.6291058282571,201.233303060369,60.0033912658691,0.000406913459300995,97.1818923950195,108.881103515625,11.6992111206055 +"2011-11-29 19:40:51.700",-85.160964795971,134162.064104276,-85.4588176118088,134.500027622385,169.084885967141,0.063482756157182,154.448282518389,202.384612320687,34.6520896855226,201.133029794977,60.0033950805664,0.000190716236829758,97.1981353759766,108.902954101563,11.7048187255859 +"2011-11-29 19:40:51.733",-85.1193371976101,134160.096082027,-85.412055185187,134.407239523444,120.599555583654,0.0543583571884976,154.520467505192,202.166734965437,34.6625715562661,201.104132635019,60.00341796875,0.000648521818220615,97.1749725341797,108.858283996582,11.6833114624023 +"2011-11-29 19:40:51.766",-85.0778280704791,134160.166467597,-85.3755762489466,134.419078809,130.110794885963,0.135795788501193,154.566853252207,202.21118175945,34.7047497481116,201.15689989097,60.0034370422363,0.000394200906157494,97.1719207763672,108.87109375,11.6991729736328 +"2011-11-29 19:40:51.800",-85.0371036646754,134159.441940249,-85.3094937614483,134.513587806016,149.487509425225,0.0656656076636416,154.602314595797,202.278356685109,34.7943993571531,201.300778317601,60.0034255981445,-0.000381474383175373,97.1543807983398,108.880149841309,11.7257690429688 +"2011-11-29 19:40:51.833",-84.9966248346674,134160.381662568,-85.2612707999703,134.476807925409,95.6234674391661,0.0406177136007042,154.640544234934,202.155696833331,34.8375033637969,201.315919859426,60.0034217834473,0,97.1758193969727,108.86840057373,11.6925811767578 +"2011-11-29 19:40:51.866",-84.9567310805522,134162.977304316,-85.2224701528483,134.410461998061,99.5718681579043,0.0925911166834037,154.710776321751,202.039041911471,34.8467374677214,201.284884919276,60.0034065246582,-0.000661206431686878,97.1838607788086,108.867965698242,11.6841049194336 +"2011-11-29 19:40:51.900",-84.9159421572353,134162.279586704,-85.1618787587494,134.434898431849,42.2542825993012,0.0686244417132617,154.751807063398,202.142651024008,34.9093174335227,201.20411118056,60.0033874511719,-0.000101728364825249,97.1787567138672,108.877052307129,11.6982955932617 +"2011-11-29 19:40:51.933",-84.8744365059238,134160.341345249,-85.1232841487706,134.47297765664,10.709161480952,0.144019804446556,154.742921660409,202.319524328486,34.9704926526272,201.114866051599,60.0033874511719,"1.39698386192322E-08",97.1778717041016,108.861282348633,11.6834106445313 +"2011-11-29 19:40:51.966",-84.833244570554,134159.850201269,-85.1058625160732,134.393880830798,39.3764096548628,0.100397715356083,154.813221572376,202.261174269732,34.9519766109202,200.977610590306,60.0034027099609,0.000597629696130753,97.1742706298828,108.886428833008,11.712158203125 +"2011-11-29 19:40:52.000",-84.7921411339061,134160.256700792,-85.1003556655565,134.434591451185,-133.500320741606,0.129044904719772,154.890477350727,202.210580490408,34.9363719411429,201.007546228072,60.00341796875,0.000457763671875,97.170166015625,108.888442993164,11.7182769775391 +"2011-11-29 19:40:52.033",-84.7522420867809,134160.049600428,-85.0759988654814,134.579163141814,-110.592894107639,0.34686035645754,154.879788809617,202.257991905105,35.0110122048938,201.166734303511,60.00341796875,0,97.1867370605469,108.88094329834,11.694206237793 +"2011-11-29 19:40:52.066",-84.7122856083753,134158.319420792,-85.0392763451725,134.589195430517,-129.493542069562,0.227084405022201,154.881579077732,202.225874126659,35.0854491260089,201.380259921235,60.0034027099609,-0.000864649191498756,97.1687622070313,108.88304901123,11.7142868041992 +"2011-11-29 19:40:52.100",-84.6711411326262,134156.615535062,-84.9687114362476,134.464692775973,151.715594502071,0.182139981612242,154.955828759598,202.210995485131,35.1504235646519,201.283732646318,60.0033950805664,"-1.39698386192322E-08",97.1756286621094,108.867523193359,11.69189453125 +"2011-11-29 19:40:52.133",-84.6299980077006,134157.805208081,-84.917062542051,134.432373189195,167.681778017698,0.0915616120585038,154.984914006542,202.252094471894,35.2064346644096,201.073126872628,60.0033950805664,-0.0002288818359375,97.1632385253906,108.87043762207,11.7071990966797 +"2011-11-29 19:40:52.166",-84.5892229666095,134159.186620605,-84.8971355060855,134.453269048399,-112.659830908309,0.153821663096779,155.002862680339,202.185690386092,35.2238577671866,201.038752730759,60.0033874511719,-0.000139866024255753,97.1684494018555,108.878089904785,11.7096405029297 +"2011-11-29 19:40:52.200",-84.5484631256555,134160.946693143,-84.8461120659387,134.366927782618,-121.098102273685,0.0588627963545455,155.06386862252,202.019518256626,35.2542697143399,201.034343843448,60.0034027099609,0.000419612042605877,97.1684722900391,108.883125305176,11.7146530151367 +"2011-11-29 19:40:52.233",-84.5078182816156,134163.314108368,-84.8063196764138,134.377017108052,96.9113833620946,0.0490174005695263,155.092577746932,202.018384232362,35.2956298455489,201.162283457732,60.0034027099609,"3.81516292691231E-05",97.1666870117188,108.879409790039,11.7127227783203 +"2011-11-29 19:40:52.266",-84.4667686969635,134163.313774327,-84.7839967411116,134.496917577033,156.851642640882,0.0448490633062377,155.111536609336,202.139018183669,35.3320970369972,201.373773963866,60.0034027099609,0,97.1868896484375,108.864456176758,11.6775665283203 +"2011-11-29 19:40:52.300",-84.4260307279213,134160.422439834,-84.7264835102987,134.572904277784,-167.174834064349,0.0420927390424325,155.183437837751,202.283831004373,35.3758467037457,201.4299318589,60.0033988952637,-0.000267033465206623,97.1807250976563,108.85285949707,11.6721343994141 +"2011-11-29 19:40:52.333",-84.3855314626157,134160.51094563,-84.6864093220304,134.514595498841,-39.4604492010947,0.0234168200305955,155.22278415615,202.255174349245,35.4001080106936,201.272596152268,60.0033950805664,"3.81516292691231E-05",97.1607055664063,108.877090454102,11.7163848876953 +"2011-11-29 19:40:52.366",-84.3438999013732,134161.965353856,-84.6711520822458,134.465060491094,131.839572987403,0.0641080002904515,155.243790441425,202.247783830456,35.4252082863494,201.199426009924,60.0034065246582,0.000368761830031872,97.1909561157227,108.880584716797,11.6896286010742 +"2011-11-29 19:40:52.400",-84.3030356160967,134162.19668162,-84.6276905039716,134.516898478245,157.803286399684,0.139131804238732,155.303497911621,202.330742101382,35.476585432543,201.284827251767,60.0034141540527,-0.000254292972385883,97.1752243041992,108.883270263672,11.7080459594727 +"2011-11-29 19:40:52.433",-84.2632206369503,134161.558471997,-84.5784745121322,134.584756227279,-121.564462964435,0.0931054467934837,155.354193249486,202.283647675121,35.5050904310162,201.396619743367,60.0033912658691,-0.000762962736189365,97.1862487792969,108.863052368164,11.6768035888672 +"2011-11-29 19:40:52.466",-84.2222576776584,134160.29893197,-84.5275983414932,134.537228794848,-95.8911974484166,0.0937865025909215,155.407272052838,202.237715302854,35.5431016266991,201.282280080507,60.0033988952637,0.000673946924507618,97.1557235717773,108.88835144043,11.7326278686523 +"2011-11-29 19:40:52.500",-84.1812170708284,134161.0110279,-84.4820028638629,134.49640421043,176.232093427389,0.123686566973437,155.433718902323,202.30315210615,35.6374958291622,201.206653540077,60.0034141540527,0.000139866024255753,97.1703491210938,108.875877380371,11.7055282592773 +"2011-11-29 19:40:52.533",-84.1403219725058,134163.484877666,-84.4330908295982,134.54976793868,-134.130032760464,0.135632881962285,155.472680873617,202.250898768937,35.6910161908714,201.311421679908,60.0034027099609,-0.000368747860193253,97.1574249267578,108.884346008301,11.726921081543 +"2011-11-29 19:40:52.566",-84.0996094139717,134165.967560107,-84.3680135652867,134.554877418512,-61.1285817128912,0.131263822574849,155.561473306203,202.244468071052,35.6880896998547,201.299790196361,60.0033988952637,0.000432324595749378,97.1891708374023,108.885231018066,11.6960601806641 +"2011-11-29 19:40:52.600",-84.0581721357846,134163.479449155,-84.324830386668,134.515603149985,82.8787818072358,0.0127713848519581,155.63048020164,202.334965353616,35.7192995248246,201.224401827789,60.0034141540527,0.000470490194857121,97.1691741943359,108.87474822998,11.7055740356445 +"2011-11-29 19:40:52.633",-84.0174449940724,134160.949716359,-84.3407429068154,134.505271837281,175.465067214595,0.148456188764915,155.605338898992,202.320238378276,35.7550757749281,201.222210558816,60.0034141540527,-0.000368775799870491,97.1834716796875,108.899543762207,11.7160720825195 +"2011-11-29 19:40:52.666",-83.9775927493236,134161.492160547,-84.3114787415491,134.537767126448,-132.089412782838,0.142149633382229,155.63752822803,202.287612874734,35.7697558293355,201.230441061463,60.0033988952637,-0.000534080900251865,97.1821365356445,108.872581481934,11.6904449462891 +"2011-11-29 19:40:52.700",-83.937203582712,134161.683173322,-84.2448167398968,134.517151666685,-101.301527244113,0.105652379988817,155.728029925052,202.214114996506,35.7912921294684,201.236390857983,60.0033836364746,-0.000127167440950871,97.1850662231445,108.86304473877,11.677978515625 +"2011-11-29 19:40:52.733",-83.8964508552143,134160.83764576,-84.197870989055,134.500422828305,-123.321272304135,0.0513226157376235,155.743379636331,202.184910105998,35.8703621331266,201.276786321477,60.0033836364746,-0.00011444091796875,97.1742782592773,108.882652282715,11.7083740234375 +"2011-11-29 19:40:52.766",-83.8557598660787,134161.851561598,-84.1485590822841,134.51165347077,-159.840748057532,0.0464546465599712,155.752447205549,202.234490665578,35.9637117494889,201.289683191178,60.0033760070801,"-3.81516292691231E-05",97.1660842895508,108.894889831543,11.7288055419922 +"2011-11-29 19:40:52.800",-83.8144855927361,134160.676699108,-84.0943466526581,134.545099441553,-152.016567732111,0.111931383826895,155.809431961138,202.413452182679,36.032007733326,201.180511437745,60.0033836364746,0.000445051118731499,97.1942596435547,108.882843017578,11.6885833740234 +"2011-11-29 19:40:52.833",-83.7736848539462,134159.151669397,-84.0429497010514,134.54143843584,-145.508152426416,0.0482284404221773,155.879780547253,202.485190901294,36.0469165501142,201.116524388582,60.0033950805664,"-1.39698386192322E-08",97.1705932617188,108.88484954834,11.7142562866211 +"2011-11-29 19:40:52.866",-83.7332043093602,134161.588995448,-84.0190408509234,134.480999241867,57.0443818180251,0.140938370012386,155.907556789414,202.288147820003,36.0295196869693,201.264704527696,60.0033950805664,"-1.27265229821205E-05",97.1788635253906,108.881530761719,11.7026672363281 +"2011-11-29 19:40:52.900",-83.6916400728311,134163.823969752,-84.0112673228624,134.455034696631,100.648632482395,0.0884217280336345,155.917688271916,202.108097118825,36.0620915137891,201.345441521154,60.0034103393555,0.000559506006538868,97.1734390258789,108.86009979248,11.6866607666016 +"2011-11-29 19:40:52.933",-83.6500239517535,134162.889091871,-83.9607383864934,134.539751303269,-148.153861117355,0.139499336671959,155.968383704834,202.175168760074,36.146149149452,201.383823064659,60.0034332275391,0.0006866455078125,97.1764907836914,108.873291015625,11.6968002319336 +"2011-11-29 19:40:52.966",-83.6090422717516,134162.455905304,-83.8727305506949,134.51303693117,-161.105661943231,0.0800773091877128,156.072338441259,202.308382045279,36.2047384007561,201.213273663503,60.0034255981445,-0.000610356219112873,97.1747970581055,108.876304626465,11.7015075683594 +"2011-11-29 19:40:53.000",-83.5692867619581,134163.984725853,-83.8025545274703,134.489815224215,53.7779119589268,0.0322048919513354,156.132760997891,202.392775865822,36.2563579128167,201.100659377511,60.0034141540527,-0.000203442759811878,97.1683807373047,108.888282775879,11.7199020385742 +"2011-11-29 19:40:53.033",-83.5290333337279,134164.845737205,-83.7916509537154,134.51107690742,44.3033004506612,0.0778806212808082,156.109242234235,202.344679289735,36.2905528698375,201.237068043462,60.0034103393555,"-3.81516292691231E-05",97.1885070800781,108.871124267578,11.6826171875 +"2011-11-29 19:40:53.066",-83.4881115967915,134161.894307088,-83.7941470087322,134.489335077229,51.4299379792418,0.0752301644487774,156.094008296516,202.226632446782,36.3031309061379,201.295457795354,60.0033950805664,-0.00057220458984375,97.1730499267578,108.879020690918,11.7059707641602 +"2011-11-29 19:40:53.100",-83.4478281835067,134161.371322196,-83.734836370815,134.507924344222,-11.0283159204169,0.0679586406878367,156.159500452329,202.269571872759,36.3528964364099,201.23454578479,60.0033683776855,-0.000712070614099503,97.1898193359375,108.857475280762,11.6676559448242 +"2011-11-29 19:40:53.133",-83.4069058123405,134163.336746439,-83.6691588650434,134.470702083034,14.5348996826101,0.0466864897778605,156.209811889215,202.35316512488,36.4394768388363,201.066440072058,60.0033683776855,0.000254320912063122,97.1683349609375,108.874839782715,11.7065048217773 +"2011-11-29 19:40:53.166",-83.3648616739001,134161.696693215,-83.6499504709414,134.457656298773,142.684088205007,0.063318198090376,156.251070313718,202.406377119424,36.4627720589719,201.010984301925,60.0033988952637,0.00110625755041838,97.1617889404297,108.866256713867,11.7044677734375 +"2011-11-29 19:40:53.200",-83.3241672758166,134158.295608923,-83.619996384665,134.489664837674,176.432152471308,0.1527328931473,156.327820201686,202.433548233362,36.4754128280586,201.062172176642,60.0034065246582,-0.00012718141078949,97.1968231201172,108.870864868164,11.6740417480469 +"2011-11-29 19:40:53.233",-83.2843196685154,134159.982966477,-83.5756637570004,134.514792860416,-169.031202997107,0.191671614222252,156.352804261759,202.317053573518,36.5506681713981,201.212775804524,60.0033874511719,-0.000712070614099503,97.1873168945313,108.879386901855,11.6920700073242 +"2011-11-29 19:40:53.266",-83.2430103068518,134162.581550303,-83.5360724152637,134.472496402048,-173.174375781429,0.144011365531206,156.357782217922,202.095900495004,36.6114663935364,201.321682890307,60.0034141540527,0.00142414122819901,97.1841659545898,108.887565612793,11.7033996582031 +"2011-11-29 19:40:53.300",-83.2022362201966,134163.291311303,-83.4963521364798,134.419526328097,151.748909806407,0.0609895870135253,156.381922825652,202.065011315454,36.6401450633171,201.22935526947,60.0034103393555,-0.00101725570857525,97.158935546875,108.877090454102,11.7181549072266 +"2011-11-29 19:40:53.333",-83.162526965141,134161.944661366,-83.4611127565098,134.479522723038,-177.612346048611,0.0675141513620757,156.437912141111,202.260398308893,36.6595805746498,201.183786426525,60.0033645629883,-0.00123341102153063,97.1736068725586,108.871810913086,11.6982040405273 +"2011-11-29 19:40:53.366",-83.121152279263,134160.534575692,-83.4122870361086,134.551722499818,-147.259708832068,0.0936656098512363,156.505074474565,202.309051071576,36.6946956848776,201.305379929271,60.0033760070801,0.000966377556324005,97.1912155151367,108.876823425293,11.6856079101563 +"2011-11-29 19:40:53.400",-83.0794909418895,134160.172838001,-83.3566497868146,134.546814075393,-136.418347451123,0.150822714499993,156.548260248304,202.251957690083,36.7732032342146,201.298632608002,60.0034255981445,0.00128427520394325,97.1701507568359,108.859817504883,11.6896667480469 +"2011-11-29 19:40:53.433",-83.0388792270439,134161.313388412,-83.3050876528327,134.473861279091,-124.143755546839,0.0983418512969598,156.570137785333,202.111811452292,36.8385419221551,201.236460493461,60.0034065246582,-0.001157121732831,97.1790161132813,108.88703918457,11.7080230712891 +"2011-11-29 19:40:53.466",-82.9985306196223,134162.493109759,-83.278708436311,134.416551504496,-107.592407812236,0.0202572661781905,156.632203199014,201.928816159147,36.8130343489082,201.302841142059,60.0033950805664,0.000178031623363495,97.1621398925781,108.873252868652,11.7111129760742 +"2011-11-29 19:40:53.500",-82.9579419323179,134160.329646585,-83.2576734231029,134.475631776163,151.719739784204,0.0481764410195539,156.683229335539,202.117227746957,36.8128800166216,201.337561546751,60.0033988952637,0.000165319070219994,97.1883316040039,108.891387939453,11.7030563354492 +"2011-11-29 19:40:53.533",-82.9174415050323,134159.041952883,-83.1951216349282,134.501261181291,-73.3232531593857,0.0342216016058347,156.711015136799,202.196814851142,36.8975015843554,201.273788922955,60.0033798217773,-0.000737509690225124,97.1750030517578,108.848754882813,11.6737518310547 +"2011-11-29 19:40:53.566",-82.8763302844406,134160.346038244,-83.1545772289303,134.527483732027,-86.1649213807705,0.142838870329027,156.734587420684,202.20625879277,36.9589305738903,201.234295995738,60.0033798217773,0,97.1744842529297,108.880813598633,11.7063293457031 +"2011-11-29 19:40:53.600",-82.8347197549162,134163.756168361,-83.1233612680355,134.611966248228,-115.89815809531,0.156646638858046,156.791097899997,202.416018294663,36.986796815267,201.288752084467,60.0033950805664,0.000750222243368626,97.1753082275391,108.88069152832,11.7053833007813 +"2011-11-29 19:40:53.633",-82.7939517777502,134165.098291106,-83.0901769051656,134.660540404044,-117.404024234621,0.130901184219132,156.848100267803,202.427221117212,36.9928332139814,201.446595599657,60.0034027099609,0,97.1564025878906,108.871864318848,11.715461730957 +"2011-11-29 19:40:53.666",-82.7541253999359,134163.456094059,-83.0469152669626,134.59452081202,-123.335739991241,0.16314344445234,156.917332034435,202.323063423198,37.0190344488633,201.336207562417,60.0033988952637,-0.000127167440950871,97.173698425293,108.875503540039,11.7018051147461 +"2011-11-29 19:40:53.700",-82.7138721762044,134162.179497541,-83.0164294166036,134.509315318698,-124.650600914365,0.0994572327528872,156.939384748529,202.318321175061,37.0468375981418,201.135494319565,60.0033950805664,"3.81376594305038E-05",97.1790466308594,108.882629394531,11.7035827636719 +"2011-11-29 19:40:53.733",-82.6720332792296,134163.210736983,-83.0100865155108,134.526005929663,169.967141352185,0.083509101131918,156.906972700388,202.332055915177,37.0960226379919,201.270940039937,60.0034065246582,0.000203456729650497,97.1675796508789,108.880577087402,11.7129974365234 +"2011-11-29 19:40:53.766",-82.630069660747,134162.728709772,-82.9723153221671,134.550069594576,173.91181456416,0.109006074842423,156.965237098303,202.277164524074,37.1206062361292,201.398131661601,60.0034103393555,0.000178017653524876,97.1894454956055,108.866622924805,11.6771774291992 +"2011-11-29 19:40:53.800",-82.5890773707739,134160.336748324,-82.9189666594914,134.479498499412,176.18664178852,0.0773725209666426,157.053439620406,202.237451266151,37.130401926326,201.215756224528,60.0034141540527,0.000178017653524876,97.1727752685547,108.879776000977,11.7070007324219 +"2011-11-29 19:40:53.833",-82.5486338949783,134160.665639181,-82.8409535168378,134.42830874829,-89.9305804504876,0.0376035437321454,157.085029360595,202.109890238678,37.2347431757108,201.138028695795,60.0034217834473,0,97.1814804077148,108.877395629883,11.695915222168 +"2011-11-29 19:40:53.866",-82.5088489601197,134162.387339593,-82.80168231085,134.466537048623,-122.053276319546,0.123641690655025,157.100699408629,202.110767493354,37.3186586233263,201.193823755394,60.00341796875,-0.000254334881901741,97.1734313964844,108.873565673828,11.7001342773438 +"2011-11-29 19:40:53.900",-82.4693469114955,134161.580488897,-82.7699795982171,134.517238138399,-126.186328042543,0.158398051712119,157.118999336785,202.222137925909,37.3725950695943,201.215512809221,60.0033683776855,-0.00174203887581825,97.1925811767578,108.87361907959,11.681037902832 +"2011-11-29 19:40:53.933",-82.428420004198,134161.107322797,-82.7170524309818,134.521877959108,-113.139491726791,0.0826912476986537,157.158036821535,202.205050288593,37.4203410687384,201.290363540913,60.0033569335938,0,97.1785659790039,108.875877380371,11.6973114013672 +"2011-11-29 19:40:53.966",-82.3868317688087,134161.461237264,-82.6899663716442,134.475054414765,-144.069484816123,0.0950406545984137,157.228347159653,202.128488154219,37.4158271614503,201.251661782076,60.0033645629883,0.000508627854287624,97.1694793701172,108.867401123047,11.6979217529297 +"2011-11-29 19:40:54.000",-82.3462620774709,134161.313140775,-82.6713733367657,134.44627542709,-146.243722345961,0.18842291669362,157.295075583581,202.14439894689,37.4104214808627,201.110792510779,60.0033683776855,0.000190730206668377,97.1901473999023,108.886199951172,11.6960525512695 +"2011-11-29 19:40:54.033",-82.3050992130925,134159.370239572,-82.6119555209619,134.540075818411,-103.208032900682,0.163193776410825,157.324856805529,202.198901454423,37.4678657421199,201.268843771153,60.0034065246582,0.00136059243232012,97.1809768676758,108.880973815918,11.6999969482422 +"2011-11-29 19:40:54.066",-82.2642024219108,134158.925357278,-82.5712384347177,134.599718521599,-72.8555919939155,0.169467089158603,157.332083460152,202.186082197903,37.5176591763455,201.446566836796,60.00341796875,0.00011444091796875,97.1746826171875,108.867965698242,11.6932830810547 +"2011-11-29 19:40:54.100",-82.2234951769356,134162.178323067,-82.5569068264741,134.502964468904,-121.271959746419,0.140760504224966,157.36667373199,202.158148256169,37.5449244670829,201.241401530098,60.0034103393555,-0.000432338565587997,97.1832427978516,108.866165161133,11.6829223632813 +"2011-11-29 19:40:54.133",-82.1828472575013,134164.739313171,-82.5162900466694,134.488354405795,-140.377870238088,0.0892331980030969,157.413186469748,202.239079012038,37.5761255692084,201.178928332902,60.0033950805664,-0.000470490194857121,97.1976089477539,108.882354736328,11.6847457885742 +"2011-11-29 19:40:54.166",-82.1422575982018,134162.743761102,-82.4640514960824,134.552526514135,-20.8561183400001,0.0745580913644814,157.456910712076,202.235126420516,37.5966598296166,201.387267050854,60.0033950805664,"5.08641824126244E-05",97.1632919311523,108.881500244141,11.7182083129883 +"2011-11-29 19:40:54.200",-82.10119605952,134160.006195606,-82.4101702536755,134.527210345513,-65.0557715314438,0.172397285465219,157.522915864835,202.054728594078,37.6423420305055,201.362569492808,60.0033912658691,0,97.1692352294922,108.889595031738,11.7203598022461 +"2011-11-29 19:40:54.233",-82.0588568759163,134159.316123257,-82.3289718791513,134.493646406912,-91.3828179210128,0.186529390978459,157.608631393759,202.03929878316,37.7420239417651,201.257706366791,60.0034027099609,0.000635795295238495,97.1873626708984,108.867622375488,11.6802597045898 +"2011-11-29 19:40:54.266",-82.0186967514552,134160.113703112,-82.2735857888835,134.534905796525,-121.801563220571,0.106029376335329,157.646763853638,202.183955413177,37.8256047379329,201.339446701603,60.0034027099609,-0.000241608358919621,97.1740188598633,108.893463134766,11.7194442749023 +"2011-11-29 19:40:54.300",-81.9786403373185,134160.690666772,-82.2387013700282,134.542780180745,-174.63737059686,0.0807143590809251,157.668468642853,202.309999323255,37.8775364455937,201.322351160567,60.0033988952637,"3.81376594305038E-05",97.1675720214844,108.884742736816,11.717170715332 +"2011-11-29 19:40:54.333",-81.937668237051,134161.021565217,-82.2111460218512,134.581770310315,-92.675517476511,0.0626147248071171,157.699955449216,202.313418749179,37.8814043695194,201.370796110518,60.0034103393555,0.000267019495368004,97.1703643798828,108.876106262207,11.7057418823242 +"2011-11-29 19:40:54.366",-81.8974474172822,134163.159286333,-82.1825160911664,134.623961870887,-61.8307392016184,0.129353861597088,157.737504189378,202.27992333924,37.8849903381187,201.471024039783,60.0033874511719,-0.001182546839118,97.1830520629883,108.868118286133,11.6850662231445 +"2011-11-29 19:40:54.400",-81.8575507476045,134164.055358587,-82.1590878153998,134.600587062328,-97.6280656117009,0.142468976203209,157.746867879498,202.297191324057,37.9462033845771,201.36787838074,60.0033569335938,-0.000826511532068253,97.1847381591797,108.874145507813,11.6894073486328 +"2011-11-29 19:40:54.433",-81.8167278793313,134162.755459874,-82.1443290555337,134.533217091416,-109.815663407592,0.196393953676045,157.753519107263,202.188932285764,37.9842715925021,201.237647660907,60.0033645629883,0.000890074297785759,97.1650848388672,108.863441467285,11.698356628418 +"2011-11-29 19:40:54.466",-81.7749215985986,134161.824670372,-82.0933382953969,134.50722705962,-91.6298373530481,0.119884853498855,157.830081684811,202.140991608098,37.9892301492417,201.262845444243,60.0033912658691,0.000546807423233986,97.1678237915039,108.870109558105,11.7022857666016 +"2011-11-29 19:40:54.500",-81.7333609567359,134162.365722478,-82.0193335369505,134.60384312524,-87.7492682200276,0.104859125363314,157.891302955163,202.346196902701,38.0734460403825,201.361491933773,60.0034065246582,0.000394200906157494,97.1863021850586,108.857292175293,11.6709899902344 +"2011-11-29 19:40:54.533",-81.6927102766106,134161.734699679,-81.9663266755923,134.596227677955,-76.60038543476,0.096905526664922,157.917717066011,202.341082462616,38.147623497139,201.351893418135,60.00341796875,0.000267047435045242,97.1882171630859,108.880729675293,11.692512512207 +"2011-11-29 19:40:54.566",-81.6528412455959,134159.954989745,-81.9137080423696,134.481235715465,-41.6172542194128,0.0852625220629783,157.980602198981,202.154299968468,38.1767677246961,201.224975640293,60.00341796875,"-1.39698386192322E-08",97.1876220703125,108.869857788086,11.6822357177734 +"2011-11-29 19:40:54.600",-81.6122104062988,134160.445543076,-81.8563376053676,134.482772751547,-30.9535144462454,0.107659685927964,158.048433984345,202.231854574044,38.215602158541,201.14900233333,60.0034103393555,-0.0002288818359375,97.1697845458984,108.892105102539,11.7223205566406 +"2011-11-29 19:40:54.633",-81.5709584399836,134162.056353593,-81.8110991271576,134.533529335745,-57.102933362565,0.071043734579909,158.110433990121,202.244532689623,38.2592869335803,201.291826523932,60.0034027099609,-0.000152578577399254,97.1766662597656,108.888427734375,11.7117614746094 +"2011-11-29 19:40:54.666",-81.5297965248234,134162.378685862,-81.7886371121105,134.524017216652,-177.655951225227,0.0495581793559517,158.141374234908,202.220337830891,38.2956802325807,201.357127385175,60.0034027099609,"-3.81516292691231E-05",97.1497955322266,108.875503540039,11.7257080078125 +"2011-11-29 19:40:54.700",-81.4887462634927,134163.378970331,-81.7733886402084,134.493497164373,152.105606747786,0.00678853310496793,158.167037201144,202.217595688171,38.2880274884538,201.267115102073,60.0034103393555,0.000597629696130753,97.1674499511719,108.88005065918,11.7126007080078 +"2011-11-29 19:40:54.733",-81.4479985370255,134163.409571699,-81.7277907214448,134.474523411014,56.1039901550192,0.0241907269072288,158.199284130473,202.226388514041,38.3408770321743,201.215406108646,60.0034217834473,0,97.169059753418,108.865264892578,11.6962051391602 +"2011-11-29 19:40:54.766",-81.4071540680396,134161.851419853,-81.6913534078001,134.531211710673,-160.14314849732,0.0797000548305149,158.249179438597,202.308833962468,38.3906501378979,201.269121366499,60.0034217834473,"5.08641824126244E-05",97.1956329345703,108.88200378418,11.6863708496094 +"2011-11-29 19:40:54.800",-81.3658624819339,134161.104839722,-81.6677270744093,134.570754272776,-156.268973845135,0.0836872163596755,158.281309624896,202.431341497069,38.4065011231908,201.258968320292,60.0034217834473,0,97.1523590087891,108.88111114502,11.7287521362305 +"2011-11-29 19:40:54.833",-81.3254158541354,134160.932009041,-81.646005722413,134.571666328701,-143.718602568391,0.14438409669506,158.283692832818,202.36049959951,38.4609869745484,201.287336274322,60.0034103393555,-0.000381474383175373,97.1819458007813,108.881362915039,11.6994171142578 +"2011-11-29 19:40:54.866",-81.2861971730717,134163.072551225,-81.6002951592833,134.491291082827,-164.155088715121,0.136731069459963,158.316191128302,202.194694007753,38.5222036052505,201.262123932112,60.0033912658691,-0.00090278685092926,97.1773681640625,108.882339477539,11.7049713134766 +"2011-11-29 19:40:54.900",-81.2456191495287,134164.438571013,-81.5404563857115,134.48506542677,128.467601091094,0.093571611550889,158.357471557403,202.272320619484,38.5754486498357,201.26461412908,60.0033836364746,0.000521340407431126,97.1781234741211,108.869750976563,11.6916275024414 +"2011-11-29 19:40:54.933",-81.2032625739059,134163.876181138,-81.5233283280819,134.528616596003,152.931256676054,0.120832875859293,158.362398063494,202.281195940625,38.619431414985,201.375926154289,60.0033988952637,0.000317883677780628,97.182373046875,108.870910644531,11.6885375976563 +"2011-11-29 19:40:54.966",-81.1620808911022,134163.860530383,-81.4698006584051,134.513124509728,159.507775216804,0.031375224667591,158.43966752271,202.206609913176,38.6289249368863,201.34854115362,60.0033950805664,-0.000508613884449005,97.1779937744141,108.851821899414,11.673828125 +"2011-11-29 19:40:55.000",-81.1212964486817,134163.00978713,-81.3855906088685,134.522527055957,-18.7334016256865,0.108013470636729,158.525308739239,202.258159037575,38.6766382752364,201.260186708934,60.0034027099609,0.000750222243368626,97.1646118164063,108.863975524902,11.6993637084961 +"2011-11-29 19:40:55.033",-81.0805287136164,134161.161012044,-81.3305049015226,134.542694594647,-1.85369790963037,0.169551559028047,158.53431061679,202.311491348963,38.7579174974636,201.286412319118,60.00341796875,0,97.1788635253906,108.859153747559,11.680290222168 +"2011-11-29 19:40:55.066",-81.0400915882955,134160.080234009,-81.3385214058709,134.519729549287,112.45172976158,0.0425792282785996,158.539290283362,202.329171566093,38.7871954143676,201.272323702247,60.0034103393555,-0.000508627854287624,97.1821899414063,108.867500305176,11.6853103637695 +"2011-11-29 19:40:55.100",-80.9994045605447,134160.250297328,-81.3416575706419,134.522420477542,-175.32087177698,0.252115260423483,158.591093664121,202.322317449037,38.7975461796345,201.263159291765,60.0033950805664,-0.000101728364825249,97.1776657104492,108.880523681641,11.7028579711914 +"2011-11-29 19:40:55.133",-80.9586854827656,134162.525163792,-81.3013157909169,134.557640502832,-148.399755122487,0.224493472178263,158.629899710361,202.257493027671,38.8266377372639,201.328725991646,60.0033912658691,0,97.1797866821289,108.858840942383,11.6790542602539 +"2011-11-29 19:40:55.166",-80.9177416624935,134162.309934262,-81.236988065487,134.554179846349,-91.7024313430181,0.118492677360215,158.685890624942,202.293720967846,38.8466580639878,201.252712206394,60.0033950805664,"-2.79396772384644E-08",97.1782150268555,108.88240814209,11.7041931152344 +"2011-11-29 19:40:55.200",-80.8770515562652,134163.302135782,-81.1646618113851,134.507696113905,-68.5826656232173,0.136365596982266,158.755748491285,202.206327564036,38.906871250751,201.184037795617,60.0033912658691,"-8.90018418431282E-05",97.1631011962891,108.882514953613,11.7194137573242 +"2011-11-29 19:40:55.233",-80.8365951834351,134163.625042779,-81.119277828922,134.49383058321,-95.5231357525263,0.099324680234063,158.797533098308,202.101981724122,38.9712827019996,201.283753504151,60.0033912658691,"1.39698386192322E-08",97.1819534301758,108.870292663574,11.6883392333984 +"2011-11-29 19:40:55.266",-80.7957954706239,134163.116321351,-81.0906896710472,134.555518833566,-151.825447576923,0.0950322615936742,158.804153193634,202.217060619895,39.0404032543251,201.418996357323,60.0033950805664,0.000127167440950871,97.1688003540039,108.863456726074,11.6946563720703 +"2011-11-29 19:40:55.300",-80.7549177021461,134162.262013126,-81.0480730885203,134.601167762724,175.840711787982,0.0725112877633775,158.826428469059,202.341391914357,39.0980443401788,201.479685619816,60.0033988952637,"-1.27404928207397E-05",97.1690063476563,108.892822265625,11.7238159179688 +"2011-11-29 19:40:55.333",-80.7146157988791,134161.983631391,-81.0127831198643,134.598527515771,174.411028399902,0.0830926012343497,158.868242885462,202.377836087332,39.129618836507,201.439685731829,60.0033836364746,-0.000445037148892879,97.1770782470703,108.873443603516,11.6963653564453 +"2011-11-29 19:40:55.366",-80.6742371692631,134162.101927581,-80.9745847361056,134.571267600509,175.895613751029,0.0862294475153796,158.925646867272,202.412628925878,39.1496242501778,201.321522019169,60.0033798217773,"-1.2698583304882E-05",97.1759872436523,108.864402770996,11.6884155273438 +"2011-11-29 19:40:55.400",-80.633525872486,134162.795445108,-80.9346102600876,134.584021032338,-111.766950324761,0.132128662137598,158.967676496349,202.352735422278,39.1828975296261,201.286563186132,60.0033874511719,0.0002288818359375,97.1748352050781,108.870216369629,11.6953811645508 +"2011-11-29 19:40:55.433",-80.5928038482622,134162.705778717,-80.882122351072,134.597601262146,-101.217451074884,0.20445952649002,159.031399196579,202.249090474771,39.2249593781396,201.352551974721,60.0033874511719,"-1.27265229821205E-05",97.163330078125,108.875427246094,11.7120971679688 +"2011-11-29 19:40:55.466",-80.5516779093923,134161.795830416,-80.8225482717268,134.551789594569,-100.990049896728,0.0640105208630057,159.089719546437,202.247021746807,39.2718548464133,201.348754264703,60.0033874511719,"1.39698386192322E-08",97.1800994873047,108.884178161621,11.7040786743164 +"2011-11-29 19:40:55.500",-80.5106514209865,134161.739642602,-80.7642992536453,134.528512704299,36.9714643919429,0.104944361230572,159.140936381727,202.314677070391,39.3044986578003,201.320094071822,60.0033988952637,0.000279746018350124,97.1808090209961,108.891571044922,11.7107620239258 +"2011-11-29 19:40:55.533",-80.4702132125704,134160.697110818,-80.7199367134346,134.544286329052,22.7337589447642,0.132594542488231,159.192051229781,202.40649870292,39.3318654561131,201.257539386774,60.0033988952637,"-1.39698386192322E-08",97.1742706298828,108.873588562012,11.6993179321289 +"2011-11-29 19:40:55.566",-80.4289276871421,134160.309224279,-80.6939647461117,134.519058699874,9.36693270178548,0.0730251793028394,159.206010332854,202.393136376494,39.3858721219753,201.164618470017,60.0034103393555,0.000381474383175373,97.1810760498047,108.874046325684,11.6929702758789 +"2011-11-29 19:40:55.600",-80.3875135992271,134161.468169006,-80.6694903157762,134.535368663351,-58.5569381007568,0.11053902641888,159.231951288234,202.259161297476,39.4177172596146,201.245049137521,60.0034294128418,0.000534052960574627,97.1750640869141,108.87565612793,11.7005920410156 +"2011-11-29 19:40:55.633",-80.3466920511033,134161.13013857,-80.651048611123,134.511144851537,-107.742738360828,0.049805749283763,159.252859423175,202.221431357727,39.4519545061323,201.268249081605,60.00341796875,-0.000546751543879509,97.164924621582,108.875885009766,11.7109603881836 +"2011-11-29 19:40:55.666",-80.3064880777374,134159.503521908,-80.6030181482746,134.490922698649,94.749374949425,0.0744355736329667,159.295415080393,202.321335703497,39.497385132434,201.226249543906,60.0034027099609,-0.000406885519623756,97.1718215942383,108.878021240234,11.7061996459961 +"2011-11-29 19:40:55.700",-80.2654455364457,134160.372042426,-80.56530252633,134.58808023569,-162.093978640253,0.064082470315239,159.35952806848,202.450770788591,39.5283373610866,201.304486359658,60.00341796875,0.000762934796512127,97.1666107177734,108.882263183594,11.7156524658203 +"2011-11-29 19:40:55.733",-80.2238700040633,134162.904062473,-80.5260395937373,134.667205831152,-114.16793430512,0.124622560754429,159.391314369644,202.434163239293,39.5766412115506,201.464215865295,60.0034255981445,"1.2698583304882E-05",97.1837768554688,108.876747131348,11.6929702758789 +"2011-11-29 19:40:55.766",-80.1836952304963,134164.131085596,-80.4927170547962,134.583109038126,175.6803245365,0.0444817655113661,159.394414143526,202.300789093962,39.6329086471286,201.460031237524,60.0033950805664,-0.00091552734375,97.1818008422852,108.874015808105,11.6922149658203 +"2011-11-29 19:40:55.800",-80.1442245246043,134162.568773628,-80.4675188455047,134.383058877326,129.476072460526,0.233748206727302,159.419621196744,202.10079146594,39.6790329961448,201.251975204324,60.0033721923828,-0.000699358060956001,97.1717681884766,108.885368347168,11.7136001586914 +"2011-11-29 19:40:55.833",-80.1031517794097,134161.581450568,-80.4052970297185,134.35607004078,137.162420694788,0.235603814650954,159.513194421835,202.067623458884,39.7174774365024,201.187975326083,60.0033950805664,0.00109354499727488,97.1643829345703,108.871429443359,11.7070465087891 +"2011-11-29 19:40:55.866",-80.0608182018586,134162.052607956,-80.3364507156227,134.525152519498,-166.985050060969,0.157984530716927,159.622458877592,202.259596788579,39.7497201954518,201.30693192327,60.0034103393555,0.000279746018350124,97.1757278442383,108.897285461426,11.7215576171875 +"2011-11-29 19:40:55.900",-80.0202468163953,134163.806534146,-80.3000374169709,134.596984633618,-122.339716992801,0.0475962566478991,159.633578209009,202.432914766662,39.7757838481452,201.323024394248,60.0033836364746,-0.00115713570266962,97.1798858642578,108.877380371094,11.6974945068359 +"2011-11-29 19:40:55.933",-79.980040138255,134164.43005952,-80.2694986548492,134.532092309009,3.71398256199148,0.0812496061166432,159.614340020244,202.246381273718,39.8241901812335,201.34206213497,60.0033836364746,0.000534052960574627,97.1827850341797,108.86888885498,11.6861038208008 +"2011-11-29 19:40:55.966",-79.9387898549856,134161.951109055,-80.2249398153089,134.489086844811,-46.5344595121897,0.0823116897508591,159.672188300597,202.112718057523,39.8653565569508,201.286643139219,60.00341796875,0.00124615151435137,97.189811706543,108.872177124023,11.6823654174805 +"2011-11-29 19:40:56.000",-79.8973007891257,134160.799283293,-80.1760125690895,134.46232767483,-171.293546781222,0.0337615196787737,159.75307323834,202.169112754297,39.9048473360475,201.218860955261,60.0034294128418,-0.000394186936318874,97.1674652099609,108.86799621582,11.7005310058594 +"2011-11-29 19:40:56.033",-79.8572432718263,134161.927341646,-80.1141879757944,134.497524987344,129.23949457066,0.0327121474980284,159.799652906734,202.294379378634,39.9769959268605,201.227159040127,60.0033912658691,-0.00124613754451275,97.1804275512695,108.889595031738,11.7091674804688 +"2011-11-29 19:40:56.066",-79.8177813930858,134162.823128654,-80.0879446489218,134.53693240728,-88.385904231476,0.0673356577335397,159.777053582155,202.250338089031,40.0504648765473,201.294948379055,60.0033721923828,-0.000330596230924129,97.1789627075195,108.886238098145,11.707275390625 +"2011-11-29 19:40:56.100",-79.7768968002147,134162.129008036,-80.0905498616489,134.487039470827,-149.243886476617,0.194724663898678,159.800216854816,202.115759281891,40.0709414480196,201.277208637292,60.0033874511719,0.000902800820767879,97.1796798706055,108.880165100098,11.7004852294922 +"2011-11-29 19:40:56.133",-79.7351189397965,134161.214880936,-80.0492387179839,134.509190816735,-156.361292384001,0.155785143147698,159.916391329363,202.229920913224,40.0283854408119,201.261024179864,60.0033988952637,"1.2698583304882E-05",97.1733551025391,108.878486633301,11.7051315307617 +"2011-11-29 19:40:56.166",-79.6942908680025,134161.190294261,-79.940634599425,134.581112102151,-6.96279311882396,0.0850412595356927,160.032693481495,202.50661887729,40.0630566773383,201.211804978897,60.0033836364746,-0.000546779483556747,97.1725311279297,108.879127502441,11.7065963745117 +"2011-11-29 19:40:56.200",-79.6543746670691,134162.337052432,-79.8816980355192,134.544583141157,15.7272854795484,0.126794094800484,160.028399954403,202.448085450779,40.172826831661,201.198403841819,60.0033798217773,"7.63172283768654E-05",97.1777267456055,108.8642578125,11.6865310668945 +"2011-11-29 19:40:56.233",-79.6140057047507,134162.901614789,-79.8678353606585,134.481434784891,28.4791724395933,0.143744425779637,160.007224203047,202.162465765758,40.2187931532339,201.327801349658,60.0033912658691,0.000648493878543377,97.1751861572266,108.88801574707,11.7128295898438 +"2011-11-29 19:40:56.266",-79.5720122336138,134161.516206844,-79.8580150937364,134.512977264594,24.5169522750377,0.00800908712390051,160.044761257806,202.219038984137,40.2374339274001,201.322430995013,60.0034141540527,0.000279759988188744,97.1770553588867,108.870010375977,11.6929550170898 +"2011-11-29 19:40:56.300",-79.5300767342913,134161.861711329,-79.8684296040177,134.505536819173,-131.087730208968,0.130242608318003,160.044856135833,202.182002550688,40.247586773044,201.253667444132,60.00341796875,0.000127167440950871,97.1764984130859,108.87858581543,11.7020874023438 +"2011-11-29 19:40:56.333",-79.4896793672572,134161.388460444,-79.830139619404,134.45466125111,-87.7806732866969,0.0388286939952644,160.075887216792,202.083674634116,40.2657554404441,201.24236339116,60.0034065246582,-0.000457763671875,97.1835784912109,108.882568359375,11.6989898681641 +"2011-11-29 19:40:56.366",-79.4498313496662,134161.139552327,-79.7482502141688,134.509096705598,111.024041340675,0.0478222876458789,160.16921734474,202.233261595782,40.3371917324888,201.341450003467,60.0034027099609,0,97.1723556518555,108.881019592285,11.7086639404297 +"2011-11-29 19:40:56.400",-79.4090578403446,134161.821645681,-79.6955504744068,134.548872323778,165.743506906338,0.211589820767183,160.225213886976,202.28812872006,40.4387499011013,201.447203294445,60.0034141540527,0.000292444601655006,97.1768035888672,108.873573303223,11.6967697143555 +"2011-11-29 19:40:56.433",-79.3677603118704,134160.655991751,-79.6557726604787,134.552023324891,158.055893213947,0.204161343023194,160.245025839431,202.289033928901,40.4929099695961,201.477062026774,60.0034027099609,-0.000483188778162003,97.1691665649414,108.888488769531,11.7193222045898 +"2011-11-29 19:40:56.466",-79.3275320252958,134160.72558669,-79.6140863942676,134.537352723942,99.3432504928675,0.0965855862193528,160.267037053116,202.3200855221,40.504839725958,201.389373635312,60.0033721923828,-0.000953651033341885,97.1660003662109,108.871383666992,11.7053833007813 +"2011-11-29 19:40:56.500",-79.2868206259813,134161.616032785,-79.5807407180049,134.546002926978,144.342780173874,0.0339320320231173,160.31018740051,202.313116514199,40.5355523079356,201.350093819377,60.0033798217773,0.00080108642578125,97.1604461669922,108.865661621094,11.7052154541016 +"2011-11-29 19:40:56.533",-79.2455180964166,134160.753892713,-79.5648616384969,134.57215074729,-128.558465526639,0.153114486765062,160.355709983,202.340637168848,40.5478750124412,201.275929083443,60.0034103393555,0.000712070614099503,97.1774978637695,108.876052856445,11.6985549926758 +"2011-11-29 19:40:56.566",-79.2048818217484,134160.140968805,-79.5469611408188,134.561746752823,-119.048318643745,0.20355265615029,160.388754915291,202.293677752032,40.5545220996404,201.234957799406,60.0034065246582,-0.000559478066861629,97.1651077270508,108.886444091797,11.7213363647461 +"2011-11-29 19:40:56.600",-79.1645100664768,134162.181289026,-79.4858715873221,134.589259946507,-107.893230667328,0.110568356158452,160.440973643913,202.309867287659,40.6025977126641,201.361033596842,60.0033836364746,-0.000610342249274254,97.1684722900391,108.893882751465,11.7254104614258 +"2011-11-29 19:40:56.633",-79.1234481347625,134164.121974762,-79.3975127009717,134.589577619802,57.5666242266225,0.0496192799769643,160.507410299363,202.32450933683,40.6883369275322,201.48094918733,60.0033988952637,0.000648493878543377,97.1816864013672,108.87385559082,11.6921691894531 +"2011-11-29 19:40:56.666",-79.082494298287,134163.871380304,-79.3637118328431,134.524865990265,106.016328866715,0.144089692592889,160.493735155404,202.25158904908,40.7832404281852,201.467740726413,60.0034065246582,-0.00011444091796875,97.1914672851563,108.865440368652,11.6739730834961 +"2011-11-29 19:40:56.700",-79.0419197167067,134163.612812307,-79.3437344502888,134.496311094684,158.806282932839,0.129338015686395,160.505666880772,202.2422588315,40.8388258060714,201.316609215075,60.0033912658691,-0.000394172966480255,97.1784439086914,108.873649597168,11.6952056884766 +"2011-11-29 19:40:56.733",-79.0013488391952,134162.894505308,-79.3101327194494,134.53715624778,-130.164881654117,0.159355806876899,160.582754655963,202.310846957031,40.8327674060221,201.200987208452,60.0033912658691,"6.35627657175064E-05",97.1742401123047,108.863975524902,11.6897354125977 +"2011-11-29 19:40:56.766",-78.96050661215,134161.857811617,-79.2748217799731,134.603929207651,-111.800329151662,0.144551184600096,160.645745178161,202.405258474123,40.8271779083669,201.285156433854,60.0033988952637,0.000394172966480255,97.1819763183594,108.885513305664,11.7035369873047 +"2011-11-29 19:40:56.800",-78.9194489297175,134161.592839544,-79.2456835454219,134.584856345044,-146.611569169932,0.179546482961502,160.690581677516,202.33283594103,40.8655197387932,201.353143366764,60.0033988952637,"-2.54251062870026E-05",97.1820678710938,108.870193481445,11.6881256103516 +"2011-11-29 19:40:56.833",-78.8789446295548,134161.428605588,-79.2169479014315,134.534071343577,-147.074445037304,0.259666790259744,160.740568137674,202.253933145371,40.894224028114,201.250835800643,60.0033912658691,-0.000241594389081001,97.1628875732422,108.882987976074,11.720100402832 +"2011-11-29 19:40:56.866",-78.8388096558841,134163.071900669,-79.1663574380527,134.475639726996,-149.762227037808,0.173460444083656,160.781751158705,202.151639321619,40.9323624826092,201.218008621072,60.0033874511719,-0.000203456729650497,97.1893463134766,108.881637573242,11.6922912597656 +"2011-11-29 19:40:56.900",-78.7974833666171,134162.928743433,-79.1040410054363,134.478137523763,-167.428835892387,0.117393513044378,160.8184739734,202.157464006089,41.0071879484912,201.274069995193,60.0033950805664,0.000445051118731499,97.188102722168,108.882385253906,11.6942825317383 +"2011-11-29 19:40:56.933",-78.7557778081458,134158.889902948,-79.0592157383738,134.510696121221,-139.669235899201,0.14011144033135,160.827898240274,202.221455895352,41.0889785840391,201.242941938037,60.0034065246582,0.000203456729650497,97.1823501586914,108.883674621582,11.7013244628906 +"2011-11-29 19:40:56.966",-78.7158216698932,134158.262118301,-79.0013555224389,134.515436950155,-105.615082205769,0.0884666206789427,160.889377379444,202.2087649923,41.1197085125723,201.259275569313,60.0033836364746,-0.000737509690225124,97.1759262084961,108.866905212402,11.6909790039063 +"2011-11-29 19:40:57.000",-78.6755716004372,134159.797273608,-78.9457320100037,134.50868758934,31.3871163317015,0.11621359416664,160.965414782067,202.228639241146,41.1125030141253,201.338144385972,60.0033798217773,0.000305171124637127,97.1834716796875,108.889846801758,11.7063751220703 +"2011-11-29 19:40:57.033",-78.6336486436997,134160.513019755,-78.9016751048074,134.540054574243,29.9353701777568,0.218668892985206,160.98303423559,202.343366031751,41.1552938581162,201.347902240242,60.0034255981445,0.00144956633448601,97.1733245849609,108.852897644043,11.679573059082 +"2011-11-29 19:40:57.066",-78.5918245535664,134160.744022195,-78.8858780790471,134.536435664922,14.8046188410863,0.219827188759658,160.946155744998,202.346026633948,41.2205313181564,201.27864799823,60.0034370422363,-0.000356021337211132,97.1799621582031,108.862800598145,11.6828384399414 +"2011-11-29 19:40:57.100",-78.5515270369024,134162.793679874,-78.8645520569305,134.522364668044,7.02250977643461,0.0691240000064165,160.986551946321,202.313471712904,41.2655038001628,201.249838497509,60.0033988952637,-0.0011189840734005,97.1541442871094,108.879776000977,11.7256317138672 +"2011-11-29 19:40:57.133",-78.5117539655014,134163.975092715,-78.7866877423108,134.539722565706,-7.91460724583119,0.156946036222088,161.079849789281,202.304806481068,41.3052534559569,201.26373895745,60.0033912658691,"5.08781522512436E-05",97.1947250366211,108.875823974609,11.6810989379883 +"2011-11-29 19:40:57.166",-78.4711403961737,134162.258175035,-78.7210350722113,134.512204001386,-20.2867864460101,0.248270738058796,161.160548526969,202.232440466491,41.3377566782987,201.174738231302,60.0034027099609,0.000190744176506996,97.1862716674805,108.879318237305,11.6930465698242 +"2011-11-29 19:40:57.200",-78.4300774573126,134163.582780701,-78.7108417220257,134.505324671898,-88.2420290099427,0.0884184655750411,161.221673263919,202.199148949128,41.3611384971544,201.229903682261,60.0033874511719,-0.000432338565587997,97.1866455078125,108.86328125,11.6766357421875 +"2011-11-29 19:40:57.233",-78.3892976005353,134165.446651176,-78.6862186243504,134.532173774486,-150.74866458663,0.118533782012739,161.247013609502,202.240733755271,41.4129497304527,201.319678782128,60.0033798217773,"-5.08502125740051E-05",97.1645278930664,108.876052856445,11.7115249633789 +"2011-11-29 19:40:57.266",-78.348149070049,134163.536717798,-78.6433050816801,134.485777736591,-156.513484362947,0.117714246373433,161.26566261863,202.187558723614,41.48092026995,201.245751838434,60.0033988952637,0.000979104079306126,97.1720962524414,108.883605957031,11.7115097045898 +"2011-11-29 19:40:57.300",-78.3072793444146,134159.99661699,-78.6046120881902,134.397380893536,165.23188294646,0.131875405147579,161.290492218008,202.082164587207,41.5344708895559,201.169049691814,60.0034103393555,"3.81376594305038E-05",97.1728057861328,108.868698120117,11.6958923339844 +"2011-11-29 19:40:57.333",-78.2668023492181,134161.072410531,-78.5659763413414,134.436820959047,156.908922413985,0.0957559799054689,161.329523264168,202.030285469279,41.5613345505823,201.335245640686,60.0034065246582,-0.000203456729650497,97.1813430786133,108.871856689453,11.6905136108398 +"2011-11-29 19:40:57.366",-78.2265168788033,134163.478679342,-78.5238319614498,134.538572107421,-67.1003463268607,0.0986959224858729,161.374888791574,202.081907989213,41.5722096827553,201.437648340037,60.0033912658691,-0.000483216717839241,97.1625823974609,108.867317199707,11.7047348022461 +"2011-11-29 19:40:57.400",-78.1862346225967,134162.278896052,-78.5172031833546,134.557739548772,-117.484214061705,0.205118198795067,161.408575585409,202.199548164306,41.5940574343502,201.314761216025,60.0033798217773,-0.000457763671875,97.1735763549805,108.874755859375,11.7011795043945 +"2011-11-29 19:40:57.433",-78.1454411697028,134162.210575354,-78.4537849486494,134.584345902335,-142.314242289105,0.196131351115225,161.475888839765,202.315257715897,41.6669785360368,201.351976000519,60.0033760070801,0,97.1703720092773,108.899719238281,11.7293472290039 +"2011-11-29 19:40:57.466",-78.1045501168475,134164.366158025,-78.3578596771933,134.555957251594,48.3071566460835,0.0719131866862356,161.545173752702,202.300206566994,41.7231311640852,201.411044346367,60.0033760070801,0.000101742334663868,97.1642303466797,108.882789611816,11.7185592651367 +"2011-11-29 19:40:57.500",-78.0636027120929,134163.344715866,-78.3469987906101,134.461005119377,37.0508685642568,0.143507740487987,161.562416659501,202.219632186171,41.707122197887,201.225230642311,60.0033874511719,0.000470476225018501,97.1769104003906,108.857086181641,11.68017578125 +"2011-11-29 19:40:57.533",-78.022759472246,134162.898800904,-78.3197166792833,134.468756818611,-30.2187021607853,0.0509033291701713,161.593454321305,202.236313594432,41.7567943030124,201.136379374658,60.0034027099609,0.000470490194857121,97.171760559082,108.898231506348,11.7264709472656 +"2011-11-29 19:40:57.566",-77.9813281800769,134162.302877049,-78.2627263129586,134.596907260711,-85.6024208612478,0.129887547336254,161.625680688496,202.462283038344,41.8542928836478,201.200428955647,60.0034103393555,0.000165305100381374,97.1724395751953,108.873596191406,11.7011566162109 +"2011-11-29 19:40:57.600",-77.9402501986553,134161.184762167,-78.2207317985318,134.641057642003,-97.4975527420224,0.157763722254849,161.6577448024,202.559368060893,41.9164321922099,201.215903673151,60.0034141540527,"7.62753188610077E-05",97.1853790283203,108.873344421387,11.6879653930664 +"2011-11-29 19:40:57.633",-77.8999751245171,134162.241080851,-78.1782996082965,134.624492121376,-111.659787458999,0.128931592581142,161.716415333266,202.48966970637,41.9478669830232,201.277096451283,60.0034141540527,-0.000127153471112251,97.1672592163086,108.864532470703,11.6972732543945 +"2011-11-29 19:40:57.666",-77.8596463731306,134163.598829378,-78.1530065370012,134.526328048101,-143.307336357651,0.00771613105998169,161.732757910193,202.343639215457,41.9638545344022,201.232889526827,60.0033988952637,-0.000356035307049751,97.1824417114258,108.892242431641,11.7098007202148 +"2011-11-29 19:40:57.700",-77.8186971865986,134161.356834908,-78.1245851129834,134.505385706885,131.314223832841,0.0451255102792305,161.776279683297,202.34847937802,41.9814310509836,201.207572611587,60.0034027099609,0.000190730206668377,97.1758422851563,108.875831604004,11.6999893188477 +"2011-11-29 19:40:57.733",-77.777441435927,134159.24225691,-78.0804659463446,134.576426798139,125.350638351783,0.0460061020633702,161.818522129121,202.337427650615,42.026203003504,201.434722400913,60.0034027099609,"1.39698386192322E-08",97.1664505004883,108.887313842773,11.7208633422852 +"2011-11-29 19:40:57.766",-77.7361267650382,134159.721000202,-78.0492960755376,134.569349697369,-70.2658350150752,0.0644608553283521,161.845832002439,202.192892391308,42.0534825159743,201.451921835695,60.0034065246582,0.000203442759811878,97.1818695068359,108.863395690918,11.681526184082 +"2011-11-29 19:40:57.800",-77.6956770259447,134160.835423516,-77.9943478326543,134.515706325871,-115.692131415317,0.0763969936287003,161.924715559479,202.161716692019,42.1002183320788,201.325438942,60.0034065246582,0,97.1853485107422,108.863418579102,11.6780700683594 +"2011-11-29 19:40:57.833",-77.6551712321856,134161.701904669,-77.9233891287354,134.510082727654,-158.148735726342,0.0671476147370777,161.9883997492,202.273755849108,42.1841135651001,201.245659254329,60.0034103393555,0.0002288818359375,97.18017578125,108.867919921875,11.687744140625 +"2011-11-29 19:40:57.866",-77.6143474574941,134162.271314186,-77.8897140493333,134.608954702336,-90.0014113817359,0.089784033623756,161.987543086094,202.398415415091,42.2390342830035,201.341638780416,60.0034103393555,-0.000330624170601368,97.1754760742188,108.877044677734,11.7015686035156 +"2011-11-29 19:40:57.900",-77.5740094480335,134163.002385693,-77.8889838955497,134.659215603767,-116.440307806593,0.184758417118277,162.004806372997,202.380233791028,42.2504628845384,201.453851069397,60.0033874511719,-0.000762920826673508,97.1542892456055,108.877754211426,11.7234649658203 +"2011-11-29 19:40:57.933",-77.5335243989287,134161.531976937,-77.8538828234888,134.57855141009,-141.894042959088,0.150656743908432,162.039620627063,202.315969310839,42.29166903939,201.354688421885,60.0033760070801,"-6.35767355561256E-05",97.1703796386719,108.857116699219,11.6867370605469 +"2011-11-29 19:40:57.966",-77.4923286653702,134159.905068189,-77.7762798875702,134.587050171078,-47.132447555957,0.0617711889921135,162.08836657998,202.377501732497,42.3508188986882,201.331526362193,60.0033874511719,0.000546779483556747,97.1721725463867,108.897857666016,11.7256851196289 +"2011-11-29 19:40:58.000",-77.4509112347503,134159.198896598,-77.7410751702366,134.651462948571,-37.4346426517329,0.144206772765873,162.137938505291,202.430976051341,42.3539894373627,201.414136517042,60.0034065246582,0.000495901331305504,97.1626815795898,108.884284973145,11.7216033935547 +"2011-11-29 19:40:58.033",-77.4095514831122,134160.157461845,-77.7215724458432,134.598123168637,-176.544305856694,0.0835089766927387,162.186275217287,202.434719722128,42.3945444610006,201.373144215486,60.00341796875,0.000483188778162003,97.1825408935547,108.873954772949,11.6914138793945 +"2011-11-29 19:40:58.066",-77.3688201719761,134160.288037263,-77.6549297397074,134.514802484402,135.063129669202,0.167137396295174,162.226350196612,202.388977679963,42.4901491024049,201.297115557987,60.0034255981445,0,97.1867980957031,108.862236022949,11.6754379272461 +"2011-11-29 19:40:58.100",-77.329073709997,134161.633544433,-77.5889594775802,134.474927374784,64.6040827418839,0.198043835007765,162.261223599755,202.295161409378,42.527050188544,201.287198069914,60.0034255981445,-0.000152564607560635,97.168327331543,108.866012573242,11.6976852416992 +"2011-11-29 19:40:58.133",-77.2888005975436,134162.032790637,-77.5643848403088,134.454914247992,39.3120368407962,0.17413130028864,162.294469068028,202.254274336997,42.5332741601333,201.190095291372,60.0033988952637,-0.000635795295238495,97.1804122924805,108.882621765137,11.7022094726563 +"2011-11-29 19:40:58.166",-77.2473969493642,134161.912074355,-77.533577370905,134.532667946039,-42.6783458373035,0.0640194383232498,162.336944998633,202.362126605601,42.5862412148879,201.184275126412,60.0033950805664,0,97.1969757080078,108.88956451416,11.6925888061523 +"2011-11-29 19:40:58.200",-77.2059887002601,134162.352530665,-77.499399300856,134.571254430074,-44.8480385903899,0.0239047373687354,162.375752855855,202.335939953747,42.6223853105416,201.358615835145,60.0033950805664,"1.27265229821205E-05",97.1824645996094,108.876083374023,11.6936187744141 +"2011-11-29 19:40:58.233",-77.1652844223869,134162.736041472,-77.45785678274,134.564616196142,-5.4669220739696,0.0976995325048141,162.413427246288,202.252956708632,42.644965426547,201.411522336083,60.0033950805664,0,97.19091796875,108.861289978027,11.6703720092773 diff --git a/PMUSimulator/Doxyfile b/PMUSimulator/Doxyfile new file mode 100755 index 0000000..48c46bb --- /dev/null +++ b/PMUSimulator/Doxyfile @@ -0,0 +1,1285 @@ + # ----------------------------------------------------------------------------- + # Doxyfile for documentation of PMU Simulator + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # 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. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = PMU Simulator + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = YES + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = gif + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = /usr/local/bin/dot + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/PMUSimulator/Makefile b/PMUSimulator/Makefile new file mode 100755 index 0000000..08bc08b --- /dev/null +++ b/PMUSimulator/Makefile @@ -0,0 +1,98 @@ + # ----------------------------------------------------------------------------- + # Makefile for building PMU Simulator + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # 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. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + + +SHELL = /bin/sh +prefix = /usr/local +includedir = /usr/src/include + +INSTALL = /usr/bin/install -c +INSTALL_PREFIX = /usr/local/ +CREATE_DIR = /usr/local/share/ +DESKTOP_DIR = /usr/share/applications + +FILE1 = pmu.xml +FILE2 = PmuLogo.png +FILE3 = PSLab.PNG +FILE4 = PmuLogo1.png +FILE5 = logo.png +FILE6 = PMU.desktop +#FILE7 = DataDir + +CC = gcc +LIBS = -lpthread -lm -lrt +LDLIBS=`pkg-config --cflags --libs gtk+-2.0` +CFLAGS= -fcommon `pkg-config --cflags --cflags gtk+-2.0` + +SOURCES = \ + pmu.c \ + PmuGui.c PmuGui.h \ + function.c function.h \ + ServerFunction.c ServerFunction.h \ + CfgFunction.c CfgFunction.h \ + CfgGuiFunctions.c CfgGuiFunctions.h \ + +OBJECTS = pmu.c PmuGui.o function.o ServerFunction.o CfgFunction.o CfgGuiFunctions.o +CLEAN_OBJECTS = PmuGui.o function.o ServerFunction.o CfgFunction.o CfgGuiFunctions.o pmu.xml + +PROGRAM = PMU + +COMPILE = $(CC) + +$(PROGRAM): $(OBJECTS) + $(CC) $(OBJECTS) $(LDLIBS) $(LIBS) -o $@ + +%.o: %.c + $(COMPILE) $(CFLAGS) -c $< + +install: $(PROGRAM) + gtk-builder-convert pmu.glade pmu.xml + mkdir -p $(CREATE_DIR)PMU/$ + cp -f $(FILE1) $(CREATE_DIR)PMU/$(FILE1) + cp -f images/$(FILE2) $(CREATE_DIR)PMU/$(FILE2) + cp -f images/$(FILE3) $(CREATE_DIR)PMU/$(FILE3) + cp -f images/$(FILE4) $(CREATE_DIR)PMU/$(FILE4) + cp -f images/$(FILE5) $(CREATE_DIR)PMU/$(FILE5) + cp -f images/$(FILE6) $(DESKTOP_DIR)/$(FILE6) + cp $(PROGRAM) $(INSTALL_PREFIX)bin/$(PROGRAM) + mkdir -p $(HOME)/iPDC/DataDir + mkdir -p $(HOME)/iPDC/DataDir/50Hz_measurement_files + mkdir -p $(HOME)/iPDC/DataDir/60Hz_measurement_files + cp -f -r ./DataDir/50Hz_measurement_files/* $(HOME)/iPDC/DataDir/50Hz_measurement_files #-i -n for Debian based Linux + cp -f -r ./DataDir/60Hz_measurement_files/* $(HOME)/iPDC/DataDir/60Hz_measurement_files +# chmod 777 $(HOME)/iPDC/DataDir +# rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +uninstall: + rm -f $(INSTALL_PREFIX)bin/$(PROGRAM) + rm -rf $(CREATE_DIR)PMU$ + rm -rf $(DESKTOP_DIR)/$(FILE6) + rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +clean: + rm -f $(CLEAN_OBJECTS) $(PROGRAM) diff --git a/PMUSimulator/PmuGui.c b/PMUSimulator/PmuGui.c new file mode 100755 index 0000000..59ae456 --- /dev/null +++ b/PMUSimulator/PmuGui.c @@ -0,0 +1,1063 @@ +/* ----------------------------------------------------------------------------- + * PmuGui.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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." Not a valid port number! Try again "; + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "PmuGui.h" +#include "ServerFunction.h" +#include "CfgFunction.h" +#include "CfgGuiFunctions.h" +#include "ShearedMemoryStructure.h" +#include "function.h" + +#define MAX_STRING_SIZE 5000 + +/* -------------------------------------------------------------------------------------- */ +/* Functions in PmuGui.c */ +/* -------------------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------------- */ +/* */ +/* 1. int isNumber(char *s); */ +/* 2. int checkip(char ip[]); */ +/* 3. void destroy (GtkWidget *widget, gpointer udata); */ +/* 4. GdkPixbuf *create_pixbuf(const gchar * filename); */ +/* 5. void about_pmu (GtkButton *widget, gpointer udata); */ +/* 6. void Pmu_Help (GtkButton *but, gpointer udata); */ +/* 7. void validation_result (char *msg); */ +/* 8. void pmu_colors(); */ +/* 9. int validation_pmu_server (GtkButton *button, gpointer udata); */ +/* 10. void pmu_server (); */ +/* 11. void manage_data_sources(); */ +/* 12. void Set_data_source(GtkWidget *widget, gpointer udata); */ +/* 13. void file_ok_sel(GtkWidget *w, GtkFileSelection *fs); */ +/* 14. void pmu_setup_file_selection(GtkWidget *widget, gpointer udata); */ +/* 15. void view_setup_file (GtkWidget *w, GtkFileSelection *fs); */ +/* 16. void apply_pmu_setup (GtkWidget *w, gpointer udata); */ +/* 17. void* display_time(); */ +/* */ +/* ---------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION isNumber(char *s): */ +/* It checks the passing character is a number or not, return 0 if its a */ +/* otherwise returns 1. */ +/* ---------------------------------------------------------------------------- */ + +int isNumber(char *s) +{ + int dot=0, num=0, end=0; + + while(isspace(*s))s++; + if(! *s)return 0; + while(*s) + if(isspace(*s)) + end=1, s++; + else if(end) + return 0; + else if(isdigit(*s)) + num=1, s++; + else if(*s=='.') + if(dot) + return 0; + else + dot=1,s++; + else + return 0; + return num; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION checkip(char ip[]) */ +/* It checks the IP address of passing argument with IP standards. */ +/* Returns 0 in case of correct otherwise 1. */ +/* ---------------------------------------------------------------------------- */ + +int checkip(char ip[]) +{ + struct sockaddr_in sa; + int result = inet_pton(AF_INET, ip, &(sa.sin_addr)); + + return result; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION destroy (GtkWidget *widget, gpointer udata) */ +/* It Destroy(& close) the PMU Simulator & his both processes. */ +/* ---------------------------------------------------------------------------- */ + +void destroy (GtkWidget *widget, gpointer udata) +{ + kill(pidLocal, SIGKILL); + + gtk_main_quit(); + + g_print ("PMU Simulator Closing Now.\n"); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION GdkPixbuf *create_pixbuf(const gchar * filename) */ +/* function creates a new pixbuf by loading an image from a file. */ +/* The file format is detected automatically. If NULL, error will be set. */ +/* ---------------------------------------------------------------------------- */ + +GdkPixbuf *create_pixbuf(const gchar * filename) +{ + GdkPixbuf *pixbuf; + GError *error = NULL; + + pixbuf = gdk_pixbuf_new_from_file(filename, &error); + + if(!pixbuf) + { + fprintf(stderr, "%s\n", error->message); + g_error_free(error); + } + + return pixbuf; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION about_pmu (GtkButton *widget, gpointer udata) */ +/* It display the information about PMU Simulator Software like authors, */ +/* licensing, features, usage, etc. */ +/* ---------------------------------------------------------------------------- */ + +void about_pmu (GtkButton *widget, gpointer udata) +{ + /* Create a about dialog for displaying about the iPDC. */ + about_dialog = gtk_about_dialog_new (); + + const gchar *auth[] = {"\nDr. A.M. Kulkarni ", "\nNitesh Pandit ", "\nKedar V. Khandeparkar ", "\nGopal Gajjar ", NULL}; + + /* Define the diffrent properties of about_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)about_dialog, " "); + gtk_about_dialog_set_comments ((GtkAboutDialog *)about_dialog, "Authors :\nNitesh Pandit\nKedar Khandeparkar");//\n\nWide Aera Measurement System\nDepartment of Electrical Engineering\nIndian Institute of Technology, Bombay\nMumbai, INDIA"); + + gtk_about_dialog_set_license ((GtkAboutDialog *)about_dialog, "iPDC - A Phasor Data Concentrator & PMU Simulator\n\nGeneral Public License (GPL)\n\nAuthors:\n\t\tNitesh Pandit \n\t\tKedar V. Khandeparkar \n\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"); + + gtk_about_dialog_set_logo ((GtkAboutDialog *)about_dialog, create_pixbuf("/usr/local/share/PMU/PmuLogo1.png")); + gtk_about_dialog_set_website ((GtkAboutDialog *)about_dialog, "\nhttp://ipdc.codeplex.com/\n"); + gtk_about_dialog_set_copyright ((GtkAboutDialog *)about_dialog, "Copyright (C) 2011-2012 GPL3"); + gtk_about_dialog_set_authors ((GtkAboutDialog *)about_dialog, auth); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (about_dialog, "response", G_CALLBACK (gtk_widget_destroy), about_dialog); + + /* Finally show the about_dialog. */ + gtk_widget_show_all (about_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION Pmu_Help (GtkButton *but, gpointer udata) */ +/* It shows the general guidelines to user to fill the entries for connecting, */ +/* or disconnecting devices in PMU Simulator Software. */ +/* ---------------------------------------------------------------------------- */ + +void Pmu_Help (GtkButton *but, gpointer udata) +{ + /* Create the widgets */ + help_dialog = gtk_about_dialog_new (); + + gtk_about_dialog_set_program_name ((GtkAboutDialog *)help_dialog, "PMU HELP\n"); + gtk_about_dialog_set_comments ((GtkAboutDialog *)help_dialog, "1) ID Code should be integer i.e. 50, 60, etc.\t\t\t\n\n2) Port should be greater than 1500 and less than 65535.\t\n\n3) Channel Name could be upto 16 characters.\t\t\t\n\n4) Enter the integer value for phasors, analogs and digitals.\n\n5) Fixed/Floating point and Rectangular/Polar are the\t\trepresentation of measurements."); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (help_dialog, "response", G_CALLBACK (gtk_widget_destroy), help_dialog); + gtk_widget_show_all (help_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_result (char *msg) */ +/* It displays the status message of performed operation. */ +/* ---------------------------------------------------------------------------- */ + +void validation_result (char *msg) +{ + GtkWidget *val_dialog; + + /* Create the widgets a new dialog box */ + val_dialog = gtk_about_dialog_new (); + + /* Define the diffrent properties of val_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)val_dialog, " "); + gtk_about_dialog_set_comments ((GtkAboutDialog *)val_dialog, msg); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (val_dialog, "response", G_CALLBACK (gtk_widget_destroy), val_dialog); + + /* Finally show the val_dialog. */ + gtk_widget_show_all (val_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION pmu_colors() */ +/* It fills the colors in text on lables and set the images on given buttons. */ +/* It called in main only one time to initialized all the parameters. */ +/* ---------------------------------------------------------------------------- */ + +void pmu_colors() +{ + GtkTextBuffer *buffer, *buffer1; + GtkTextMark *cursor, *cursor1; + GtkTextIter iter, iter1; + + /* Set the font and color for the heading on 'welcome_pmu' lable, and others */ + markup = g_markup_printf_escaped ("Admin Operations"); + gtk_label_set_markup (GTK_LABEL (pmu_data->admin_label), markup); + g_free (markup); + + markup = g_markup_printf_escaped ("@All Rights Reserved"); + gtk_label_set_markup (GTK_LABEL (pmu_data->rights_lable), markup); + g_free (markup); + + /* Set the general image on a textview */ + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (pmu_data->text_view)); + cursor = gtk_text_buffer_get_insert (buffer); + gtk_text_buffer_get_iter_at_mark (buffer, &iter, cursor); + gtk_text_buffer_insert_pixbuf (buffer, &iter, create_pixbuf("/usr/local/share/PMU/PSLab.PNG")); + gtk_widget_show (pmu_data->text_view); + + /* Set the image (PMU-logo) on a specific textview1 */ + buffer1 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (pmu_data->text_view1)); + cursor1 = gtk_text_buffer_get_insert (buffer1); + gtk_text_buffer_get_iter_at_mark (buffer1, &iter1, cursor1); + gtk_text_buffer_insert_pixbuf (buffer1, &iter1, create_pixbuf("/usr/local/share/PMU/PmuLogo.png")); + gtk_widget_show (pmu_data->text_view1); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_pmu_server (GtkButton *button, gpointer udata) */ +/* It Validates the user enterd details for PMU Simulator. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_pmu_server (GtkButton *button, gpointer udata) +{ + /* local variables */ + int tmp_p; + char *msg; + const char *text1, *text2; + + /* Get the text entries filled by user */ + text1 = gtk_entry_get_text(GTK_ENTRY(udp_port)); + text2 = gtk_entry_get_text(GTK_ENTRY(tcp_port)); + + if(!isNumber((char *)text1) || !(atoi(text1) > 1500 && atoi(text1) < 65535) || (atoi(text2) == 9000)) + { + msg = " Not a valid UDP port number, must not be 9000! Try again "; + validation_result (msg); /* Show the failure message to user */ + return 0; + } + if(!isNumber((char *)text2) || !(atoi(text2) > 1500 && atoi(text2) < 65535) || (atoi(text2) == 9000)) + { + msg = " Not a valid TCP port number, must not be 9000! Try again "; + validation_result (msg); /* Show the failure message to user */ + return 0; + } + if(atoi(text1) == atoi(text2)) /* Check for valid port number */ + { + msg = " UDP and TCP ports cannot be identical! Try again "; + validation_result (msg); /* Show the failure message to user */ + return 0; + } + else + { + PMU_uport = atoi(text1); + PMU_tport = atoi(text2); + + p1 = *ShmPTR; + p1.cfg_bit_change_info = 0; + ShmPTR->cfg_bit_change_info = 0; + ShmPTR->UdpPort = atoi(text1); + ShmPTR->TcpPort = atoi(text2); + + p1.pid = ShmPTR->pid; + kill(p1.pid, SIGUSR2); + memset(pmuFilePath, '\0', 200); + printf("UDP and TCP ports value has been sent to PMU Server through signal.\n"); + + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->create_cfg_button), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_setup_cfg), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->start_server), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->open_cfg), FALSE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_data_source), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_header_frm), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_cfg_modify), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_stat_modify), FALSE); + + /* Close/destroy the pmu_server_window */ + gtk_widget_destroy(pmu_server_window); + + cfg_create_function (NULL, "PMU Configuration Setup"); + return 1; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION pmu_server () */ +/* It displays the windows for entring PMU Server details to user. */ +/* ---------------------------------------------------------------------------- */ + +void pmu_server () +{ + /* local variables */ + GtkWidget *table, *label, *cancel_button; + GtkWidget *valdbutton, *help_button; + + /* Create a new dialog window for PMU Server Setup */ + pmu_server_window = gtk_dialog_new (); + g_signal_connect (pmu_server_window, "destroy", G_CALLBACK (gtk_widget_destroy), pmu_server_window); + gtk_window_set_title (GTK_WINDOW (pmu_server_window), "PMU Server Setup"); + gtk_container_set_border_width (GTK_CONTAINER (pmu_server_window), 10); + + /* Create a table of 4 by 2 squares. */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 50 on x and 5 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(pmu_server_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Run"); + help_button = gtk_button_new_with_label ("Help"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter PMU Server Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + udp_port = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)udp_port, 5); + gtk_table_attach_defaults (GTK_TABLE (table), udp_port, 1, 2, 2, 3); + gtk_widget_show (udp_port); + + /* Create combo boxe for user with some fixed values */ + tcp_port = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)tcp_port, 5); + gtk_table_attach_defaults (GTK_TABLE (table), tcp_port, 1, 2, 3, 4); + gtk_widget_show (tcp_port); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Use the unreserved ports for PMU Server."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for buttons on PMU Server Setup Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (validation_pmu_server), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (Pmu_Help), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), pmu_server_window); + g_signal_connect_swapped (pmu_server_window, "response", G_CALLBACK (gtk_widget_destroy), pmu_server_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pmu_server_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pmu_server_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pmu_server_window)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the pmu_server_window */ + gtk_widget_show (pmu_server_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION manage_data_sources() */ +/* It displays the option window to user for selection of data/measurement */ +/* source. Either auto generated or from measurement file. */ +/* ---------------------------------------------------------------------------- */ + +void manage_data_sources() +{ + /* local variables */ + GtkWidget *table; + GtkWidget *close_butn, *label; + GtkWidget *Addbutton, *Removebutton; + + /* Create a new dialog window for the Option Window */ + data_managing_window = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (data_managing_window), "Select Data Source"); + gtk_container_set_border_width (GTK_CONTAINER (data_managing_window), 10); + + /* Create a table of 4 by 2 squares */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(data_managing_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Select Measurement Source"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Add few radio buttons on the dialog window */ + Addbutton = gtk_radio_button_new_with_label (NULL, "Auto Genetared"); + gtk_table_attach_defaults (GTK_TABLE (table), Addbutton, 0, 1, 2, 3); + if (ShmPTR->dataFileVar == 0 ) + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (Addbutton), TRUE); + } + gtk_widget_show (Addbutton); + + Removebutton = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (Addbutton), "Measurement File"); + gtk_table_attach_defaults (GTK_TABLE (table), Removebutton, 0, 1, 3, 4); + if (ShmPTR->dataFileVar == 1 ) + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (Removebutton), TRUE); + } + gtk_widget_show (Removebutton); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Auto Genetared Data may be raw measurements.\nMay use CSV file of Phasor measurements.\nFor CSV file format see our Sample measurements files."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Add 'Close' buttons on the dialog window */ + close_butn = gtk_button_new_with_label ("Close"); + + /* Signal handling for buttons on Option Window */ + g_signal_connect (Addbutton, "toggled", G_CALLBACK (Set_data_source), (gpointer) "1"); + g_signal_connect (Removebutton, "toggled", G_CALLBACK (Set_data_source), (gpointer) "2"); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), data_managing_window); + g_signal_connect_swapped (data_managing_window, "response", G_CALLBACK (gtk_widget_destroy), data_managing_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (data_managing_window)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the data_managing_window */ + gtk_widget_show (data_managing_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION Set_data_source(GtkWidget *widget, gpointer udata) */ +/* It will show user the dialog box that have browser of his system to */ +/* choose the file for measurements reading, otherwise just raw data. */ +/* ---------------------------------------------------------------------------- */ + +void Set_data_source(GtkRadioButton *radiobutton, gpointer udata) +{ + char *file_path; + file_path = malloc(200*sizeof(char)); + strcpy(file_path, getenv("HOME")); + strcat(file_path,"/iPDC/DataDir/"); + + if(strcmp("Auto Genetared", gtk_button_get_label(GTK_BUTTON(radiobutton)))) + { + strcpy(ShmPTR->filePath, "nil"); + ShmPTR->dataFileVar = 0; + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR1); + printf("Raw Data selection is new choice of user, sent to the PMU Server by signal.\n"); + + gtk_widget_destroy(data_managing_window); + } + else + { + /* Create a new file selection widget */ + gtk_widget_destroy(data_managing_window); + + data_managing_window = gtk_file_selection_new ("PMU Simulator measurement file selection"); + + /* Connect the ok_button to file_ok_sel function */ + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (data_managing_window)->ok_button), "clicked", (GtkSignalFunc) file_ok_sel, data_managing_window ); + + /* Connect the cancel_button to destroy the widget */ + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (data_managing_window)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (data_managing_window)); + + /* Lets set the filename, as if this were a save dialog, and we are giving a default filename */ + gtk_file_selection_set_filename (GTK_FILE_SELECTION(data_managing_window), file_path); + + gtk_widget_show(data_managing_window); + } +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION file_ok_sel(GtkWidget *w, GtkFileSelection *fs) */ +/* This function gets the user file and check whether it has proper number */ +/* of columns or not, if yes then sent signal to server. */ +/* ---------------------------------------------------------------------------- */ + +void file_ok_sel(GtkWidget *w, GtkFileSelection *fs) +{ + /* Local Variables */ + int total_column, count; + char *l1, *d3, *d4; + + size_t l2 = 0; + FILE *temp_fp; + ssize_t result; + + char *s = (char *)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + + /* 3 for UNIX time stamp, FREQ & DFREQ */ + total_column = cfg_info->cfg_phnmr_val*2 + cfg_info->cfg_annmr_val + 3; + + /* Open the user given measurements in read mode */ + temp_fp = fopen(s, "r"); + + if (temp_fp == NULL) + { + validation_result(" Measurement File doesn't exist! "); + } + else + { + if ((result = getdelim(&l1, &l2, ('\n'), temp_fp)) >0) + { + d3 = strtok (l1, ","); + + for(count=1; ; count++) //count<=total_column + { + if((d4 = strtok (NULL,",")) == NULL) + break; + } + + if(count == total_column) + { + strcpy(ShmPTR->filePath, s); + ShmPTR->dataFileVar = 1; + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR1); + + fclose(temp_fp); + gtk_widget_destroy(data_managing_window); + + printf("\nInform PMU Server that Data Source has been changed to measurement file by signal.\n"); + validation_result(" Now measurements are taken from measurement file. "); + } + else + { + fclose(temp_fp); + validation_result("File data does not match with configuration!\nPlease Select a proper file as per your configuration."); + } + } + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION pmu_setup_file_selection(GtkWidget *widget, gpointer udata) */ +/* It will display a file selector window to the user. User have the */ +/* responsibility to choose the correct previously saved file for PMU Setup. */ +/* ---------------------------------------------------------------------------- */ + +void pmu_setup_file_selection(GtkWidget *widget, gpointer udata) +{ + char *file_path; + file_path = malloc( 200*sizeof(char)); + memset(file_path,'\0',200); + strcpy(file_path,getenv("HOME")); + strcat(file_path,"/iPDC/PMU/"); + + /* Create a new file selection widget */ + pmu_setup_window = gtk_file_selection_new ("PMU Setup File Selector"); + + /* Connect the ok_button to view_setup_file function */ + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (pmu_setup_window)->ok_button), "clicked", (GtkSignalFunc) view_setup_file, pmu_setup_window); + + /* Connect the cancel_button to destroy the widget */ + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (pmu_setup_window)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT (pmu_setup_window)); + + /* Lets set the filename, as if this were a save dialog, and we are giving a default filename */ + gtk_file_selection_set_filename (GTK_FILE_SELECTION(pmu_setup_window), file_path); + + gtk_widget_show(pmu_setup_window); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION view_setup_file(GtkWidget *w, GtkFileSelection *fs) */ +/* This function displays the different attributes of selected PMU Setup File. */ +/* It will show the PMU Server & CFG details before apply. */ +/* ---------------------------------------------------------------------------- */ + +void view_setup_file (GtkWidget *w, GtkFileSelection *fs) +{ + /* local variables */ + GtkWidget *table, *label; + GtkWidget *apply_button, *cancel_button; + + int tempi, i; + char stn[17], *s,*rline = NULL; + char *d1, buff[15], *markup; + unsigned int framesize; + unsigned char *line, tempC[2]; + size_t len = 0; + ssize_t read; + FILE *fp1; + + s = (char *)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + strcpy(fptr, s); + + gtk_widget_destroy(pmu_setup_window); + + fp1 = fopen(s, "rb"); + + if (fp1 == NULL) + { + validation_result(" PMU Setup file doesn't exist! Try again "); + } + else + { + /* If its available, then create a new dialog window for displaying the iPDC details. */ + setup_display_window = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (setup_display_window), "PMU Simulator Setup"); + gtk_container_set_border_width (GTK_CONTAINER (setup_display_window), 10); + + /* Create a table of ? by 2 squares */ + table = gtk_table_new (17, 2, FALSE); + + /* set the spacing to 10 on x and 10 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(setup_display_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "close" button to the bottom of the dialog */ + apply_button = gtk_button_new_with_label ("Apply"); + cancel_button = gtk_button_new_with_label ("cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("PMU Setup File Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Server Info"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Configuration Info"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 6, 7); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("PMU ID"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 7, 8); + gtk_widget_show (label); + + label = gtk_label_new ("Station Name"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 8, 9); + gtk_widget_show (label); + + label = gtk_label_new ("Pasor Number"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 9, 10); + gtk_widget_show (label); + + label = gtk_label_new ("Analog Number"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 10, 11); + gtk_widget_show (label); + + label = gtk_label_new ("Digital Number"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 11, 12); + gtk_widget_show (label); + + label = gtk_label_new ("Format Word"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 12, 13); + gtk_widget_show (label); + + label = gtk_label_new ("CFG Count"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 13, 14); + gtk_widget_show (label); + + label = gtk_label_new ("Data Rate "); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 14, 15); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Configuration information of selected PMU Setup file."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 16, 17); + gtk_widget_show (label); + g_free (markup); + + tempi = 1; + while(tempi < 4) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + if(tempi == 1) + { + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 3, 4); + gtk_widget_show (label); + } + else if(tempi == 2) + { + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 4, 5); + gtk_widget_show (label); + } + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL," "); + tempi = atoi(d1); + + if (tempi == 1) + { + d1 = strtok (NULL,"\n"); + framesize = atoi(d1); + + line = malloc(framesize*sizeof(unsigned char)); + fread(line, sizeof(unsigned char), framesize, fp1); + + tempC[0] = line[4]; + tempC[1] = line[5]; + + tempi = tempC[0]; + tempi<<=8; + tempi |=tempC[1]; + + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 7, 8); + gtk_widget_show (label); + + for(i=0; i<16; i++) + { + stn[i] = line[20+i]; + } + stn[16] = '\0'; + + label = gtk_label_new (stn); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 8, 9); + gtk_widget_show (label); + + tempC[0] = line[38]; + tempC[1] = line[39]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 12, 13); + gtk_widget_show (label); + + tempC[0] = line[40]; + tempC[1] = line[41]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 9, 10); + gtk_widget_show (label); + + tempC[0] = line[42]; + tempC[1] = line[43]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 10, 11); + gtk_widget_show (label); + + tempC[0] = line[44]; + tempC[1] = line[45]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 11, 12); + gtk_widget_show (label); + + tempC[0] = line[framesize-6]; + tempC[1] = line[framesize-5]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 13, 14); + gtk_widget_show (label); + + tempC[0] = line[framesize-4]; + tempC[1] = line[framesize-3]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 14, 15); + gtk_widget_show (label); + } + } + fclose(fp1); + + /* Define signal on ok_button when it "clicked". */ + g_signal_connect_swapped (apply_button, "clicked", G_CALLBACK (apply_pmu_setup), setup_display_window); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), setup_display_window); + g_signal_connect (setup_display_window, "destroy", G_CALLBACK (gtk_widget_destroy), setup_display_window); + + /* This makes it so the ok_button is the default. */ + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_widget_set_can_default (apply_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (setup_display_window)->action_area), apply_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (setup_display_window)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + gtk_widget_grab_default (apply_button); + gtk_widget_show (apply_button); + + /* Finally show the setup_display_window. */ + gtk_widget_show (setup_display_window); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION apply_pmu_setup (GtkWidget *w, gpointer udata) */ +/* This function apply the user selected PMU Setup File and go ahead with the */ +/* Setup file's information. */ +/* ---------------------------------------------------------------------------- */ + +void apply_pmu_setup (GtkWidget *w, gpointer udata) +{ + /* local variables */ + int tmp_p, tempi; + int tmudp_port, tmudp_port1; + char *d1, *rline=NULL; + + size_t len = 0; + FILE *fp1; + ssize_t read; + + gtk_widget_destroy(setup_display_window); + + /* Open the saved PMU Setup File and read the informations */ + fp1 = fopen (fptr,"rb"); + + if (fp1 != NULL) + { + tempi = 1; + + /* To get the PmuServer details from the setup file */ + while(tempi < 3) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + if(tempi == 1) + { + PMU_uport = atoi(rline); + tmudp_port = PMU_uport; + } + else + { + d1 = strtok (rline,"\n"); + PMU_tport = atoi(rline); + tmudp_port1 = PMU_tport; + } + tempi++; + } + + /* Make this file as a common file to operate on */ + memset(pmuFilePath,'\0',sizeof(pmuFilePath)); + strcpy(pmuFilePath, fptr); + fclose(fp1); + + if(read > 0) + { + /* Finally for starting the PMU Server */ + p1 = *ShmPTR; + p1.cfg_bit_change_info = 0; + ShmPTR->cfg_bit_change_info = 0; + ShmPTR->UdpPort = tmudp_port; + ShmPTR->TcpPort = tmudp_port1; + + PMU_uport = tmudp_port; + PMU_tport = tmudp_port1; + + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR2); + printf("UDP Port = %d & TCP Port = %d, info sent to PMU Server by signal.\n", PMU_uport, PMU_tport); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->pmu_properties), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_setup_cfg), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->start_server), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->open_cfg), FALSE); + + /* Finally creating the CFG objects */ + cfg_create_call(); + } + else + { + validation_result(" Not a PMU Setup File. Try again! "); + } + } + else + { + validation_result(" PMU Setup File doesn't exist! "); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION display_time() */ +/* Display the time on time lable on main PMU Simulator window. */ +/* ---------------------------------------------------------------------------- */ + +void* display_time() +{ + struct timeval tv; + struct tm* ptm; + char time_string[40]; + + while(1) + { + /* Obtain the time of day, and convert it to a tm struct. */ + gettimeofday (&tv, NULL); + + /* Format the date and time, down to a single second. */ + memset(time_string, '\0', 40); + ptm = localtime (&tv.tv_sec); + strftime (time_string, sizeof (time_string), "%Y-%m-%d, %H:%M:%S", ptm); + + gtk_label_set_text(GTK_LABEL(pmu_data->time_lable), time_string); + sleep(1); + } + + /* Exit the display time thread at the time of PMU Closing */ + pthread_exit(NULL); +} + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/PmuGui.h b/PMUSimulator/PmuGui.h new file mode 100755 index 0000000..e51c3ed --- /dev/null +++ b/PMUSimulator/PmuGui.h @@ -0,0 +1,153 @@ +/* ----------------------------------------------------------------------------- + * PmuGui.h + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#ifndef __SUPPORT_H__ +#define __SUPPORT_H__ + +#include + +/* Convenience macros for obtaining objects from UI file */ +#define CH_GET_OBJECT(builder, name, type, data) \ + data->name = type(gtk_builder_get_object (builder, #name) ) +#define CH_GET_WIDGET(builder, name, data) \ + CH_GET_OBJECT(builder, name, GTK_WIDGET, data) + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +/* PMU's main data structure definition */ +typedef struct _pmuStruct pmuStruct; + +struct _pmuStruct +{ + /* Main application window */ + GtkWidget *Pmu_Simulator; + + /* Main window button widgets */ + GtkWidget *create_cfg_button; + GtkWidget *header_frm_button; + GtkWidget *pmu_details_button; + GtkWidget *stat_modification_button; + GtkWidget *cfg_modification_button; + GtkWidget *manage_data_source; + + /* Manubar button widgets */ + GtkWidget *pmu_menubar; + GtkWidget *start_server; + GtkWidget *open_cfg; + GtkWidget *pmu_properties; + GtkWidget *exit_menuitem; + GtkWidget *about_menuitem; + + GtkWidget * menuitem2; + GtkWidget * menu_setup_cfg; + GtkWidget * menu_data_source; + GtkWidget * menu_cfg_modify; + GtkWidget * menu_stat_modify; + GtkWidget * menu_header_frm; + + /* Main window extra widgets */ + GtkWidget *rights_lable; + GtkWidget *admin_label; + GtkWidget *E_button; + GtkWidget *text_view; + GtkWidget *text_view1; + GtkWidget *time_lable; +}; + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int srvr_entry; +long int ps_thrd_id; +char *markup; + +/* iPDC Setup File path globaly */ +char pmuFolderPath[200]; +char pmuFilePath[200]; +char fptr[200]; + +pid_t pidLocal; +pmuStruct *pmu_data; +GtkWidget *pmu_server_window; +GtkWidget *p_id, *p_udp, *p_tcp, *p_ip; +GtkWidget *udp_port, *tcp_port; +GtkWidget *CCWin, *setup_display_window; +GtkWidget *data_managing_window; +GtkWidget *new_window; +GtkWidget *about_dialog; +GtkWidget *help_dialog; +GtkWidget *pmu_setup_window; + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +int checkip(char ip[]); + +int isNumber(char *s); + +void destroy (GtkWidget *widget, gpointer udata); + +GdkPixbuf *create_pixbuf(const gchar * filename); + +void about_pmu (GtkButton *widget, gpointer udata); + +void Pmu_Help (GtkButton *but, gpointer udata); + +void validation_result (char *msg); + +void pmu_colors(); + +void pmu_server (); + +int validation_pmu_server (GtkButton *button, gpointer udata); + +void manage_data_sources(); + +void Set_data_source(GtkRadioButton *radiobutton, gpointer udata); + +void file_ok_sel(GtkWidget *w, GtkFileSelection *fs); + +void pmu_setup_file_selection(GtkWidget *widget, gpointer udata); + +void view_setup_file (GtkWidget *w, GtkFileSelection *fs); + +void apply_pmu_setup (GtkWidget *w, gpointer udata); + +void* display_time(); + +#endif + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/ServerFunction.c b/PMUSimulator/ServerFunction.c new file mode 100755 index 0000000..ecf943a --- /dev/null +++ b/PMUSimulator/ServerFunction.c @@ -0,0 +1,1961 @@ +/* ----------------------------------------------------------------------------- + * ServerFunction.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "function.h" +#include "ServerFunction.h" +#include "ShearedMemoryStructure.h" + + +/* -------------------------------------------------------------------------------------- */ +/* Functions in ServerFunction.c */ +/* -------------------------------------------------------------------------------------- */ + +/* ----------------------------------------- */ +/* */ +/* 1. int get_header_frame(); */ +/* 2. void frame_size(); */ +/* 3. void generate_data_frame(); */ +/* 4. void* udp_send_data(); */ +/* 5. void* pmu_udp(); */ +/* 6. void* tcp_send_data(void * newfd); */ +/* 7. void* new_pmu_tcp(void * nfd); */ +/* 8. void* pmu_tcp(); */ +/* 9. void start_server(); */ +/* 10.void SIGUSR1_handler(int); */ +/* 11.void SIGUSR2_handler(int); */ +/* */ +/* ----------------------------------------- */ + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int df_pmu_id, df_fdf, df_af, df_pf, df_pn, df_phnmr, df_annmr, df_dgnmr; +int df_data_frm_size = 0, old_data_rate = 0, cfg_size, hdr_size=0; +int count = 0, pmuse=0, sc1 = 0, tcp_port, udp_port, tmp_wait = 1, df_fnom; +int UDP_sockfd, TCP_sockfd, TCP_sin_size, UDP_addr_len, PhasorType[50]; +int udp_cfg_flag = 0, tcp_cfg_flag = 0, tcp_data_flag = 0, udp_data_flag = 0; +int err, errno, udp_data_trans_off = 1, tcp_data_trans_off = 1, stat_flag = 0; + +int yes = 1; /* argument to setsockopt */ +int df_data_rate = 0; +int fsecNum = 0, PhasorType[50]; +long int df_soc, fsec = 0, curnt_soc = 0, prev_soc = 0,soc1,soc2; +long int send_thrd_id = 0; + +/* Initialize the pthread_mutex for PDC Objects */ +pthread_mutex_t mutex_pdc_object = PTHREAD_MUTEX_INITIALIZER; + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION get_header_frame(): */ +/* This function get the header frame from the PMU Setup File. */ +/* ---------------------------------------------------------------------------- */ + +int get_header_frame() +{ + /* Local variables */ + int tempi; + char *rline = NULL, *d1; + ssize_t read; + size_t len = 0; + FILE *fp1; + + /* Open the PMU Setup File to read the header frame, if present in file? */ + fp1 = fopen (pmuFilePath,"rb"); + + tempi = 1; + + /* Read all the unnecessary lines - PMUServer and CFG */ + while(tempi < 6) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + if(tempi > 0) + { + fread(hdrline, sizeof(unsigned char), tempi, fp1); + fclose(fp1); + return 1; + } + } + else + { + printf("\nHeader Frame is not created by the PMU operator.\n"); + } + + return 0; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION frame_size(): */ +/* Function To calculate the recent data frame size via reading cfg frm. */ +/* Also initializing some of global variables. */ +/* ---------------------------------------------------------------------------- */ + +void frame_size() +{ + /* Local variables */ + int format, i, j; + int tempi,index=2; + long int temp_li; + char filename[200]; + char *rline = NULL, *d1; + ssize_t read; + size_t len = 0; + FILE *fp1; + + strcpy(filename, pmuFilePath); + + /* Open the PMU Setup File and read the last CFG frame */ + fp1 = fopen (filename,"rb"); + + if (fp1 != NULL) + { + tempi = 1; + + /* Read all the unnecessary lines - PMUServer only */ + while(tempi < 4) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL," "); + tempi = atoi(d1); + + if (tempi == 1) + { + memset(cline,'\0',sizeof(cline)); + + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + /* Copy the complete Configuration frame into an unsigned charactor array called cline */ + fread(cline, sizeof(unsigned char), tempi, fp1); + fclose(fp1); + + /* Get the CFG size & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + cfg_size = c2i(df_temp); + cline[cfg_size] = '\0'; + + /* Get the PMU ID from CFG FRM & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + df_pmu_id = c2i(df_temp); + index = index + 32; + + /* Get the FORMAT word from CFG FRM */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + format = c2i(df_temp); + + /* Initialize the format bits as in his appropriate global variable */ + if(format == 15) + { + df_fdf=1, df_af=1, df_pf=1, df_pn=1; + } + else if(format == 14) + { + df_fdf=1, df_af=1, df_pf=1, df_pn=0; + } + else if(format == 13) + { + df_fdf=1, df_af=1, df_pf=0, df_pn=1; + } + else if(format == 12) + { + df_fdf=1, df_af=1, df_pf=0, df_pn=0; + } + else if(format == 11) + { + df_fdf=1, df_af=0, df_pf=1, df_pn=1; + } + else if(format == 10) + { + df_fdf=1, df_af=0, df_pf=1, df_pn=0; + } + else if(format == 9) + { + df_fdf=1, df_af=0, df_pf=0, df_pn=1; + } + else if(format == 8) + { + df_fdf=1, df_af=0, df_pf=0, df_pn=0; + } + else if(format == 7) + { + df_fdf=0, df_af=1, df_pf=1, df_pn=1; + } + else if(format == 6) + { + df_fdf=0, df_af=1, df_pf=1, df_pn=0; + } + else if(format == 5) + { + df_fdf=0, df_af=1, df_pf=0, df_pn=1; + } + else if(format == 4) + { + df_fdf=0, df_af=1, df_pf=0, df_pn=0; + } + else if(format == 3) + { + df_fdf=0, df_af=0, df_pf=1, df_pn=1; + } + else if(format == 2) + { + df_fdf=0, df_af=0, df_pf=1, df_pn=0; + } + else if(format == 1) + { + df_fdf=0, df_af=0, df_pf=0, df_pn=1; + } + else + { + df_fdf=0, df_af=0, df_pf=0, df_pn=0; + } + + /* Get the PHNMR from CFG FRM & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + df_phnmr = c2i(df_temp); + + /* Get the df_annmr from CFG FRM & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + df_annmr = c2i(df_temp); + + /* Get the df_dgnmr from CFG FRM & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + df_dgnmr = c2i(df_temp); + + /* To escape the some of fields in cfg frame */ + index = index + (16*df_phnmr) + (16*df_annmr) + (256*df_dgnmr); + + /* Extract the value of PHUNIT for each Phasor channel */ + for(i=0, j=0; i<(df_phnmr); i++, j++) + { + if(cline[index++] == 0) + temp_pahsor_type[j] = 0; + else + temp_pahsor_type[j] = 1; + + temp_li =cline[index++]; + temp_li<<=8; + temp_li |=cline[index++]; + temp_li<<=8; + temp_li |=cline[index++]; + + temp_PHUNIT_val[j] = temp_li; + } + + /* Extract the value of ANUNIT for each Analog channel */ + for(i=0, j=0; i<(df_annmr); i++, j++) + { + temp_analog_type[j] = (int)cline[index++]; + + temp_li =cline[index++]; + temp_li<<=8; + temp_li |=cline[index++]; + temp_li<<=8; + temp_li |=cline[index++]; + + temp_ANUNIT_val[j] = temp_li; + } + index = index + (4*df_dgnmr); // for skiping 2 byte for DIGUNIT + + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + int temp_df_fnom = c2i(df_temp); + if(temp_df_fnom == 0) + { + df_fnom = 60; + printf("Set Fnom = 60\n"); + } + else + { + df_fnom = 50; + printf("Set Fnom = 50\n"); + } + + df_temp[0] = cline[cfg_size-4]; + df_temp[1] = cline[cfg_size-3]; + df_data_rate = c2i(df_temp); + + /* Calculate the data frame size */ + df_data_frm_size = 0; + df_data_frm_size = df_data_frm_size + 18; /* 18 Bytes or 36 char is sum of all static fields in data frame */ + + /* Calculate 4/8 bytes for each PHNMR & store globally */ + if (df_pf == 0) + { + df_data_frm_size = df_data_frm_size + (4*df_phnmr); + } + else + { + df_data_frm_size = df_data_frm_size + (8*df_phnmr); + } + + /* Calculate 2/4 bytes for each df_annmr & store globally */ + if (df_af == 0) + { + df_data_frm_size = df_data_frm_size + (2*df_annmr); + } + else + { + df_data_frm_size = df_data_frm_size + (4*df_annmr); + } + + /* Calculate 2/4 bytes for both (FREQ + DFREQ) & store globally */ + if (df_fdf == 0) + { + df_data_frm_size = df_data_frm_size + 4; + } + else + { + df_data_frm_size = df_data_frm_size + 8; + } + + /* Calculate 2 bytes for each DGNMR & store globally */ + df_data_frm_size = df_data_frm_size + (2*df_dgnmr); + printf("PMU Server : Calculated data frame would be %d Bytes.\n", df_data_frm_size); + } + } + } /* end of else of fopen*/ + + else + exit(1); +} /* end of function frame_size() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION generate_data_frame(): */ +/* Function to generate the data frame. Based on the Configuration Frame */ +/* attributes. */ +/* ---------------------------------------------------------------------------- */ + +void generate_data_frame() +{ + /* local variables */ + int freqI, phasorI, analogI; + int indx = 0, j, temp_i, freq, dfreq, dsw = 0, ka = 1; + int analog[3] = {100, 1000, 10000}, rand_ph, rand_ang; + long int freq_f, dfreq_f, analog_f; + + float freqF, phasorF, analogF; + float phasor = 100.85, angle, result, TB; + struct timespec *cal_timeSpec, *cal_timeSpec1; + cal_timeSpec = malloc(sizeof(struct timespec)); + cal_timeSpec1 = malloc(sizeof(struct timespec)); + + TB = powf(2,24); + + /* If configuration has changed then call the function "frame_size()" to read new CFG and + reinitialize global variables & generate new Data frames with STAT word bit-10(CFG change bit) + set to 1 till CFG request not received from connected PDC */ + + memset(data_frm,'\0',sizeof(df_data_frm_size)); + + /* Insert SYNC Word in data frame */ + data_frm[indx++] = 0xAA; + data_frm[indx++] = 0x01; + + /* Insert data frame size in data frame */ + i2c(df_data_frm_size, df_temp); + B_copy(data_frm, df_temp, indx, 2); + indx = indx + 2; + + /* Insert PMU ID in data frame */ + i2c(df_pmu_id, df_temp); + B_copy(data_frm, df_temp, indx, 2); + indx = indx + 2; + + /* Insert SOC value in data frame */ + /* No PPS so have to manage by seeing local time */ + clock_gettime(CLOCK_REALTIME, cal_timeSpec); + if (fsecNum >= df_data_rate) + { + cal_timeSpec->tv_sec ++; + fsecNum = 0; + } + df_soc = (long)cal_timeSpec->tv_sec; + li2c(df_soc, df_temp_1); + B_copy(data_frm, df_temp_1, indx, 4); + indx = indx + 4; + + /* Insert Time Quality flag + fraction of second in data frame */ + fsec = roundf(fsecNum*TB/df_data_rate); + li2c(fsec, df_temp_1); + B_copy(data_frm, df_temp_1, indx, 4); + indx = indx + 4; + fsecNum += 1; + + /* Insert STAT Word in data frame Default or Changed */ + time_t curnt_soc = time(NULL); + if(pmuse == 0) + { + prev_soc = curnt_soc; + } + + if((curnt_soc-prev_soc) > 1) + { + printf("\tSTAT word Changed due to PMU SYNC Error."); + data_frm[indx++] = 0x20; + data_frm[indx++] = 0x00; + } + else + { + /* If not insert default STAT Word: 0000 */ + data_frm[indx++] = 0x00; + data_frm[indx++] = 0x00; + } + + prev_soc = curnt_soc; + pmuse = 1; + + /*----------------Auto Generated Data------------------*/ + + if(dataFileVar == 0) + { + /* Insert Fix point phasor values in data frame */ + if(df_pf == 0) + { + /* For rendom phasor values */ + if(df_pn == 0) /* Rectangular */ + { + for(j=0; j> 8) & ~(~0<<8); /* CHKSUM high byte; */ + data_frm[indx++] = (df_chk ) & ~(~0<<8); /* CHKSUM low byte; */ + } + else + { + printf("\nInvalid CheckSum in a sending Data Frame.\n"); + data_frm[indx++] = (df_chk ) & ~(~0<<8); /* CHKSUM low byte; */ + data_frm[indx++] = (df_chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cfg_crc_error = 0; + } + +} /* end of function generate_data_frame() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION void* SEND_DATA */ +/* This function run by a seprate thread only for data transmission. */ +/* Function to generate and send the data frame periodically to client's */ +/* destination address or to PDC (client). */ +/* ---------------------------------------------------------------------------- */ + +void* SEND_DATA() +{ + /* Wait till server will get Setup file path */ + while(df_data_rate == 0) usleep(1000); + + /* Calculate the waiting time during sending data frames */ + int data_waiting = 1e9/df_data_rate, i=0; + struct PDC_Details *temp_pdc; + send_thrd_id = pthread_self(); + + struct timespec *cal_timeSpec, *cal_timeSpec1; + cal_timeSpec = malloc(sizeof(struct timespec)); + cal_timeSpec1 = malloc(sizeof(struct timespec)); + + clock_gettime(CLOCK_REALTIME, cal_timeSpec); + + while(1) + { + clock_gettime(CLOCK_REALTIME, cal_timeSpec1); + clock_gettime(CLOCK_REALTIME, cal_timeSpec); + + if (cal_timeSpec->tv_sec > cal_timeSpec1->tv_sec) + { + fsecNum = 1; + break; + } + } + + + while(1) + { + if (i != 0) + { + cal_timeSpec->tv_nsec += data_waiting; + } + else + { + cal_timeSpec->tv_nsec = data_waiting; + } + if ((cal_timeSpec->tv_nsec) >= 1e9) + { + cal_timeSpec->tv_sec++; + cal_timeSpec->tv_nsec-=1e9; + } + + /* Call the function generate_data_frame() to create a fresh new Data Frame */ + generate_data_frame(); + + clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, cal_timeSpec, cal_timeSpec1); + + temp_pdc = PDCfirst; + + pthread_mutex_lock(&mutex_pdc_object); + + while(temp_pdc != NULL) + { + if(!strncasecmp(temp_pdc->protocol, "UDP", 3) && (temp_pdc->data_transmission == 0)) + { + /* If STAT Word bits got changed by user */ + if(temp_pdc->STAT_change != 0) + { + switch (temp_pdc->STAT_change) + { + case 1: + data_frm[14] = 0x04; //CFG changed + data_frm[15] = 0x00; + break; + case 2: + data_frm[14] = 0x80; + data_frm[15] = 0x00; + temp_pdc->STAT_change = 0; + break; + case 3: + data_frm[14] = 0x40; //PMU error + data_frm[15] = 0x00; + break; + case 4: + data_frm[14] = 0x10; + data_frm[15] = 0x00; + temp_pdc->STAT_change = 0; + break; + case 5: + data_frm[14] = 0x08; + data_frm[15] = 0x00; + temp_pdc->STAT_change = 0; + break; + } + } + + /* UDP-Send the newly created data frame to connected PDC address */ + if (sendto (temp_pdc->sockfd,data_frm, df_data_frm_size, 0, + (struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) { + + perror("sendto"); + } + } + else if(!strncasecmp(temp_pdc->protocol, "TCP", 3) && (temp_pdc->data_transmission == 0)) + { + if(temp_pdc->tcpup == 1) + { + /* TCP-Send the newly created data frame to connected PDC address */ + if (send(temp_pdc->sockfd, data_frm, df_data_frm_size, 0) == -1) { + + perror("sendto"); + } + } + } + temp_pdc = temp_pdc->next; + } + pthread_mutex_unlock(&mutex_pdc_object); + + i++; + clock_gettime(CLOCK_REALTIME, cal_timeSpec1); + + } //while-2 ends here + +} /* end of function udp_send_data() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION void PDC_MATCH(int proto, int newfd): */ +/* This function will maintain the linked list of communicated PDC for */ +/* UDP and TCP PDC clients. */ +/* ---------------------------------------------------------------------------- */ + +void PDC_MATCH(int proto, int newfd) +{ + int flag = 1; + struct PDC_Details *temp_pdc; + + pthread_mutex_lock(&mutex_pdc_object); + + if(PDCfirst != NULL) + { + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) { + + if(!strncasecmp(temp_pdc->protocol,"UDP",3)) + { + if(!strcmp(temp_pdc->ip,inet_ntoa(UDP_addr.sin_addr))) + { + /* Only replace the new conn details with old? */ + strcpy(temp_pdc->ip, inet_ntoa(UDP_addr.sin_addr)); // ip + strncpy(temp_pdc->protocol,"UDP",3); // protocol + temp_pdc->protocol[3] = '\0'; + temp_pdc->port = ntohs(UDP_addr.sin_port); //UDP_addr.sin_port + + bzero(&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)); + temp_pdc->pdc_addr.sin_family = AF_INET; + temp_pdc->pdc_addr.sin_addr.s_addr = inet_addr(temp_pdc->ip); + temp_pdc->pdc_addr.sin_port = htons(temp_pdc->port); + memset(&(temp_pdc->pdc_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pdc->sockfd = UDP_sockfd; + temp_pdc->cmd_received = 1; + + flag = 0; + break; + } + } + temp_pdc = temp_pdc->next; + }//while ends + }//end of if + + if(flag) + { + temp_pdc = malloc(sizeof(struct PDC_Details)); + if(!temp_pdc) { + + printf("Not enough memory temp_pdc\n"); + exit(1); + } + + if(proto == 0) + { + strcpy(temp_pdc->ip, inet_ntoa(UDP_addr.sin_addr)); // ip + strncpy(temp_pdc->protocol,"UDP",3); // protocol + temp_pdc->protocol[3] = '\0'; + temp_pdc->port = ntohs(UDP_addr.sin_port); //UDP_addr.sin_port + temp_pdc->sockfd = UDP_sockfd; + temp_pdc->cmd_received = 1; //received a cmd frame from pdc? only for UDP + } + else + { + printf("TCP new?\n"); + strcpy(temp_pdc->ip, inet_ntoa(TCP_addr.sin_addr)); // ip + strncpy(temp_pdc->protocol,"TCP",3); // protocol + temp_pdc->protocol[3] = '\0'; + temp_pdc->port = ntohs(TCP_addr.sin_port); //UDP_addr.sin_port + temp_pdc->sockfd = newfd; //new_sockfd + temp_pdc->tcpup = 0; + } + bzero(&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)); + temp_pdc->pdc_addr.sin_family = AF_INET; + temp_pdc->pdc_addr.sin_addr.s_addr = inet_addr(temp_pdc->ip); + temp_pdc->pdc_addr.sin_port = htons(temp_pdc->port); + memset(&(temp_pdc->pdc_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pdc->STAT_change = 0; //no change + temp_pdc->pmu_cfgsent = 0; //not sent + temp_pdc->data_transmission = 1; //off + temp_pdc->address_set = 0; + + if(PDCfirst == NULL) { + + PDCfirst = temp_pdc; + temp_pdc->prev = NULL; + + } else { + + PDClast->next = temp_pdc; + temp_pdc->prev = PDClast; + } + + PDClast = temp_pdc; + temp_pdc->next = NULL; + } + + pthread_mutex_unlock(&mutex_pdc_object); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION void* UDP_PMU(): */ +/* This is a UDP Server of PMU and it will continuously on listening mode. */ +/* Function for receives frames from authentic PDC & reply back the */ +/* requested frame (if available) to PDC. */ +/* ---------------------------------------------------------------------------- */ + +void* UDP_PMU() +{ + /* local variables */ + unsigned char c; + int n, ind; + char udp_command[18],filename1[200]; + FILE *fp1; + struct PDC_Details *temp_pdc; + + /* Apply 1 ms delay if required to allow the other thread to complete its + * work + */ + while(strlen(pmuFilePath) == 0) usleep(1000); + + strcpy(filename1, pmuFilePath); + + /* This while is always in listening mode to receiving frames from PDC and their respective reply */ + while(1) + { + ind = 2; + memset(udp_command,'\0',18); + + /* UDP data Received */ + if ((numbytes = recvfrom(UDP_sockfd, udp_command, 18, 0, (struct sockaddr *)&UDP_addr, (socklen_t *)&UDP_addr_len)) == -1) + { + perror("recvfrom"); + exit(1); + } + else /* New datagram has been received */ + { + PDC_MATCH(0, 0); + + c = udp_command[1]; + c <<= 1; + c >>= 5; + + if(c == 0x04) /* Check if it is a command frame from PDC */ + { + c = udp_command[15]; + + if((c & 0x05) == 0x05) /* Command frame for Configuration Frame from PDC */ + { + printf("\nCommand Frame for Configuration Frame-2 is received fron PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + perror (filename1); + printf("\nPMU IS NOT Configured!\n"); + exit(1); + } + else + { + fclose(fp1); + + /* Get the CFG size & store in global variable */ + df_temp[0] = cline[ind++]; + df_temp[1] = cline[ind]; + cfg_size = c2i(df_temp); + cline[cfg_size] = '\0'; + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if(temp_pdc->cmd_received == 1) + { + pthread_mutex_lock(&mutex_pdc_object); + + /* Send Configuration frame to PDC Device */ + if (sendto(temp_pdc->sockfd,cline, cfg_size, 0,(struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) { + perror("sendto"); + } + temp_pdc->STAT_change = 0; + temp_pdc->pmu_cfgsent = 1; + temp_pdc->cmd_received = 0; + + pthread_mutex_unlock(&mutex_pdc_object); + printf("\nPMU CFG-2 frame [of %d Bytes] is sent to the PDC.\n", cfg_size); + break; + } + temp_pdc = temp_pdc->next; + } + } + } + else if((c & 0x03) == 0x03) /* Command frame for Header frame request from PDC */ + { + printf("\nCommand Frame for Header frame is received from PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + printf("\nHeader Frame is not present in PMU Setup File.\n"); + exit(1); + } + else + { + fclose(fp1); + + if(get_header_frame() == 1) + { + /* Get the CFG size & store in global variable */ + df_temp[0] = hdrline[2]; + df_temp[1] = hdrline[3]; + hdr_size = c2i(df_temp); + hdrline[hdr_size] = '\0'; + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + pthread_mutex_lock(&mutex_pdc_object); + + if(temp_pdc->cmd_received == 1) + { + if (sendto(temp_pdc->sockfd,hdrline, hdr_size, 0,(struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) { + perror("sendto"); + } + + temp_pdc->cmd_received = 0; + pthread_mutex_unlock(&mutex_pdc_object); + + printf("\nPMU Header Frame is sent to the PDC.\n"); + break; + } + temp_pdc = temp_pdc->next; + } + } + } + } + else if((c & 0x01) == 0x01) /* Command frame for Turn off transmission request from PDC */ + { + printf("\nCommand Frame for Turn OFF data received from PDC.\n"); + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if(temp_pdc->cmd_received == 1) + { + pthread_mutex_lock(&mutex_pdc_object); + + if(temp_pdc->data_transmission == 1) + printf("Data Transmission is already in OFF mode for PDC.\n"); + else + { + temp_pdc->data_transmission = 1; + temp_pdc->cmd_received = 0; + pthread_mutex_unlock(&mutex_pdc_object); + + printf("Data Transmission Started for PDC.\n"); + break; + } + } + temp_pdc = temp_pdc->next; + } + } + else if((c & 0x02) == 0x02) /* Command frame for Turn ON transmission request from PDC */ + { + printf("\nCommand Frame for Turn ON data received from PDC.\n"); + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if(temp_pdc->cmd_received == 1) + { + pthread_mutex_lock(&mutex_pdc_object); + + if(temp_pdc->data_transmission == 0) + printf("Data Transmission is already in ON mode for PDC.\n"); + else + { + if(temp_pdc->pmu_cfgsent == 1) + { + printf("Turn ON Data Transmission for PDC.\n"); + temp_pdc->data_transmission = 0; + } + else + printf("Data Transmission can't be turn on for PDC. As CMD frame has not received for CFG?\n"); + temp_pdc->cmd_received = 0; + pthread_mutex_unlock(&mutex_pdc_object); + break; + } + } + temp_pdc = temp_pdc->next; + } + } + else if((c & 0x04) == 0x04) /* Command frame for Configuration frame-1 request from PDC */ + { + printf("\nCommand Frame for CFG Frame-1 is received fron PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + printf("\nConfiguration Frame-1 is not present in PMU Setup File.\n"); + } + else + { + fclose(fp1); + + /* Get the CFG size & store in global variable */ + df_temp[0] = cline[ind++]; + df_temp[1] = cline[ind++]; + cfg_size = c2i(df_temp); + cline[cfg_size] = '\0'; + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if(temp_pdc->cmd_received == 1) + { + pthread_mutex_lock(&mutex_pdc_object); + + if (sendto(temp_pdc->sockfd,cline, cfg_size, 0,(struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) { + perror("sendto"); + } + + temp_pdc->cmd_received = 0; + pthread_mutex_unlock(&mutex_pdc_object); + printf("\nPMU CFG-1 frame [of %d Bytes] is sent to the PDC.\n", cfg_size); + break; + } + temp_pdc = temp_pdc->next; + } + } + } + + } /* end of processing with received Command frame */ + + else /* If it is other than command frame */ + { + printf("\nReceived Frame is not a command frame!\n"); + continue; + } + } /* end of if-else-if */ + } /* end of while */ +} /* end of pmu_udp(); */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION void* TCP_CONNECTIONS(void * temp_pdc): */ +/* This is a TCP Server of PMU and it will continuously on listening mode. */ +/* Function for receives frames from authentic PDC & reply back the */ +/* requested frame (if available) to PDC. For each and every new connection */ +/* acceptance new thread will create with this function and handle all */ +/* type of frame requeste from communicating PDC. */ +/* ---------------------------------------------------------------------------- */ + +void* TCP_CONNECTIONS(void * temp_pdc) +{ + /* local variables */ + unsigned char c; + int n,sin_size,ind; + char tcp_command[19], filename1[200]; + FILE *fp1; + + struct PDC_Details *single_pdc_node = (struct PDC_Details *) temp_pdc; + int new_fd = single_pdc_node->sockfd; + single_pdc_node->thread_id = pthread_self(); + + while(pmuFilePath == NULL) usleep(1000); + strcpy(filename1, pmuFilePath); + + /* This will wait until CFG has not been set by user. */ + while(1) + { + ind = 2; + memset(tcp_command,19,0); + + /* TCP data Received For new_fd */ + int bytes_read = recv(new_fd,tcp_command,18,0); + + if(bytes_read == -1) + { + perror("recv"); + single_pdc_node->tcpup = 0; + remove_tcp_node(single_pdc_node); //remove the node in pdc_list? + pthread_exit(NULL); + + } + else if(bytes_read == 0) + { + printf("The PDC Client close the connection!\n"); + single_pdc_node->tcpup = 0; + remove_tcp_node(single_pdc_node); //remove the node in pdc_list? + pthread_exit(NULL); + + } + else /* New dat has been received */ + { + c = tcp_command[1]; + c <<= 1; + c >>= 5; + + if(c == 0x04) /* Check if it is a command frame from PDC */ + { + c = tcp_command[15]; + + if((c & 0x05) == 0x05) /* Command frame for Configuration Frame-2 request from PDC */ + { + printf("\nCommand Frame for Configuration Frame-2 is received fron PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + perror (filename1); + printf("\nPMU IS NOT Configured!\n"); + exit(1); + } + else + { + fclose(fp1); + + /* Get the CFG size & store in global variable */ + df_temp[0] = cline[ind++]; + df_temp[1] = cline[ind]; + cfg_size = c2i(df_temp); + + /* Send Configuration frame to PDC Device */ + pthread_mutex_lock(&mutex_pdc_object); + + if (send(new_fd,cline, cfg_size, 0) == -1) + { + perror("sendto"); + } + single_pdc_node->STAT_change = 0; + single_pdc_node->pmu_cfgsent = 1; + + pthread_mutex_unlock(&mutex_pdc_object); + + printf("\nPMU CFG-2 frame [of %d Bytes] is sent to PDC.\n", cfg_size); + } + } + else if((c & 0x03) == 0x03) /* Command frame for Header frame request from PDC */ + { + printf("\nCommand Frame for Header frame is received from PDC.\n"); + fp1 = fopen(filename1,"rb"); + + if (fp1 == NULL) + { + printf("\nHeader Frame is not present in PMU Setup File.\n"); + exit(1); + } + else + { + fclose(fp1); + + if(get_header_frame() == 1) + { + /* Get the CFG size & store in global variable */ + df_temp[0] = hdrline[2]; + df_temp[1] = hdrline[3]; + hdr_size = c2i(df_temp); + hdrline[hdr_size] = '\0'; + + /* Send Header frame to PDC Device */ + if (send(new_fd,hdrline, hdr_size, 0) == -1) + { + perror("sendto"); + } + printf("\nPMU Header Frame is sent to PDC.\n"); + } + } + } + else if((c & 0x01) == 0x01) /* Command frame for Turn off transmission request from PDC */ + { + printf("\nCommand Frame for Turn OFF data received from PDC.\n"); + + pthread_mutex_lock(&mutex_pdc_object); + + if(single_pdc_node->data_transmission == 1) + printf("Data Transmission is already in OFF mode for PDC.\n"); + else + { + printf("Turn ON Data Transmission for PDC.\n"); + single_pdc_node->data_transmission = 1; + } + pthread_mutex_unlock(&mutex_pdc_object); + } + else if((c & 0x02) == 0x02) /* Command frame for Turn ON transmission request from PDC */ + { + printf("\nRequest received for data transmission ON.\n"); + + /* Send data frames if and Only if cfg is sent to PDC */ + pthread_mutex_lock(&mutex_pdc_object); + + if(single_pdc_node->data_transmission == 0) + printf("Data Transmission is already in ON mode for PDC.\n"); + else + { + if(single_pdc_node->pmu_cfgsent == 1) + { + single_pdc_node->data_transmission = 0; + single_pdc_node->tcpup = 1; + printf("Turn ON Data Transmission for PDC.\n"); + } + else + printf("Data Transmission can't be turn on for PDC. As CMD frame has not received for CFG?\n"); + } + pthread_mutex_unlock(&mutex_pdc_object); + } + else if((c & 0x04) == 0x04) /* Command frame for Configuration frame-1 request from PDC */ + { + printf("\nCommand Frame for CFG Frame-1 is received fron PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + printf("\nConfiguration Frame-1 is not present in PMU Setup File.\n"); + } + else + { + fclose(fp1); + + /* Get the CFG size & store in global variable */ + df_temp[0] = cline[ind++]; + df_temp[1] = cline[ind++]; + cfg_size = c2i(df_temp); + + if (send(new_fd,cline, cfg_size, 0)== -1) + { + perror("sendto"); + } + printf("\nPMU CFG-1 frame [of %d Bytes] is sent to PDC.\n", cfg_size); + } + } + } /* end of processing with received Command frame */ + + else /* If it is other than command frame */ + { + printf("\nReceived Frame is not a command frame!\n"); + continue; + } + + } /* end of processing with received Command frame */ + + } /*end of While */ + + close(new_fd); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_tcp_node(void * node); */ +/* This function will remove the connection nodes from PDC linked list, */ +/* based on other-end connection lost. */ +/* ---------------------------------------------------------------------------- */ + +void remove_tcp_node(void * node) +{ + struct PDC_Details *pdc_node = (struct PDC_Details *) node; + + if(PDCfirst == NULL) + { + printf("No connected-PDC Present?\n"); + } + else + { + struct PDC_Details *temp_pdc = PDCfirst; + pthread_mutex_lock(&mutex_pdc_object); + + while(temp_pdc != NULL) + { + if((!strcmp(temp_pdc->ip,pdc_node->ip)) && + (!strncasecmp(temp_pdc->protocol,pdc_node->protocol,3)) && (temp_pdc->port == pdc_node->port)) + { + if(temp_pdc->prev == NULL) { + + PDCfirst = temp_pdc->next; + if(PDCfirst != NULL) PDCfirst->prev = NULL; + + } else { + + temp_pdc->prev->next = temp_pdc->next; + } + + if(temp_pdc->next == NULL) { + + PDClast = temp_pdc->prev; + + } else { + if(temp_pdc->prev != NULL) + temp_pdc->prev->next = temp_pdc->next; + } + + break; + } + else + temp_pdc = temp_pdc->next; + } + } + pthread_mutex_unlock(&mutex_pdc_object); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION TCP_PMU(); */ +/* This function will call by the thread for TCP communication for PMU Server. */ +/* It will accept new connections from PDC-clients and create thread for every */ +/* PDC via function call of TCP_CONNECTIONS. */ +/* ---------------------------------------------------------------------------- */ + +void* TCP_PMU() +{ + int err; + int sin_size,new_fd,pdc_flag = 0; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); /* pthread_join(3) cannot be used to synchronize */ + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + + while (1) { + + sin_size = sizeof(struct sockaddr_in); + + if (((new_fd = accept(TCP_sockfd, (struct sockaddr *)&TCP_addr, (socklen_t *)&sin_size)) == -1)) + { + perror("accept"); + + } + else /* New TCP connection has been received*/ + { + + /* PDC is authentic */ + printf("\nPMU server: got connection from %s, & on Port = %d.\n",inet_ntoa(TCP_addr.sin_addr), ntohs(TCP_addr.sin_port)); + + /* Add the new TCP connection details to PDC linked list */ + PDC_MATCH(1, new_fd); + + struct PDC_Details *temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if((!strcmp(temp_pdc->ip,inet_ntoa(TCP_addr.sin_addr))) && + (!strncasecmp(temp_pdc->protocol,"TCP",3)) && (temp_pdc->port == ntohs(TCP_addr.sin_port))) { + + pdc_flag = 1; + break; + + } else { + + temp_pdc = temp_pdc->next; + } + } + + if(pdc_flag) + { + pthread_t t; + + /* Creates a new thread for each TCP connection. */ + if((err = pthread_create(&t,&attr,TCP_CONNECTIONS,(void *)temp_pdc))) { + + perror(strerror(err)); + exit(1); + } + + } + else + { + printf("Request from %s TCP which is un-authentic\n",inet_ntoa(TCP_addr.sin_addr)); + } + } // main if ends + + } // While ends + pthread_attr_destroy(&attr); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION start_server(): */ +/* Function for Start PMU Server as per user given Ports. */ +/* ---------------------------------------------------------------------------- */ + +void start_server() +{ + /* Initialy create the shared memory ID */ + int ShmID, err; + char *ptr1; + + dataFileVar = 0; + cfg_crc_error = 0; + + p1.pid = getpid(); + + key_t MyKey; + + if (signal(SIGUSR1, SIGUSR1_handler) == SIG_ERR) + { + printf("SIGUSR-1 install error\n"); + exit(1); + } + + if (signal(SIGUSR2, SIGUSR2_handler) == SIG_ERR) + { + printf("SIGUSR-2 install error\n"); + exit(1); + } + + MyKey = 12345; /* obtain the shared memory */ + ShmID = shmget(MyKey, sizeof(struct P_id), IPC_CREAT | 0666); + ShmPTR = (struct P_id *) shmat(ShmID, NULL, 0); + *ShmPTR = p1; /* save my pid there */ + + /* This will wait until Port and Protocol have not been set by user. */ + while(tmp_wait) + { + usleep(1000); + } + + fp_DataFile = NULL; + + /* Get the user's name for storing the PMU Setup File */ + ptr1 = getenv ("HOME"); + + if (ptr1 == NULL) + { + printf("user not found\n"); + exit(1); + } + strcat(pmuFolderPath, ptr1); + strcat(pmuFolderPath, "/iPDC/PMU"); + + printf("\n\t\t|-------------------------------------------------------|\n"); + printf("\t\t|\t\tPMU Simulator SERVER\t\t\t|\n"); + printf("\t\t|-------------------------------------------------------|\n"); + + /* Create UDP socket and bind to port */ + if ((UDP_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + + perror("socket"); + exit(1); + + } else { + + printf("\nUDP Socket : Sucessfully Created\n"); + + } + + if (setsockopt(UDP_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + UDP_my_addr.sin_family = AF_INET; // host byte order + UDP_my_addr.sin_port = htons(udp_port); // short, network byte order + UDP_my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(UDP_my_addr.sin_zero),'\0', 8); // zero the rest of the struct + + if (bind(UDP_sockfd, (struct sockaddr *)&UDP_my_addr, + sizeof(struct sockaddr)) == -1) { + perror("bind"); + exit(1); + } else { + + printf("UDP Socket Bind : Sucessfull\n"); + } + + /* UDP created socket and is litening for connections */ + printf("PMU UDP SERVER Listening on port: %d\n\n",udp_port); + + /* Create TCP socket and bind and listen on port */ + if ((TCP_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + perror("socket"); + exit(1); + } else { + + printf("TCP Socket : Sucessfully created\n"); + } + + if (setsockopt(TCP_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + TCP_my_addr.sin_family = AF_INET; // host byte order + TCP_my_addr.sin_port = htons(tcp_port); // short, network byte order + TCP_my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(TCP_my_addr.sin_zero), '\0', 8); // zero the rest of the struct + + if (bind(TCP_sockfd, (struct sockaddr *)&TCP_my_addr, sizeof(struct sockaddr)) + == -1) { + perror("bind"); + exit(1); + + } else { + + printf("TCP Socket Bind : Sucessfull\n"); + } + + if (listen(TCP_sockfd, BACKLOG) == -1) { + + perror("listen"); + exit(1); + + } else { + + printf("TCP Listen : Sucessfull\n"); + } + + sa.sa_handler = sigchld_handler; // reap all dead processes + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + if (sigaction(SIGCHLD, &sa, NULL) == -1) { + perror("sigaction"); + exit(1); + } + + /* TCP created socket and is litening for connections */ + printf("PMU TCP SERVER Listening on port: %d\n",tcp_port); + + TCP_sin_size = sizeof(struct sockaddr_in); + UDP_addr_len = sizeof(struct sockaddr); + + /* Threads are created for UDP and TCP to listen on ports given by user */ + if((err = pthread_create(&UDP_thread,NULL,UDP_PMU,NULL))) { + + perror(strerror(err)); + exit(1); + } + + if((err = pthread_create(&TCP_thread,NULL,TCP_PMU,NULL))) { + + perror(strerror(err)); + exit(1); + } + + pthread_join(UDP_thread, NULL); + pthread_join(TCP_thread, NULL); + + close(UDP_sockfd); + close(TCP_sockfd); + +} /* end of start_server() */ + + +/* ------------------------------------------------------------------ */ +/* FUNCTION SIGUSR1_handler(int sig): */ +/* SIGUSR1 signal handler will give the user's choice regarding data */ +/* data source. Give also the file path when data measurements from */ +/* file. */ +/* ------------------------------------------------------------------ */ + +void SIGUSR1_handler(int sig) +{ + signal(sig, SIG_IGN); + printf("PMU Server SIGUSR-1 Received.\n"); + + if(ShmPTR->dataFileVar == 1) + { + fp_DataFile = fopen (ShmPTR->filePath, "r"); + + if (fp_DataFile == NULL) + { + perror (ShmPTR->filePath); + } + else + { + dataFileVar = ShmPTR->dataFileVar; + } + } + else if(ShmPTR->dataFileVar == 0) + { + dataFileVar = ShmPTR->dataFileVar; + + if(fp_DataFile != NULL) + fclose(fp_DataFile); + } + else if(ShmPTR->dataFileVar == 2) /* When sends a complete setup file path */ + { + strcpy(pmuFilePath, ShmPTR->cfgPath); + + /* Call the function frame_size() to initialized all globals as Configuration frame */ + frame_size(); + + /* Create the SEND_DATA thread for sending Data */ + if((err = pthread_create(&DATA_thread,NULL,SEND_DATA,NULL))) { + + perror(strerror(err)); + exit(1); + } + } + + signal(sig, SIGUSR1_handler); +} + + +/* ------------------------------------------------------------------ */ +/* FUNCTION SIGUSR2_handler(int sig): */ +/* SIGUSR2 signal handler will give the user's choice regarding data */ +/* STAT Word change. Gives what kind of error has been introduced and */ +/* which bit should be change from 0 to 1 in data frame's STAT Word. */ +/* ------------------------------------------------------------------ */ + +void SIGUSR2_handler(int sig) +{ + signal(sig, SIG_IGN); + printf("PMU Server SIGUSR-2 Received.\n"); + + if(ShmPTR->cfg_bit_change_info == 0) + { + udp_port = ShmPTR->UdpPort; + tcp_port = ShmPTR->TcpPort; + tmp_wait = 0; + } + else if(ShmPTR->cfg_bit_change_info == 6) /* for CheckSum Error */ + { + cfg_crc_error = 1; + printf("Invalid CheckSum!\n"); + } + else + { + struct PDC_Details *temp_pdc = PDCfirst; + + pthread_mutex_lock(&mutex_pdc_object); + + while(temp_pdc != NULL ) + { + if(ShmPTR->cfg_bit_change_info == 1) /* for configuration change bit */ + { + temp_pdc->STAT_change = 1; + printf("STAT - Configuration changed!\n"); + } + + else if(ShmPTR->cfg_bit_change_info == 2) /* for invalid data bit */ + { + temp_pdc->STAT_change = 2; + printf("STAT - Invalid data!\n"); + + } + else if(ShmPTR->cfg_bit_change_info == 3) /* for PMU error bit */ + { + temp_pdc->STAT_change = 3; + printf("STAT - PMU error!\n"); + } + else if(ShmPTR->cfg_bit_change_info == 4) /* for data sorting bit */ + { + temp_pdc->STAT_change = 4; + printf("STAT - Data Sorting!\n"); + } + else if(ShmPTR->cfg_bit_change_info == 5) /* for PMU trigger bit */ + { + temp_pdc->STAT_change = 5; + printf("STAT - PMU Trigger!\n"); + } + + temp_pdc = temp_pdc->next; + } + + if(ShmPTR->cfg_bit_change_info == 1) + { + /* As configuration has been changed, fill the global variables with new values for Data and CFG frames */ + frame_size(); + + /* Needs to cancle the existing thread for data sending and create new one */ + int n = pthread_cancel(send_thrd_id); + + if (n == 0) + { + if((err = pthread_create(&DATA_thread,NULL,SEND_DATA,NULL))) + { + perror(strerror(err)); + exit(1); + } + printf("Now PMU sending Data Frames according to new configuration."); + //pthread_join(DATA_thread, NULL); + } + else + printf("PMU unable to send Data Frames according to new configuration??"); + } + + pthread_mutex_unlock(&mutex_pdc_object); + } + signal(sig, SIGUSR2_handler); +} + +/**************************************** End of File *******************************************************/ + diff --git a/PMUSimulator/ServerFunction.h b/PMUSimulator/ServerFunction.h new file mode 100755 index 0000000..d30543a --- /dev/null +++ b/PMUSimulator/ServerFunction.h @@ -0,0 +1,116 @@ +/* ----------------------------------------------------------------------------- + * ServerFunction.h + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include + +#define BACKLOG 10 /* How many pending connections queue will hold */ +#define MAX_STRING_SIZE 5000 + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int dataFileVar, cfg_crc_error; +int temp_pahsor_type[50], temp_analog_type[50]; +long int temp_PHUNIT_val[50], temp_ANUNIT_val[50]; + +char pmuFolderPath[200]; +char pmuFilePath[200]; + +unsigned char cline[MAX_STRING_SIZE]; +unsigned char hdrline[MAX_STRING_SIZE]; +unsigned char data_frm[MAX_STRING_SIZE], df_temp[2], df_temp_1[4]; + +struct sockaddr_in UDP_my_addr,TCP_my_addr; /* my address information */ +struct sockaddr_in UDP_addr,TCP_addr; /* connector’s address information */ +struct sigaction sa; + +int UDP_sockfd,TCP_sockfd; /* socket descriptors */ +int UDP_addr_len,TCP_sin_size, numbytes; + +pthread_t UDP_thread,TCP_thread,DATA_thread;; +FILE *fp_DataFile; +uint16_t df_chk; + +//pthread_mutex_t mutex_pdc_object; /* To lock cfg data objects */ + +/* ------------------------------------------------------------------ */ +/* Global Datastructure */ +/* ------------------------------------------------------------------ */ + +struct PDC_Details { + + int port; + char ip[16]; + char protocol[4]; + int sockfd; + int tcpup; + int STAT_change; //0-no change, 1-changed + int pmu_cfgsent; //0- not sent, 1- sent + int data_transmission; //0 maens ON, 1 maeans OFF + int cmd_received; ////0 maens Not-received, 1 maeans received + int address_set; + pthread_t thread_id; + struct sockaddr_in pdc_addr; + struct PDC_Details *next; + struct PDC_Details *prev; + +}*PDCfirst,*PDClast; + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +void frame_size(); + +void generate_data_frame(); + +void* SEND_DATA(); + +void PDC_MATCH(int proto, int newfd); + +void* UDP_PMU(); + +void* TCP_CONNECTIONS(void * temp_pdc); + +void remove_tcp_node(void * node); + +void* TCP_PMU(); + +void start_server(); + +int get_header_frame(); + +void SIGUSR1_handler(int); /* Signal handler */ + +void SIGUSR2_handler(int); /* Signal handler */ + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/ShearedMemoryStructure.h b/PMUSimulator/ShearedMemoryStructure.h new file mode 100755 index 0000000..bbe46a0 --- /dev/null +++ b/PMUSimulator/ShearedMemoryStructure.h @@ -0,0 +1,48 @@ +/* ----------------------------------------------------------------------------- + * function.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* global Data Structure for Shared Memory */ +/* ------------------------------------------------------------------ */ + +struct P_id { + + pid_t pid; /* Single pid */ + + int dataFileVar; /* For data source options : 0-Auto & 1-File Measurements */ + char filePath[400]; /* File path of user selected measurement file */ + int UdpPort; /* User given UDP port number for server */ + int TcpPort; /* User given TCP port number for server */ + int cfg_bit_change_info; /* STAT Word change bit status if any otherwise default set to 0 */ + char cfgPath[200]; /* Its a PMU Setup File path given by use */ + int phasor_type[50]; /* save the phasor type (currently not useful) */ + +}p1, *ShmPTR; + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/function.c b/PMUSimulator/function.c new file mode 100755 index 0000000..17367ce --- /dev/null +++ b/PMUSimulator/function.c @@ -0,0 +1,240 @@ +/* ----------------------------------------------------------------------------- + * function.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* -------------------------------------------------------------------------------------- */ +/* Functions defined in function.c */ +/* -------------------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* */ +/* 1. void B_copy(unsigned char main[],unsigned char tmp[],int ind,int n) */ +/* 2. char* measurement_Return () */ +/* 3. void H2S(char a[], unsigned char temp_6[]) */ +/* 4. void i2c (int t, unsigned char temp[]) */ +/* 5. void li2c (long int t1, unsigned char temp_1[]) */ +/* 6. void f2c (float f, unsigned char temp_4[]) */ +/* 7. int c2i (unsigned char temp_2[]) */ +/* 8. long int c2li (unsigned char temp_3[]) */ +/* 9. uint16_t compute_CRC(unsigned char *message,char length) */ +/* 10.void sigchld_handler(int s) */ +/* */ +/* ---------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include "function.h" +#include "ServerFunction.h" + +#define channel_name 100 + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION B_copy(unsigned char main[], unsigned char tmp[], int ind, int n): */ +/* Function copies unsigned char or Bytes in a main array from tmp array. */ +/* ---------------------------------------------------------------------------- */ + +void B_copy(unsigned char main[], unsigned char tmp[], int ind, int n) +{ + int k; + for(k=0; k0) + { + return l1; + } + fseek(fp_DataFile, 0, SEEK_SET); + result = 1; + } + fclose(fp_DataFile); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION H2S(char a[], unsigned char temp_6[]): */ +/* Function for unsigned/Hexa char to String Conversion. */ +/* ---------------------------------------------------------------------------- */ + +void H2S(char a[], unsigned char temp_6[]) +{ + int k; + + for(k=0; k<16; k++) + { + a[k] = temp_6[k]; + } + a[16] = '\0'; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION i2c (int t, unsigned char temp[]): */ +/* Function for Integer to unsigned Character Conversion */ +/* ---------------------------------------------------------------------------- */ + +void i2c (int t, unsigned char temp[]) +{ + temp[0] = t>>8; + temp[1] = t; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION li2c (long int t1, unsigned char temp_1[]): */ +/* Function for Long Integer to unsigned Character Conversion. */ +/* ---------------------------------------------------------------------------- */ + +void li2c (long int t1, unsigned char temp_1[]) +{ + temp_1[0] = t1>>24; + temp_1[1] = t1>>16; + temp_1[2] = t1>>8; + temp_1[3] = t1; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION li2c (long int t1, unsigned char temp_1[]): */ +/* Function for float to unsigned Character Conversion */ +/* ---------------------------------------------------------------------------- */ + +void f2c (float f, unsigned char temp_1[]) +{ + int i, j; + float fv; + unsigned char a1[sizeof fv]; + + fv = f; + memcpy(a1, &fv, sizeof fv); + for (i=0, j=3; i>8)^message[i]; + crc<<=8; + quick=temp ^ ( temp >>4); + crc ^=quick; + quick<<=5; + crc ^=quick; + quick <<=7; + crc ^= quick; + } + return crc; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION sigchld_handler(int s): */ +/* Function for TCP connection signal handling */ +/* ---------------------------------------------------------------------------- */ + +void sigchld_handler(int s) +{ + while(wait(NULL) > 0); +} + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/function.h b/PMUSimulator/function.h new file mode 100755 index 0000000..630494a --- /dev/null +++ b/PMUSimulator/function.h @@ -0,0 +1,64 @@ +/* ----------------------------------------------------------------------------- + * function.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +/* Function copies Bytes in a main array */ +void B_copy(unsigned char main[], unsigned char tmp[], int ind, int n); + +/* Function to read the measurement file and return measurements for a singel timestamp */ +char* measurement_Return (); + +/* Function for Hexa to String Conversion */ +void H2S(char a[], unsigned char temp_6[]); + +/* Function for Integer to Character Conversion */ +void i2c (int t, unsigned char temp[]); + +/* Function for Long Integer to Character Conversion */ +void li2c (long int t1, unsigned char temp_1[]); + +/* Function for float to Character Conversion */ +void f2c (float f, unsigned char temp_4[]); + +/* Function for Character to Integer Conversion */ +int c2i (unsigned char temp_2[]); + +/* Function for Character to Long Integer Conversion */ +long int c2li (unsigned char temp_3[]); + +/* Function for calculation of CHECKSUM CRC-CCITT (0xffff) */ +uint16_t compute_CRC(unsigned char *message,int length); + +/* Function for TCP connection signal handling */ +void sigchld_handler(int s); + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/images/PMU.desktop b/PMUSimulator/images/PMU.desktop new file mode 100755 index 0000000..f20c915 --- /dev/null +++ b/PMUSimulator/images/PMU.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Encoding=UTF-8 +Name=PMU Simulator +Comment=Phasor Measurement Unit Simulator +Exec=/usr/local/bin/PMU +Icon=/usr/local/share/PMU/logo.png +Terminal=true +Categories=Education diff --git a/PMUSimulator/images/PSLab.PNG b/PMUSimulator/images/PSLab.PNG new file mode 100755 index 0000000000000000000000000000000000000000..2e32619b8200114f539d7b06243ce563318f738e GIT binary patch literal 673061 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Ͷ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�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�)CR21Ax~z0NG+dsF8wlO zyvZDpH6Ef5MlX*l0)>2qNDwHvzR>CX?}82#+v)%^-0US)fbRAu)-ABh2iIq}gWwXY zoAnEDjn*W9xmN~DKCm;a;=%opeZ;>Ya01-N!#YK_0DR^+XDeVH=ZtkgU4D?RKpoPJ z3V=m!ssSdJ4gvuA7RXH#DFfu>AM*#m5U(5pqpu^9*T7HMx&$J($JEU`8r<}9P+O$240cOE+9!e>kmLv ztz~ce&lw2xhPcmjwMh6B;=YONp8F<5-ptc1e;nwCfqwQOaIcDXM|}aF2aXc%qCloG z&=CPd^2n$KaewC@9eER6@3<49#)2`$HOLVO?$%*N1F4YfhlGy`ZHD0I<`7p~@T`rg z7hfLiM!pWg6i7dpb;W-WB7^aFa_4~f_j66oC6M#i_%pH9!Rc|9bTop{%Iq@1;ovzH zUMws(IEuPXIerIy-&jR^&@skP;{?QM?xMLfpo&$aL9Ol(Hag;;=>AZ-Rn_a&5}@F_ zB?lMxLDI|gxQrA?+nfAB;%#_3;L-RelOX&>SdFmxP^*2NZFQT%lRA$lKI{kPadU0PeuFo+F8`9e6z&YTGvh&fD3q_npb~AM*eAI@FYq^nKaCg`dj^bY z@~`tHFqX0ALm)4onPq_tJcj%K=VLfvV@ovfjQqwW&=n*YX}}gRR)93elC?l*(0o8H zJUSBij>^UbAeuPa3sl2rt_IxHFj@j=0qG4?4iyX50z2f-;q3yUbHQrq=-X*M`Y(~CA>6frs*7Pt=D`;1$Vy(aKSunPF_ z4+~~e4QV8` zKw7bj6Tl`m$oIel`9c&lmesTXIYB!~1D(u|oCOZZIVJ%o)n*77zi9!Z5%7uBk~6^f zoTeA3A?IiV_9G^91c;-gE(UwE-Nn8EcAWlX?*!syBtL>S(Z&B2PV$}J2O7|t^C0th zPx^u6HVznHfFsQj<50lhu)Q423r2S{55!K5eK%$;I6ifZH$MSSclQqG58#>R-tD>% z?m_O(&esr}72F)03rYVZwM^^_xf|uak>>$W(rh1?2j*VKL-Pgb2JTt6!Q0IHLFO9p z4)eXtx(oU06m|~CqL=gsK8rmQI~Y7A!k&0qL8xPJelQP2 zEQ0IZk2fRZqoep||85{t+ zy*88iU~Sg-?U`UN(V{W}w4%1vHDLcn3w{IJr4#JIpdm);@1QAmC*A=T$r$be$Ed_) z(8@YTw*vnVX>0(yE4Qf*wke}^0_Y(fD&0WGvYQq_ZeH^xXf?gWhd?LpY7fu}`iY(a z-nHN3GtheKKk*%4i)vkv!>rI$ASbU$0c^>~ zIbe(qCk>3oG7$?jhw-6&0J@Vk`Yy-}o@#4gub$vHAcyql2$04T$q$54jQ@&~CsG&~ z%L96XMpBCukdaj82GEFaCodpkz*sONAv;5BWDrkPQYc%pb_X{QjBT9 zhYXU6Ab-nr-hgB=O4Grfqrb5MD6fn71~_6omk)q3JhP_&71_->F#3~I_5#xxMIGQ5 zjnbK59OZ({1{o~r(hcMQBjpTGi$912y!tMUfn{vaRiOKMt}{Wp>oBy_f)YMd?c|&gJT^z&6=#41`cIyDzgKawio-Ww2oHtJ;LItXtZw#^+4oUkuj)gVyVx}odA*d-0@;b5QB#nzXQ z@uh#Qy&CKuGSYn$JhxqQTty*0Z{~xPDR6J%{akk|L1ux>5g7&;#icN-K+9N7tP&8r zAo}B|-=M;eVqCA(&zf3QUGjH*2Y{KfJA;cr*P1WSz>|Nnx-`>cOy%ko~UT8~PVs z9Zd9OehjzY+~5A<1w<@=)j2a7+$o-@@N96l^sI?n4(3)@!I)Q&H7YeZF&%vWzMhg1 z1>T!&}w+5xE@(+g#-2XDPV$-s}`t)9Ix zkOK0MUri^lj%Jb@tQtDUP6XV#Lra35)koG#pq38TH{cj5P1pvG<;G1$fV-KiiZK8l z)_F4el>^+LyL&i$Kw5#cCh6}&)^l&Q>@5&j8yf5w3f5`6G36js8J83UdoM1>r=V-> z@l*nPmuA`FU|;1P>i~zAvmb!gV}Kk1%94v-KtDObGLT=5kwk+zje)WZ%+W><<1uiW z;qnZukL*{>2f4u4*q0LI9cU=##$`Ty~a2YT5@?6MG(KekbHCkU$&{!#dKkoRP>lz{9( zz7pQukXk31q~qX^4^#;}hsYbzy?kdNA<|VMvLd*qhINiC0$h@x^-myC``Q(N*0S3A z5m-ku`+$2C)G>gYw=x1~K`jXZwWw(x0#=Ru;N4fI-H;&Y3_*Sz@jRa_N2}0%S9h6oAP0 zbH2=f5}2e7gR3D>DfOFV7rb7QJT|=-WIwSkavz+nJY6IEgW+)h7V#H^kBZxvYaGPi z&i^?7&*1pOY(_4yKljbgJOsg|fo9pCLa?fS68a9TPo%8546Ms?(?JoZ$4Rj8BNcvaJv5SuIKvAngx-6DKz6TLL%BII3>_gubNkP=Gk_O>NB|MYzCiH72yvK>l~g#3xcwiK-j zfooP+=sd*D%2g=$Y>59L&%612z-V{th=sr)+h+^|ZqUdW4y>V*;Rjx^RQdogg>1k8 z8vl0=7zH@-(*VfA$#!4^qDz3{7}5!J3h^=yq%CdqHn0H9^*{@zz}^(P9f}3nOCh-e=4sa+S7p$Bp*g`8VD%0p2g`w8m7=-_tWOzj7Y6$tl@*{m z*X&<`!g@&ufDYxRUIZfK8)*o#L~b$wj0r|A-4B|eU3EP$m0zqqz`Obbr@-)#Pb-2{ zHd@dK%ypD7z5|_aM$!h1eh!~wJh%^fes$CWE5mB5kHNnoFg)-ItQ0HB&I0Xe1SJi0 zy(VZ*z^QNX0pSuSZ9rNvS5^Y4Qcr3F6Sc8?4_Zk-XCM%!^E4KCBOT;>V52T$8emXQ zJRnDnHpBqM^cGuyuXw|8z$ZQBC{Rt>vG+gRGi|{7#6D=}2Yaf0)V4u=GRqzfGElN~ z4dAD}#DEkwn#qSC+Jgn@=3uf zg*Jfa7tbzFYY6&+xdJo5n=7k-Rvm~;h@28J2izWalFI?XF2OIYBam7+^|REbVE>^7 z*#N$d{<_)Q;6cX26_0m-9cG`l{E)wRfrj<+=F?bT+(Gc> z_07rN0FSReIr`KG`iLfm0ik2|UF{E^hvDbK3xKMDjr!nR>#XV!$c)Zx z>OBwMoxVSPyC5Q9E^;0PUCkQ%BIrc!iw*Vz-AfqQ37V#x!0y2)?F+iz?t=k#fP54H zdoKNTC)n+^EuRBE&7)U~`JEjc9pK-$Vkj)Qm^qB}rMib)@^YcY~pKz;p0=Y#B!qNIYZU@HdbOA1Q`(5)2J zUx9tPTn7Vx@w);VLp_-Wc;zU$K^F2a{|S^CQX6y;1$FU%{~7iJXJv=91o?|EbRdw# z3*v#^++z;NHT^;h0Fzk3uRveU!T?x z%vFwcj_%;OXiOCsm_=A_HUML!`Iiv_T`5C#HBg7W(g@Th(e4VA#VMPCt}HXQ1C6z^ z{Q_vOk8~I4VC|qQ_#^Uwger%Ol#wzI)*26j+8%0kf7 z1nqiY3c2{vDj1oNt^TLBzfAwNZ)SEuYcHn+NPJ)@J&HeafyZ z8zI;^G+W;VGR;WGRfuj84-NcLhzKAiz z{!A(lzP`Q_Svld{{RaJ|Fr3im2NO1G4V)E7{vOWpl- zFGGG!c${ztj768juG#Q<`KvpxK7;!SkLSGbfpebwS@>uO?-u?zx-Ccz3WZ*RjO3Bl z1EVZidKS!Yj9#Qc=tXEua4}>|$hwkQ9{4~<>m)Fv%<1MUFdSx=@U~zapj_wzND=!- z>jL<`@_(CRfwjd>bQOZgz6RsC#BvMFc(bed50Hx-QXA~+ znrK`C9Uw7s4y@JuV5|iD1t(-V*hh6gXFyA6bzK2;VJRm-f6`ra1%1v(S{*1ufM>uS z8K<9vT#*?46S%Esjar~%>@F+-O_nuU33N0)hyiN}o9)~n(fYC73FNv?mo*??NI$6q z<}b3r`45EF>mh2utKNx6)50Ne>vESH)8Jm+M|B<-1>=M{+!_h?tI(%bAK(WqZTE(V zqmf&}dVpu6dxXmY5>7VdAy_joG;j{G^JYEEYzf*-y>@emIuP9=x(ozcg!&3luv5|S zV&fp}^XPTaQ9zKL)^*@ldo4LZi%3uV1!#9|D0M-u%3dQG}tZe>& z6sZZ&#Hj7O3>?2`vHbbG)4pea!aNGAMm@`3YZHz0l2|M zT@Cc1z4;6n%NKGHQiEyT-ZqCv4<6Niz6D%+9aCgB` zSS$;Hnw*poK)ggtIxvW<%mZC%wGFKY8DPdbmqGICWOs@iZhP;oxetVW7%@J)8R!D@ zzEgpV?u_U+5HZN*a2)_y!eFZ@@L_1EzbY`vlP~qcw8v*Vmo*q_Nh(DL7OM#;h zRUm$B?jm4}clQn324XtzhV_K-@1qMkPJnA%#3#`^Anfb7F*#R&{dZ`O{SqL!I`jvG zb#wh5))Qi;M3;`}1dh|jO4h^Op|=X$>XywY za}~lDMux@gfruV?n&vGATz7nHeggc&B>e(>l`?W<%>W*HI|fo9Y*6%$_@Tfzy2l;@ zI)YN61|U5+ZjJ^<$bP#W(36s()<6Pxm51Pdl-hy#Sews zc$0h?8Ub0Avsz`Bf>3Pmj@=iGqVmkJzQQvf)io9PO?!(|-^RAUS^fxH}&RX`oO>O)`;HSBLeWAR8M(Cf5h z7s!21>p2LG)q6S%>`GFF6p(w;TcUwlyp^J0q;kR-0@A`LEuVvarj3aKBU!#PSAc&@ zATe|v(jKIJo<0*oPp!vR8074fb6t+N5cPLd?g$?|t@@<&vn)t1oRTNGBE*c2PKo{m z!skY`i;RJkH>qvYazf(Hq!WpQA^COczT{C5C=@6ZoB+Xpf}4XeV9qr|&d(v=*?e{L zmxH1o7yYGJC6K=QP#-}?bn5A}$B_AJX4}jn;5#2U<*yE*vcZq+pTSwwdBpKII9!eu zj#m)6U>CRF1F0t87+DaR9&tCa7esf7`72f+d_ctHSAt!r17a91TCunJ&5JdWRie5GMNYT)Y&>5c#ph{ z1364(P6KZ^FVjJ9vO{x&tf3?CgS;V$cfn}Fd07B*%_zh7zyPZ1deDjNq&{$l=b8d? zleUruTqBC_frY%M+kv-QiVr}K>q)wS{K;iG54`4?90koqraC~jb3?m={-fXW1en1c z`37VU_4FR#B0vTplp_I*e<>?X01u^k4f={9`XvxfK2m_jGEnOSHT4`fKu*gZ1_HGy z%U-a1lTU{NE$N^Ea5#=RzA+zz*Ye%+4hK71pV;p~%vkEil!5TD@Zu3Q!0?+<`W+Y_ z$VB3R5i&r1z*fd_6|@gyG#uzcZZ&|%dX`M!na4gg$j<+$8#21KJJ+wH`kiC=y`JN{<1L8^JJ7B5)ZqEk(2B|}kRv=%=a2X6V=3U(kMDak^ z1N(6B7>MK#%7aeQFEkmX86CL|+$OiYg!KC9326`Db;RpguNFY|Nncm*_dqZ9dcFhS zyV)bMonV|Zu9~;N9&b0-ufY3{ueARbc-=myKM6FTiN+O(9vG7y^C`qsh`khl5+c*0 zQX_YO@quHFQ@~fs*WY^!UM);K^tLv{7K}L&Qv<@|!d8dX2D_U*&mIJU<{5Rpe?o9W zFg{QQvW9urWsL{BPjI`{9h|9-;m*1ce>-kv+;|9E=sD)D02J4?RyXjq_Vx9C3OXp{ z3%mnwV&3*o8w|<&g#c=c}b;~JVbPb7xUf}NWKZzR^J?O zuPJzrg@s2A0Ie#sO%n`5BJ9dwlx4f!4a~ecU$22#+_=MP$ZqB9=B){-*Hd$+egvA^ z4zm-%vB8<_I0=p+&SQ=}zUmG{8kHB{GF0vWY^cWpl;g{6jk7I?OWcMQ7@ z5#Q)s#{tOtHoLw(1iY^Tul&6st!3J#%(f5=hFaMtA?sxJXe$ANSM)RIcF;}E@538G zpraObHi4JVl18SsgQRtD52R#6Qq|NBY1P2~jHN~bICeTC+)KeIYL*F91->-f8i&Db z=!kaa2B+IG#(en1m(x~GfPSmlav!*^ zM>GI-S3%atlj#XodlH8>Be`UKT0VMfjx_A+ye>I ziMk7WBVB>ok}1c5rsR~NfPu%j06Zs;u@YFtCZh^47ZE3Lhis!R zkc>y8KwI&beH!E!{N`5Bxs)~vLE^N;QExwhhwUEz`?wC|8q@2LF1dSjjQ`hSLoIU97AJ>L8bWQ{S>hype{h8q8Zam0M&G(neZYdZ?0 zx>?Ko8S>98`m*F)DAcUjz!Lw0<}|-{4uDWTxnX_}(N%Kn%{dvYUdC`o7_dg&W?RsA zxI-NPGt8lolAc^8WfkZe>tP@lBwWegG2b_kw|3rH`7$A`U*eyMPa$#qtAnp*!;4Oj zYd$RskMljA`m`aG*#L$>dB0xnLiwVQmX!2f(kO_GjVT_T2Z9dkd1xPGjL4{%6%S@- zXMax{;1f+WqabWe?4=xsKmtaJc>%Zr_6{IK{?HEK83{H(Q3wTqG4yhT13_jO9{?^+ z8$Lj3B&~oU#2APEFL*iwsd(+pz;tGE7|1L0j3&Txqq6fHfL8Jh1o_;NZH)r?$~~L% zU{vCL<0CL9*k`0ANJj8>Xa!ie{hLAy!M-IWfukUznp~f#tf@S_3pPnz0Lv*YbhX0b`e$ zV3q}mH7q?0R4~d}yTOQ&7xEIqy%A$vQQ%1q|I*bOLPY{?t^E)j5{R@XfK@RtORED7 zsI4D?5owf^d?2Qrlz~85oyBC(4fK#+AP;HD_n>}t@dR|3^^N*KcW6j^gT701wgbt$ zWH_*!SsVu4rFk?4tRq@c_Je(g;Y5I@=~-1U#h9auKriS%%>x{laPflOgO#!ZWD*yp z1lZq6Ut<8sKXw&83=Eedas)Jvd=v)#lDGT|u3Mgk?jDeGG__1>BXCZAx$R{nyeRzg z)$@K}95qs85Jc~eSrokmTyEC~o@tPtk`bG+2?DJH4T8PFGdg@)_ykDUk`T-@7-XpV z$aM-H9(cU(@l(jCnej05ECeeB(t}HZ5A_mFw0+|T@6W!jS-ZgT+}YKU1in|k;hFWo`pVj4xu9@z;fjTefMb$# ztWzOSFgP>R6O!+xTu*Vr)3m2aPtQWAj8)1S0bvb1J;SPkW0}M4EDxEtGfHIMfv`zo zzKCn!GTdFlx`2+MmCOca>IvBinnNoQ0ra8;HUEznSI~dBt@A(%=nOi5Zs1=|0tX0@ z0aRxkV}WYSU^);^2fBfANR~=R&^zSRKftc6W2g@LBTI<}9uwjb5J_o`1^J8TvJeSREKb)Z(IOMuk(dl6Awr*KpLgwrYE8`A$4!erFazJ?Nu$o~J zARn@rzk!bWUsG@cTH4Kk)pAApf(&K4_5;n(Z}cQ+nzmL8tc%uFdlLkE2I4~Hzz*4m z?bqPQc070Z!PVJSz}*k{(3~ryfK$5CJ`6ayCMNKN(oz(7pA2mSI!3SB<$=S*=sh5T z`+Nc{<6UV6Tp)tWz$mhGJP^q?!ho-c(%(TFQN!*JbeAo98{{ePARuixL1Uo5{=|Kd z4t&9N(7R;Voq&EinG3)_G^G^qx2|Fn5KU!y2c*4}H6DX_86-c05yxpc2eMJVCmVP| zE8Pp^;SPO(%9P?~;4l8=JHSOL-3vH?yub#2)*C=$*(t|BKcJ>2gE!9qgxeu9hGXHq-4|x7{S9V*V z9W|Mw;BA!E&AS_1%Uy$=k0Ja{_?qzg5chS?n>qdj_jczQ*K#mxnco--!5Sp%q#DR! z>2HLCdvo~HC>!Jl9@&i``<}OU)>8;1`)d1wkXg-Kl?ow6MRhBEk1bmN%mUWc`?x zoH+(UO@mgjA`rt}x`PCb$r z%B!Ct^2?~6Q9j6+?K`1+A@y+9uFxb1zY<<2awYf|1nXHXA$@gbrL3*+V)V;)Z_Yvb z>&!vEOo$4;`8I6{ghfV-j7k9WJ!i7392hTMm7N~QJeu7&m;v5#*_#8aA-kEs;@ce% z>|-sncY@i{YdC7VEtXk)g6F0`9ydoarA9XuXK26wC{y$UyxM{}U=NUd5(j1tW*8yRnl$7g@DS5z1{loNPXNEQQA>io zm8SX~SZhNc@E$m3iw7SV-$|^#2Xarw=?*Y%%Qv(EV=ley9-v$3t`&h(Mv%AQSZA!3 z>JZEf^t1kgx4y&{Nmbz4!AE~Ro(rGiK#*pHAlS+OVfI{j_4L)3FKR=^){L<9X;Aowf@ShAfIwW}nST(3 zg1q1s$P%e;YyhhBuV))jf?B!|NFhxw0A;z48#3>tH%cD~PrQ$ehYKJrJ?%w$35c8& z`9ahy2>&}`bkq|tCL0wTKLM>sGhcy}V6tNopd8XnpcGS#DL|IQ8ufv2dB>Uvz&B%dr_^Lh-k9O@cS!Z+5;N1+TUyc1Z3GMe@ZJ&i^eKUFm0@0Pa)Pv_NCDl-&rx zuB~(7(ch0&KOPQw_U0TLa~q0nEPSI-3n+A~K(2x#!6+A87rYGV5vkEBKft}E4~E`v z3m3n?u*=j2LRTY zen6;hTmghQV;tb;Ew6xBoZ1N(K?iC7eO$8!$JU&s;;mba>+8 za)Pcm&wEONbC%gCtR~o*a?5=j0*&m>u4Gy_CxC~IKHtW^e~vq z>{S{96+2$rf)#FE3O#~QqtI+?1~A`#X0HReu1D>Lpe^*49S&N{-e-LetkWZQAz-Oo zLVyv58h{-yU9|wnE^ey<4CfqMz%|IZ&$$(%az=ThGr{a-mT?q<>;+j%0vjQ_iZ|Xj z8nU1IhWo04-QB8Y4+bruukA-5MQCGG1EURu;16S6a;Bz@8A)HCaPB(gPxKBvKzDtTlFh2^2!V5f!2}+ zbOEkYPJRI`Pi3h9vPYM42`I))GC;~2eK-u(Oii^{g7?Gh2wx;v!|Y4;U`YNaIU=PU zWVFkwleHd<5ylkbcgS@=*R$NG!Bxq1$FU3iRs4s1?|@^V`P^6laRXx)#AbnALwd+k z$etK@9(04RTXrM=b_mW6#aquIseR(?w;kYK(!KQixxn?cYlj<<9_-Us5HmUYOiWX7 zwspO6-v>UG5mFWSLjIOFVEgUHIvwma)_b-Gtb5wRZU(+a+4r)?0}mvUuA0&KTVwSR$(_cA_8 z&jp@5VIPOv5Odxb>nH~1YsWd~Vjx93vk-IzAIUhN5K-g;8AFV&2llye1M4aD~e{2PnZ!{s9Wo zjwsM0w392qT58HuUYn>?(R*T|iG=tuw${;a`&d9i%@> zX_dAgf{~$5Lj543K}3&;9pIc2`#AnxkYmOGV+qidGja`BEngU0K_+v7=|F~#rZ4aY zr5SLPf;s*?fy??a%|WgaFBbqOEp!WLGk&z|f;QK+_BCLd{H+T?ZpZ>c zAZbKNXCPY*y$nR~fX5(}n5*+Z*OHHYKnwd9+5yiQr87a!5GAibP7t6Q$OUm3?}G8I zTqF~W_oW9VKtE!N?g9Bl|6&)AU;1fT-~;`G(m+wl(-mZ(r0Qp&JL#@ZfLU6N_dq}7 zB5T2#9gaZ1!f~bBIWeToKtBqPs?a9bFM({ZU0C4@2^{lu{|>AR|YL znYACXTlk0i$AIgwdxm=hgrAK#8ZiZod}c{UKd^toDL#-Y($8!P&iu~1u6tmdH@iAU zLGtXBU~&a`J^anB#CYJU{V`X;d}K5?lOTU6p+o+45K}I;YJ7QcZ}$A^IS9tL5@oyr zZpm5<&;k6dr$O_}OgRY>#ac5r=uZUfX5b8jy^Q(-9DSU5Jl!BP!|tQ6zt|rNPP2Q1ykef67Xl~!KW8_9 zSDRm$&$mKaF!gxyW-wcs%gsb^mUeb?w+2T}$85(gFj^RgjpJZ9&}Oy|%>G7Ub1+z$ z))&@K@a&yuk*^9v=B2C!-eQox%J+%A6*4~aIrSy@ssvXWBOrH+Jo%h+!B;Yn5Sj~* zc08%~dU_2T-)69Qw<2O991^v2E=KOpK`4Q_m|=2!!Cf8L;v7I zusUd8^K-~(=Pem{7qag9rh2!4+1`=Yxe+oSdglciLHeKGwBR|2`8wuxOgV_H6mun} zGZ@pQmQ(_1$z&#j9Ml7H9;n1j4uB3-hgJf)r+a7u#{2Bo_8=!ozyW3hd1Fim<2F9y zI>>riC<{S8Gx|vYw3~h`zk*cbxeNwlp&Vl^=mL5$0{Btp%Ss@q7xiZxads#B8t8ZQ<{=opnS%lPmi?Ru9jiZ38{{m8Yymky72^cZlA^L7 zWVe*jZGh-Z%?Z?JHcLQH*e&%-Fpe;u&q2R4J|+O>Q#q>*!HhGO(-Fu=6Kw%_sc-ZG znIa!+5@fqcQizQrIl9s8ZiW#o|J3iBa1lE}yK^tjz{T29L zS|cE5XrfDi8G4*^0D?IajH2dS=K$~>&GrU{!NZ>(`Je8Cw{70uN^Sy0&Pb%O62!%7 znF|bHCVv5gSgP+quzJ>ltX1%2`@_eNazb!g#@Dfp;q9hkZHg|2z*e7;wH#81B-c%; z2N}O-6wQ1W{42AI2dl&5u}|tf{Sj^%x8~l-3q~VHQ{zv_`Y21i!@&1x_9EXYNR3bJ zmGT$(R|by+6Tx*iY)SYC$ocy9tk+Ay^~lpS>>)Tic=hrwOb)hap#bfl|8 zYy^Z>`0r->K9d#V- zfOU3H=?-j^Bz*+tDeb1WKx;5oegYjW&E+>RYRD|cf_`LtD9eDH_GCQ?_6*&q7Eo78 z$|+zEE^P-C`gd_#<$%)NDs*h*Iq@vLK>Y*tg+ZA@8qwr{}#1G&D|{(O^&3N&Ens!~Vvu z26lw4x(ztXRDOU^=}>=bEo98gD3m(eSGg-$3Nq$o^5iK;n!#W`1x~ za>srmui(kgPiHY_hK!_r22d+t`t^%#Z3@QOXb6ffVX&mPv zke^aS0NGsT0ccTqOkN7;2*u(!wo27!D=S7{DXn$!Q^b-&FP;1>#V3?xYw zNo8P-E~f!dQNEFGpy@hF#{y$H!b{Ljx)KlIk@v&_vPF7GTi`yagg~RT02#nT!pH)t z&({n9+l`@9L5~xlIB*FEZjkOYk=sBqp0XVD0bxu7?Vfq z)95Xifsb?mqd|Y9iza}Y8e~3DPTFt}C_xcQf_}g#oS@lw=>q&N(_|#bQL6JE@E6ER zkO}0Z7O<0a5`l1>IDzh3p6B3@``X+NgNWzhO+0R}tA)M^O+3&+>M3tH%Y;JHLeRghdPr4mR!@^b?;MmKXCG+n;bo}l?K zNCqlkQ3B*4C8-IrL+j8R2$z967Z_yEwrYayvKNOYfHssp{0>slcqShL`6RC~3giTz zaSn99j$|ybl-G6#kczq-7Z{QHl=-0d$irihBXr;-$YMU#Ffb0vHTHnilJ9f?P=_O$ z8{{0HXmMbW^yNGdOAY-CWCks;KrHd_6sW^5Is<4zj6Dg+OJDJV7Sh>l1M8|aH&hIQ zHG+?W|AH^Ux7Bw8qMyfPNAHDPuX63qnID|{jIG87NKAX1@wPu?WM;jaITwOPuzsis zL^O+>5itNfA9yx+>VY}doMZ~vZo9c%6YNjy{q`})_$*^u<~xx2Jaa%+IJhc0=ewNX ziZ$PNT40oxTe2LCFiAHLfHA|E>L?0wOES$xpsn>YsSi3wR>?iUppx_g{*^k~63EXO zPJlg$AM6T1ALbjCKsK0$Q5#G(2RWi3tVh(7*cuR?FFGprKKP74?MK=0`0P{r)w|$+ z>fRIn4aBaE-xe1SnWoPQjD(nHaTjyV0_R0nKiA*zsz9QVbPm$jr0+}*g5h%x^Rxl~ z7W+4Q6?nV*yM@kzw`5?TeGu%=^|tjlkglm32LW$(Pdg0Kj`;qxYC!64?917+u^S-nPeX1ADhTwkdn(b;0-gUm>-o6kjOAU7ki0B=&D11BQ zIFWN`&WRA)BKBD9a^PoaElzmpN?e)p8(2$qfW(0{QL>!TU_5fJ3@ZXws(-atAu!ms z$PLbCc3XK140C+#8U^+*>~fR`wi(|_92nD`4V^0>^4pjRauHlL!v{zH4O(7bQ5mdr znx%OlFfEj7rGc+$b~*oWa6NN<<4*_IY*&Ws3K%;jO%lNHazPdYLnzK-&_8uKvjMlZ z){|f~kUKm8!%K5%2x=29i@`Xg7iBD%JH&4c0og|lz5;1ZerX4?MFvR=U^pMjOkh7T z`Zo|mFV2E=l4eo?be#6lZ$T!I$sN#z+DxYa2f4{TuuEzK27>%36G#AiA&>Y1xS+3D z2~tY-8#{niG$#S5xE1Cn;AwMt%IHlwD6VTekP!f!n8qltwi?sv~ zKt~$;v@B?ZW>E@^zQ%5C1LkU(s0V;}-Dn>HnJg3KV=#kqMjC)ISYAmn2*n4#3jF{X zfz%(1%mve*8$Os@++YH zYQF&>FJ*uXzM&iNfX%!I#K}RK2<)b;u^PBVl#vX4MYs_TVb`KE!*79n$#!EQ7-Nh>QV+Pu zQ9Bc;Pkk8;q5Gk-K?l5wfAP(;y6`&R>mo09LDe!<%2jO!p$&mb!LD$1)K%BDcnFpZ zwzBGj6|(kejsL#K=ne#_DE)!;e5+-_ex`S{92jMIO9rq&Ycm=cLP>^0FgiFmxENMjSF1cNLAThWm=E?$ z3Q`zC{fti3fl&U?5={ZC1vTwOz$kkY8-Z_)cla;z|GpLj9mQ}I%uh7dxCUy=DLw|n zGQKs6gFdzw&>b{Zo-i56EyH*Xc(t`=gC69yMuIMva{4ob#@QZwDflk<3uJ!?S#eog zvce#4TKsQ0e}xZk|=1sqprCN@Cg`2zCuF3AG2Sf}L%j0{f!EZLmUiIeJ5Ard3}r zLttd^S8F;LoveyF2xP1blWw3sy{Ji`&B(<=uqUeMyO6ptwQ|~SNbaAKntBBCewA-~ zzEWV6Fjg9iL0@P-`y?=wjZ6j4NY}?MApezo_40lWRzd5uH4E;{y7&Iw1(5w-_Gn)e zcuLDYIStwF?9aW6A^1gbqyH4hUK&OG2VeOCFHnM|nhbJP#>zXuBc97gAQy;d31~&4 z*al?sG2K90a7g-ZJ5=fvW z2JnKv^?RTp0ak+U)MHctN!M7(3r23mz7MvSJZu3i$3D6OM|Be?fd|yX09>>O&`~;x z-+{Gc%5KoX)Ul5ML)ga@(C^qmI?!61@eGKit4;u)+2_)R9uX^?p8Q3IGO6J;Inxh~XMz;j;m94JK)A2{TQ47MkN^PwZk5HN#MK^lR) zPisvAyQMWXG!X2Kp*Z6E`X$gev;mTDBwt853f9xmrjQ#lKgswc^E|}njvE|57mSTY z$S4TbA9fx4Cy+|=Lh=LsrMYecT53;e0eV3!nu77Uw$^7L|H?_@Bj8gr=v)ux@6JEN znt;_Gk8v2hH?yz#KY-NJnbmxA!Rlu;a->3FTIiCN0LNIjBkUx&F1v@hE$~kWHnpBY zR>$mzfz?2m+0HQm?D6_pFb+cRY9i;r_US<*53o);8Zlt)vk!&}gCsfC;|2GKi1yLn zgV7=Dsc#85Qyn{;55fIwSe5W-a87rnxMLw~N%*yhdSGsMd|;%4{f>1_cZ2ztYfe;C zu+Nx{-T#8~jPtRhB;<<8RVViih$3on)L_WCn3*TzYe;^Q(L1pN7=_HI&OPAT9Cjdb zG=%%3D)}2hV4t1FyWog-8t%s685J=-G7osRhM$eN368z4rS6wtE!R;}7~I{BqmC62 ze$E(T3;}5?B_s#vbh@z*e5ZV$`?^7L)nrd{!~e3;!8q_4*?Ig|oH{fXF*y0!u zMx^Z2$v_!h#{`g(T9ur@S}h?nfMb$d&H~{wKyHAfNSM(aq%&0|73{^Vkr!aBV+(gc zoRZgg1>E42@e^nr{Q4uXPU_PaD5_KR9nhterY&dzoxphDH+s+;xTxLqKl<1JIsk`d zu?z)Wt1IaOG6b)51^tqj^aokOMQICsMx1m3zL&MS611u=)AvEQYfb$HbTSq65?BW@ zr2%L&ouh9+C+mAs3+OI$bu(xWdyU)#a>{;Yg7n2hB4~mUrvHNdskD&7U_11LP6u_$ z06hXI9}*4r0=vEKgiyg?bf^_riPlql7HAK>QH-jKq>H*Gh zjA6iBEvFAaH*0fyJ4j1et($ea*i2(!k(84Mpv!1x4hDHlH8Tmw&nROg zkdDWw3j}Fs`~cW`T>tvdF<}(&AtkIFAdkoleFb)PYj2xi)Dd3_k! z7Iz0exB@xt+?(=T0%w-{wtF`CqO;feJ45Q!v|(x2zS=)EzC z;E%P&Sv9~D2(RzX55{nFAM+rT(`x4X3n;C#1788B8EGE`&ePu52&^~CX$>HWjrJ^H zq&By508RN&mw`6a4)O$24kcem48r-I|9H-?g2Q_bFFI2V?9Em^MnJGYpfNzz@an=yp%>Z<$@ha2`q=+n%1t9tGTQ7lTxU>}jKiVk({A_mxHfvS;K7f|B z{{~VWZR~Sk;_e*&pX|OE$^-PUtA}y`mOVMx9WbpXfe?^i=LK$ndC965Dglya%#fnM zyN-I!allf?Xy>;7U>-6JK(?_47^3lZ6ChtG$^Q-5U2HR066`Y+3HAYJXQ$I~8O&Iw zX*96Y-fHgybFVSLT^MABei#-D-cFf4vde-_41LUOu-*}*D)2m5T+0FNG)rB;C7Lk} zWH`Ol2i8S z^H8>~IHS93vVc__(h4naFOIV9lf>FVQJ0a`)J*^@wnT3>4c8yLq5u+!~7LN&qF z%<-Ee4HEk2UzP7ByqxiB&C7owd3LIqb`=~0tQDbp5IB_m$kz*Wf;BIc2}XIzD^Y+c zl{o^kjN^;~UP&?$z)k&8e*$U2A8G)1=puPQi_6D48SE-tXC#ouLY)SDrjaV3u^1RY zJK4-S;CEs%K|hp})CMigQL;d1QI4%Z4wf(xs7Z#=5VSFeH9ydc7qkG%>ND%ZAjPsz%1Rz4A9lo)}p{W^i+V8tmP=sfkli5SxXpw zKrP(z9_S}b(bu4zbf$eBv@@;P1X@_yk_oz2-{U&)2kTe_cy+$c1@$saDgeR|GC&_| zC;kCl$O!%VzkB7s`%^yVF7U1X$vTj4WwY!B=93E>beYT}3z*MGx)Jo8tl|>rCGrpk zvQR(P5n#xC$;T7$7tdaqeH!GL@s=H6UUW=1-he*P7<&R}AG?cH9r(~5Va)?=W1kHD z4$@KAhrR~KL}ND{!R{0KD^MR&_9b6P42RdeuJgPTJTLQX@sls$Rm)cmpOuC{Fgwn7 z8Kjhs)uzDj_7H0X$X-2a2SDaZ2R#qQUU^0*ke}(K$3bqAqFcd;k$C+U%=aWikAiuN zII9PkqqKlMADjthduD^>3i<-$A!+)XMQ;j1a=kYhZwf)?l+^jD?|>Z&Obh-6#-Dms zW5Mjjhk63cmK?JCf^l9`?fYPCqoutRq^o4;K9G?ziMk+*D9ZsbieYmD%yMkfn_zsT z3+!rO9+JZPCzwm7lQc_4_OMvJ=re< zz+Pp25?Tkr&H;bmSFnd$O{{qkmfN$=^BqKYkJ=Zx56q^9$S#l$GF=XW-PX=yrUlZfLu#GmPf}vQ z@`vhJ#lig8a66iSy+>~_3+&tm4RMe~V3o7iYAl4Z ztv>db;C$fx)qM(bC*#l*+CAT&1gr*4Lj->R-@5I7sOtdn5$aXfdv4>^bD zo|?ykum%wyM%IRm5#HKfKV)|g_(Jm_G(%5O39Oj^c0cUGazLD5?PfF^Aeg0vwF`vh zkDMLd4D#&AcRryT#MjIjo98e@OpGiWn+Bc};R(^FAZ&fa@#u|^%ax~N!4{CeZh>I2 zrBLE=nQrCtK;g^9@0VEwv@maY7QyqnuX83of+tm9oP4zgGB$dT1@?pSg`-8-b>O&J z!Q}$&FJ;Y5An%*~TwB5X+wrq!B)I2!UPYXQ_&qs3&N&&v@15g-$OO5Fd*~*0Du5VL_t(TbHG|@-?6KK6|Md3++am%UR?!t4hAv~ z^k3aAsX%qQ86`kFGFqyD9jmd#fW26=sSno2x>EiD`#P0mF4z{E^bpubHB)PV-P%4z zOHf0r$TDEKj@ADf&Ffw_(hi&8Ndo{Zgl`I@u4vh=xS$D0tjgn>H@o@mFx$3 zZA_#AaFY9>H=vd664?bH@MZR@j3fxG%08I!6Ij(lk=_cx8oQVO3Ev~>b>giCh8(W*Ltzd?kmCiVLdL-q*;~Yran%XSooBwZ; zs)F0^DIYl)toyD#5u3oZ&)Q{u2?gD9b22u7zh1$MdDlTokR(SSYed$G>=d{>_41#W ze~0r+F6_A22g1vonVJpNU#fY$b}?|j;o0Kr3u*skZpm5#*>B_>%JYGLMkpz~4eY_* zExu?dUcO|F(v{%Z+~>6EU}(Dj`G>9hL(LnF#y>L}o;%XAb&Ip`Y<$xXn-+yim#dAb zQW6rAl4BFoKqgyHv?Sn`S>e&(%yO)P8St?D{eP|>g4BUePuv>~oYd*zX8{;yeg@M* zI|lngda3lssr}%|;YS}mZ3+I0`4e~m!99U80J+<9`v>BoU{k@5;b%Z!)Typ(KqczA zy8`zp5uADBvP%T^|6KIpq!jH!$wQzi?d zj=(>zFMKP32X2Xc2iWC#H*z)bfp2ltP2dM#IOZ7edt~F-YCye+nlV>E`*<>=?*m6% zDUoM@O|H2SuK?@pbG~fgtX<7p1i0%t7qJ)IgX6lz&jQa|G2!SJK(gIqt&hOmlJViC zU|v-Td=6Hu-ODV1sCv;Ayd5C6O#IM@yWkrZUELl640E-1(t!Kcj_`7jzOKdQ6tG7Y zg${s8q(*QKn7wi`{5e={tO1Mz*FJl^^Z@&H`%Tt@-PgXx^I&};r+5r>qk@KkUv!5) z0J)*HO(`%QljmFky~Pc>L#RurTc`|VznxW(>4H#3pm4AqB+iWcEAAo0bc|dbQ6I8v zXB^A?3^LcI?@Ma{u7&m_t2V^cii(N+9^7?ZYwhdc{OIfqwFYOE`Nio2?9f@{z@t`= zCOuvR>Dd`SWV{IB(qUJ)90Vr@UkyzK*GAVIR|tGwU!BMZC`k1e3XXsWOCDT$@CiJ8 z_^9l|6_D4X;7R^;(6{BN+y*^QDZYj5pR#*o?}H~Jo-TOO3AinDC=TB5JPF<=U@ADB z90$xgXMoceoHv}e!pUGhHfzk^U{0G4!%e{Tz*X1U55;;EZ(sBd#8-?B$BY2;VR%ir zIE3eiD+aHCb1+;!bP%j_a#BAAyNIkz3jV>`F3CkAPi) zMdX8PovbAmtT9qw*Mjwl+}97l^2%RY1gwizJN*N!`m#*CV2$Psr@@MrdMpFkU`>$Q zV0}hsvOxy&h?yYEIIiCT>H4wG0`Zz%Bm(R8cNznRM-&2I6_a(0z2rWOF4|FPZDGEAQcWZAjUVT~bfWEBTwJi{>Rkc58fZWGiG%pP9M(*`?Rfyga|1iD}c-Of{*+alyAm6YBtVO)UJHUNzatQQm zx@srTO1&o%D)dBGnVQPSNUs~(uU_B!-Iu>LqRjCV7R7%TnkTKS984Gg8 z{H2|MrL31ZpkL5Vn*yKeBy9|oW)(SL#mZ%g0m-q-=r@plE2~E4CCIFs@nL#d(1k1t zZ-wMyNedItLB)S7TrGPZ?02nW%m(|KbATZALf}APMxZAoyp~WSp)tf>ik%yC8hkT-MLb2o8}=>r31;NF^`1S`)Ob$@OIfe+ek9F@(W4KO!$? zHQ;DG^&wP0crSDd{AqzVL+?W9p7V3=QHaYnZ+WqL7VD_Tmfoul4vjm z__Y&QUs*3$uR!$GsD;rpAn<)4I=B;@55nz2--9#K%rY|}bSd~w@Ga0su7<86VEt(Q z*Q+&-5)1&>t5%df4yY@Gc?-;RGIb_!Ltml*bhPx7jiCGV7a~Bu*M4R=@P)}R(?FNX z68kM+i?*Ny=y>kwQ{Y*`njn+U9zwF67z0)S(XU6B@+}7Md|&et>G1UC)8-FL zz^1VqBd<4ynqSpETc-@v8CW;eU>&$u`reJ13gJHCiTUY}-X&vQ$~#c_+rmF2z63?m ziZw6(&VRx~euWTWJMb%vC~X_2WppqZwK^DTs4D>zzk5FV_%HTULV$S;}uXU-xhRyXm{gCta^6Ub5JZ;DyC#HNO-eoc2R-g)bO3a`|#Yt=hwEV1W6YQ zYoTFKv0s16Tsdcms#J&=HBxVLAE-o}LsW-?;_eZ|HfRg6?28_pcVgcpjum=$G z%pbsc4LLP|u5>ijz<%Ufj|INF5xd=PNE!I_)yIV)&^2%;a1@GkEOM@7H;~EJSx*V@ zf8bx0AAs=c@aoWGaD8TtrXe_Am>HY^IraanZb{lmGLS?|yuc1FFc44Hj*8?gGtldC6JaP$W z&t>~QfVMD`K+rwTLf{=KtR9dRRJO(duggN~4IqXlbO0=xa}fwiw$mHxw%!A$ci5w4K{Bj76tD=@-El ziufQR1QpL#{I=8!ptYD~Za}zBxMuJ(U>ZNk&!D?_U#o$6*;H`mfnL=6#skts%2=%+ z`lE=iBXc39ZSVF zuo~D+d2WJc(O5@<7MIb~1imme*bjQ1x!M?{8hzwhU_I-32eh5`V;E481xyG2($}Ri zaDyeh1kBV=wIt{ue$l}o+v(0(pgOhmFvtNJtYyJmCq;h%e%6X?0hX~vo`Qa?@5@18 zEW;@b6sIgDfq~MWTEGGALK)DR+EhD&KGh0Z6HF!_@HUtabUFqo&Iqjue8W>}fp#Ro z3&11lNNZpM#n=H%W;30EL;RteK&NU=Hh}z&p)l|bqbUM%nd$N?Xb)y;Z;*cG8@&e_ zZTy-JF7qT@G4KPpAGy|9ZGp$3#Bc|2b_M$d`aJT<-P;KW9Dk; z0Qm3bu5}7S&cfW|*`wg`^A9K7UjS(@roEJM27*z6pZ(jxo@C!*J4gklnZ006hxY_u z1!qI3hyNV#NGtkIfwfzQNlB0&^^}|iIWD{9I&hdbsRVp4qjVpTK!5!bg2CXI0SmG^ z<_*rvhl2C@@8)lVoDn(0vloE<*h;lyplFRk`N>J(-Rb+tQw%&_Z@#B2*t_kWu9{%I zrioe!Bom8^Kv!z94=7)njc_7a)3>YaXS_hcSP0oOxjtMT#8i#Uj&Vcsxx_!?+d+&*&xpAKzLz4}`)+{wUQe2bz(VJq zmIpgc2Fp5-m$<2;fIc#fY={{a-8O1Ac=No;z7k;j?0nZg@XrqV0%IW8mvbv;8Uzjm z1OA8L`rPjCUIH-}V%9}Z1@}yMUpok1~6F#Hw-l7q{G-9a|WSlJHN z9P5C+3JN~(8-FzTuLYO*&x5mA*O<}ZvOGcemk=5sIu&XS!BN4B;gKL8$m`67{QJRT z1+yXld|umvL*TQ$XMM#XW@yaC*iB%sa?NzdL2m!Nx%q!Uc)zpa$zPClEvtLxO-S{n zEl6Dn`JWf$_+J8howeVp1x_84uH8YKNLQ;DV2Ma&kPY@T_H8g#_%#?0p=sfX&MJ_y za>iZ_uG{Vz?!pi{6>jOg51ww?mLgzXw|v$vV1f?Rdmv4j$O53A{K9A;i8dqvU(u7w zzzj{I0XY4g9nKbzYV_8UVD)FJd;`2KYgh+ngjQC-v@`>q^B`N~uzd!km(|Kz2Q24b zx&Rwx7N>#tWR>0p{RSf?fOszRJm^f`)*7HY^=B;%Y%rae2D(9-oBAO4m}~t7T8u&* z27O4VSY`A_l7ZVC)7d~22}}Y0)~z}Zv?2{@3H&8fgvvu}O| zc`xN1$axQ<-j7a=EP$&1nvvD#Lh{Jsy^5a!ecxQb09|CMbrIyY9FZ$P3FhiNV7M&O zYVFbmkmaUBPgrka!m=c;)jSQ)ZwWzSAmh&~wed}IMs`m(a8b|koRJxkoLz_BXF zcK_1^ZYJNDadjU=&x`g&orBm;arNVUkb5*YCwDVAhn;~Y21>RqHMr!<09-QipYU9!_lGjqN>O4h6rWeJXUQ$#8xvti4TG4WF}>nGhw?Kk zd{C(-lq^@~t( z{fu)U7bR0(hJ+i52?+~im@4{ZkHG4AjZ(92p%c7ppYZ%v;C(T!qPMjZz4`nZnKAqdqE&Im_=(;>9o zX#nPd^SSdmm_5#0rY;0O^b?*0*~>DYE$9HDiB7YS2jtuE7$+U*pp8r=&|aFtBrsx5 z@IDx{kF^Z+is{Bckabpz@V{UVgnI|?L9ka~rT+j}OI*gg@1HRz} ztqfKXdXNlqLVD64%msPCGa&m>Hh_F2mq`Wvh%hOjx3#Vg1+7a823W#0$pMoh#dsAo zi|&*J_UnFa2>M8e$a0{q9^qw>hTP;SsE_fw6igv)#CXtUyrW%#e^4C={6jth^yGb} z0^N0{`at><(mJ4hF;oTJrDwH2NFDZw2lO7%)=iKK7*av|6T%B*kimUmBWw8{_=QLm zG)<@I9MB4U$!|bEgf!qaO5*@OF^e`pQ|TcifR22q8-S^t}L)>+UObf_$yM8V*^Mi7}7Su~;s*dwhDQVi^)Wb+jWRJ1yS zDr<0nGzyuyAR_e=4Q1^I|u%*1;hNE!58DrbeDvLE%8U=6QR(Aq?m+` zAcHJR#)7G@g-t1tuSnt!(A|`#DbPSinnl1b6r&^1Nmgrlkgm*?`XE!eC_O+LS>1IR zNHg(B4d7++)eAD2M!W|yQd*iGAQ5bo;vg?lU)F-OVV2edp3sgypq+S~1;8h?(h;Cu zis(I%bXjJWfc21h)G_5~pL>4^|J$k;Wi@OS~Kg4$5%p4RSzs$v?o~oYD)R8#Tun46ar7e#Sz4N^FJb z(GVKoWJc_P+{U>l^7=y7;v6Sy6=Y2+h|7$IQ1#$Q|7Q^YUc4)|CAb^A7Q4oQ`G#}a z8e}6Em|4iRS}k3_ZrbKNAF zE|A?g+nXH&;XC0AP6}9etY592Ann<#zk##F`NS!J@Li{oX$88#EY%l*9o8W$8T4JQ zix)J_JY*y=S6`6V!Sps2OeBPU53~*z2FLFWhkAi^Nh@gvki!Z633yv8YHOgX43;&( z9_~{fbTRMf03chRWj@e@-+2vW6aCo-c8)xeY9P(6^VVgsk~B>sKzEa^9|7a#FjK%P zBm?CWuzr#rEC%T#1MvW_lFl8VElv0xh$KT3fSbCHd!S3mpc%*m#z}3^H%X%+mfs&+a#E7C5!j=x9|%LRrvGf#&pZc!g_N)gfKhVKssr4Y zW_E@D9?(`*kPOQ50cZ&t83%X>QWL04mQIE|JO6&}0&pF3cXd62qT7pS6|*7nYVxJz zy$~@hDmLO9$OvX!$XEpruHCPF_g}cW^HRix?%?{=-O}9$s?4kQa?RlobvP;%`3cYo zbl`tcBJ&5piS@-N!rc{j58VN_#%yWx`vABy?8=0TeV}Tw zsxMW387loziSj!kVu!bhcRa*Sjmn8F3WaMXrxmUUF<-=XjV}XFnm>LwQL5j%XxgAc*I$P;jR!PL~>%-^6@bg3x>dRD(N z=Rjw&og^?P%?|*1^Kwt;=RnTo>^fPE!E`lgp*}zz`slmBkNRvd4|t9o84g5HTuTF+ z`O{1TE^yMM0hKAN$v{(FJOqxgpPoPyc9RAiXBdxw;vAHr>@#~%QMnFttKhysF3&I2&Wx(gW8d;};VvO(VFHTfMFB#}}9NRSyiAGj*9R0Vy< zu5AwoS?Dh28Ul7LSl@X2hmDrf^O3K zIu5j^j*w-*zdDiaKyz}`2CFS;)?Kjrp=LJFz?=$y0z7h#gx&$qNxOs$gShokcEqoc zbTX-X(nLu9F=;?z0DNh_o8G-(W!eW_qd|}9_>A8nFDt)pZY9vmI@fH4YOhv}ubKwB z$hzb?328;r+GLdldy2Kl@_^^8`#V<|NH`RKK7JiU6!FdWeFHgtbEf2;hx`xoUHL1) z)Y0Z)8?49daGd~_YZ7|8PM{yvNeI$U^;cZ3$^QosLfJWL} zUj$-+6~G+&>SW+^-O0Z|Q~8iqAU$-S9szTmaXb$c*X?`_6yalrgY>5k^*}%7HhI7V ze&Z*QVqD`R;H-YB>A-o4$TL7wsf~jCswXrK7)6#Q0C8Gh-UT|z9%_TMC4(rCg`DCa zUzH&k^${$Yz-&Dd6%ZxgXl8V6~JY?#p03V-Jr(G{U^c5=srC*YZ7=U9!v#F+(V zJ4kEmGid@kSwGYUz^~Su`Y-77W)>BJy)r_-2MSr8wF+1l$(D;CY5YYmV44i&8<1zE zycPu+CPO#|JWIa52+ZIo`3~f?)Rb*t_otWC1D0D;xBPo4+<(%Viah?`5B~bj&Uup zr-CcVx@aeXmCq7709Vb6rU~Rd&h4I?16tSopo<_fHnLvCEQpxzo8&tUuJQJ9dj)tW zxMzEQ19u(IP4|bO2Q=G^0IQI^E``CmE%U_-fn^1C{R-&~(i*031M`Yg+*|>DSzG8R zAd!4Zg0sb0>fDFG>cH_p9WeWJCBq;vK6umr8{~L$UAbMs^O|?IFB#lv?p#j;a8Gj2 zbnS-F-q4}oB+zW*at;Fnbd(+j89^_e1-{qMbOz`>B3T3^X$c(&TFRMeZi24S(i#nN ziwevKU8H~OD_}-C*PJ-8ljNZM4%Vmo5C4D;G|R%rffw|otN^~!Hc}C^C|5ZPx{sEc z0koEtTmT6$ljlKR$I+`GC#5YtK>o2?S^t1e;MM$Aocn)oM>;jN zJIL?Uq9zb0HKYbGjx;hrZ*Wlif|R42^Z_}}07irLC$psk@RVsh1n0Cl#yQXkNuxdR zqE$sd0T!C!`V<(=O=bd%Ii}r#pS7B<1F3Inn;O6k)5R$T`dFt*b+F#D-VA*W_93f_ zRT=C))=XC^aNTvach3b+1J3}vB!t@rmxcGk{kAu+-yRF8*(ozqTfvj;hwGjkgJ9i2 zm#_g(H&1C-82lab_xV>t){E&&vrj@OE6^!;6ufwj`(6cZQP-Lcq_ERk1SING+Yd~X z^VVU&MOl6aj^U#!aE7rG4dD;Mt-^yK_;)BTycj&~Bcgrx!Ar#9$nxMTh)Ru)g9`sv zIZ&lAWc{ALHGK;lop7l4p~CRc-2dcWK9u;SMAwof!I$fCx&DOkiSXyaC*U6F`Q7US zzTsc@Y2b+&9zFw3onQxl2AKTt4S!b%#Rlr-L_)A)U}0Jz$Sjk&B6UCHzMq?(T^Ewi zB+pF#3gUYwkoXSpr&iVH!75?(mtTN!CRX2u$QPqOjC=_~BSUWlJ_7T+E^{KG+`V!= z%btVCVUdS@-ND)<<)kI#HP7jnUkt7-xHkA^8Mr<5_M(UV;qI%q=H5O4z9$he5k(>T zT=bRbi=fTPFiDVQzu0o+LlK{@^WmQ1h5|a_@;L0yMXq$ZFsykwgH+aB&zYMVcN2suI$b0P+Ig z1BukomB6>Wp=E((9M!rYr>#_LDfs*moqf-P%(rUUlYye4mS!R7U72D$pd)36TEOpA z0?^aWZ2**$hCLagMqMnqI{l z{G8)_LySe)OMZ=Cqmw_yghj_V7IipTbseI>MCcw2i6x> z6S)YXzM&zZn&98!|E-`hXfG|wAh0dh=k_(Qh6LJ^48@X*#1(E2B_|j67q=kmK-PCT zM6gF;4EKO{xWpDv(Njc$`sFLh0m+xr@;&e_C;1yVhD#$rztu4u z2KksYYJ%3G1;>GxbTeH+uE=M42UK*OR0G_+s*gd2bCo8bmHCG1KvP|)y@8gr*LuJ+ zlvf9=L6m1Cn9c0cpMi~xWFqhuuj>imeX`_ZkY6~=O`s57vOwOEPFesoXS4JJ8A4b` z028^Qr$H|09dbe9q#GxJ@AU(H5%eN|=t7Ve7(zX8CC0?xiQ5W+d%=jn5b$>icmm5H zHzn_fynOIyhL#44g8i-Urf*=xQuZjiF( zEAs=$C1XrqV3IUr4Y1tgXhm>3gzts=K{yn+-8Y*loy$sK0y#?y?a3B=U}L4MYrc54Ar4 zs}I%n0_fL_&|#n#D8_xDI`{M&&|SRvAN9lfkte_x@}(>TIc+aSz`Dx6WP&u7(fSU^ zhf+!Y1o@eLlm=>WLq7%rT<18@o*P;iXv=P`1NOU8+4=y8)bHsCJmlPe%o_cj{h(d> zSsQ|mBvHNq=b@7q{s_{>K3)CzTS%{+I`zpTuvb%0Uji#pcbcu>1j0iD4#*82IU6B7 zFkCr20hsRW4c7xtmaB$c9IX2~*fkXr3*x)Py$dCBij6DU1LAhXpNd}sSrfBHXHJI4 zTOZB8HwOysOdgxu5fXn-7@qV2$YyJ;RUha=BNhUuwXD7kQje0-1Z19guznT7TS|$Wa`Cs83UOe(mzXY0RAuhCkkT0JJEgC^E*ffI@17x65JpB3o`REHf91^ ziGlhXL@bQB?)wDt2ILLS9{}m=(x0YR0hu7l*2@q%IkITfS@7g}_INfz_(phGs3^GJ zb}hD_fNP*D#=RGu5l-uH2%P%i=fWjG-8xn$ff#<4?jR*(7P~;^&=VJ!cKWfY3g!pX z!khyNbezh%`Ww6}T!UTJ!5YUc}?$y3)$wE=UqTun0KGQ)>ZGU$00AWTY&V zrXW}4CHWR)gWQ(OAlInKY@i3Pa}hYgA8Z4zF-f}uA5xUwz&XyDvB39yCDnkV+Rs`G zx{bbc0;*9%{lGC+vJiAFd)N;0K7X18Kpasr4e(J|N`dy#zGQ+Nkqz7fvtD;-EP&?g zGr*6i#sX)g9q$6?d5cjX^LR{gpeH4039_3Cj02fOSE&o~kiWDgFp^A8fLx{$-vT9d zi*^DTLw8z&xn@$B0CbXjdKhS-?Rf)e%U#_MQr`^G43CQJTE(&G4Pbms2hyyr)>7aJnN|_N!(OW?P?### zRv?2C`aQ@;_^gA#QJQE1YV9+_xx#k#(A?SklkqKC$|g@iHj$KrQ`>n(e<-4_aGWiQWe0@5JnJ$o|9D+!yyjU6C9{ezFCGtkzEO#`JtCxwZXRSX5LRhqwum1q%(J@0K7$E?F&rdGo25( z5$*s=1OtJ(6fy4ulPS$9Ae-xEBFN8D&Q1izP+kuKiBgSuAWvn4z6&y+_cQ`X*O~yF zrZ0eb$NA2@523=rr-82^+#quY)e_>?jX0K7b~`T}pUO*R2V=_IXypQI|QfFE=!aX>2>%MqX!1FW&Y zQ@)j(z_tf0c{LRfO6xE{@zD>sN0z#Qc`VQufM&d`V}a^AmYTpN>xruk zSeIOGcQ2r?vt5S*m90|F>wsD{Vpw?*XLm<~)Xe|eV@{9c@5JM;a z0zTAcJOWOcW7-qIYOEa~wqf#_xQS5oLLf7g3?|e0*E9w*%_*Hb1?0F!IjLZ+m6OsG z!Y`U=Ycbeot-b6A-!#v6u1_JS3G>1&AnK_1Ggm7}{;pD}+*3%{lrT53H#~jq>FX)+ zaIwh!;&)F#TDz3GDQBSU*X5>_T>+s1PJdktPr9eZrw2d+QqGkHMOzi^UUWH7lfE

rdG%)j-SY2D1{Z8sg?6xYpT=`ow*74iow)|B4vs^E%F=0{2o&$rU|4> zN$Hik7s3VMhruwgQ@?Z$fpy5LPA*t`rIxi2sA=xXG0;0QT74k-lFkOuXZ5hm2a~Kv z^kdL$(^wYz5d_1s~#yM zXMhCO;Q%x6^9pDREoB+#YTo7~=wFmGDZqA&*kCV4nFZD6 zkO?#d^D^Jl2*fd;>n*VU=5Gdp26zd;6yl8e8i>_pQUYWY334CA$9NtCmsqX80i|@V zZU^fX=4djQqrewn{j1Aa3Y=m-%YZkjKnsx1XwNy|MVXF(^kS+QV3c%X5pak@S`C=Z zyIcV2%P#H#8#v4{u->E$*}xFlLrdTXUetylmE z;RS(-VDGg*XB4=%x*xiSfElKJbOxC0(4;_N@U8cBv=2c; zizSQ&tDUt~mjRBnku4ydbeH@A45T?%LF;H`Z3t}8!5Rbh2wC7<03B>5;sO5UIu}4& zQb9LW3DG3y$n9nYGYc@=K#xt@4sI;5RT+5UJNB=tx*mADNG((^vZeja3) z&JVu`MPiEFERq6VC*q**G(O8RtxJHkREXT?z5BFZU-{QVPK~}-Q{Au7R>*?b&;OgQk z>52wjDHHV%2p$Su^nVWS9qvEuZ@_chUCG@YLiGau0_`C*Fc=Qa1yd({*cl5}lHJm3 z4HCgOgu%KjqxBQeDrPNZz^rhJIu_Um<-BeI?`iK4_jeH57Cabw3a$zE7AXZ*o-ET2 zVEQ?Ep%@6Sb=rsfLHH|Yk!cFSWlm+&8F*1V){Ee7Fm2$pLc)V9C`M$-s*%q`XckY|PhV^~XP(AvbY6nKqCqyZ~A%0|$R`jSoodeTil z1?IDaa=>)PauWF4tY#nZgc8~qXsDz08_?%@g(IN#X^(;oq62P_v-Dv!NO2h{+d;BP zl#hXKbfrJ&9Br+!peuBq&Hx;lExUkwY|szDT;(%50=YVzs-VsJmJ49!X>V-_Ji{zL z19^#W_!P9ewv)=B$tqF=h-9nm1YK)B)WP6{j6XaX@_#94pIroUVskg;{{pU4p19&U zATL|V@-jSn_;^^_-;ld7XG#8cuy$GtWj|=7Su6v=9CU56?*p6VW!GBpck#a%DhfGQ zGE3)n0Q*Jv!iev|8tmC?tpxejo}+&N&&dOA2Xf2$ho69fk}U6noRNd}w*O~trb9-x zjGdXEK(IqF#+d+##}msXe*(T`k@Mo~1MrC~f~-Lq-P7B{twFaY-B|#MT@rsT{4FG{ zOxT>f1FR7BG!eADQ_b83=VYK=;5_7C3RO<84w)S@!r8;&THfVm7k`KJF=??W??KEr zF_}^4z!@7{Uyuh8ZG3~=5fG6UJtVd-*gx6n@)<~+6oj*Zi@M1?fG{I#p~AF^B}y*`twC{TD5UjI-;i<= ziq0$gThWzJsB-e|qygal)BUGC1$1<1T_6D%68gmbDoB5Oj`cN!3kSZY7&zaCT6ju= zJ<|7@>nyNKcbes(52UjU2N}dD_5%)Mi2yuAQVMV=pcJ5_nN>B~(lS54)mCbSs zfH6jZb{OKoJ|fSO1J*AxT?PU(wG9Ao|ChKiH%(=J}w732QCdqAC3wU{!oq$qXjsn6`*UP|TqEO&j zJ~Cm@s`|kE0@OGAomC(&J2~15=%B}>F)&Cb+t&cMd|}N5(m7_50A&!>0hf%EaezxQ z*#-ElZzU6mW(@z~yRTCKgefD%fq=A<%RpIaYt{ot*kJw!+3fky9teq^B0~~)f%jea z6HhBhUllbhZ7^hgoPIek56rLOAFS`esbz+^%7Fi9pp$6}@||7Mz6KeiQg`SSh-wz` zk?S;6d#~EbN{yk?<&ZXdpL3J$ps|9SKUc=G1MiVu!MX1B}}8RsCF>O9u! z5OXJ9k`_X-wx#|o`x=BtI4jL>5ZV}QRqzkkhwa(+N-*gr$N39n5=B@B_CTwL^aVTK zIv|sQ*R_Iq2zkDo=duIfy6OJeH3(vMM7Qy^hNxaq6}&Sb=}6+GxNcz0w@z{kZj`>Y z=1zT(1^lbsp`fMzd|n;M8q`VvYm8rR_hV{0<5WKiVOrTDP33%^w1nx1o{qBG!e|3 ztTRDiHjTLn*nH1j(7`&LKS8e1-z)&LQ+8-MFi)r;&w*8gWN8OnP`8``23dWr1HkKg zf(zjMMJb+uX>4YjV<1~KTIPWEq`V9U4wEUb0hKsPG?;Pvp&kY6Ya*EfRFt)h1O1M& zM1vOaFWJByTnq#Kk~m!mT+vDF1@Tc7Kj`nWTrJSQX`&%ezt+$ISc$|)WiZjW^hYp< z|LbRx6S7fGg7rJK=?S7tW->5I?pi&8td#gZr+#Ywm6b*~<}q6|}1Jw%HDHP~XsZqV7;DE650))=t;%3^vVP-Du!>t#B?GKk_A%Q9_DyRWE|6K;OgjVR>8)#l1u~eA zfY&sS&OlN9j7`8l?3NWE+jNIB6qs&?5DR+3TJCHBn)5uR!4%Or-3&UCT;2iB%HOV5 zkXt?(Ij+m#{oXy*bpzaATaTnZ#NUs3FRB!H>QpFM zc0Jtx`>u7j2;6qxs(ZCOMBIwJ8)+cw)!6rA7Xu!vhP??`Bde_1Aiem~It|{>Bj!bU zAkr08HRd#!Dw?6MfnL`)IR(~nE8l7c;^Lu91+&+D6ut8u@0ZAi?EKaqG83NI=2dZFWxpPcXH zUxr&-?uYK}fSd(653^T8a8&S*;2B^UsWgVbF74${hSV{sAEZ10*)LP&7x3=(H1)g; z5gUAO`Z_}}E!fF_3-YHI49Z&vf%}2h{tO7+4qgwv4RXpBs{}Y3!?{irXgL#Yx_}Na zUb73VnNpN95Gn{43)O;xiMg|L*MR!;f!YwnuO1)dmCu>yIsxH#d?!Lp;8Bw&&p!Ma za-6&i`K!P@qu1pYB-BdEPyQPU2Z|gk@+G*6SR*}OfyBsl7J~dG*_;EKNhui&@~?QT zeW13spejftTje>RFPCI3=s(h3mH_KXVmRkx_kgFWl??9`tmSoUB^fa#ne_6e({~FSf|15P~^jFXi=qJN~+RW9{U{%xK zsRBA*o9jEkS!(EPz@|1Qz%d>&WB}(Ege$ zB>{_gYa(!#@|puC)p}K?fU{1^>miU8oYra(YTy(Nz6du`Zx??w10sg{*1JOx{5Oyo zs01lvpG2njgS;>E(sMULQlrEH2^AsfU~;>JW8hxlp5$2pPcxn#&zJ)Lo;bPq?8{JU zT$#mXo`YiNNQ#Ch6l+qfLWwl6;_OB4C`eC8Nq<@mZoYD}{jE|E+8dl@)i2X74cH}~ceHhz2@&(Xwc2_9}^1Zd)eirgma$m|!g7nDr*z^@3cUU8p zz}_iS?1oVIbm8xc9Dr)|Yh1571&;sl&y%CA;o*^oGw)9Vvori`XaTt5y?s3s!1%*s zomU~=PAHc&7K*t`6fe~YeDxw4Mob5Zw3g?0f!pQpK78;Zoau3H<@s$8+c^I7nCeh; zdeLW->w-x!?O6%8{<+ok_Dhh{BPT1j1-P^A=j?i*gH3992|Q`?c)%;>(AAy?i7zLvo<3}_&ate!wQTF5T|Ru_2|2vNq~3ixPfeF@Z(zSc$Hu_o$6 zU=WVA3CN(MP6J}~i1YytTi3|~sUc_o%Z^!HT}y%5;f?Yd=;x*%M?rgpe$*9z|!H&1bmuE2cUpn z<{nViydGWwq}xNZ1Vl&2UXFSZ?5n})&Kn?>(~~R+Ov%Uj2f}ZJd&rOA{mk>erzM!B z`ldVqc4|R*5BMH=66|SE{Iw#1B~m>!W!zG;q0|8|D6 zkI!dZdIb8&{>?oE%3Xq5)Y98pf`hymRsP`gX_Kktq5;4bOqQU*M=d9;T@PxdjJ+mN~8CnsJ zfyaHHJpUvM?7`L>G6Mpm17`yV!2Or|19xd~4Y4oV)xdtjn2SuJe#F zGvkl6&mpT{=7`MEP~^)(d4(2$UD3W~wFh(C%r|pD?&?;?fb7wq^%>BL(o36zmNscJ z1@s>VYD>^eJ)(2L{)$XagD%lNlmdN)pS1#*r(Dn>z$7B{5y%Q+m=BW9B)WsChC>OE zp*+%>pnkfU|L)`Y)~{f{Ms@aq^s?5N<)HWV8*4x4D>R}pu*x~3g@KJEQ2^8?juD_~ ztk?M<74@#X1I}+!!n6V|5N{5HeVC8rG3a^%)CZ|SGXlU@L{k%V0GqWfD4gXzaEg-5 zZ(!>1w{sP&BvKd#)?w<44U#T*nF}&ol86F1Aq}KGP>hPY8zf%llLwrXZTtYzmZDM= zm?=Z_JkU+Qk(MA|Xc^K$GNh@vK@#LNa{-s!kP6^(*S8+<9E8XCo&4*Ne=RpNYX#^E z)7ZHQNp%xe#J7aVXCtmgb^>jxoir8vCckCgK(KlPGNPan-VpfH@S72%dnz zpaLr|7CgP&%Pl`R8KJ)ZH4q5op3fF=#YQ=i$zVOB2~G@f+^HY(f>hRRCKlY6?U!9Y zf-cZcbpixBhCP8C$on&IPTpJyjd6;HFGF0XxZ!aE@zdk`#jFKaVfPZ-2lie$Ax}XX zaD!c7ikNug1|49!J7a)S+DTso#+b$O703-b|HqOs9j#iRSgoB&puagi%?)rIr)&5V zkVtEjRD#IlsNK(D0I40JVV&Nv943#JBMg4}O2%VZt| zi3~3c?FIL)t?k((v)8_q%`wrL9#R zIB)H?-vCLM#r6#FrAD5QDGJ3F6|Y>P2PCdeDxUl%*t_k^?mTc>neEO~2uC>IYki35 z>+9(G9`df`oy>a&^4I1S&Y2H(SL>iP9zxB6EedKw?&o>_?DY`58yw(&3jRL=-{!9a zE7jVsUxR;+e?$I9aBKI?X*U)CL#4&>x$VDQww5tMm3E}0beC|1MdLPQO-=q525Y; z+5V;wtm%K~Uk>~(KgebXm56#TA`7G(-|8W-=UFGH0M;%0YkLI*jla7tgz)jui2$Il z@wyI%yf^c#?0OLRE&sc`^&k=UN$YdCIri4V8;>BjN#4Bt2Vix!i@4q3t?b$B`WQT) z75}U#;HhO#vfcn4qf1x<)@yQ*z97TovfKq-Ay=gu=y2^PM}RH-C_jPb(_DIicA~oe z2>LC#au4LHzAg7aN>Ebzfljg_bPH&-erpDUw9$q901~UGXao8RuhR$QE!m9$J+8ZT zA8?)nTmk7MuSo}>3}s0I@=2pKP=T_zK)Yx=(+jxGIUNn!LKkRpU@fnc3A#{+S#JO} zc-L$P`G5}k5M+<(pc6m>@tHtF)3?Ars6Wac zuwC*O?}5F}+F~~b9p!Y_SHOQVE2Cf!csl3z4gCW0vK-Vx@U(lzlf0Xdvp#E4c4e?{ zy6;DI17BWL(5!=~W!5cEHe`ICH8ap29v3`WboFO=aO1(y)VHAUshf4~7Y6&GJ!w^-~HzO(zB3c#qm01S~gX0$z z$^g7PZ+C_0)R-0tm!Q(A%J0^!2Cg;kf89TVx2^Y%`zW|l+(%uvAbDuv$NCbabb0dU z;|$pK=FTF2&4be0N^CA!9O90}42f+8Web)5rqpW4d@p@}+8D66kzp2t?~J#*YbNlW z+w187fxMhXPYXlppp+v|>w}Nzk0Ligk~e8;d{>Zpa>I2SUCFseIAZwoya>r6si@e8m#DpN^>iIUREJ_VsgVGH6c1JIxpsD z$oM&0UhYKjN8F2WV=VhrR}W zm9^FrpsJjePXUj%a6lUX=wYX-NrzBI;H^Maa1uh*f?fdU2X8XaNn3|10ol%s zP&=TI&T{?)y2}er4Um4~)3LxEuIeGsPt`9Ifod9O`9P*iuJ}Mj8#4tsMh&a^f7W*^ z9uUcw2|!03X1xLourBDczzu7UeH_^5%+SK1k2O!f0GVt(Cm#UUWd|vsrL>Zc2mi{< zn>n9D?(D3eGe?25C-8oO7reDxSM&kIw2XPi^DVf(@U4mP1Gnv^?h8O!ofkX>s78k! zV6gTvPl3ly6)pikOJ`>(@T@)8S^{*EI=TXIm>`1yn+iMwz#M%W*lITDap1P;W>$gI zJ8NS0O~~x}`1`c3kasOBP*4RNUue5b0jnNK?&UxVet8z$Ke$e~+JjCq-7ODTALvic z42Z1j-R)@)aV?`~M7;=6UwVDs4A5n!f>R5MZY$R7_(@#reBZc7^b0=fiMQ$bKQ`M9yE3 z-Z^b)#$L$%DDO;ODJU_&RAk9Ci0crW5Pm4ZJK@Spd%Ox?IbG^M~FtUa$_R$0`eE zr&eVQn5)`}9MF&H;WP$)NH#x%OeTk9FxTZx(*<;^zCst^u~kj#0;1njANXDW<_c(< zdNdETkIc}UV4bI?)&}#uPSBS@J4(F%4Z47dG6bw=^q83s+EY6*7xZ`CM-xz+SZND# zo`!l3^a*2V3oNnbkONfGOFRdnoR_{JYh|r;1-#tnKFA{LqO~0418bse1ujrdYXf7b z#dzQXTj&RDGZ)QHpbXpeE8r^m`WeVHK@Nc|m!a|^xU6+@-i!zDcK0ItXK<~Q=CTN~ zTjmCGVj(!wKdWFocz1cLMOeTr9U)b~3fgt8BH($=^PQ&}L|uyTMLdM?%fZXRLD6I1)K2dLOv|a{uf40HmvR*i{(rzxuHBQy^n+%I+sFAlZ3r3}~W> zbH;(^fGffs0}*d~cX?|-ppoC?zXw;(Uv(ZG245xL7GF82(yelj%55S1X>e=sZII&{ z>x_dypMqcW^Wnl9=Xaic4gy09y5@fh#ikbfqEKb1dZ=>y3f&;FUgF948c?l8T4p+M+KF*4Lb##EhL?k8hL-575PHs^T~G?lm!W(92EhA_ zHtiw3Xlj)w>*49#xPqAHpxCsc3B^AF&n#~{Ukcdcbg-)^NRmW|1Li)>nFhLB-sTj@ z6rG6+)J+3cfVsp$`3Ow1)@K*U$IQ@|fEV%N0`UojR{ASYj;*W*xh0q6J0L~V$pt=^SNH>D9sMW+`V6rMST!ijDA3{TlgeQBGlfX7 zSF+5S0wzx8G7!u!5~rge{E_z1@gV0pXU2ooRj;~dfX;J<+KJ%QaP|hh5HhB@{Ti5m zt@$1oq$Ovc%wGonH$qJx{{^03Jaz3qA*N~M&B%%1i}Gf>KY)}DDdV$_LuQGLAM%!h zr17hygS&^jqvvgSFz(*ehu?!YDWZv|Cp5VLr9fK0-lAjE3g9Ykub~#4>vihp*)fpt zcjD=|e&Bn~lNT`$oTSh(wu0}^=#5cjAkI!$Q0xW(wy6oE=!9@Q@Tn>1YyiHOnyxwE zx$6x@Zh-JoXRa9wY5UU_XB3AbnaTAFjf4{Ci_I@y3a&Q2Jmd0ya8Gy5wRb~W!^c}5 z^n%Qqsly&U0vgz=rJ(rEQqPr8h$$N5j`|Wjry^QJz6tcFg{upgDdBW84rm2dVUWsJ zch?%Qu2^5%&w%wd>#Rs%q%L3{@SHA`reJ0{pJ`{f>A!yM=14e~cE0xc*CFTiyrlf9 z5Kh$uMu6pY#k*I7r-6Hb?-lT;7Q7Y8hbx0FFSz~zJbdrL>HEi^w71Oq5)+|ebi*c% z--I)h&bp8Hg1i6TeeuEfP(8Q$-HHpL-0pIeehf0--CfE;Y)pLLxMcuNlfV^_0_z1` z54iP=^DBVaz-#~+E+>Jq)T0rg+L!AB-{ zkV339W5BLxJ(L8newFSbKt6+XHJFhm-Wdjgr~a`8{U8+f7b_?PWQ0$6-Jp&>8`=UC zlY_xYAU>Jy2r!Ybz6-eZH~kRwDbH~Zv@6eB-9f6+QFeo_HAPK*kO|zgJivZ4S4)5{ zp`}g-<}yeB1v0GPv;;_JYY5K+`>hwP-+{XBukEuSK0L0qQ1DFFA9-UyLbB274dHQt z2H|*k-1Oe``%mFf!rhnd&I0pHxNC4c1l}yTlN$>;<+8s_I}A~6qH4HLL&84^9iw(b z^3cL}6S_g64TTRTegt+I*BWaTxC{H-p0eP1(|5>v9ZW-V12@1N*WsoLu*6)`Q$UiA z*5SYbXRMO~YKMLg)`#4VY0qVR1UcQFu1+rj{^{9E{69lzKyZaA0M|`>kGCmUXYAX) zJ>Y)qem(MKNVu9bD6us7ulnnoYT$~u`?=--x6EM8gzP`F+GRyT+CS+R)B3>ax6bar zPzUbn{WcG0LB@d0$yo-fbgFi!S}$NgNx6b|T32=#Pwi~(_5_pQBs{dKEnP+%LI) z1Z|`9^;Za<@z2cv3o^Q;{hkqo?5$Z_GfsfKMQO7eB9}(y_?AP`z{HLTTfyDQ-Nm&K z;>N{g#2klUJO6vZpW*S9N3oAfLfVP6O{te5+%D8JJP-2b<@V2M4$h&_i=m6)`q`D@ zUIAuY_?J*Mup8KI?No@)jQl9-IfyEVTo%~?LZd?aLU+MTc0M*ez#3wWwvGXp^f$_Y z4CEPI27Jg_b%P9)QMv&1I0bwHR3pSLurhQeCxA*)T+adV?2%`ICb+c+@Cxti5YUV4 zW;Iw}$UxoztCTL0Pr%gCEWHIzlx~umAXW5?`2n3QkBtf^ya!`qV^8J|QFL=u60 zR!_MNa!Z;@bCBUIlaGK0#Ipw|$#882`p7&m{lV0;N=XIKZ*{4*0J$OQ+z0EiJ%;rl z9(`H+f-AHn&?WFLWR}V}oc zJ+bhmRGe9b*UdnQEe@N9Ii z0naphAML?)PllKuLHe2s;U!@5!dHWrAop-~rL5gx9ykT&2}GWYtQ+wFqI<>W#AHL% zl*rDWQ4sl&@2cw@xIcB}$uhA1mM%IT>>IL8n}L-iNfH2mm4Z+F^B{eHYB;qL6r9iV zuCH=)pHN&mza2lq?vf2ADwruiDVCxCU=e%2Zac{%=J z!4Z(QGG+av1CTu;!=F|geClazmjJWUDG@FKxtDUuxd)G)JWA31;C}30<5XSjGe68KRj$x(ufscxU^z zdyhfVGl|oZdV=+l{jL2kgmc3?L$5&EkEwf78$#~Xypp*KAoy|67itqwn3HC%-7ceKa4i$HAWm~hP7;PZM~MhpNp%V&HG)<)MJYYF(Sc>nOc4$@3_ zhKB&@RHrRSSG|D;tX%%20NiWs2Uat13iE+Z0qbjPyX*uxDBoDG0`JpU1?*URm~{gr zQx-~1u%}sJnG1Q#a++rCgh$;U+`ShIGLiA>f~16`VTDIQ><2N=#-9eAVkVlKASErg zwE<))d#MZ3SdvKsEk_|)3jCm-a2I4SWz2ohQdFQNkj8PcLAL5WHUl5Zdomr!l@IX) z<7vV}FwbjiE&+3OyFLJhvsbqOjj166frZ*zeLy}@dZdBryl21(6Ri?9UxMt5DkQwu3v-P zq`Vdf67{wwfELk^76Fd(1N(tf`n663nJca3OOV<$kOZ*CQ&g6K>A?{80dMGKN&*ke zZ@LNeF_~Hdv>v}mLomaoFRy}WD$S`4*4vU!WsoW|&pHi~Z9dj3VD8HR*#V}TQ->$u zj3L|A3(Rh@T^~Y0R`8ARBnWMEUNN&FqOKSBmk`VgO*Snd{$lKzm{Jg(>l*Bd0EY7+ z6T$VieZ*=6&LL+dPavaJdgZKR;Jjn1ho`}j8UJJHtRJkZ`aZh$Ik%^inV}m&x{(m1 zR6wM=MUYkyNhPF18bN6hi&7dXLAs>72B!1Q?Q`~ie|X+M3~J2b9|f1rzhOcuK;_e@^)RIR<(!{h)XS6>Sy&E!C8ea_eKb=GL{AZ1p7sMC3{b>2JQRoPk}4qZ4!X{;t(}}=V~2OfXSq4 z-vZY;A%=mf#57e5#J}o@Rs)F1ZIf@{J?2Bn6@Bm%I4-YFkhJ4 zj1pkXld}Sk;Yo+b7hbsGVgCoso-_dWbXvejmY(qg+p@p>?m=%=E`U1j&&h@T#P*^p;P0kbWj3|1` zI|uBO92=aE!PhMi8>|j@_TGE=pbK0*a^w8X+K`r&J}rALBzG)PzVr?#UZ&LiQp+Gv z#r#m6hF9g@l#ZMi$OagqNNE1zZ8C*pAYV*g>wrA0{5t|g~0q!Rue-YJUQ%? zqa`?`?W9Emny6le145O9^L$6Z*28we5)X07&it5x;H&0|_1u8m%h})P4zLck>=VBN z7gds&2)VbiXJq{aBAlPpI4Cu@a2Unu2k?SI;Bj#S?I7H?|>%0qgFsD zKlnv(D;V3%$Y3+Doz}3-0#T%fnC(HlBL=FUfGTRgN(6R^chpJ{4sl(~2Y#Upn?Pl% z?(!xO6b6?;lw_2UAZAlebpiFBxWrjdS9yzTAZw|5su5^w(U}Lvm$Xv3fF@>WS3z`> zBh?d-=Q)G{;-UIXoC0kti5Q?(i&E?WwMu-iJ_qej=Bo#w0xCl!gPbj9-~si%>cvK& zfttXlzy$4M%7J=U)Dpdc(dr<@LAhzeCm?@R8yF61ol;^c$oGWCKu~kIAWDLzE~Ug? zQ0sU@B8b(j(Q1Mi$q^9^ye~$JVIb1^Rd_+&5;a5_5c5Qgcmry%x`7EQM-5VQK-|Kn z3{X9_4^<7IqWPJ848~A%LTDEFruoPFOMt&wK=*wF#+zUuxDG7-HQvreCBU=Htra$f zKsEn!Um@UTvf2x}L))Zv2NBS&3okI2z3LpOa8;l_1hYw~zBwMuvg%iJ9~i@p8s-8} z?Npo^1f1dsLx3@A4mya>8K*Kp^y7&t0^MQxKnsC=jia}H8bnTyG{ZN8@x8GmBp~=K zsQbSIqSa3G4A>^v!nJE)9i`Q?7X$4*u9`!^7xFA|e*@YTX*%8p`<3vyVe3I3srtwR zpht@4>H+8*_50KXdn4OP{S??gx4zb5L8~cD*#!Kv{CA3;f~~FXk*E!pM~>o-As}k; zqdE=R6Rn9j2JY7RT5fT8qCYrwZ#1|U7L3lH4W;UroKymEes3*P=3R)c5TQFigcwic z0-F~suk{d%!8*^n!15z7OmD9(hLAh7CSZd4+AJP;4iuLwj3DUmh*9bZh{KGf6$IRY zRR0|aJ`FkoUxUqK+iA-O{zFqkfhH>6tP93TV|;J{gl-!PgP#E<pA47ouqViOfW z2IL$02y~~uSp(vS#}|v+2>d`ZV&O&07cE~Lhy3pOck?%c<+7!t#RcpZe_#c3mi)o^ z5!5@fy3#?$m_t-2P&snAED0=DtJDrql~g&E56Z4k$siUW#eU$r+5@0!siCw7>E{3m zU>>KJ8U)_&+`Ww|p!E>T^cV>L#aYi;7sL-XkDLc;r%F}hKuZITgYMS`sEeQt5v|R6 zpq{GZ>T3|a)wdi5EmrI|hk<3iK8-jKzfx0N2CYDUBBDTizy&Q8R8WkdED*~D^%IEZ zs*D-{qQAN=D}$P4I?QI^-B#4qeGqcT=FHCC4UWr>&mA4XHQe=!vnE*9Y3Hq85Z{U{ zQ44U32kZoKOQmuKM4|XZ9RU#`zN9M1N_@j?kl(6aoCTs7uKXZ|ij`sqV5Pq54V>o; zRYCpAb`Aqjj#vrLUA+es5me)VT=kuJ1gur#sR$&f-DCn0 zloc*eEr?|jFh@O*7lAZUm7%~%bwuq1)tX`|7DRnc(i%9SCaK?m>U5z2h%dwxW&_97 za+L-u#3I!Nc+EQ2f_hhNQBOf^5Pd~IpfP1A2iWLIf8Yf%#DY9P2cCk~hYnN*`2)pi z2(05baT8Q=HId&z`D7{ffmU8i6{kQIBUY>h?E@Yw1=?mRsF@(#e5RIz%95Ys1LKuh zk&0k;QRT#9ki&&tF9v!)?V)A?ifQw-M9{lf$2!hI=x6h^c^2~fxgYr+fquwpvAe-F z-ubuw9H?U+<1WZ2vbI?bv=ptcXbJ4%h&C5q#=RK!`Y;$nLlu21ATyY`GouKyUZ(HL zcm}WSuf9*+0Olt~xLgJ0x|SPOzAHFd+kSQ!5Ud%R6+8^Se%_KrCBfRo*2B^k!VZP~ z;+g_6p4eWAhatLR^!?cG5cMLwO!PZ&C-LTocLR`SOY5560({xtFkc@C?(z2ujskld z+g^KfNNAokA+9mF^SrL2osg58Jtk*7gq@3A7yB*PdpR$L_W<(9);fc@DwNjrf5S&i z0#`%Vx^SS>u#$_*T!pYRj?J#cAU6gl$P8eF{VVYsc>XD9@9qt`m9j!PDPWcjRgfh> ze_v0wxIum^(?Woyt>uFKCX}35a#ZPMP`z^vU#)QPepVD;5P&RS)|2dIaOdFdYj+<) zFgy_Ta4r~!gI0AOo}7F1;Kc-pj*VV-qY3yw_8s>2hEjb>eU*FF8$E>$M26TUCIT>oaUdQO#&S?D`9uwZ(2T(Tz_$>x`1bkB zf_l$*5ZVd!)dm>hpdz)th8M&v`l?@nDq?}y4D3;*53`)8V&S!SJEfK8odZM-( z#7Mfj9)h<`QEc8FP`l+cPYVcFVg21dKt%blyY6#fZ)B@uDFRzro8cJ`&P$F|>o;JL z!cQ|`jIzrfp#4r2wFoT7M0d3atY7JMwF6+AYFVm30LNY11Z!V#o{5l-Kfva&K6LZ} zt(4x@_6~?|#9jMeKofD$S`~t|LgmC2f)}U|FML#AUF|wO-cSKtbz* zefb?he`ATYPXt$t>yWc5WEbV!%?kr}o5C*&`$2U5=&n%RVj9uBkg_vEjGNClY6h^%t-V|*AS^g0hK&_P- z#ycSHix=`|;Gz0WIzjD{S@KVirOiQsJkZyQ4~#7kRX-x%`4y;j>N&^3-OaPHs0(Dh zm(k(Pc8EG2el=_bI8z)M$#EbKihiOy=-VvE^>4xcj%~ALEcokq(hJ8zu#$hUr#Uz} zS|)_2f=U->WH}K3(p%jEEMl~Z0`U#sunHJ1X0j28VTXJL+}0ja9@HwPsWl)n)Hi$y z;wlfh25PGKk&d8-PzFFvlLu8inCHc4@e_z$cD4ddl;j#vsGh1cP;K#xKSAvmWwqI$ zmhmMmL6uNVb&|wg;3smlo*+zi3kfQVf7EPX zF1N(Tz-d)YJOq9cM}!YJF4l_np#D{Vs?R~~P!q`p^<2KKeh0%av`}LR90;5aHV6N0 zzu$WsvR7wc$PNcjA8&5aJTSsTD~yt0G5Uo5@%I4hRLghTD$sh1Cn5v1%UYzU18OI~ zh>IXPa7R1=j*9k_1P(AwRRvij^UWwQV`YRn4Ae5YOqK)H?|<4pcB?L`KM>#*gFzKj z4a6o8`$dQrptsV_Ykz=!s4c^K8eE-Sna;uB5BJwlCBT>O{WWwCLfeC_0yRLbmwTii z^f}rNZ5#yq2g(OVLD9hcbl*Pk-E#bEKMJ-=+QDKy!LiA<%r+3BT7_+KdO?_48}&0d z-f<4F{R)=p+GE)bg75o=dKyE1mHZ{yc@X%|cQbY;B(_fMm@pG;yKT+v#lYeeV?<~0 zI*SIl1>_dX+Lmz#-0KQb@~eaWhBi*Fh1jUDBHMIG7#8)W%x4hZ!SR#U1@t5ODiH$f z6RWax1lsF=>dk--D(K3C;`fpQi8UamOY|pEvEY8^^~H%0h)^YlNu%EKm zwRZ#&&M|QdG`se#_#C3&kN!QXIG7vF&Y?9>*tH-nUxD$n5eNbHCAKEkQ=l6Whr;)R zj1QjjKZIcI;M~ALur$zyiVvY!W`drO48}jf7=Kg9Us&)WKLkRlZL${V14T7)0vx~C zuG=00XT$_^Hh4b|oDK~Ixk{dt^FWIiyYxRH^jEN4P=Tzh{uKSd=x0Wly&(9H@pY&- z*uS<#*=mFSyS#5=`p7CQH^KY1_Z#mdF!vc>8;c=SGqfV~56DP4NPZ0FY4c}uEU;Om(E_x#YO6L7 zRFcwFHIRelJ1Pa#3sqVE3F?ljrtSfk)OghZNL1Bm3X~y7RRNNCEgOJZ$`SDqC@E{3 zH9=i4J1`#9eN{}e0$%M9eIQgPP}kQNLQgDJwLYMKrkxO90RuGM`Vh2JYK(OlSh8qr z83X1;S;H6wvbbCsdJ4uK|5$G^FslX2`V3&D_(HD=*80|MmK`AWiJRI)FxJVZ<`fX0 zs<+j*z)B9P5QuwnubcovsV~ebVAeJE1P_Amp69qb8Qeb={E_z(9N9L__9IvZSpKjT zfwhD6J6mnAEVjOHpA6RS*7s~9KwqL47ypBi!?*#WwE9h*1#LIW=?|(cRapcy;HDY? zypLOy140z4GeCmsp=N{V%HL`@h)?;CUx3xPxB}`KQ`FZ$1{rJucBnlJ1+rBxLqT0t z;oJiisXD9IKogd+02s)-Y7MAvDp5TKoODxPfXb%@9|8SYuWEpLo6qGlcqop5 zd?=l=0R(%6b{Gr5?9E+q70A?vTH1r$DJE*wz+9+e)Fv?Y$zr5J;E=CdpeL|ded50g zuIgdGg?$OOX7&PmGf)e}ENX)Ij7F*zXk}!SssQQ-xm$*TdD5&QTZ6xre|hK-WFAPr zozoTcSNc(v4$&g!Xk-**EKHl5Sr;C>b*KHkix5#ds$@iY2vs&hp>M#52(1ZOA+Bn| zcX4k+%IXrGi#G%3+^~38c@VAiaoP-U){nU#9}c?Ij$3wv@xD=2ode@W=$Y&crZmf` zAcXY^KNYnKihZ53vs6E@G|TUvdkOM87xpM94q2tL4(9EEYJs(+^?gSzh`t<^6}K7mJL<6-2lA)D9b-J?PAt5U@fhyyxwZFRHOLv4@hJOC z&>M&py#eqAOSD$NAG8MWt@XY3{R`=*GXBhb3>m#LR%QJKmh)PB{s8L&OUQl?LK8x# zp!3^Q-87t)cw#Kvni+?K36*ckM=-22wINyiZv1_5b=Bh{K$0sUSSO(W-z5P*+S0jH{XKi zZSMpBd3d?v#g6pTkUsOxot!-oXcQP3Dh>KL@wxsX=xsDt?w1f57U7Hag0qfoLPSF_ z{xvtq+u+P}-HIIoF?HiSc)|9>`jtorYqoV+R4N!xLb~-ZSUQUsy$Xbu$fv41Xcf(T z^CuAZt()|>K<_8wMI!K0gmV$ZuVM{jKz#haZi;QR?U5}VBDT36gbxR+PrqXM5yW?5 zk))1bIH-f#6^TV(<5OFlBLgZ}-{%AZ7_JTm3k!Qw&andLr zuzDJRT@aEJ)1x0F0ZVJYN>rM(79G3(mgw4wkdv>||eUc@M1d7K?ZTS_#oy8bB%8 zE;JJK%c8S92t;b}<~fkd)C%)Hn3aN`dvAj1r>X>3LF~Bb2vAU&y;4YLG%t5JyD=5d=nR-Bo=MBh|a=FW@^hi0?tH z;Jlg!{6sUXKuzjU0P-FacmQg>_=OzMJF$~(U@VifX#?6&byqC`Gl^Ov6QqX}@iC}* zv?c(&5=yKFYKp<)W3ar9u3111QD3RnpiCC21dx~298LgrDI^3`WRW-o@)PA3pMZ>F zl^O-&U6C((f?CXOZ6K&8stv0^El@v+Z$UOvmpB5dquRjq*K)ai?Kc!2*&x4AW6hqR3^iSD0=1fM z>Kuq2>JTMCOikYyBg=LRr9JoKqcja9K&(y+I1xvx6ZvE7H8|>}0i?oL_!%ICbl>()r zOI%GZ4OHfc>JG9#y=6=AcJeCEZpi&NXM0XQq!nd!$mjxjhq7N~F9s%7wtZy#0)jsT+62--wUj@YH^FEW+!iPS?%aHl_Zrk9^GVAyPA_ObYX@KCW3ZQ z+ok;l)*F`2))Np`(plV97Q}D*4x=R$jrR=*ECS%JZ-e?s{h$s)sBh?2 z@DB(a4aFLFAha{IBlrls$2?^{4&Wel8qY zvmk6__@`iwHv5~ez_QVL$odEZH3CV25|A-0ZA98w2n-CA53~Stk=a`=1uaf^#1@cB zUX;s#Iy9#|s4+4^H3!w3zt{_WNPl%4)OdA*Q9w1)#9yF6EB*zkRI1zv#H#fi0u0ej z3D8k%35gFu^4GVg-eudb*Iz+pL5-U7y%M~(Ur9O;|k9RvAGbE;&2 z4%U`plJ*SL+uAy9Ht2Wtan{S=_}lq~YYv2M4|@{19UNsGE1bK*8g1)n`wO%q+Ey(J z)DdMe3#7p`^#!OzRhDCb{r`2H1r*~UuvppEeo(W?WfpK;jHEj-|9^u?_*H$C4qQ|V zC;@6DwYUIis-kKNqOz*Pb5KRobv`K|hN&YA1Z}VQLL31x0R=!5al`>1 z(wr8+2*xoAR4=tyEdkYCjHDQ-SPI2NP%YIgGC=%GDpnv~RKo%Ck@}r;pysGosz0bk zELRd#64BfR?HN6p0jh*tBL9QHi@>bVU@!-(sWbucslM1+8`MvjsxBBg<^j_Jz7D|^ zMjt3#<-YEj0;-fOW{ii(q?iLy7s2t+dD^)eEXB2L+IY}%S;H+5(Y!}9kfY^G=?2kH z^c0K1-!Jfiu?=#z=Z4&g;GF2ZW7z}|KSUNr^@Ysa8P4qIaK8B2l^1q`R!#pvtOMH= z`(yifh;z_O(cE?!LX*vrVlo832<%Yv z!I|!?VZ8$+s~6hB|NZz_MgY^r7|UuPOD)p9AXdnZDgu0E-7|ep;o+kPLmrKU8%0-6 zUOxl*ALLzgHwS&0)?V)ovYULP&VXp74FJe*R@k<%Gu+;DyVafA5W6^Pd_**)94q!L z@gAs^M2WQ!RS>PkWI=v@;lP4U;O!Z31mhv4W=h}Wt`M~(>ZjOYpl`Jtu`hzaq2La6 z0D`ANikV;&wh68#;27w*=coqSO)*b?3kuVv&Oo3ja44_~g1bTmq1j;l)4s_05r}|R zPEPOVC}rUCQSuj&9W+B_lW0%`Q%8mNP;5?ew1OiArD5H1dj z#$b*KZB<<$*v31~pADI((<|k_15d6#NlhI9`494@y9*&uAsAuo1ap~jTebmNjVV+C z8I(^s4swFoPqlzRlfbKBN6=iB&seaLn2ppf5Z&cuF#~LxZK?Gc$j2(z zItYw)vW2A~Xahxx+yY^LheyS2fQaRhbz={LO|zaAZNV|lUfpsYLZ60?=wm^oVu)J6 zTx+}tfL;bSK$>ty{Fhs5g^Oo2rl0iGFowcTbHj6TrpCPo- zsH~=gIo-S;%mF!6y%U-Y-r@e8p<9qQzhI89B>1v@JeL%R#7|T4hq@tzduYYUs)U?VROnTNvc#7UmXy3`JwT zvEDc^LS}vc6bNhSbXgNYmY^X`z<6ow@OKB-7MIj-MQworTlG^92uAa~0-vIH1S&AH}zFyG>? zY60SqC?-mSI4xRf1Aw2zP7w{tCXO;5R0lCvs|0F|T1Ya;aCMUzAU!gZQ(%^pX}kw= zv}`29!K`a`H1k2(6vjS~X=)H&FqfGrY=@A?cp~2eV~A1C91MP^|8^h^3P%-27ES^0 zSzn5$26$3DqdZH%JK49yX9e@9nPP^6ysO5kZJ?4=irNJ71DPSO0@tvb{{daqPSq1E zd8_lixr3l6)3cz^0peeAU%ds^`POL57Ld19GQ&Xbmn&3X5J7FWb_TS$S}mfU}e1 zl6@akoKe0+*@;lDR#{oPB19jLycKaD)D{(~9zxN(-aFoONE?yyDsurm8T9->>UFsN z=E3b}UqXIb?(W=c5Wh9PPRx4{*FUjg(k$?K{275Dgi0F4j1D0Cs>`w&I6rcwh1CM* z=Zpym1lF1B11TUE z%IPWx@t)>AOGi17wAa|+3Mi~f>4`v3ZLMRZr8cYFmm3hhB4q}Zcu6_ke zMe#&?3tU5;^_-EATtBH{QfWw@l>9uUEqEsS?f%+u_4BLauC4~XqTW@X0HGI#$H<4! zo?w+=DUjO~sv@wNAshm}RA+bw>biLw1MUPWiLJ`lEHD ztq7b;?TzhCz|xHMq8NyFVv~3c6z2oNLCn*Rs{W95Jp0?c8{lc>4+XylOI`a3YdP>X z^T&iHLFN~kyK|00&iw4AxxFCrv#8^dKS09tgk=fmAg91Mmv4olDuoA%MnUef-0$-` zgE24kz1#{3UnlNOcm?-=yc4+d0-nA5EF<+N2&mvFSr5XATo#iAaUaKZNxBW9p-i$I z25+4Etw0&D)prew{0NdhPCgL!BVg*g^dn#ytIxL8069awt6M?+YkJuQI%0wB1M=HY zNqGZ|q~O2uG5E%Lu6Qm&R-4xsvwnoU#aUhR3L((MCxT5tNL5RV12seKXCuf(W-S>8 z+*6SVPyXl>jA(n4mC*>iE4_YS2)q*l zLxUj*wKpcICJ=08f=LB7?`<&b!AHJfAY#l_#%S=Z@$M?@32(Z*?h^b1qS7OFI95UN zD#K<<~BM_%^=zuR-(9R|^3qei&AP-=6DD{*xpvVY{G@OzMwoqRmn0mdOHyD!lO-u(5JzeP!7o6a)RjwRZBIO^MGlL)p9`lOROXlERC#h zEDu4f)o1EA!00TW$~RzqWx8c?P=A`;R6ih`Q5*+#UXGFtAh;oD1nYtOfjh>t8UpnK zwE_@@g#!hTkmS$5eQ8+${8UD1w*Amo5B1}J}`d(*+*58 zQ6QJ9gYpun*Gwe`_=Jt(0?=MGpdN^WWQ!OOUS`QKP`y-Nbsj7QrwU%>l?QWfC?>Q9 z;(v`NE)&9@hrNyn2Tz98?L_ zSj7SL)d(Jg*iIpx02?ou39_QfGJPNis-I~G=I?TbSsse67Ik({hpZl1-Sk2TUmUSK z>?*`NqrZ*r4bk!8?}X2QH*H^^e_a+l)!bjZ`#{X;@S=!aAWEt8G6=@!L3iK@lsr>> zbMazO{G(#|iS@vK!Ft~^8ANT0$yuOI8m-h72)cYbyf!F|%3qj&4+6VF3-JMR&#=J)l4E1Ukjhx_XLWz6;V_O>{IWm8lW8(?~0BfdMnf|5QS=ynhE5|RQU;n)`u1Z z^C7Wk+~wF_V83jeqFW(&G%(CN4P=seKUe}>Yi)7nR7ltsm16%7;-AEQ5&bDxs#`v_ zw1o6?nJ==3Kv9!|^Eoysy6XKP_&b>S=51vI^CKB2)`GDkbX|4;RZ>niqk#|AJ$W9e zgI{a{?PGPBy%4=G>PXZ;NXbqak^BH$U0iRwnnIK#@_5WAV9m7U*xEzDAFL4C2>Fu> zP8R$Ep03`<{tWQH@>VHa2bqu3<{Bfw-rq6Iz5${)#MFvC2aeH>TdqGLly5XKSA#er z4vN~K#;RuA2lYZNR^NlHg@sKZX7ZEx4j4{2;UJGHyJ`nqRHx|;Y?UR{U{EggBdvjG ziueFjC$W*~pa!WqG9N@)F-=VZu2O@?Kv&gHeF5sYDyL?H%BGoG4swF*D>nisSZMwW z^yO305X28+KSx1S7R5yg5RXNs$OA1+tEt5SJ(x@vP_5ai4iPEdQ;$1lJ& zwM(4`@(7A5Abu8i)b~Ii6h}ZkR%2)Y+%-1JEZ|4=Ol5&q0l#vAnN1z_07Mbn)Ob)G z_)r{&P*Lbk@I445_(%I^g4`@G%4T4xX1iw{1)=Mqd*&V}9PR$qJq3bI0x$e$L1l|S zWgoCi);DS4P^5bod-_BA)a=KZUqM6<*SWC!5Z2YP#2E$lDb~uiE?`}39bkC~YQDKa zm4Vk6)0bvAz!wOHj5c6Y&71CC4Wg8GOrHi7zA3-4Yz!3pGk#k93((i-_2~)>5%1{9 zVAze2`W?h!YMFx}XIf_I{IB8cnA5KFcOhq7PC<49NWYu@IBhU^ZWNVt?+0_fDYUI% zby(UtR)FKUZASPxDDdW!NPy7Sr&$n5mycFx-nb~UVF*vAmQ*7YXp zR}iB`zd(189=TD=0y$6K=OP%ljPC)W!=k^8-3V3YSFZHdLMZ>dT*vZua8+~tY&!=o z!afbF1&Mu%O-lF%ijur1d~e`>@}ou%$AV_Dwzao_xY)#A$=^cBmZgW5&j!YX)v)&l zps!&ArUWN=euLL%Ui|RmY-BVr7YO~u)pst2If;Ug&pwl_QSc)?eM0-YfIJ^ zFzOhs=nfW}wJ8t4w93-}nb)$$=a+#;+aC^l5)E-PV`n-RKvG7r_oAAEwm}@z6G3(j z^*82$sH&}1w?QwiyF^V04)jNugW*}hqrX!(!riFb2cJ42_nq7?i~a@?A&xsjAdm7w z-v~x|^;E=ycT&LXUk%2$zHZ<& z@uyi8^b1;|$_GnLOFHdAU#gWS4#X_gk3k?esH;i`HJ%bAg8Eie)i;4EkEYKDaaH`w z&!9H4U(Eo2mB77FJIEcIYviv65vlbMk0D}av=RO-MC3+|aUO=k{e@d|8bGMJaW3S6 z&^xBZEQIjfsGq}KP<~|DoypxnpDPM&Eg-lm@Re*2MV-C-Lj%A}GWr?g;QYilBd;xl z{HM8Q{=Z<)wH>zZgRnb}E!GG~+#BbPa)WiI#V0p{_gRs4n*z^ zKksM=75i7{TVfo<#6`KCxuA~7cY;>X$6Bk4L`Yee)GGR8h@KbqxY~!1(>!lq!9K`d zmc1wMETkVuACx@^(&E$mW!?r~z+2Zp28z{-*Q5RhN1<(^a6+Jl|3UCN82|VNxEp~! zTiZk}uGcHiLbYqqpS}gr|jVb@c}OL;Lr(3ZNzG zTlGpnxY%#0384(5g6a(gjosV5JHb!rqFfL1BJ;H2;QuVJQyv9YtD2U&pmnqKvUUP- zN6)l=4Pu5qMqdM=+U65k0rKxa<%|o&h*iYDTc)@nomSo=!7GW7} ztq*25RZ-3Z|9by&?^P&hSNNgZ1@6N|7H=dJnMFN)6`}Cm!uIajQ1rDs$`cKN=AjRb zxgcArRVp3iV)-q#z#J-nmrS5HFrU`|{3hOG9B^68 z;u5H%;sSPH0(;drpcbgHsu8H^e5*!*Xu&h}0%)hIsa9Yq_g=a7<&HyUVRqGQ4_Mx| zowtnv%R1W!&X2&?)lc9S7!5*aLrX!-_>1LgCx{~TbUR}@&Q=;if+ z5L_3$8SDZXGUvCPOn6@M+569Oz+4e5=dTHgZ=#1qpN53}vAHpeATkubFsvCAKcDhn za!&|%xaPT1+)9LWBW+iDJ~*#AT@DwhlH$G?4e@&u_ocLh%AM5`TL^f|I`-wa@F3!e z<<(;d`Hc*tG}waH%eG%YTc_vgx!~X7pXQ$m)?cgzmd_xecS5iD6bLNwHvoe`e7_BR z3>hD1&dmH1jJJ)wW*gv?_Jx=QN-#&P24k!FhuIX2yS^dDV!+2Hl>_%beSG}sad@*Q zqkG0bP|&n6JMRyOyb={3nGcC~lb$EVK;FmsL*0Ae)#Nvpv+c)50gTrsTfPKU zUmRAiK+ZKTm{Fh>&@5ONL^pkt<^vN6*Mle!pm7NyT57!{?-9sus(>|qL?-q)NOT&&j1@?d;n~rNO{3>&0@25 z2FEMM9s5HF``&ddtTse$i7X#sfVGA-&)OH<^9wc>-UGE-u8`G0bmd#k1N=sw{2Ejf z-ZOVViLa7-CoP8>wrUYoLtt(QHT5S#sAaI7XBfmBjdFyYfMUNUBt&h!Do++S06$8lW5(tfkVxU(LTSFdDMk<&4Tb0p5m1Dc zq@Sn=sv+VhN}%JeF-hjZ(TA0IX7%xeKbDda1^PSxTLf-M~C4zm>m%Opq;Q zWl*owOZ7X5W#X(D0h&$A(egk$s%2_vpgqvaX?BoH1mw`@#Grv?16H0zVs# zLh+zRsS5G{Xl=A*+9Ghgw05wr0PztY$w=@W^^f!w17lMtJ9q<}ckM^x{)WhIkx7wV zAh_ze+DAp%IK?2ZvOyj%QAk*X$+wcjI_`(FpsDrH4TdWS^QE;3RL>N z>Yle!z_rlj2%8M%Oj$`z26@HkDZ|0o?Y|p*0k1ATk9~CnPK-aX`Skm6f8U)GcYW|6 z``*;YqaeC;bY9dw;Epy|lmJf|-!H-0kaxbIre`kjfF{}`_+Kmm0%88j!Bhx73obO1 zK-AE3tP=9G-50&9;NN+d-@7soo`3N?_xT6l9`1g>Fa=yi;U%JCA+=lD>a1&UaQETO z$Nz?BH(u3D?F*5sBgclNfb|z^U2Q#hpL(<1mmq6IT2A^uAZr;NjCEkmwf?OC4PlF& zcE?7r*LCc6Tm-YBa;r5EG=ok{Bgnp(o#iVISs!K(4vd92FJITse+a>%P%Co^_?riE zf^{HwYVKI~LvZ(Zukt+yd4L}P)Kif`T`)g2^LP#ZjlRj|2H+W=Sa*VRv3+@j1*k5I z^o_uA?FNg%^0j5EV;Y2h2_}b*LuSi2aXAt2>glVYS&8s+-t%plgP`CZW!4u}o@Q((=Cg({Xs0a#q26R-##8_ae ziV#;p6<7V_46rSMH6J9~=_c2#u++eA09~w3Yyqf@X)D0^(l{GD2((j&%-(Cp`D>EK#Ztnv;$c|UGmL`%>OdJN^J~! zElV3w6ZnurREC)A@x5c0K#9x6{c%YU{c}`)j1BC&tk)bFV7qQP>YM_3)7@|T--2gP zp0|AV4g|;fUb;U3Z)bO|F%q=W;V$zVu#DCpsLN1w>sxKhor1D$O5ZR38>E*`|0Q)8 z@8H$**JEFGkorwuxtzoTac?sq!GfG|p?Wnk{)dcH5mWeh4 zEHT#pwo;&0iC6j=Fyf4XA_H=EX6F@_f@ce#=Dq$7POmxL@EOm)y!*~eG{UJN0g0lK-pPkj53=bae2a)_~YRC$8OpOK*aK} z=C%P4p~CCh-vL{$t+Oo$M1=mQJ{Xis4ATIkq47#}1IK)4YV1+)-wTda9ib@KS0+#w z9A}&-wckKZP=9E%ftg~DbsmWC^aRU75T&(+mM=hlFII__5d6nTHw6?#y5Dkd1G7(H zelP}JkIBCCW)-A$NdGruC3uT`qx}!S=x?5sYaukp{KdErfo7pm<|znGF@87Of$_0X zMz#gBhWU|N32KvEB%Xr^>J_xXKzZ?@Rt(e#(zOOaGpcF_fw$BgCWGiIMvI+5M_N%E zR3~*xH3t==ep72f4dE4^gPg-HRRWZU!@K}KAd-B*!gEFf*NBuAKsHou)df(0E2~Na zOT^}gA0qM~?|i|Vf_?C&;+y^HlOb>T1n%!%M1>yHT40(qayWPw@69BeKJ zbBGy`FF<+JPtpb4RbA925HE>h7f^v7{0ia>JJdN~p=cr+gIb}YRW)Fkm?rvx9mfv) zII!2V9JjuLf>!xo#0Cs{Au3 zk&+T|cRZw@%$Sq;4wN`lazUw<5Y;W_dECzshzve5lEFU1;=0+>}uv-2xAPevtXF8o0FZF=5LfX-mq|;wF@PQ=xB# z!BBfi-FfBeg8!+}z|tOWRJhag>3;C9Hf9zY5Lg|m^%Mwv7gC|>pf1P{lov9~WmU*J z0Dt@besZb;SZi4?SU-Y{?U{$NAAxB|i);!!6D`GUkTXc91Ta>M)2c%F;_w&Y-N7mB zpV^*+r-`S!&k5Nzva9ASg5V&df>9B&tLDG$z5%aWW=zkm2gY90E&G7KvA=roAh1d- z)5nAQQZ-UdK^0L_)B(oGZ^(tvgHW8IgLX`2XbT~3U#va0EX4MVPKsR$dY1O7o&)A3 zqfh7-1TF^9``v&I^5b6@VW1ItbmOJ3dgJ7M|Vxs|w4Z<$Ug6u1wsfxgQTFIWkU~!VoAf~H+ z;$x6A&55cU1WN>lg$f{8%C;%E10wsn!XwXtV~?YPeLfUjEnLf|po+_KsuZYqRFHRo z+p3$K2BJSB)MzNIpZ{szZ;&=2ZS$*fpzr6nIT7r|^@~gc?MlQ|YafVN6L#Gm3zbEg znI)S*v6+brW6D6$4<6}V1`mFG-0Ec^6z^1QXTo>jZ{zZj4DW#@>ZM|ha$ARS{O)C$!&H9(NHDKGV=SJ6qV5V`=^nv%L|I=W7@b&Nw z^p6G8Yy4py2WEb7kH0)$adf-VpSthb;(!zLD|(E)dAGcvZhK0Sw{9Z6_}&U zEF%OmP7YQLK|3uTh-aV>h!tR-Qy;6xz&xH358784tN|<{Mq3Exb8WW#2sEo`Btk$v z^28;elN!Zw5Hq>0b^^;NuR4OL%OcenLMQMg`Sy6bgFCfQ)}x zl`gdd5NsPf8h8V`#d2653o1`dR^cGq@~2t>fqS7fp%##_CaZGJ$B@oplG4*`_Q}K z9PQd_ehs#T)|rlEONQJ?C{oV0j=cFbAZP%}oVi1H#%k-$3c= z<*8H}a>KHlWT!&Ws-mGUc7yj5pW%B8o|?~JrY(WI@PbO70U$4_J+dNLezjiIKY`Z~ zXZ9{e zc-g()-yh7cWS{)cpkTSDp+5p_^X)%58iKu{GtyNbtbf=KI46UAK*_w>AeQLO=>S=` zaxUh61OFCWymPr9WU8!%nd8BzX`T+PhV%y+pQp`$)L&EYr2YeDRkNG97i=xLcV1A8_5V(TDaf-%#00+xJnU+Vra16>JRN4&Ec7JP4IBcZt8ie5pEU?ZEpgusDzlX0lmVeGOues3ERE zXi`WEodzn%qoO3(2ie}(RzmpSQH|wlu$*$ZT+!gP*%R$0z|*qudXWjjwDt0Gw2^8y{bT;~5 zaD49AVR-_s2N4O*m*9$btqV(m@PT1}hbxF!8TBT*3OMV!*1Fn4Sas*?h^e6F%XOBQ zki9DJO@2K{%uA>n<$?}>yuYVaNq9cwd4;sMpr}pJSB2f-?Juf2%6|>ftE2u1i-M?w zQ9n8_!duU)eBWdnm@Pxr;9_{aHtl}eIPjM8NPjAn__Ab1@*F5pQR`;?3+@>YH#~d| z86&dZ$|w!~`u+@01k_Hd+qTw1sC1=r^9l_hd~aB^a}8LdEr^pK{-c6C52~7+qRIeI zRlKMGVhI0&J^5BL4#n9A|kkdTp zqns#+S{*eyx(*~!g6@NsTrs8g&W1bc*zX%iv! zt@J}#pMqaE7cw5St@4uo2YA={#~A0}^|;rS(n>&nU-$P#bs<>M7-4P%&qGg7uO0Gi z1yu{DLiW_0SGk{n=YX%Q_iOM!@TCWyf~Tf8;7tJ|)hHo*g6ybXh=Cx>(OE15HBEfR zaF9FIXJRg}k{?6|5bZ=8eJtohw0zACtQ0G>Du6C#=mP;=y-PGGQ|?jaKzYNtq6#C$Or)NT$?8MsLVp8~^K zA*O(;PGu6n@@CtcUtZ6GH^<+6lb!;3Hw!uybO$5L{6ob6`?LgoKG21HVS=)&>*^uM zLF$=o4XT=oQ3F7=QOnd#Q1w-9RUXh-$!idENhbtqi<-bC5W09J9H1=}Tf_=5x*5}q zu249mu*f|KLbkxrz)8@tZ9taUCYD-Kr$Znm}HSZ7@6+;HWYP;dT1H zf;X4aTVyl`P6@a853-+S9nU!gffu30!O@^b^Fn2Tc1T+&20-|(u$>W0A?4GQaVZ|C zIP=|D2Qs>r~CrJvqlFVK=8O{k?$CYTEd~71%bF@83)2i zb#)u0O$k*FLi>!bj8DN<);`y=1>$?gpNU@s_8RtN+aw5-2)rBE0eKDbrsPcp{ifF2 z(hU5geBC@jpt+i+s)MDiK1R=iz-0gZKsWI0_ICHWLHw-BlMYl;Z^;WFw(3VLAAs4x z=wbW_IXkmOPDL>48O4mJQ1p)Xyze;399dS)0P65IM?j^hIGGQ0KoSXJqWD%V0A`6( zA^>WfysD0Z@nvX@@dfxj{!M-l$oX=<90Q)Jo()CaK#fqNR6Wo}iY4Mdpcx6OC5Y}M zi4hj+7uqldb(Afl7AbfsHR zu}8VMQc;lcGP7*%5V%(STJr6=kW)EhUPgTgp7xLT6@iR1_Zua^>|^dU&w}hJFRHVk zPBKuu2mGbJWB^c|vSK}Oh%>4h2tQ**Q_ve~UA5|QzuUg3Npgj{knIaGW@IEd3^0cZ_`AvQo@T;Om2awytT^t(p` zOSYwxbt*WHu9KHK-E==>I~?=X_rNH z(0n3NOb15OOYQ~L-F(OF3G#w@)=UKvB^ELR0<(f^{M8|QTTZX+=b&bWyheA>N@xx( z9vtHw-5rM@_T88hv2{WJnEP~v(9*zT|8S5=(qonb?TL0pYykhSff&CNWJj}==>v1I zIp5d-T2SAnZHK_Y;Qior@IUY;_$~k&X-9F87v&z~JZQNbQh$T@zNevg4|ryI=6aTZ zrIlrxWetR$nw5jY!ISPi>`MjnxSA}EgSSIqMQ|&;ex80Oy&pI)xE8n`fV$7`!T`M; z?`j#4`ETa)%vX?AH}{`H7X()OfAvoR_ab)#_Z6^gwzSjSU`?>Uba>(AsnnHeFCi~G z=lz`1;9lju80-YWGJ!dv>F{P!#=dMjWXI>-&(8-{j3e@6h+7@^C?*9G3KAD4wt}Mn zylrz!LQaXi$b1EwP1LeX1l^~7rmqKcRd9|h30a?JKFGQPfggjP%TGZq6s0YXz+cSB zQ=336Ggq?{C~x-Q4KT|{lvf~sOQEZ14tVGIQvwY@)e>_7LJeiAa>BFsUenSTC@?w$F7vhR9yw+w@*wy{Jc6mVzuIMw<*;j#fik4x+1emy=+YGyf8` zf#zna_#ITfS|ncp)wF-~0YG`NMiqiy$x_@p2dvYqY4$(B60n}Jor2)Q&_R9y`&YL4 zjto#z4hE1X%zxC6pnUQIZGe61iryazato_?qu}0&d)1z_26J2RrtcfbYM8kqeH0W{ zD*VaQ9^?e+(I$b>Otuj*;J*^AV=f1EjU$#}VD^zEA$%Xy)J)Z~e29z?(9xl}mY^&_|^n+mO zZ*^&tz}nJU(>flsbgh@=FVN2D-&(eU9&P#ARs#4=KC_O4)EzGqGom4HR$i~H9Z-9G zP2O$^8K<*`=MMx?T8$+I)JfH)SYK$_vt>cE;Skq3u2SSKD4ObSls^%Ir2`%PZJ}hv zQV}JxA)!z5y2O=G_*ed@qIJN2VOTmq=IP8sc^AQmHrJZf!S}E4fM`JNP*~vk416E? zOBy}E|GEE7VIriJNYBjO2N$}Y|MF@K+`e+x_Glp#E-2hk7=+VxPJeyo7BsK-&Z`D} zq51XZLz~Y7Gu*5f+zI|dU%sb2M8-yx58nc^oZM({iwMSI|#;AF;1bJ8$it(W4tKMvf(645H z*$~7{byb)kDvD%r64XJpTP1=D$zl8re9t;Afoe-{^**QyTxJPyinjCywVJyMP_NV) zbYL{E7zvCO0p5V>%P?L7$HmX|1*VGi+6)k-*v&Cum)fOvfkhi6a!CQt>7s!}RX|3W zeax*O`idmWeh}Tn8vPJxx}}L;5olnxGh09?+Az%oK*vs3;5{NK38Ed(cn#_(LN4Q7WrcfB9+Y}i z7GC`EqU@_SpiFg%^ALJJG{#r}?(h5sc?BSvKI-?h5-5*e!ybUVjfKgc=McJK4pzNEeXkAF>VoXA z-e?s-%hBJ`&VuNw)wdi6W2!NQ0Z>@d{kL~682yc&#w;jkR;as|fSRRTYCG_gSi&eE zPmSOv=+V|K)>=SIQK(%6UuLQ~-Zf6e~7=M`G$YG#ewGOaeh6E!{#D5L?6TOVS64WU*Rh@x=)9(pvf&5Dac?Az3 z@SDG*{|RUfMK3K6^yXTYcmrCDaEMpHb9IcHp!~8(9tWbt3Lb(Qpdwia4B&~F4sxdS zs{UZkG2F5(I3u0cZMQ-1ZF$#P1ANN^eS;%_=fU~G5kQEK#S0K4MMJF>P#1@q2#isg z3#<)supn9d=)wg zmLXadIUZPoTY7=gXtEiQie^p*wM^Tu27{`pK2~pmYQ=F;9c-KQ!+IFVTXtpn4$RT2 zk#+`TPkdT0Fq#cfg6L{OQ8%SB+lZmnW9LHukzVzq!cCY-zls;0`}6{xl1LzaRV$mePf z_}=$*@O%&EXk)aYgZ5h3)Zd^TCq~r)u|iEzH$g-Do+n^THI@Y*L7*ToI`9lU*#%}{ z5Y%YZPPGDiOPke}34wC{8~!_>KNR^Q1_IrEvEFjPPVu=p0`$__F<}M0igrbt16q#u zh4uv4$yOSJ8qDXaF9fWCVu4Suw5xUy^MSXo0L9e4Nw!8BOeN4y8F*znp>H9(u8T@WjQ62U9RyP&7) z4;(K*o2BR4H$kv`s1nDZ=nwCbPz!Liu(@r=!G`5qu>izDWf7-A+oPKB3bd!%f7)0O z<>{lP0*iQ{MgrYc690neBy6GsP?#1n$lS82Vn&Ouhy+_U+0zty@S*xu4FNe^ZZzfs|H>Z5*Pxz+Ivd}C z(T)Yi3D9qf!=WM&`_+PAZE(!6zpo8|nDNn-B8EYX5&4dNAcUO=t72~emYEhI`hlgC zEz_C}vDrzTqSL_HIAV#b3&>)kq52!dhhnH&0-}}qx$zCiT}COR1_Y-0#|EB(?JdU$ zy$TpUGu*!)eCK>E-47uAgQzuOlcD(J5>FFPK-oj(J}fZ@#1EDd;ula)RCRMGh=53D zH1MT%-0}zTl^UvT0d9y5*7qRyYSzDns~{^Yt4{Vru$Qx4bM%7>N#%N%p9YzqWr{0n zq3DsPbHOVJyB9tuOhHoDyvvzu08A13<0?**=I9f!P6bjM!hT!_NI=p zj*Sr3J8XP-Z?O8TGjp@lf=oyPJCj6#i9kxnL`}9~N#b%7wi3c@qm~!0Yy@bJD+u!oBWM z-Ur~GU(_S;5Yl?34anXMcURx-^mr9KneepWbyHB2gW%yG7Hz6)(z zv?+Wy8KT~bJ{;W=EOQGF7xspN6GdeUH$Y+i!aoZOpfIJd!2J{)tDJjXw?JDjMrj{H z-r9mO1>Zqd=j>5AI=F{<-t%1m|I6SYqa37%GUIY8!ix^671REO!s%|icO&@Q1QU&I z;BM#c5f}%7v|y6C6y#n~)mV^2d5sgqI)-SQfLU6sCV>QPj0ULBXdpHKU#Vpj0q0ad z)gG8jU6~E&McG6c|#3Xvq7b+Ol1f4wla7P#ESLiHBi6O zUTXkiwg}TCh%6p!A>b0HxDKMc2#U(UZ(@_W4;)kDi2}}vv%CRHi?wtB-eLuHL3}PM ziD5vrh-58@cu`N30Q&JCB|y9_EMgO=pT*Bq0gF-B*kk+*a;Z}C7*LrCJO{2(#2Zk1 z*iT=e0coNch}R-dYXY2MJ{5s1JQRUwP8i{!mSJE6@r}BP1iqmi3dBdmkprT%>co9u zxavV;kUh<{awP;@f$+c&p#PwMC7OYD#Zq4QKs6NBZmj{RB=v{72wD?ufW89U zUl;B3_~BvvDNw6}}5%qobQd)`!?danE9wK=y*17g_6oOtr!chq4nYR%_!SaWO2^_mA;X%rKIbl6PrW7Xm{4T#*72PNYh5e$)8OA3XlQJQ z@IS&ghj)ci@nySJ{14(HV$!33fPbEzNj_Z{?oWE!^krZ0cL;Qq8kj3oH%0-o%(kjA zq=jde%-ss!{7~V&>)=WCEeb9MZ>PZFP-W2G=o>7*gV8}|vIO*FvWln*R5!Y-Pav3T zR0t)2`#0YV{~?fz%udE3FjM4s^&0q`@@T+W)s_xGJC>t*mD-s~8T1;x}Vem-LDsLwEQv3&e$sotcC9(!+BP?%Q6TlhcEa_YT@@@4@ z4FPdPTcHmIS7+zD&ifF$W#~pa@N)4!9w!asa3-nu)PsE3hla2O$4Y z15_+%o3#RWGN>u4ni3#7Xv?(Dz;-o)VIXdZ&0+>nmOIK0Os1*`2i02jP$7_;}dWCssT$?R}kgJ7CM0bf%cT?;FxAVZf^%+TkJz^Ga(S?tL1wL+DVZ{ zCvcv28qO17e`>SXdqU_t+gAHX2%8w@3Tp-;Ona%%g51No4e~ES&WoHUxh{zCMXrlZ zhvb$?pCtDLaaw#KzK8s*f_?5X5NH(aXZk@oIn8`fchxIZ7i2SK=R7cm@3;n{1iD%Q zqL4bm0{*4mT3!!i{+WI>Z6k!0w*RDegP7`(M;+H8Zc@zC$T6Vqs;`WpU`f);a~lNQ zmkFTGs2$P+vby?Jeh6xqiVzn;Hjvw7Uyy#$K`#XJZIp5Ke_@74VW%$s{=uFp01X~quF283&FkfHh>d%%k0h;#!PV0|fr zK)UG?6wDH5lG6|DZ{$n%gMXfHe0C6mkHXG`egmPNkk=viLC07>OMhT1`*k(&Sj!5) zW>ZP`K;};wA7*R;U;C`I%=O^vYUPu>5aRNLxwnJ+xO;##0$hu&2G&&YJ@=LLazvD(|i?(GYUPli-d9 zPqynl*J$wc@C@|y0{2CCeRm;{Vph2I2L#@?dj^AGDrgD)11PQQ^%1Z`9-ATHgz_gL zz+iivOaYUig>@rPSdw)w1lv2!?JvPuV%BRj(Dsy+2OvS~sdW-eS7)0hK;rV`kkr+X z)F?SC^)q0xmgHZM+9YugtgBWYYa3XT|F@ZQ)v`WujRx0RdyDfUB>k3BCiOI=VUt3S#|z;f%9Ydn}a+S%Lz*T2?&R~ST;cM_+_3f}XgZygJthvB1-U(K3a6j>kk+Gl;2=WN@rj|6_Ko(P( z7?5|RBt1c%$P&(gLkK}~&B{&o9x>^QId-H(%;PiFQGXb1d zgwqeq8GWoX!CYg4=>TRgan>}*FxekvU4@i9>94ZlA*p|gmG&J3Y6ZKQVqi+?O+J8d zS9rtFbrA6;a!u4qaNl!3aodp4Frj6_LWnOPKP@2vd_Vc_`g=kkBaj-n1NISnl05*- zT{FmO3>o1WA7re6wC_@1rZ$K09i=ao+y$SRlI!JRkS`{U>W7_m#Zoaz#VT>3mOOUxVDYJg!H;8*R@| zz++h_b%3i}b9IF5Ntxq($?(wi@WGRw@Ur!*^f%d1wrZKd72878u&D02PJ+|h8K*ZO zBQc|4#vCw1wTZqD_Ht83JAqWQes&8uOQ`L#Ap1f<^d-FN{_@Pra**;x>ey$ReUk+~Ey4mpleK^_fc(wDrK(`TQM}o7+ zT(ajw+QYO5=`Z2c&#!L2ih}shtx_Q zWE=ly!S0ZCE^|;|EMyPQb_W-Lo!d^*rC>dvzVw90SDwWrl!xOT&P=+z2wYXY)kE__ z#mjCy#}lf)`zSH zc`FgtO5nVFNmZ~ulb6yRbP{iM1Ms(mN;e>%6rddFP!_Wkh@mtsLE>m6=RqbhL@I!c zk-_Q)Ns$ze1MT@n%7go9%+nfA8-Tsbo^J00-Ay^NK-cLojRG2)1|}Aq)ogNRgFYrv zw}BOEU9(DpgLBSF0*dmAIzT#4IRWINvOWTe=v~r)Q}Q{V0pnS!4Zyl&trCSC19Q~N z@ea6-y41B0bcoh6H$Yqx>M9H&38AAx7lJk3nr#I^9_d^i3-+#nH&6mnx~6SUI}0f# zu8+EY7s5M*Rt#+l`F76r8hIJ=ZY;2;U^B>^pZ$Tq z9>lf2_1@iKkg+@KkE~yTKdb@njo`T)@_pD3kn?5KySZk8HNy3|rve1at3z*a5%ODT z7KHy8k(8@AcvEt8jhF#h%L8-F_mCKwIxp)WSPQHKHUQ_eu?z(u2Lr)3JEO9%ETo*v ztQ+?XOjCa3G*H`W=6V744gE&G0m?FhpTLO<)^dsh{R0Kp9ne@0g$l zk|#K5Lwi5IE!PQO;;E8Ro6Y0x2zJqzYI+%Q-6#ki|;*6{Nm3$tnoa!^&-42e#tk zE?E6Y5P-Uj<5zHAJ4?+sz+6K04e+(xw+4d!i!;vY4Jl_+zfOGwPDTCM41~a+!Q#Os zAiv9g2?KIcn2Nv*nIsQ@+w5UD$T_(tvw=_Ps#Af{T+-EG8tR|U6wrfC1T{dXXcr9y z@k$j&forOjE*BxBn5U<^7v%aYSL?`15c@-P*Xa51_WGNRaUa0T^)G9^{2hGbGh3zY z0KI1)_V0q&tXv7XzJUT$3Kq||4&+nU2G3o%_S5yMw{AmVX7J;{zfe`Gepus2NNtzq zWY&P>j;STn&w>B@Kp$JcOx92Uvs}1GE_c?I4w(jUna7H^@ zoeN+;b`IH_z%(<(`2|cmgI!O+iPmmf5A3{pSN|t}$gM8mD4$zhfY*F&8h{fLrEP%c;?Z;< zx31*`Sl=^URs-e8&px2MuGeu8GSvN!`+W#m>ptme2fAH`vk2@5_F;P?`0iwn%laL{ zn}u}^?GAF+x}_7qx$LCcaX@KFlDxo=PFFn%=7^mym&R9iUqreKdZdqeMezyk5&){n3&Tu~jtAoq$ z$^ib*HhLS(AOx*;*5>C85AM}ceHU)qe{L1HGjgsop7_6(#eA57|8?=?{VEy2lts^1$$QfhL zg}@iSKz2#6Zq)){HE}nQWuPleJxvDJWvNa)$OqDh$Dj+e4C!E& z1gZqv!kheWt;7=$HzPhQDH{S^{p|v$An;#shCLK?sF|xT!Ee$gru)F8o2oh->;z}0 z`3TJ443Rg$r=~rbpyjl<#DVtXEB1gsqo(y9Fj2a(0W?k?x`se-p;@jS!2OjsEi@dw z$8+4t`3U@1g7eH+NbZm_H*FnculMf{-UCmT=Zq&01b=nhS{Ur^_EYTx&QkLgQQ#l# z|G=&cnO8G|z8v7b={n=?1)=|j{O3uA?9EQJZy(S?pPBLyzDy>Ct_NLU)n_y4b6F?< zfpuS8`W;v`Ty|#z$ z^9Vf4Jj+8$Kwx|DlrtRO_IUeE;u?5y;zh!XQs64%t`y<}bJt{<)(}`1{M&vC=BD$N zlK>Ja-)IZq53Xr{NR3H-lX?L%?2Mu5)xm1P9@7E>v;5DqLm}(E%)iohfx8xQ_Dyhp z3l7U}3&DK88M+(_ex2`&Tus2dwU1b_`FrNs9)1{dyP`{m^#kwGuzcQD z;Qq&Z&||>6F?@a4GXPgtSpc%h^}A;ZP=I9Cfke8+$_MV(vRh7ryP)T`rygj)9;anN zeAZ^kgwj(=Zz?es?DdYV72x62`#10X4xT|Fb6i89N|}&+)yqS~ph0kh3XmrS@9bEog)nQ+2=e8idg;QulEZ@z?gzI$g#4KHN=o;l0E27G_}o(A59 zz$gB9oOp2G37O)Ig|v?8uQJo%*|rzfn@(_T!_}wP^Fz|cg#L+tK=vQmFMO@w*}Z22 zo;?O%9siI1@lfc$LQh{60V~Pr>dOZbLC5TyD2d;eLIBj z&ABzKCfH5w$-#FaX<$;1qyrGY_-&)a8jxMj_rjL|=CG4TcR=um-~neU*jMcYa}Dee zbAZF(bamEq1)Sf_1d@SSY>)-OUisLy1@t-j^awbwomEVO>rHOQJ~{-im&W&c+YwwI ztCC&<-#y6^ z+D^`ZWSDjG0mPgr`k#Jox`1xyIgubecy4V5c_KyW1&pAUP6Uqd zkS3t-kgPj^;W}171FrF0$AYY~3Q8=gu3ktLP`riyHEwu8>n zXIcPQ#wqOvlx7(tLF%)K0pQBRH*x{&kL<;+H00PE&B2nDOKQtA%!#FMu3em2ZGHGLX+f9qUz}o0ax3+{@&r7cygz&5K#r@Q_K^BXYMs<~!E`k3 zv>eCmcOI zkiDKLaL;kiapeTpa911G7D#)VJ~2HV{H1(ZSrx(C-UWX`;oXJ4&wm&q7v&lla}Y`Ft;V2b$yf+hX$_}W6+<>YtY_J_>M zsUJq%f|!4E-3_}AQ76OPo>SoI>24sm!MS6W@D}_{{ZCCa*u#QfI`hDOM_Orn2>ju6 zHot?_SpRb^1!-;ax@G~xSmAmX7_P&`1td^N4uiI(l64C7eaS5=fzj-?J_gQeJ&6MP z>0~y6sY6byHE1&usR0tL)2vd!U2f{0zTv)I`Qrl)z=gn-#);+-iVWv%v%2P?x>h?-y;YJ%nj-Krz#4yK3s zRG)%*;`mHwV3_?Sl|bCCBx^djizsF_xUXo?9S8C=^Q0R{HOfg8aFr-|0P>G)F>8U{ zrY}W7!&s=5z#KR4Xd0Lg%t`(O{v=tifb%_5bq3gJ&KT1Z%uGE)7HA*sBPT#NGF^WH z-AGVJgAU>*#ld(n`Z37&c01D$bf;D}4mjVLA9OD8m7KI@fbQ2%B=b&fl^fFfFjJRo)Cx%CT3 z8vU$~K=13%x&@qWP7AXT%zVOS5t!C=qd916T1yIW-pVZrKqy8!1I0C!W1y{wlv-du z;1fLw&SGbPegUavGpb}AfVZhhrIIIt^F^>$@F~2Fh`;?7@Q(^?w?}}z#@V1hgR|0} z>%@S2o-0C1fG*P!`~;banTxaT!RxPIO?v$RC}-a0sR*G7v1f7@1as0X)#+ed&O6RJ zaE?1}XAfA-c_^EJXeMeokSyy5%LlG;xQjeAZOwwUm9!zNt0XUnq8K=P>V~?}K0w}4$Y7_@%{-!9*^ ztX)7h$D|Wjzq;Ka%zQf>5HS^7S$o)aC6A=@@ z{>f<;+zh5~=I4460&C1AXEzY39x4F4<$LCVYm=2J0*U()zf9;1DYH^rCY6WEoy%pG zECLZdOIt+~A?%s^PpcfHol6~&5C;jr#pi!@9E#N~+_umz@J-9ApL`1*eD~nyO&8p* zfBP@rWJrCGIwXEAgqO&%I;<4rewy#kJjbEPo)n$+LlbTn#n+=pcZ>!}=@1y8(jcI8 zOzB3t*#N;pCP>#*Qc}7ZepNaINr|a62$K$hm-k<|zdX-5_n!0Vn=Y0_=?b69Y^&Ag z&bbV05iQwVPc=RDGq%WeBSZUfvgqht8^$_v!?IY1F({U41l>-?82%tA?3;jyv|4O& zoC(qMS2}~GZBO#I%+Mu&Lg%#FHxBZZPfH&5T@1HNmeq64RsAnEs(;h#?i@5}N5m+7 zTy-BhUHa)f|JRzOJ2C2Gc)k|P&u{Zd;RRo`2Bt-8qLYc`hug!0=D0UGoEb5!Lt@i^ zadrNOrCWvb!m(DsH2$-C19wa6eby+YTd2c8biGiPzkLPw7%)eN5^%Ng zAdP%3>AxTVo9Hz%87EczHVQ5j``^`?2%N{#n$snYmTNjK0fdP@qFno`lCxwgUVjbp9^j};F=aphCAT9~dW zZpNalBRrS{Ry=^YdwdkspuO>btiyAs74V<(H8yIM6ecs^Q1B^KQAx3Zj~dmSyOF~& zQ8`ROX?o{0}99EyGGQgvPQp1Ez{$wSqJ;2%6J-%Sb|mxlImjqOWQ#M4 zOCSLJ(xvNLG44#n$!uzg6gFS~l0}~PAoVz_l%wO{dhpR8H?DIcQ}_owVp=YBfVPZQ zd?Sjigav+JKgL3T!xDM#=FA)wpftJqH*KHHw4s-V6_?&VbzFiJy?N?6X!1}-SaaX= z&IPrz+^`76h?hMzQjJYu64j({st3FLMpdVoW1cyQc4@b(Q8(YjXMPV5mp(j1?DMwR==x@ZTm?O3$mY9SUbV(xo~H0kt^H%4 zf3y-%l}Px4szQsBb&waqC406;9-lkzCXOjAzF4%uwY%<6d|cq&A>`Jc2$LSI?_Wqo zVEoW%Pc-?-C_D|k)$@IvRTgLnttykpEYw-WKxg?J`}vT`U`_yqX&ycP%Yj-lAireE zleN#aB9$f)l}xBc3;I_DQh%gDo$S{N{|rQKFOkfC2KP9%@3yF7n%kSJnngO!emxkp z3@04+sd&o+OWXJ3_rdO|lR8IOw`?kXf~@7q3oO_TP~oh#qSn_1q>w3KsL zeNI4*r}8ZnFEbtJ`x^KL=4ef^iefK+=e=Z~Zl|Uwj+`-l9PRp}3(av|Pc(;o%%70h zTL0WWDeicGGUW#JCyQ21pF|%M*P)6x_2(GIbEP)Q1c9)Ca9Dh|A+lSI%Hitx%*@O_ zOnUQMUZyGT@n;?;vN*S{#t~bd1N`h}9w7O(+}5qEC!Y--_)8GAw;=xa5LSvkmxvm9 zSP+|2ku0f@>KZ1@_^VPNZc1p;6ZReb^yoSQsvHql`CTcRg{+a;pY5P5(V77}MfKCR zR?U@q18G^MV!=Ub+V2SAfp3*B%X?uhBeIl8DFc_Y%~Zd3yFNNz!AtP!p%y5u{AS+2 ze~H~cZGVO0t^WS%d|?9fyTEmKI3Ziq{ihY_q70%UqkDVg`)ycb0L!X5^{|uI8i#BN z3S{k^^nl2^t9smBT%BZv`BWi#Gb_v-8dO1}aOYZl1(wQWxtm`{I}e1DC*<+PL-w6y z%fdXTnB;#SmN2K9Qnd_4Wa=gH>Qk;loQ5|izB9sA7ezgmU~FYx#c(TxODhv%+(2dU zI`Q0k8NdXSwV2*YLc?<3j!^gusR(lNWYKK8tBv`qY$2tO4ZS94@=8X8M`-We%uMDf z^U`uBpUc@RVN+squZZlKf5`I(^=adC5+SMXP7Gvk^AQ)-Kb<_Xv4q??n4G4Kezdf` zwQw%*KWE7}3t1k2`XKJ$AdWuw{9#Vqy%eeV@wXQLl9BE-F^uEZI}n5jWdX1 zUE^QBQms(yj%_G!tC?r(8){-;)Su}8dj43&SMm`nZ`uxp;2GbaQXPn$mskU;6{^KE zQEy#NZCRdTmJRgQ7`#bL14pj0G|C3cRIBrpUtlcOwhcEJx$M`&dW><4%4%wdG>}rb zuyZJ6+PflO0iY_NBu8Rx$Vzjsf!llgktN36Pfy;&j=>*pX>G+R@@^ZtKX{t_Ts>Ej zrS@6+6wNivg@vLT?nC@M!_xCTFmcudwG)sKhyQ*0A|3D4a1#^mX}r}-%w=+Cq19DM zGrPIM(`T2iu23u{;HNuRc#r!N&y(bVQ}xg4gQ2{!#$;@4Dvs(924N$+bl&#?7KNzC zx&!Gpw-ykyrk9;Z(N7QVraU{uxZPdX=}^my}u5{ zPvj{+{U><*+o2)xN271_@w)m+=K0wMCCQt*oU04Im?#ickOOz{4O3HZMc#_I`lc#% z17q*N(@ql?@~(BwT(>i8PH~HSzA}0%Ka$-4(b%)r>F)TKli87=;hz1m{jo+`-Q^Yt zrbc8?L>l~bT9&p`zUguGFs|9GOa2LUOUL4)4K0s$-Ef(Q2vRVeF$^h7Fp+BQzq8O-R|0nKiRP;YAOgIvX(; zA2m*1CLCD|c4u2~Va6y|U*tCtZgol_P(1Dlmw<-Ulvdcd3H_B$tvkIRCis9TBAvcp z2|i7JScmv5ykujG`Lfq_f_bfCtBL@(QdxYLyS14!>`fh45Ki>(!& zH&wVywSH5rpIh1|{9UA`U%<0S&NH?;W>RsOok9Aa6^#IhRllJi4|td-xZ(^&wqCq%-iRrmv#q3 zobJK!bjMIN6y>LLJe|5a5Ok;67||oV1)Ji*LF!VPV*M7(*b@E6`hfT=OO{_Vqn`L; zi|OZhoqiKJcf_9>ZH#?{X=0r1@sGcpkTs28@_3>r)^f6bqPGUqYu&LX4@i5ZgnB1AHbTq`W>z-9+6H9)ptai8plcyl z++B2t+G4=J`6q~xUAUd=iOb5nFW4$c;w?U<&$~IIII@Inuk03t-D(gYj9%5woDd#^HVr0JtHGja8-)xp= z7ym7}Q9yQ9-->?3+cL~XEQ()jQm~%ToX+)Srye0w{T@a*_bcPF;QYjq=sb z)z7)PekqCGp-uUnv~|CtN29yrloP)hpf4VB`CCF$m3{Le8&c^*=J#qcCc?&Ocf2C; z6uaZ>wd4c($d~scFw7G_M(k*R$V~zXsLc&$>G&Z;iK267&1wCwp3aHJ#S7kqXqG1F zO7^T`6_gJ4G->x4_?JuT4%A}9)SgT{sLd1-R9yW%8Gkyww2Bzhki%=@HpUloplA2Z zXMppW9IlM(HBtRKX!(qaHvsmVak~B&?)i0zTIj^99EAkCNdCoVn^1Y~2UT{#9E{JU zf~pDUq`fcuF{3P~nMP9FPcF^#b&&}sE#@TW$U$wi589dJIF=cpKY=oC-PCh@T9fr% z@YG4yGslikl&z60nwcX6PQP_`y( zc}L{J`s4HyTh#ANYK6%T8bM>`AGlJMllmx)Qbx#+CiA)*+T|sJ4146aRp@^3O`(3h zDAGtxMXnX#;%{sBS(>S^Ql~g}Zl>OYr`o#wOHGFcXx|MBi1(_I|9r+i4?SpWB#UDT zF4$tJRaCaMpX^~Dk>1j&-Kw360F>Y*)9BGT0VaX*Fy)$7OyV+*j`+r{oeEx&QeyoA zi#Yv!gE}u&oDFP~@nDXzA#+=?80A=}%^v?UGk=d?I=?rCD=gobjZHnI^ws zv>rg+^1pL@p)4vMpDu6BgIyfoI-}FIw@BltEF9jQvLTxMF#_W5tR`QREA^dVaT#OI z65tScdlMHh2>&*Q+=9!X>JeHfw||wPHnwqkt{Y=+X^`~^AN%2bCMtH~dOKv8)9SQ? zz4W-7wSkYVOB%&;*l2D6c)Wn(xWT#{YXWU*F;^cb{CzG)Qatq&60Wy)Yn}B-pN%Ly zvZ*=tpEsV#o$ZgY+L)v(_6St3-L6Mot3GLJ2zfbaAQmq^Sw2G$`}65G&h?6j^etQ6;QXkzMXnOf=6xcYSe_W%d8!0V0!!X2uj6M$WZ%k*NdO!@+(gRow>N{ZV zr$T1SNfBSR@*ij8=}O)#04voSO60>{Mpi|tF}7IY?_74j{a#aCn6XYZ8|%hwoQ$na z(N_0Qf!>`MGmaY?-{>!Q@Xvu9Lw)0?|3r9)6Vj%g+A}r#zT)P2^>FQW+ne(a{)oV( zzw_}!>9hNF?V3|>wuiAf*G??kRyY{(VJ(`|>%ZUcQaroD$a=y`t4E*_0U)GZz&6b} z@VW4tvU>;7VWr`->c#9@5w997`jv?eBaw~^T{L_5y{sGY-ha&8^sg^A&G#1j6v4j& z1zwq0LqplsTlT{gKX)FxPW+c^>CKDK2VFmaiVmOsm1L> zZa3lbe$pl<>5{WUF57xn+yj^P>N+bs_YV8pufB&N#$S|{3LZoE%d;Pq zXnMOBB%U^5gZ>J)^AV4Z-9i^Xz;vQ|ZxozS6cj`@?S>1AL=>-g#J&I7xebe*zNEO3 zG@0e-BU6<7y%NpwH23cfm5+Rko|dHiF-HH`3YD5}C1&-WE=omk?7W%ybM8D9@9Qk?$fEWnnxnOOUP;}xGT;=_Hv^{1U0+IT~fgZ^!+l7LrfCG zc4IrMjuW6DF77>0T2Sf`@X&zax`d#xA%hKXa*6=5o8#n=7HSrHxH-9Lz`E0{uw#7d z$n6TKZjoKn93cJV=_7(1Zk8bVhqn|#~34&m)btfM&r6ek50;su_ zu7Q!WF3Hu**or=dlLmVK(QHrE97v5xSJ#pSi8~F4)duV}9>LN|LY)HJ z_ZUy`hfA_KUB#{YIJwQ6U}xso0q)v@e%aOd`*i^}S6Dr_LP(D~`qem0X8JS|G97;_ zjrxpy%=W)opp8XDt0%Cv3h2r)R(O^Q`)IKk9R7>oIM6Ms1pSpM$gFop)llFd+m1yD zq(>4ZiAOEAntjk+$z5yz5~cIubJ~+$N4^tEcMoeX3CJehK#cT4V|f?l4wD(d6UfW2 z-5bFXFF*G?L@Eg_$q;meJ+%+a&Oy0-T2^+?WBv-h@6z%e*y=q@%VV``%TdLFcCiw+ z+s9hz*K-MoC|15g1{Xi!gpTw@bI0#|zsn9Q$+Z5krs=k+R|QEXg_rjt~iR~edcG+hP3>7>+ z-?1W_YSNCgMe&Qie@nQr7swh^dHFB~W?$)ZN_UbbVFy`E3w;LK(Do3eYze>3fOM!Y z;&GR%-b4|3oC^xI(LKfSc}x zT$TG~5&;&CPw810t(S9_NZ3Xs)0{IcW4xW!P8OX#rUL!XU>Y>{p^;kXqU-WOm$d*8 z@ueKs3U`Y_q|Or)*oPeMGpMfEDD^IY^p9muGD;v!GC__qk|&S3tEI9ZeXKZr0vO^G zs)L-^CEf(hRKx~?ox3?Rphzg`uRN_0c|?5E^ymzgN|K-r+^)M_vPA(^4Sy}g7lU07 zc%2k*38FjvZ#SU>GRoJ#wFt4+a9Ihd>*<`$;jDyMw8#$>!a?V37H!` z1B&!%9RsA_+Vmd4{t(P7U|CP@e>cZF^~@pm>{M+u;x+`+iz)pbu2LlkOWQ?!SyX?9 z{QXn>{XRa&UI{OqW1+;W#b${gpqx#QD!@^AyD?f?Y5I>uPX^IBx2c3;W;%W%o&)vu z<8v`$fSpFm5rEoIF&Z|tHaB+wJj`M}2P!q@6~@Qht6_7$BAa?NTiQur%yi8Gy5dE5 zsX%GIM>!yr2?eVZZFzK%B8kZ>NTH9p+Kj%anJSeAMfdz0T<%%B0NA{rlAv*GmHFOl z4grksc%d#}L(0cltSd_(-QLGc&Nt=BG1pYS zR4SP}UGD(vD6an`u2&VZPkOv3k0O|6O6xa3zxtpX(7Bi8Dl{kQe;8rIRVydJgUYT| z+I7A^gRZ#SorXeVrc2+Xu)S?hQ<1L&Qsl+&C&t| z2=zB*aiG50(;LX8Z#w@7UTng$nkCj6`ZDWk5|zc6JKNKZ%ZJd!Woy93N70(4k;Jx?%`5YI%4K=z4JLMS)Avqu zy{k#rn}F_aP(n3DJNG5~ulK)rT*WbI2Co!4{Q)#hN~FJEd}%Y8G^AXp-)vZKKD-+% zLNecuiz~(ljXv@lP{Li9+B`$4^_69QRA5Dnh@Q)4!^E4rKVE`IwWr_IQq#(+hrR`Y zd3~JEiion(zw^_1)iCCEl+k2=tA5oKImS0cc^LgO;uYWvig4y3HSB#oc~AV)SR^a8 zqy6tm5S9P#&?0%|cy(I`2q)&kh({fM#gZI-0%|-&ddMymaGD zx2gL!Ks}c#=qg)leWQ+ttlsw-(1&lU%A8oSeB}U@X+M>8U4)wyDaMYl;GDufo3!p+ z*iOQ)uq>i)&W`MOTdiH0ADcm&D+3dIYqIUaEVvWK;VXVBPiPWYQ-BG?qSrp8K17L^By_r z0#4Rk#oee!1*X|Xf|Cygj5O<)aSGrVw1zF}GA(vRnuNLCPwmU_mOP5gW;n_<1e4uk zI0!8v?=7RL{HCWu>u>tvjNl1Mh(G$4cLU!UoHqjeqsQw*1$j2LgXB73ScHabg2W(2 zuc8LfV+Ll9#$d<3$S6>qsmd60<-A2nBbkVEdip0c*EfDckdI$}ZFRi5r5w#chm8uP zwh^ciCq6BG!E%y)_XJh5p}^$Np4+j?1aX*cd`wvMxUp$iJ6^eB2itlx^aVs+`bq^k zd5z7&RoGQ0wQg#D|7Rx_c z-ZKQ_>em>j<6C+`u^gbOYd)%9U+=6%Z8LvITJu#I_!X$cF8YSNOG_PgP@D1!kFFNc=4ZgU0}`?UY_`x_L?v>ZHM?}fa|}Ty8VT7H(fXq z3JweQse$Eq#X1|TaF6*N4$QU;3wV;~lWDm^@Azr>&6bx`vDVaC<Yc`y`hP273)?K5eMIybl*l^7b808gV z-P+^5X1Pz5w_qpt7W3nuU_air#We?zU zQTTjj>oR;F{^|&9Zs%kabFa|i&2Qv_l8K0Wk%!A_ysKB;SFHI&xe;HV5}Q~c>ipXN zCNC)|f8-hWYMiG5TIOhAM$-Uy^l(FKygx-WaPw@aqTJ@j$((@<6-fhvW|nB4AK>bH2eJSdYuEB zL_XUYxcAB%Nl^cr#ar-czbWt*rT@PX(=PC^&*n#XP;yj{BYw0ok&R}AH%DK&me1~s zk)^-dm^nL`9=F>_;r?*A+#Yo~=C#VW&K5#qC3~%GVeG%ShMXoW=Bv$Qf>T2TqH%i+ zpS#m=IB6>VHxfIN^OSLpr%k7c7|9UaJK9F6J)c(>v;4kL*zQlj>9Es|#?pB>Dcepqd4K?CxD0b|MIO{lu;z zms$tg?Q!33Z9SOcB280mQ-0M9DjwXR^y0GW%h2bBxiQdFVBt>bB&1n_tAt~45Q#PwU6(f-FkH0fddIko` zedD}w*(!_z4^}uN7NXzm7?VPpH2Mc;`yfB$E#soz7# z!)vrHTkQh&ypi6k`lXCBu|M>xAJGO(oQFG``_t#mO{o$WSHjt4=qco+?lrqRgiXlC z+?k7#Mi@T9JtMNMShJss6)6n4yZ53(^ob>nObz<}NfT@iSC>=iO+1UQ46bRJ(5}25 zs1Q{hUz}0eU2La8vpK!MLblgRyrt^zF5PwNk%!6~aq)_xX{z|7f5Aifq69d9F$xfx*4_`;0Y)P<`2iN65k1KIgH-j&}oBb(sR##qTwZ8YGTW z5i%8v?y2VlD~Y#HdWO~#6XP!5>#$L8FDKuJUuX;Osf}fXScs66^NU4Dbn?rJIJO+# zFFpFdk`FnDjJlR7NV276#fE=}w;Ep;g6g6f-7~W?1N1RVAo7tz@tt5~#zoC%n$7SHX8$xwJJ>rBU1elV(<5?!T`BiSWU_H3 zO!PzW3FN6W<&U0uxo>TVna`|gz!4qS#AmQsqewo&rt_UX6I8VFheLw>sQmXv3a!DU zBQgYL;}M^cz{%YC(!Lt-6h-x;r}68;)S;^MG}|>KB=E<_5TCve*-YutbaD0ZM%&lp zk1$xpSkN{r)7XtGZ-dGC5zRf}qve0@KWW(X08dO~<@@YsBFKBSNWn&^+!cVrA4p=$lEJ`9oP#)4&z(ib2>b;>CZ-WNo{=FEPKlZo`G z1ptzU9irj7&55tc1k&^(Nq$E))b}x{Nz@m#98OC{2V)5lP|Wg^Gj5JE|M|ca0KfqB zZfo9ulhL{dUDxeOWyc=|6(2#Xiu@Xx-AyG%ywKoSB+_v}BoSPtM4&_(^x~-V-m!Lr zW6jgf@WqGaF;r6ukM+W9GiUR+S#_V86r`RBhaE-4_~%~_Wqv}I;4mw?hMB9=i-{-1 zT+v@e`TO`!23-Me{tndnIucJ9L)}FyB+M;V7gXcS|6};H7H=UtYG^gZ zU-wE58GpBpYyGy14fdZ<_8ujK0YtYRf$gam)&Qo@MS-F#6eSsl?K+Hd4^IkNM(&sQ))`sRL*$1eY*DNI}xRN`6 z_G!ggXHwNbal-$iFJybjL-kd6vB9G^_(yx}d)2;~v)tO`Udsm+r1QqB#bSf!_Qt{6 z#hR8xNW$fBwm;?6ydG~|Iy-wNhULG=17r+bd&oDE?qn_vCJ{D(UH6JJ=24Te*8#dsNT`vHp25H?GJ4!M4K*uDG=y@!>+FMN z3r~;(j+I6XaOnxsltC3mW@HUT3S&+vpUYo}F?kzZ#rT)gz23k_N?N99e%pR>yXA%` z>NmwVim{PF0#ee31|Mk+8A58gi@JPE$aE#tEm^WS&gO>zop&CnU^a$z>&fR|*fq`< zqDF+2U#!{zAG&Bsg-6Ck=5M`O)7DijT-CFs@;DwJAJ2?moLI1-5)p&CLyR?khm6FF zH@XeT-~i=&@>vuXmK9R&_6wy|nCCW2+W<@8R&*T9$9cs0cyKgZwcSt58)Gp; z)J4Kf&YCcyQk@HBcupy7iZ!#zOt$4BHZO-{;}_ z6PWu%5w|RwhOxh96zhDWWt5P{k{ICL+wX7kaKXIo@ls^g=XDydet?uOsYgd1BM#Kc zJ?tT)uw(yY9@=n~J%{QpqU0anU***OHEEeb3vq-M!XEK)?T*c~y)YqRqj?^3ac7@I z7W8uU5s&m!Ng2w6SFU5!A_7ds6z=ea_wO+;iux?@N*^8)A{NKMN+_X249~jc3)I~~ z@F|6WL8>)%s-unde;9<*2zX^bQ#@$mKc*TPzJ7|PE;}zzzJenN1so#+Y0u^Pc zp};mavA_ud<1Rp=u1-1Cc<-iHF!ktwFI7IJ zcPcQ7DyK3(2;$C`{D^to`66BgeU@$OO5YbyRmy-u3`9pG4AmDT)G+=ZzW}TIjYqK6 zc;qf9U-?;Fe}(1*^Fc;%k|6r7t(YOR70&=gG|ad2i<&+_=S0U2rLF&%%~_bgs*zyC zmjz`X5$FO{l}j`-tvjBvT>Gh802pZa*_voy<{Kn^L+c1H+et?0nVNLsFGEO4o#`2{ zTqXAtfp>A@3U!>5vLqlquQ`DG-vn3! zbjn+gvcL{$AX$B->eqm42mGHfPIH+eWENy2GzxKqD%2P^MCJSEkBmX}+$*Yh@PY@( zS^70CKtZ2A>uyO!Q-XM%h06sXXXIQC;^}GN10Eu#2LWt6#VIkSGB`3kaOLu{pa7E{SxC!}wJ%T-$=UK*ZwLG4^=LTR8T$)EWTC}7MgI};$yWqJ{W@?S zkNclIU^cI|i=1?(W&^B5CixNm!rdoa^LP{3NpowZ@iWkVy+0H0C-*8A`^Wn?m?%1$ z1vx9GnRX_^W6%_R^x3141PSK8m@x*|xJ#N%#XCbz{_I(PL+40Y!B6Z!-sw&^?FwvU z`xa$|YFU-TFvzR1F(tGol;Ak)$ncMzl}8Dbav7a^{I{1jb$w@-jmlVR!Xi*}Cno&; zUPk=82NY^I{;3uX8@6VtaC37`@D?hPHgy!BpoJ>}_rP#tMYpCH`G3WX?F`=E~fpY9Q?)Q-AS-oBYIL4~^WMfb!i zkQA~Izw~>nUbItbHrFIv^If|3{HA>SOjX`#y;Z91CT2B(O)95X%HdEO=9zpcc7c?< zj|E!p`?dMXafCY+C2QJbuRii*DWVIfXD$53BByG0CUC8{&f%puKZmE5xcDZ$lwpHM zrS}}Fm3ImFBbuJ~h2SpF`q+=UEmc4~wN?mC3x}nZZ7)>Z;rzaoRpxxJw$Qb4#ARuO zL^xf=f}6f5!%G^%H}b$IuUo1FjxGCbHE>7|F*sJ06w97P*8&L)s69NxCco;6;3>t^=UQvgR@07%FT2%P5VxSF zq@+Y|$RzujOt(l5ui_pm@gWu@ST+hlYt*w+7_Pueu;Gt>4N;DT*f`q8-(QvtMy+LE zsxTj5B&S{Qs)w~BV4pJT1AAnm`y)*3%m@u$y|I`X*XLA+k?DB-1w;QHftBpw;~9J1 z-vQV+bK5i}7D-O#qR47yKyL)JjxqmAwp`SR@5yO&5n>h*z$d5KuTlIL2|{RxE!`?m z!rz>56vF@sBvN#h3S}%!kOW7JWw#-9mdiMy`unf8A?n4MMZid9f)HNf&I$EFj^y`Z zeA1y?TU^Y4d<(FsxBI7{Wi@N5L*Am7Yc9It3Eam`)Gt7mWm_M-)LYitM_Xed9=v*n zz&q5*SlvBYa*=lf&BTVl7-?0MrF+434?cBVA69sxya6nc~w7FrPlJwI-C{$OVFJvE37n`fr9gVX?eQ+o9$vdt=$9r{99Xu$-eq;`?4Lw`abDg zz*#SF_e`wTfSX6J%ry3@Ao|M=rOo{FhcqOX2OoLs11!`XV_Hss|1sHhBm6M;^Ao%e zE5)k`(t>Z-TVK#BYkWXCvyeG*Un;rz;GC!)SH-=Q$rg;7CDjcKF1I|yMaXyB9l^+^ zC_dOTnHjirj0{m1lrFv;)8Kt*YnD_bLF*{oh5q!Aq&Do3*~#(J@_0*f?5&KI9g;^c zdI!MJhzWws3UC_%*|0y&YXdH%%<0>d8XWr`_GPLzc@O#YS29r)wV!I8I)wT!X^PHN%O`4&Y^o8&2gR1H^lO?&53dB=q-XXyb1%_G zfB*g3p_)R6&XN>ywF==WyI`e>9lPAz_@551ei-etz)BmU=NbX5UfCpj9CJq3k4vgN z?$vITW#5UQn9flsPC>jr{*<#iqdoZiC%@9g-gciC1Jb-M7tU2%-RhX&4USBzPVL79 z_pH%y#}U04#1I7KvV1`@@9!ShClGa1>9IYh!`{-oxWiC0yFG8|-h7#U<(^q5nP9#V#BWGDMQO@z9b}qiNyD?l35OHE)CU8CP)^z3L*?rzI ziF-dJX_nIlQ#txFZdWi#>t>qrEaP7~i%UPLI{>r_Yz0#RD3##%ouBRiFKBh#0Cb!J zR7DD*E_|eC4K5nBIV*KMN~89oKpT|fIQ7hMs0`P^J1q|Uhoh34_>N*3|AMd*>}9c@ z4BYBVxES?QVZ)uc`+__ZDE5FmT3GU1ZdCWMn^9z(Uwiq{aNj*px^o;ANG0Iz7P$DJ zAOj#rL43voalTVNQLq5rBRvf~r~ERVuHtFh zB+B9WfDul;;d;)*=f*IJ5~c&$dj^5ozwyn<-;xRX3&lD;+5ZLohH@2YC{1fd40M}8 z4ni;8;=NE0Br!4n$?ae~YMu<=87s)RM@Ocs=86en$gGAdN;G6}!tZ{}+d)P;U)x+? zb%nhsrBlDA(oC^_aEG|d&zUjF-45i?s5R|$1|YKEO`urT106t#_r-}Ur_ag>66!@a zN%fZ{92kDPHBo=VNB&^*Lj#JqqlpJ4Qqq=g`?Avan#TcQ<)h^Q6@&JE`!QkhRY`x= zAY|58MggFJ#SJ3t-A0wvW$0Mn0C*>AC&jK2yYsI?5v%jBF9fY<8o|semhu^V!B>zvnMiO4oF~NjYiZ#t*)L1-#gS^m^DtZXSxW z*&kK-*nAflIV*Hk@0omF*oR9R=O*PmoMV(LI}N(_uM!P7YR?RKS}ETY$2$OK`LFu# z<9fzlt0PlZULOD~iw4&=A=Ono_ER@VzNG5E>e!CMy^PTxJaJ-iFXAhH2EU#D;?S!V zQnQ`d#fENE=^Z*o7i76b08XA$A3($Tcl-2kn^c(*NLA;|ZJ;N~f)ia{vd0=!P*O)P zS5y56T4vd42!_cnU-<}ng@Y@J93^0lzYKoBFGhfwAsHF~cVaE4ZkoC`punAlYMpFf z6&Cc8>YFmA@aHYS-wiS@vgJ<(e54ou_$V>ncQ;i~dc=V%92+}8RCk3V2v< z5{^cKgJjlCR5CY_vMV}Wpb>vF8Z6D&P8;yRAZGeCx=WTih&5}gMCcglKOW-~17D(F z8pZx3vTbIscv4%~W(&q+jrLISM9RY#S8%dda(i+tOIqfPRa9*Q=BM zgiq>ur-%*5yn!|>oD#%TDO7z-a9s58*nQG)FjQe(jx$5bt3^X0`?EC-P>8Ye#X2Aa z>XzgIZ9}lop%`GV$>^VDa^l?%*)>2-dDFM?FYT6Dbv;gB2cVcNOc5=2Ac2~D*5N?s zcO3?NC;VWqxbvRN@r^&CRM1i;_S_owH=bs`k6VwCS1fmOR?gY#q)K1uwo!L|$lfhc zfatl(Adn`50i2e*OzgoYIp#{2 zam_g5X|MgFATfVKnOFd;9<_UD2YR&uj1+MW87|9Z17q2-Ed(*?-|O!m<2M?yWaeMP)Soq*>iuSVl~hkh?iTH)*&#;JD5|rYk@uEwpWUx zXy(Tw<$!-mFD60BlaE&2@XEs?lo7_GTgrqU6A@Z%x>oW!dyA)Vkx|iphIAyuIeAbeAM1ncPfigS*J2h zLrL$|`^P@(AkJkD&v>u+id--9mbP~FP%hAx*OpfW^}U?&H?XuvsYW-}K^J;baZysT zMGWf-T*X_Og=hx&!DMF}OO}z5IzUt`Q~(e$acZ!u717=R-S9!G%58Zb$>55A{T8lG znN9JAS2A0uZE?B>n;ZGypEVTUAPGtplS|);w*#Ah?)Rw1mh2fyfh5>;BXJjdRZqJDBsDQkVj!^!v4nQUVz@S@_Xx^Z~O8<1%G!aEx^(mwpp-BcN7~_BD7ffDF!4{!{}?*!wfV9$X zpduj*1ZfybNFyy0!vp~tEl3PRx}@8WpcDb_)ESTz+bR5CTY1m z6%|nj*S&(~XZ@gf{`nh{p+zKEh$zQMwnGFonHJwq7)#!pbLl5o4&{T+;H5MYtRA*MHxjs7UW$+h){W zupk?*V{dFHPrZ^wn`{O!7gb$I>SFl*#?1iA15Lc}7dIbwfM0pK^U!k3?25uCwWLxY zX>-i+II9KdQ?#bDNH|`5;U1VlYIl@Yf?WGA#X(|d3s-!?{DPEy$smO8uzx~fX}$g+ zvBJBqtjiD1b7q0kf4Y%IFSjZ&=&Mrd^mL{24~R^0>+r9;RVL7?n*L&{}j>m&fY76eXkpI3cs z=*=-ZcC>is6LKY(r-b8#Q&dc-2O+pzI&|5hgK$u-j><&R^9yLXwK!_^mfy2XHUEUF1V(pG0w}GSQ4m1vTRk z7+*3q>l2aS{5z3DOwq^~)Aeu)_amvFcBHcPw18|}^(cc4%~{dbAa77+(%2x%>yLC6 z;NItBr{5)ytdWas^&>V^i(K;GpWr$Mn{B}jIMzS36m?D}WSFffxO;2o#wboI$Q9t1 z`{oR0KYx`CFT(<*V+Eo_j=Mo6E7ol!1%wb4r=U_NcRrQS4@?V}WL`w{I_%|q#vO~Gv``q0@N>JBp}uUWfo z;|4?6r>+&FXWXDtLi|Hmy`y+m=iEQ*@PX~}@~zWD`9l?vJV6K(ReO98f!@66@aj#S zT9mntj;bC!Wu}5fY{&S-w@gTnljAL@Le(K zCPT}B?6h*%-|Vod7!n@^smMd(_|ZyGXK0bCjr0R<2P-Vy>9UxpA3kLt;uIV;ZGm@y zN?yO=f%ww4^0fiAzPBdb_=bDaEND$Lu_Sk^^c3~?=6vGa1d^J9gCgJ2>e1On6J>en z?eDkrg;|9UJ!Gs$t5&Tn{S*Tf1010o`~rJ)%NZxdVO@8>-0jVUcMgva?ozGmKWtD( z^zoInU(l6k2<*Mcy~kFa&A`CUKv9LsS>OAkk!gDnesGT^Y$+PLchU>AuO9#o4OYr$gO zoO#!BFxh&}o{*Ci6S4-$RLBshDSZHq5Ffh9xES2z|JG z9a3~{yit6zkL96be35{f7&me0bhTYY={P{4gxYu*0Nx9Z&aM| z!fM3=dN(8mc`&->wwmzG9kvw|k4sVn4gVlNlR3+dUjDWk9($#U#?G>9mUMaODG{|dbh%TKiWNCnw42Jb$hiY zzC*~-Ae!5qdkeQOkKlluAbkyP5)@Q~V=h}i&{p`_;fBG1&i2oX;8uXz>Ob5~O4-t{ zvUdItr305nvDG@-li#Glep~6s7*fDp$0aesZd)&FZR?Ghzy|m~-;4T=8H(})_27rm zZHI48bnP`UimTG-_uC)|6Ek#<}A-z{UEW^&Z=mDJv9DgzxdIuxk8KQD-_8 z{st%<_7z`Wx$9vjMmP)5ZHn1443BN6PAxBXb7g`5bD#X_&-9U3ry(&D#9yP^7t{ut z#h&U`fs$D@%g)u9hknala~p+PbUWVf06Q6)wpihp{y4T}ae(xHS#*m6LYY3c!uX#0 z-H5Pqq23nqxU6YyhHfE4&gggrH4X&(00R#nOQ@rl^f+$e#zxq^lrou4qD@GbVZ;Dz zljEzu#JpmbGNS&%8^z4ANy~)jJa1bI+CE0r=iog%6=Q|v@H2e|zvr_n@RJuNpP}aQ zsov0OeKFPOJB0lJR+j>W6d{z4P|pcRP<>x|GtRI`mc}L7KK(9sv_8z*H-`IV%np~| zb0-!0#q#&}bFtU6d`^_qW>4E}K03QtIK7o;$+mp!TR6Y%Z9Fw~6ieXD zwpEh^xx5$l2QOFhR6fGcSVOByNXq^0ue&y}5cuQ^!{Ku>TxMMCxwCRZZej(CIpqX8<# zl-@As}=J+IyY%P4@N@5NrEFxBem6>%|qzWn$FhFR*w(M6=)5pyK_qqPHdcM zm;vp}d}+dms-~o){qt{w-|7lth!w|AXYoC@w`XC-!#UZ|1))?A0*(32ulS2{T_FbR zZue|DTkCNT74pHP6)o=7u)&Fl2cx9d15j@Ra299cF2|2{UtIQ(@fX&1!uP$>m*aKG zi})HqdFQw!B`1G1=mk~5kS8{ zbXEBkGy3yBb{a5U+-RgCv$3ujp&8Tp_Hj)pY!RV;3+53nc`pKe!>7U*++NJ4gtn?3 zQl(DJ;IHHH__Cw`$$yvf5_@iNLkwiC_M6IsThSOn4mf)Q#~+FcaG?*nY1TAqV>|m9 zD6$WN0Z^(}<9LbuRVbD(c0q(hFp{S#=h^#@qE9u;IH;1$cb0SBc@m3TQaXIG&Rz4O z_c4&0V@x_Jgo=+lN_ZYA`m4ULd`O!}g3HF-drc__UrMm&1R!T4@67wlW5q&`;0hy8r5}<9y(D(_Yiw82)q1=c3PE+xPYpc%;9^e4FzR z1^h$(L;rIpUTJtOhHNN&(EyVyyt%JP_PZ$#(A?&U#dzH}u7b6FV}QlnNl)Jq*HfCO zhV+jyPQv@{^bhrt{J!pLEZ=f4rXdr)Dqn*5BE1QZif;TzdianLI%LPm3}X6nHv-}P zn#Tw4Ib<6k*Hhz#!SZhHP?Po60@#9}qt-Avh$hJ8_6s^9aUDpMYRm)&*bQ;(;=-o} zBhe^)Dqpv*22J$L;Ega&_CD-aAlHPb2-c7c3yVb_ay z(U;IO?UDAvxaq0vD%P5HjL2g93mJnk8U#&ch!yd3&t0ryiZ~toF2}g2E|N-gF6`G8 zq)G6D`bB(2YJKK!ImlE{sKYOmpCRdlq{i@2YA=@DMESKqd%%Npk161L?n|5hapup( zFxJ2`%^v6!Ix90w716jMDNNP(pL0E8#An70xx6Lu>IcfV_d_-tcVsaUnm z6s&hn*_u1({SZ6vMEWaN+UoR^W^U`2L((+(CKtv9fA1XqN{o-;ZAmFhTVzNhH4 zr*ZD!>8~rBI-e4%rCWu#qlsRayD=x)ltX+MMiU=pLJWeA->BC3kwLLuvfem?xHMK4 z%57)r3Tl1tNQ)7JlfoxH^q$I-Q)cAg&qq8Ysaw+oPSnZPuXS!ku$o4pujx#nV z0IgW{T9)M2)U7~hF0MBMFUqADqxc4mJ0NY4Z8}jgOKKQT#qT`}tV~RU_%i)@-Z@%C zqgcr-!FB}tUP5U>n!>6p$S!Dg-`WfPF$6`CFbr<=1jY&8N*L&DviR6aQw>@(*W}ad@G7@AK>;GR1`ZjR2DWCBA|?+_PP4 zCdnK>yN0b>S01JT?Lsw>n~-;=&KCD#F`qBG-586z9I>4WN~rgD1NIkO2_uRsbLnht zUq4Lks(M_hD&_-H+w((~OL#)r6mChc(vdYAiBk|U@hhVA^G)8*aBrgDycW>3{!@h# zXRTzi%DzH9CeWluO*oK?-JxhwlD7w*?ZoyPKlb5no0;3MbNvVKebSucF0Kr3eR$(n z^xk3{sHDT@0TO7@cQM#O!z4Z6dQ~*r%``S~Tz<_}5LbgAn9BjHjo4cG5K`y}=9IN9 zz9ng-sja#rO9oqhULqIIKMm_$o>-nzv~Lb{74q#r_b1LmEg$U<^VIokJ;-?^)57J8 z`Hp)WW(Ve3k9zlFNrO_pBv)eH57|gOxNlU8@~?mP=Uv9Ldi8JT&7?;Ihf~!^v0@8H z(`hO;TKlY^VuYZi@l1XyT@s%}%^OH&{DSlK%*T7i=UgC1*a9sBRWE%7_W?kyLfv7? z3lsY*XM=-MFjugU2N@Has92#)c^$LU0ey0NGXclCw>*BDdmPV8I=%U0=4IBnY8mz9 z*I57jxR=()SZS-a5E_02C>#>}gyfsc_x=PgJ<9fnahr7q`e9A$PUBmt(3f42nrjgU zg58;E$Igo$+iZ23hyQ>F=nu)%&@Ii5jf*hCZJ9MbQ)a#1m*+9fG%gGKM*Fh>jtzDm zGGc1$$m%EaTxk1~d(wxPTg{336Q-E06=R4XT2q9fQae?TL3zsRu7n?Ny+J*j{fbnn z07t_MGhT1BA^t&z8 z{N{usogjJY^Zsw&*biU>_$pJlKytN zv-!&f8-_>o6UqLwV1$d}R`hF*;Y2)^-~1(fyV|`-%kN9jL_D*k5ORJTk7)M%Z5(I z@Cng1A=>4H-Z1*QICgOc52?dOv2If)44q$WYf>=EQx10@HBiiP6K%T6Zwz5}i_cb; zi3xhk0SMC_@KDv$)S?ESKXbIgkR%b6JlKuqi+37u@tLqb1A z(cPbHWN7=iKk#J!=hhI(u|9kt^aA!mVONp1C`oF><#Lgt=MIc*5ZS`H7~VaJ(b0Qy z2XeAqxCijjdF%tdGa_ye+A;LJ4+vBlutIgRG&jWzSIXY6Lu(2>Q$lkZyncd@sEA$v zfGx@LTx9QNTq!)p%nmB;Uok_k8i5r@5(>nMf$8J3(t5>47YqLgI004_eQP<1(sr>GduCTM|J zC{%mb3aHT+nL>d*D>*1O8=>>(%#IHFw%L2am!ZvTyJ%RgwrMo?JdXsKb_#yNW%|dTLf@(DU`n zjjlH*$@euXfo$LGxx@VxWnQe%fwy$FLbepP?`$vp-Gc{q*~?_0uNgjxpjlrOi2_Ad zCiiob=_hah0v7y*M&eJ^C?*fy;qDUkIf)o_?Zd(A#I;&|h_M^@KBhicxC{qZnt0EF z1$2FcX;DE*39)n(S<`ONnaghgCzBydw}`nzdCW@Lek1KNz=33d6*0^LL3a6hDFPdY z!pqj1VDhs@Dw)JrqO}%DwMdWZ7me)Q#((E}p{jRr(#NS~XqMZTJC8wrRbcnkgl8l{ z;T{3f*KOU+=z4fj!AWKPdydsv+%dmmHxGbyOxXXiqYLMxD%?*ZGx;?@1pU4P9{rk~Yqa`k&nqkaA zG(--qMVb@I)2kIW1iyezluN20>Wn7kxv!q5c!o+mKUQ;EB70D+arjN|#qOMcM?_XB z>x{=I^&E<|d8ciw`Col<>sirz)tKOM8fQM1Hp}gTx6Taf2owJw@Csja9GM0s@8U=a z3OPGIui<@#gDdimgwV89v<}?AW({>H-|DK6ierIoFvLNp6#)~SQJ<0YkFMU&zL9WuSX3ovR^sW8P` z(G|;Pj`w@Z^Yj_Z&ji8S3;!*fP$J`doUq9H-k(r>`xHfEJ5y|uL+`3xEcjDPzMW1H zP7Nkm^=^{p=+>)VHEgZb@NcxEF^bhC$L5MS`!DN`4MDmk^)l}Bl(cUyvJHeYOFF` z+aA1hGB2S=f3wn5j}sAS%V}%Z{1fFPC(=z*+WdYrzta%v-Z`$rQv8?^)dae_|g z%TD21y^i2lxNo}o7w2sXE!UMDRSbZk%RY|q+iMP?5c7UD7eGitOYD2y=$fkL?0@`f z^kJ$CE7$Z?a! zEb&pr(XO!8fj~T%(Vb233q?eP4dK1wZ}e&eMUvS~1QYeT`kM=;SnJB7KMD zq)v4!rZb5G{T=_^UoXJ0mE3vSCghR4?z6c?de@cX=B>A$sjz*MNzi8HgL*wFRG?O8 zTN=AH*w_j@W7|-*MfTl&qQ_S|JLu7fk2EUg)ywwm)2CFbJVj?K5I={IFzDCOz~8K=#ggFLkBgu%MhUudW1u9*npV=K$g z>WoIl?bQ4;hz?UcpCI=aTB^>q0b+s7^FJhGbv<2_!O3?BnWpZ!1=07uh7V1{95@?T z)xh`#KiEpe*9|wija){tt|BP%osSa|3rTP`9;4p`4$=0U6w9%j`)X(;87c z0UtX|%Btfl%4taZg}Ob2*~HrqrQ7nZ`)+JrJfui3*m;-&>IeFU*oaOmCLqkJ*{m%j zo|Wu`r)hnWM+yiPQOs_?WzvZkqRHRh5(sVKjOUTp6Rx5>keR=Np$AUDd?(T6J< z=T|~L2ZGQ7jl@>mH20;bH(`1mq)L8KLRyOGGNY&}wa}|A@FRhr#Ou(^%L5|lo6}nC z%O4<&@Z3cUKzrd`KrI6xE(HVu#&;n?{tknl3l%&8nf^5g?ePojU-RIRte8V{=lq12 z>mJO5UyLrQf!k}wfmA|Cj;MDoWIjE@WG>jMF8(&kWR-!wMfri8ewge}*R+2cB*&hE$Q zohaCs3yId+Wo^G$w{Ia$pQdj<+SI59`ddwHwqO`OG?^8jg%S&EZdY(ALnu`yD?e9Yz)ZkI`Q8o|4XJoI&3&DlLYF zeeum7l&;JRYdHQ})-{uktkk3GWar4Oxz=5i)C1H;owhtm;(I>D=BN>I&AK?=Sn`6+ zr6#Z-Xcl%z_sD0UnPRvzyE_i7$Qtbnqrwk>3ZVS}8?oN1ChSgjL=&+64Rsh(L;3si z40OV3m>BF~IlYW5@sZ+iQMA57moU@F7<&~|)v1|@*4s6~Ee7Tx+m7gSuSkUOR6FmR z5<%PI+iZm=;GesVu?L_?A|gnj`_8!yAE0c~<^!$hsHCw{5rcm=&psut1?5!(Exxo>)06No zXfr=6cl=iVsEP}Rg)OQ4a;T@bAN!b$4*>J@gH{Z8ACCLtR zQmi4V!i9CL3TXMhn`DoTH1Yq$P=PqElhiWesAun0!dk%0Ahazu;@dhlWKNID=nfSv zts&hhi+#9#l>;@&^I7%`Do)`wl?O7|lOj<2?hdS9`t*-%=9S#xSe%E~Z&2CS2;mqWue$zw+nP$@ z>-hvVO;@ymICkLoQYs+y^k!4f4VI78(rg+?s+S?(Ldn0{3XgI38q!;dhRZ@olI)-? zM)fioR-M$2n*GjUgOE!|KLNH(hB}3b;1=I~Rc(!NKsT?b*3LB1*vw&l8<;n+etVDF zmfq3>g=J)GnV;Nx%5yo;rhuDEn;d?fy_bmsyO@7Gog1Ar)vVR(Kg3W2ML9Y+NMO8a zSKCT~vo9n(dDgcRZd1LUw!TDsXGzi)eY(^pHQn>BjmU94DaM$o99CbkBlzPWi3dvo32L{qTToRR;^a~2sT}L zv&~d>b|I``vw+xMqnD4m#=pH)C54Z7_Hu(~PgO=&)=eg3f0O7zN3=yk6V@n^%R&#K zif<6$A}rJcuS7jd2D;EFqD6AFDid$lm6bi(j3Sc!m{Q#LLOLm$kgj)=?>Hk^j*Pg66zC)W>w-?=z$+D^h zwGQ3+0fuQJ@Jc~%9Uzv~CT`r!LjZA`x$%=@e z0+S(2G$PXO8USo$X%%hHpY{VCnI&aR3MWmEd7l-#L+&P->`SqC3ZNWo%~8bUggs=I>B9z9Q>}43+r-J(-7mf+#O~TU7=<(DZath zrVRBgI2-wVMBg6JPLl=@i@q)GA#kp@1e9#~C?OO6r|vqiX^_xLG*K@vMei6m_5dRL z*!I8(5u75gk0Gyz=^0g6b@7mFi@>1#6KgK-3l@+b&gVd!u zJy^`rm&{?8$UiZ_x_fRCNK%h@&b58zKWkiqNDz3Yq@V$E)m5hbvJv;yjjT`sFGXv4 z61Q-?a&R%~0G)$wFd^IANsClAyDG2&R&`>#&9d;?enGDL!w&uB?+AUNK&s3xqY}J| z>%9gfIU$}7-u|Zf5)Md+YGtOn`kY3^TwoL2{N7lJ$m|ddeC{Oo8MaX)updat;ePq* z`Vj0yn2@ZypeMbH%UY`nBSlK#_R>3s*w{b1?*WgkI?|6xs$=iyg9@caZjxxMYU!S%p3srU zRPlnS7qUh8jyJ;$6iG)S3R(of<&O;mRLylk3>XMNtmqz?ISb9{VYkueOd_hm%H?tL zsM`S?I7l812`mg^kmv%;>xhC@?+QqwRhcSI(b@VI0oke4N85AYq<}lgxS6qEYH&_6 z?u1yd;(o$GPAj>DuZ!2{3z5IA4i{iv3)wdTCPMt9O+ME=!o8eNWkp}VsR!b$H+T&F z-h++@ARCqb0dDFM_DQo6Z)E(;!k1%-{YIWzI9uh)3$vh*ciLY#wGIfCz^qxVuXTxz zE5AuM$ahCFfD1kQwN@H?c$f1ezpe}UZL*#65ad62)F%oPB!HR zN?kS3&kfZ!m9uPe2KO##x2flEG54#YG@~vze>{b(MV$twM*kpk4_v4Ey{Q+Q^kvR* zkNm$o5kDz(?ZE=cxpe|vA^o)V0HX%~Y&BB9{VjI|0ndCpBP=61T}lBa`TA)bNWF$l zk(#~6X~mK(T{ZwDe;LX*Ao3YRCjsA=nigr0jTdjTdx)|fU0IOVCyJWI8`Qx>wR!AG zGQt*DigGWE8OWHEA=)FH#yn(2BFmh{rInkYPZ3@6Shl9M%5<$1#R?f(LoehnxGuIx zysnRZgk$mtom-JXjZ(w=C`O6;dzeE{E-^@A32_YK@WrkVCOn+;5-q1M2=Y397D@DJ zK)~@I?8j;_OUvByv`0^$+Jo|6_FqF~TN?nJIR4XeLY-$$=@ zYg5N!#gzq>b?Y4`A3!gjUfQv)qeWvfVZz@VZWLYt91*BV`eI_NEvBK~TTFW1 z2lr1Z7%5_ui;3MEMalXF>AZjowTt94`7YP@ysd30?V|E0py_2Dz%qcRN<&6^gXSSG zS@9%smUMf3;u{CJ)qqc*Q6{<1|5U@{_OlAM_0faF65gNEeI5gBB*aSbK$op}VIA#| zh5U85BJ{(#O4J$>Rm0(|2@0>GecBt^+%8&u+2X!5r?VYbS4yKDCGOiuMG2d> z>o`^9*EqL1O8Ac=Djw`2lKJI8D36*^mNDUz##5%MgaNT2Wd1<7zwDe`n|*c*{{-!o z$vfRqks4{V^x|1dhE$;p2MTH|J9+*iv>u2FFC!H(XqH>f|x+;T0l(L=tjOcj9U&o}pw7NQMdaaFJAO5^%!*H6Wj} zNk>r_bdRXF!PKZZv?p0nHPM^$M4?!eGKOMl`5J2uH46ScxI*k#=HVXfe=vZZ`-hR1qfNyU6b`a8~E`RFwP=5QIa)bE}o5Dw4mjd9pn7jDh z8=?)>RxZr7nw7XcPh8w?V=f2?BZaCWG)}`xzt6w_ror8s0_0o|3(JGf_7+PXt zRHZYzRgY~2r1otaw1;T=iMp+(fw-a51?S5RB88VMS z*KDJ;G2fSMJYgm8t`j9a5OJeIXvX*AjA->4B5YYU@3jTqM$YV3^mQS2TEPS+1&Gxe zM;U-g+krJEEnTDm;#Jx3%Ej-@`9-P)>X&QDo9kvaF?$X&4#7fkEI3ZSK;e zA-wb11J-DZ1h3m#c#GVja8l@xT_vn@Z}t?fMR57UN%ea=)!W~^=#~W{iT)%sjLa5P z@}mT?%@xZ?dYUi`)QqY^vJe5GIO}_H5GFkoSZ`h^4$T)f%oSAqV>Fbcy}1hr>0!7J z`0c-nA{Jf<=HV>p?#V3+m#+w8H4=UTScs@_9CEpe2Yt{}6TlJFVUm%8=GOHhRM;ag)D^&X@-#qmjt6fhJ+|4 zX~nL=zQL|{^snpR)W1>3N;qd#pv4UI<+sDn9cRUev<@S{GVRMoCl5YxkmHT~vn2yP zmc9I$;banhqxLAY^1l~-15gPk@PAJjsRH!q-$}<#5P%fF8&gRNewBfhfe~Q01`eNF zG5#DG{?R|ik5!p3nTJLvF-^k{CxLoGiWw8fhMhfCVNJly9wQTQTpNU3rg{aqCVf{Vc;Ol%AQAN1ygGkLs!1G=$Q zpC$b^{UVn8kg@`A9w)rx_cxv&&4|)F`(s)EIfF8@O0B?5vOoN=5sF>f9p4tgQxApg ziXDah`uh+`7GIweA;w0%mc%?BJP%_Z849ySjA+Xp;=N^CV4{&;=kmqNcYZZ%pFUAP z#$Y3`6Xb7LL|_#683>dCZJ=@h-F(LOmn9*3k6bC;UQY_2u6#EW+W^nvYjMXc9&SFG zevIF8ut-hD8&y=+-+&aujA=a~f-6p89F-?K?=9hVoquQg98*6;U4h6?7|A$kEw=Xg z%0G@?Z=9HQ8wU(e1&z6*9cKoGi5U%e8(Pi^F*n4|$61zcJj==(Za;ut`z(Pt>oWb@ z*y1KEiy40B4!CjTHIqjz%#&f+HL^$vXLQYiV?jVz|7y4T%u8vELAO*j*wW*sG?CC| zBG^4pm(+>RFCx>rv^`@0LCR|B7UZ*pb1)`7%vLdDMbgG-dP6!p(%+xu>mhu(#@r6M z6WI4WOO+->_+G0cNWOojOqM9Uz|D_!8zNnDy~HhxxR>dDKCPi>Ju21F@YGL)e}$e9 zaOcWxdca(2{Y+$yyBX!Oh5>4u7v@Fj46ME6j-!=D3o^C==@ywaz$y}_3(AxQUk=)! zIo>Py!VwGPvUs4@U3{3U*c&`rY7Tf{Q80^f{Eg&*%e^xF!z5!fjdzP`R-GK=xBANg0<=pERs=!e&x^vi3lgkoGQo)bKyJ=32rL|`mM zDj@a5Y{Vl;kB4}D`MUL|R{kSY?Y!An+)j(lg}xW!DW=hL-kF0)8k%0l=00g`&{{=G z#DQn6XEi$vDG%m1DJnqVF1QJ96^qNl_r^rQ&!>&X1hB|P`5+Z*O>18dNao$0#%ZQX zV?<^PV-mea)Z*SL z;qYF_Zf(@|)jwa7*m(84Ud?w~Ljvqi-T~g0O4`tP-nQ9XZz8;sUR(1PX=x6RI&9$& zFTOEt$HeqQkWZfn5bDuNh%#k1 zZ@R1WvvcLc3GI=l{IN3a!`ruArn-ur9aq}7Ky!TZ!&Y1v3F_75E@=4KJoDntEZB4A01nv+ z53*!-2gOGxrVO^=X7=VS2%qXO$QVx#`^CG&@_z#10?#d;rGWaz6Vf0SQwoadU67o9 zTi&48KZfrRS>tT^SR~6U@P(?5UNP0f{W>72i=i28l%N4En0KWYvK?*qI|1kS(Hd~u_>Ju%7xm7I%Jg^J0h7I+(jxdn{NXzh z>28MOkDPR^cQRH3DAGUtRdrLM!Fx*QF*&4LtnXlcLy1ZNk(?h?;Z#bk{hV{?{Zk>e~qRe9N1SUYgG=i5MqXgxuKq)L|pLu=2r!&70h;e8OYT; z*LiS;I~`N7s!!UX%s-7Kl+f4z3fYj>>T>i+uGQVY&~VS2cS$9Dr|4UMRW3=iy&{~5 z)_m1OaNYKbmY>{HF{5tR`(X>9qJ8HtBSEBh^dbKyf@<-X8B&(*C>!>Ujw*}a|5JqG&g;5P z;tO`JckIzlv{F3g9BuPgYM^nAOkP6QVZPByU0em9GMDAa{jD}v5{H#vEW*~=a3(?X zyvwZ9T7d4;9gQrNLv7&&(5NBW_`X3Tp|S2&FD0Ob8wlq2yGe=1rBnRFa`PK0UUOb^ zzV!Cf69$L)zsz6{K&%n{=CSZ z_<>4KkWqTsZQ1~eO7JenMQO`t<5*Hmi5Y5QVqZ7 zq6)?Vj7NZ^2da9~6oH{VS&A_3D@l;&?PWBR*+2vfyLm+0cg7jZ76TOg>3z?>ds=iU1!~pB;3L9HzvRdIyvylNa@QS zcx#@pDtwPeBJ47p@F*2Ouz!`Fa7gtH6bRMSs7=zBmmr(*nz0)h`WW5Zo*i#K=B(2= zuo}@KsPg}g57%rvk=u72Lxh}}L`2-v4l%n}>0yJV+PO>Yqyrus%lGfWO@qI;{iMbR z$HW)q;?|co-DkWAen(&4t=}X}sGnCaA^jR2J~@7X*Zj!m>W0%8VO9e^at?2LM8l%I zcBH0&*m;0xW8y|^4qb3baaGr}Sgv_09l7s(nK)#Nu1MOoB1ee^wfObCZbyaaE%$c+ zM{tlnZF?kKWNbQ{8VZ$*QKMaV(Yv4ZP~;PJR@9-a)3u++!L4dAb$)@W9nycdtkb)W zzaPKYz0p0BGyQcMHuS1gy4#w1$VS!B-B084%=9}fS;d@xj=DDsjU!lx@+epF^sC5h zE$h6bcB{=Qmq)L8QP=bJ3FKAY?YdSq$O4^y8#{p<5k?y0mFGh;!4W~Umt@KB+*q~1 zV@~$oj6`scn<6h(wNVdp>~P_N=*Dsg0!cDS%-OW4{OCkyS!uldlb%yzWYC9p&fMnQ zyLoXGwYk;}I*5(L+#bx|(D4{lB${RA?kA`^&;13Eaw`IO@$3TsP@mwWjP@ZkKQCdk zE*$Ecq;7bXyHi%b-+Ij>GT2jC#;zunTGcwoocFB=q6{%5LKr6fx5*6U?6MC7J=#O@ zfxajjZsGQdWE*kVP-7aPkEh88drz-ON@UnB6jEk&SP1+eAmYw36XHln1F_jJsznBTD7_cg6zNUKi$3ISEBk&`4A_6 zNfwsptW-^cCK*sTm&-S=QH_O<`K(DDeVg>Zs3J*Q4^cO~|9W5I$pv$OS`gdkpyv-* z>zUWBO41zoQXiX$<*KnLf4g$d?1F55*JUeMDnylAn%Aj(7~|ah8!r#I+N_(FBmv~l z)3$x4@pR;sC)<#TmTf}Aw5Mit)xp(p>TZQBF?l@w9#Mdt&g%`hIwF*D8FiDmfw9$B zU(@xQYG&>6MJ4oOF0BiS`|xv~_2zz;Jo-)V0hxa$A*tIEf4-Q7IEr@If4o*JWr#Zf zsDB3l;^aEtF(|~@04`q46r7);D!M8#Vzbc~9}y?ffeF8hf`O@9#pB&-h`)J`8jnZm zL2rg$%S+*uK6j1>J$v#!j#__9YbsXyeh1yNO4)q$Yyn#JP1OKN!{vKU7gn`4t_B0I zb&LWB8l2W~774|^hlZtS?|{wnbr3M0ZrC|kv?N&>X&ddM6EiiIGy*@ko%jqL_{0Eb z%-w@3=#HA8YiW5~j4oZ)fdOJ%S+9Gr-eSfW?Be`MVG#kqpFa-6;6dq9=~=|4XP!J{ z@5qll1a-BsP!cmKs?7yMG*{+`PvgByX(g`X~ts28LcUJqC%Is=S8}X-B14 zps$qYln@`UDgMI{UZ$dUG0mQLrva_@8EXb)oyfa~pxu_w!Iz{cbCJc*VkhFufQ_1) zID7n1C2BJwH#d!ulVmr<_In^G@&}U9vjcLYR9)O;Es9ozHQP({vgAVQqNa=l* z=H*zHRpl&-33`=8V#zaBsAW$##fVtgxdZqW1gSCy#v`chUo)!XMZNE#3wmkJP+H(y zVBplej2}{jb(u{?%=cYrpF=I@@AQY4#`b7hk8d`*Lcjt*~hk$!d?Ak_51 zWFSUlCE4wonQ}%K$44p+_{0yZbB@Y40nr@jz_r{{Lj%@xHZAO z4S2;ygLE?*q`P4Vf`Wu}GkNJw35g99R1A=on$nGQGgPEu(j`o#L%QqR@8kXl*mhm# zJm-n~2?;yx>Z8{Pu;p&qQU6eQD?^ogYZpyBKMRT&beRH2u4{7QOu}{F1Cq1?7|&2t zp`cb>3wQTK=t0pV$giUL3=o6{TeN@;y@R}i4aUpgOwc2LWRwWfBrE*%4^!1JvRPbh`pV!_qqZ02=jV~^+!^>Iy^0e6JAB|{9I}ZuWBRw)$ zRw)R<@3Ib_eepLtQb2hYcu~|@>I;fx`tFD46PLuwHTp|1Drln?$85sM3d&4VJrqy% zS68G|d$F@Kvon(UmU=_ASr1}b)a;V;Zc+kmLH zM^bY~6cv3IKi`sPlK9!!^flUk+%ufM;7v-B6lSG9I}I$=2Nw!itb#0@`K{#Ms@0%5 zn~B+`5{5vp9RtCF!}Nd92MhTM5<1WJnKQN+tuu z8Oql2HwcMF1q9=VB5#C^WPBK0QfvJo&bu|n3?X0ngBK5u+heA_|5zLJqF-DOeeit? ziIFzw1kS>jXh~{cL#$)2?#6}@InjRag`3UZ^+jpz(fh`{N{OmvIba*A6CTwg&Y_)? zD_~_x&vd=ikl$Ei0p0lAh;LgFCYHfs68%LP4}sDn9L`FBJ7+T#2W={;Hb~Lbh6Caf zL3%4Hm+T+wd=f&dzO+=~I(3sIQg*9@+1XMvt*q+?7Ayc@!Jd+lwYVfnC|2$(IyKu7 zupX#g11fO(*J_j|l|sZUrs>Sq#}g)U3e0mdrVQ;dZv{Kh2qhpaJnc`w$_fb-V|Ge- zSWYon5G(FwoD@qRZ*m0Y4okNxF8%`5f$-P$P{mM7ngXvi<=3;Y>aEtjs43Tvv*cGJ zLhlGIpt^HZ3jK!RoPrM{XMwzZek0(=;U9I8W+|q#L^R*Xg-Fcrl*i}awWO%vpK`3J zd2QX(-CnKv$QKv&w0Q(vyA7VB5!9&lfwu66RjA+{mZMjEDHoqCu6AnRTUWFHmQkSp z11mwW;4Y151@ckqrPzM#B~U{%OOa=-+@e?Z<`(XS%t zQ2;O6v(?$gA?9DQMiDd4EcubjjQU6Dh1_0@=A4{szW-m?vwSr(@WQJ86;}R&=NNIB z-0zG`sVD-hYi8<7lq8?4z#_%&TT!W`q!JcW9PiMXz}i)Z={kYovkm%6?bf*w;>U6- zx)F0~H+KtE^jUL%5uFV`?o|TaobEUmDf*=cl|sVbq7Og{_toD4#nOyfk1Xz;ft)!1 zKE{QdTMDBnSGaZoB-x+fd!#UWjV5W^PJsQUVh%}dCfpqsR3vtaMo68JGJTDgf}A~! z+kA#{7=03}#d9EL^a5!|_UKR9IZMzR7NH~)=d?%oNHu4^n)Lo{K+MB6z6TGl5ir!# zKZ45W*AWAR{+kVg<08vz(i#O;M-%M5&{K`g2azryvyyxCI4NswJ@kfiYi1R~`SoK4 znXc9GE6iX}sTlO_*aHeMrGFwAL6<}ac>24CXwKNvT@$a8sz4NO5Iz1^5gS_$w_EYv zplmg_*a*jPP`Cre48sTG5$u~dfZ)A5x~LqN;@OQo$NmI9@zu5Px>H2U%1T?^sSMdU`YEcM_;JjF*e;odQ(AdJ$I0^?`<^9cWS1;OLQ zd%qBX?~Z5O`>TnlLmYtLAAPh38VlVQq2@k!;!8BV#jU|F{i#8pr5>vhS@CN+5tn=@ zt46dQ#K{naF>*oI%lO;?)<&LgPbAJCJ*FjVwYJzWt@&uVYqf*+uD~l}WE)B-M4V`N zP#lT_Y~?wV-5wN0#bMJ&K>K13G06kbLBz$NfE1uU?_~VFMtEQEm@*7m$8*|Y%Pgq% z*bxycYe}g3Y^th~8PxXk-(ec@y9Q;91jVh2TuIT&SS24nu9|Q+^1(LC$)iN~yCChE zSL*Vttd|bGw@t&bu+y%K`Pq?o(d=zwsbU!AU;%YB!Td4Cc7)-WP}i7y!0JvFj-aaH zQ272Ns_#jAz1c{@dt(GY^8tCmM^gqOZHW)z@Zmz{It_c>?0iMbrV8NzDz;v>-W*!2 z*_7GTF@H_mq!(z{gFxA>ZdHBL$5A34UT{V-E$c9rA9~Jr$>q@i018dByuIy1>^q z-%wK(pBW``?k^DCBOa2Rc9-Zv&57XH;l~Pwdhl11Gl<4cUfMHOP9M0b;|viEKNv`} z${%qpMa}k?&8~ts5$*{+L}aucV5z83c_|w!gq+3xIwTi8J zCmv5h<6<&}7@e33=tm;PBk9J<3M_^~DR2G@=f{#QTHZb}VJt}cVe<*ExSQuqL3A52 zD)Zys=2GU;Ii<#w)$TJFj`XM_@Y|!U?a-guT?H_>Mf8XE4V_#`FK!#AY!+Ov3;xzoe;nTVs@L@}9{-ZXi zwhzh^b|e-5KARKI6c0(|5Z{^M~NW;TuU`yy%_d>1wOw=B0 z*Sc2gi0en}`TWc(-C0CucV{Yo7H^-`!LeO*f^_(gn1wzkDid(=^=65Y+QN|Oi%8A@9i-{W_;^~p?MFsApwI(Nzsj{VWelSC)lx>q6 z;KL2*M!=5eVvT%kW3qX(#?t}WOvsesR5cC72X3lkeTl3cxI<*3{jww{p`zMW#Fr7T zz2k&Q>nt+CT9$uR$eMNUPt5t4f!4yeGJ+r8a4pXAO@r z1-+)^Vh@t*D1^H`W9B15s29E;0=xe(Y`t^D@l%O&h+Ti`Gd#AC%LL`#`i2-=8eKy| zysBKPV{m?M38xYbBFTVs2*e`Z4RBR~yChUxc?^)yKAJ{7U%&}9s2%-237$^;(+gL6 z!RU(MIV!!OeB_vY0${=6lqkHMRh1Ego)qlltKwAyOYoeG?jU&H4|f(fsH`L=(5fmL z{9Ccdl-KktFL`}I+RrgW*no+W{7nn_8`rz(C|%RfH0#2@Dyk7}9u_;K7mxBb#uuVO z64Sq#9X99xK%-^l(B&dK59IYvT_7;BfG;lg;q+2oXaa zVb&xe=x5jEq8WiyWSdv|4rq8xME^zNT`seG_AvH}*amf{;DODQNtT5*0@2{C*`X$Q zM?rcJIB zn4HRP7V>4DlnD5sQ)LCPqgwu0Oya{6a#&8G!-g$}sYehxrQ+EtOLp|%PI)AnW?6ut z;C0G}X$_iXv{ut+ zG~uKVP^If`G0txaWM&Qk4?7{*{xZQ#3%KbCb)%xuE++Qtytj96cfo&etB3Q18!tvB z(GVImlVd2wQFbm5M?uj9!CxtI5GPv!e3j<*>RkQ&mqqheGdvuo2$_9Wd+M|c z3~5$gV9zD9TwB#0b?l$*JG2!;4ns+js7Zj~W68OguFdKTPqE~uchk8Bg#N1L?qj`N zq?Ikcrk&k_0M~0vvBcbhj1PiucaIC2j?xxejC+=ErDFb2$1B_v`d{03P45PxJ`hvu z%lyPJ9>v)A<@9zSMmMcg^+s+~V{bzM3uvO5Gl`ZZbh-ao<;mD+`WBbax1 z^sq}kVpaCIKqcGvvA24MRp&$zXBlgfK6gLH(4f^uGqzsPB&)6m}1miO2IzL3a5JIcNd( zh2W?@mOLYo7S6M(8Fqc5y|{DTb#M*UARG|+U3dd>kzVzM101%jR}RjwU>QYVS~tqG z2rGM5wPLC!q(5>FDYt%m1Ij7uE#TfmwYB%k32Da9^REZ-Wb-p1;H$?+- zFLgdbE_k930K7EmGSII#@k?U;tc2N&xBvcMKg~)V-&{avl;M{{Vfw*1f{N)Y6P3c= z16k~cRwpp~5%mh9ORlK_?l*mr-GJOl))}L&h?BB)iP?(T3RxrSvrd^*Z{tgOEj0US zc^X%EznC>=4K4ouw$PXE%6_@;El=<7hrI;FU?ViLuyT781*!B&L#aO2eL(y`{ahmo zw3Tw46--fI9aX{^E8WG@B~6;G-l`UILr_0nnOytqjh<4}s{_paE#&~hgn*jhuC-EP zJ41cB0zwk0sHnB?`Xqv!Xvv8+AhBr$T)wDW9Bp_uTeYEmB2n!F20-=WcL4~&_pc!L z0(cvq(;`$9R~pt(ah@E(E4qYb0isns4WfO;2c;227p8eM#Py$LzoGOio`4BPx4V@Z z)mu+;NH6F(do?%)9(NL%Z`z9BqAuRs!-}Nhz95K!&q4Xjy)(9@zSMqkvAi);xVsm? z^*bFx^w@S^rH>j>6c;n2+A6z$@h~GPrim+O9i%^r&7Nb^T^(Clu$TKPCg` z3?qpxPEL?`-~6UhJ$_a1AADtNHJXLvKG-3MP(P@RfHv*}`FWPG;&3 zC)v-*{Q3J1=oqx*`DYt+TqX@a9Zi(snZ$3Uc8`xTJ7#({n|hq3WIVGzG~ zpKRm4vP4qq8xX%#_hUdo!ch^$y0Kl=UsS(HN(@{GBp;akl1StF;{(A5R3txtB2f0L z;<&FY)k27n*2naOhMdHY2>FYwXw-45@oS*Ew9yX`)t7UM<}6nAB9F2nRMg#bCL)#r z#8*U-^oLgniEc>jP5$k=`mO%*$Mn@g!h!#N-A!AX#Z80Eny^k@zm?=HtLvP#MAxj0 zP&ZFHuGXpq3yehf$O9qN8ChrgBl?3Zcu21zCCg_n7Le_l(sUrr-p6F(%swr=aOWSw zG~(R-ozM806#_&}{J%a1dD5gLh%(xUF_2b^wYTnhgtq?Ph%07=|8rg#Y)(fm)%ecH z_Y1i+0N7aB322CK-tTx|;9p9N`xb6V1?Jqp!--bt5gM^|Hdnyq{0kawAiW|!_?VJ9 zjrb;`CyJ5Mpo3b8B{(xnycN&_Rc}zopp*|-H?TY(WH??fm$k#1L$&$+a#XKKlpd{Z z^5VjaM19dd$)%e_`)j(t?2~Ja8A`NxJV5;Nz`P;J69DV%cWn%DSSdi|8#g%gU9uM@ zLnd(mOX2tu_^*yId}tEJ?+^Dq;Ic!oTi**5Vf*wPO-sdb2*oM5f^{kVP@3?a0(SKk zDS?DQV50nK>NRJzjtNq6Fxcha^OC(T3FTD>=F8izxoE&-G*f=mQ9h@{tA~#+d=a8( z8o_r9Wv(QO==zBZ3;a%x-d&@d&GuXqHUwqtL~^(>RfVy+P`O~JT$o&#x#kzgp4ark zl#;2AcY91h!u`6nAK=bU2EL}W_<8nLvNt_N`Q{K{5A8gRSUaa=>O(+d&IhlYZw6$` zMTrJh+A)QhGRZC&`{T0HE~*U30~F+H>vA>xvyAqCGOG@#19e0xxwD|=yS23lgH%~| z5)o%1y<6FRU;hM~TO!+t(bEX3F=K1p!3BQ>$S0F~#m^1U)DADjzr$v8y$l;+QdO?D zqs=$s8^rbogtW-a2v3c$j}1*cAx)6Ft%*X2Ej$_+MDt^2iitpn85w!iBt-qiBiEixvc| zbv-oE4nj-$+=v{^yB;C~;i&uY5BuM04Q%gKYy=`oMT%L*AUcT*Ga9U}9xEncQcsrg zLuzsY68J-YTps+r$EXc5Bd`rSk=|q6i}uh#36-rC2xe?t@X4awICRMq@2iDDuJo1W zHKK_kq1Mm@Ds)~SUK}1Pa)o&t0EtqvUgbjWerRiX?;(!b=HZxcg8td;YEH?Z%C@Tj zPx0ZiBYrs52+#iA2|yZ7E!8v3P}Fl$U`_FI2DsR<1ZTK-Cht6A5&uO61U*R2hIm&x z3&P$sH7b^Y^K-hIPhy{?-F|SVGW_%Bkaq>#_FjA&`&i*IsKf8Bdk6;1Xn^hN}SmWmYu+d;b0=ta9a6BNlB+x(9ne<^DAglVM*d zRPUYJn*-&f$??Hr%bYB7GfAw7&AJX`kT5wP{67)gGP#UB# z;H(4+UdB`aetp_n7M6H1?9&1bus#`w1l4xLMp388W32Ho{Bfv#n91*jmvtj`>IhtC zqQkwim^aC##sH>oy1z(-{-vB1L}2VyD~7xGKmAqK5nSiGti4rwkTEfSAG!0iKCKP& zjLFRbVi@L26fL_~eGEJEML`2+zoWf)4dT&S?jnCtuGWdO7@Hs}QFQx}qhw-tm=K6b zDDm(9xCnXTJ&g|m(^OP=xH=_XaWo8iVN5Gax%bHlkXoYg5Giby`J|vzVxkiq#c|QY@|!9wSOm3?z->QRL%qRlsu(#hF1@SfVPl zSNcjV`Oz!2@lZH%H@p({bo*aXRVi7xQ2hC{+i@x5 zkj{zZr3Ef?)l-`0<=AIyI=AYbdV;Ed#q*p+%5j{`#S|QJuTkDpUV(k&s{toug8WQk zkE)M!xZ(pnaHQJyZ+4!>i9(2$%=63u_;{u7vM45dYPx(cU~F(Z-5GxTWI#ZO7V&fg`iuB!_O7_E zdd-izK~reu-`gMdKLJ?7fl!H#W&t}yq{x)IhK^h0EG(j5g_*SVm0<(Z9!K6!YNroDMKHJ5 za#K@q&UO1ZP^5y8E6OKg5P{Q)5b_Sp74CqhV4hEa&hJO1CBy9sVxPj8g?Wwx46fi$ z2<`w2CF$Y?Ne8t3lwLhZw3vGhA@K8qBWCUBO*VjK+>{V>u5qAJxQWFRU)fw^b>^(T zYET*3-$D!|^IEW>ITeJTp^w}Oy6k+1OoPk~C`wE>^l;t7b*CVwPiQRVq8buV6%Yra z!(h8;DsNxa1yn*?bxzkg62+Iv&Oy!H6h4V2UUy~EH!{zwYxs@1`3@ZRAGZJSRC!SG zU3a^S=39&Zz-{)L+Gz`wwI!M7lNz3#2g)@6C_3bi7LEL(R;~ul>A%lNK7B(m`M12+ z;{B~}M5>Z(u*arp^W=(ox{Vz+c!t24!}O>#YRH6;EV!bc8j( zJ)Xb0ZTNCxhd z>n;6k@mb~N)%BNu4X05md87L(qx%tgyStZ{>`SNqK?}Vd6;qw@r;%ONhpi)r?MGp+ zApS+QDa@j%J&u{!6O1Y`%csZT9Ks}PK!@y7KN9@DJb+HF65 zAW<*5{cQg8^rG04RVEeUT`%|F+e?Guy*XNIR#BLrYS#v#^#4qU0n;|uAd(noqyj|irE=u|? zg$e7*$vJU5&J%QK$@i(NzpvO$=x-HRE-r=mR?A85>^50NrF8D@2qel&cs0lA0M`c+bhesrZ!t zdD9E3xaoUm^AA3qDzC%yz0{3zwHJs?f9r0Mdz2Z36R!{Lu)wyF;wxxPgjfwrJfVZ0 zvKZC>$Vmc+&e|YueNV@YRh=jjURQ|TBYzHimM%?kP|oo5WI)rPH%2MxIek;M-&V0E(Es!C|nW(j>vh&DJ|zFQd+ZwXzb&|MSWTbw#x0BmZf1%r2i zTRU-FD*f}Gb)WV&`|bsP+AH_tOhDYc+GA0=_ggi|U_?q#WXJ63!Kc0d#9ss(H7}N9 z>8VE!?%Dv_ts=J6h!;676qzx_Zk{BV)u^s&NUAG*-S@gQ0+$eO{FCxzcT0Y+>eU;( z%bwbFP$Z=6vu+uUEVB`<5rx^B0fxU}oq45Vi#tzP40p$_!V9O^U?NpgJ4XXBGmm5i zm6c&SVX`=q99TzD6btaFGOGx=?Wjl_?KXegx4D?%TKR478nveh4ZuH&{RV)kJyj#@ zU4z(v2R`P|8J~HtU!R6%CL~Mq?ltI}b(N)&O>&e^VZy}))jJ}x4lFeO)h_h6h=0u! zm2XuPJ=*VqKC| zBOY=7=RLygr`ICi91njI^!3B@5o#tz%YRS7;@f5?Pl3KQiRtLmuvkT;NoDanbcfIN zb|gl{MwIy_^)PYod8$b|oGX#|FOWpbZsVX|fRm|DQ-!=$yE2%}t@ejI8>XJ7)X`}iZ|bN1yFhVuyQ{MnS6CHA!Aw4;gRs3LdLNZmx4#>|24`HhsQ1w*fcyH4jf- zhyp$C=i*E-^h%o1d%16@If%oU6@OPWBHwmY{;o4}zt_`9IH4-PvILfOKpMt8ZA~Io zCZ>C;r*j~TzGctKo(en&Q*`(JJUDC^Ioz<)3L`X1a{1}j86tdjCN$A zaSabV&Xp%3@>la^tDoabk<-m1)R~2#;pcsS?G1g2wW>Z8-^cTXO(zjA3K3NZgo6@8! zFOQ?K7uBHh%>nE6Z%Pm;nxIJG^>fsg^ui`uk^Ks?VS^wQ;sr=&_B_Qkw5D}wG?>|V zUqjq%aFeaNZ&8D82Es;aW)mdKrJt2RA>*-`*ro0IlyzgDSEzIPWIDD4*qg&;@b!j) zFW#=`kUvrTbt=*Dgvc;R|FvfXuL4x5yiUo69O;O?_u{VUlUJeqjcrhyvDP7ooA>! zZ;)EAAlEYXzs-zt+3q96J!-T8L=htnSWj{!ogbLJnNs1$<99LF&huWZxHsA|zyVLr z7g*NKqHe;Z1CfTH83|_du8~wpsZ=U-uE64$dENDY3w!R!nhF?M`PQYAEL!d=?P~0C zoQNIz0Edq++;|18vVurcs(p{;Lk&aqJLb6#o-F_FgY5Yn8@CU_QL&n!`*K}xoOr>g zN-s0{8i*dQDGJ%fe$<}3rm3#BKwa2AJNTG1Tj{dfvFUT!XcrM8iH3IB0n&K;1jCk< zA^Cc`&~~7Z&iy}yp(m8FE0*t8P{Uso<>K8mJJ@R8HvW{;-f5Wx-y_o`@X0H^)^6Y_ z`rVIs9{@n}?n5mN)9)}^&PNf{0kBodA$DQ`W5a^n2QMn(>o`Wj376_dfx#wZ4nr{q zSd{b4YN8k`gu zZ7b)S{@t_7+jp(2=_!gVk$A@?@zz|!J%}M7>pW*kZ>T>#zqi~{9>d2t)HZXPO}4ru zWB@YiW%+{=eIm!PS0XCF9QqL;sxewKpac?D?1k^;IuSW{TTA?ig4r&P2N?Y)yYjdu z&7Q*>ejpIo4DDNXzGMi}b@o#6i+i;VzH6f0iCm%ZzRocRA}MXk`Ti00x(tyV zw1PBx%i9R{3u}o{*|4Qd`E*wt@K@%!R*if`76ouK;Kec6rYFz?AhIIXijMke9SLk4 zk(;;1lZxdF&yZFH@&hRWJ~_^ zMsZGA6pNhU8ept_;FJOtA|QMKT-d7lb)q1IdsK7r%YsQ5?Dux`^5|eeLtqHLT8xwN|BusvJYLuPK>eRV-c?fp-%Y0r78T0RF2fpJIe=D(D zx9Sm8uZC9-l4^3_3;=%w+M~^~B>kvUD;Hz-Ifemc5HQ4sgz0#(y1~`!$kvBN*??0u zdY7nG+aH2?AF??qjJBn3RXd3%5b0%Xxc8k$M7l|3Iw;V=8OKYWz8-`x2QD7DJ1aUx z=Jri)7+i^i7ei}e(xnge{J}s03#l1T5JRS$ zXme_wnf_jkp{KSomncIZ&}BMBv9jZ;))cmXWM9_DEflp_xa6V#I*}{M0i+g(m{KGe z4Te=@|9qG9tNS%;pjp!voMl0wplKwEitn2e!L)_2>cRar7fNx5M&3FrR`gBxCO?@$ z%?9F{m+m#S%4;H{@DER=h_lI#$W2kw9U~m-(?El3|Jtvmh1j0fnKstu*NaaD6snDL zJ>i9RW0++su1Mo^y|MR*06|6hFd5T!p2&L_GBXlSz8Ud%_rDn*&EtSgjubSBM$;Iy zhpOC6JXLshe%`az7!%UfbYCAmkhV8hI!t0%0j4Mo$|5UCREUtky2|wWA9_L&0l%c^u1RVsJb<{U(x3hHF{~ zR#6Pj11(v@e1MUq#igVRg9-`887FgsI7r%DI)-z0L>6J=-I#z<92%>`mPZuiVrkfa zs=!|`2B{`~AGM`elzK-Cy;p!^@**DnKq6Cn>W{X2RLHoeG-*jncrJPDTGZ%(-XAg* zV&`TiBX)Ze9zMo@10V&WO<<;avO8vY&qz%ub*(}afIE~lwvgJF1i__|11{vY2M_an zRjOfJAJD>!%k9BR$bBU^GahnF1Cn&O615e_5Yg*Y*T1t^%@R(4COUXWu~kR>6OPp< zH9>k!K@P%p-1c8acLFclA%Ux3A#LKonx4iPhRdOn>a(Vg&Z!Ts_%BFU@}A^NvgAwh zF-ciDB@smo6i1L+7n)g{4M7e*bU2AK2Q)4F^#1~dtsD%jr1IQ#K4UpJS=$+%r&X${z`VxD$81?e&xqk?0!ZpuCOZAA^>~`KV;RFk zna7nAd|Jc9Pr+R^xegJ~w}_4-%tefMLuDgjZy&+#SR5lP4UKF&eQ7 zj^2YsqZrm{BO!!4Pa4r1Y+sCKs4tXtdl~0O3?T$JKhSX=CE91HxlZaBZ_+6&izN@I z+cJ=S9i#Y@)rB2J;Z?)`81S7(4M1uS2-OAU-HPB_B#@oddorI$^mS8KPv)cMsYZ1E z2XZ#edlo4`$j^urMG-}jT+y5n8SmhP6Zk@@{t5?<x7m%GE`YIg(3nH|Ej-F?acDu}qWD(YWJz;@*l*D-u zpS%B$L_*L$crG4W^;5Q$pETlFrH3Vt>RbZ){B|Sq(ju={id*tsrNg}`KZuUCcqSPSImzygc|CJ3@#zF)%9#+x9sB|(7&DWKJ)sa#hE>}r9&{^nx+%WcDU<%;~6?ej_l& zGq?}-%h~rQBU8c36q`(L@&y;Et(Ve_-lLjtsC92~pt>je9f)ho$F=*Asb8ZLVJ1w02!YbOBq+}$t1E@v(h4w7xtrzs|v~W0w zSJTcHJLK-zco>7iu)k7FXFls_j4Xyw9-H^VgK?x$=JH0&QwQ?vBzA*JeTL$F!p$`G zlI40+b&1DzBa7Sp_|8=yk|W@$v1^0qi*~gz=Yw~eCp@#BwZ1RD5`q9yz1S)n|vn~h=NOS7;R8;?z9t5bn)>nb*QqeW*usO zM0?HK532Y+kYzj2<`E?O)rifA1YXj7R%owCtJ8u9o}Rj>j5KR!Rw7HvBKvzVjzQWL zIG!myZ=>T7ZD*R09#b2GZo_ol1tgX{>X^Ax$sC4!$$DKlTekLC{Q`XPK|k~pCuO!i zS9o@B*=E@8@j}*=$cBKvsA;nu^x#ei#p^1)DH6dQyE0#Rl;hqZmO=2BgtLvK_scd# zzcCI_ab+&CfJWwIVU_STcY&>and=5uVwdXfK>L4)=;PBUi0_waE-BixfdNHCcV@fU zxd1Y{C35Rz7oB}tJLNhZN9t?3ZueX6WkDGD>ywwZ%;&-fYLG=zHexpP!ESn1wi@M# zxLUOPlrvsr^y)_oS^NA^jeY#kTCM%4Jz3a`^Xr4C_$%Q9&2zI)ex{wIOQ^oJq{*aO zJnx)eRovmJYt_IUQNM8Vdp?1Cd$~sN6tb}7!_K=UM2mHcl-Gb(YkErxxl#L&MTqi7 zM1>6Ujod~Urix?LrRE^0L0)5Y6S@j?W%hVdvv^XkO2qP=Ar08}pjbAsICqGsExWRn z?dXg7x(kNBD*!a(ERJKa>>rn-?Rzh`Jk@rD5w-+7)J2jd_-TZc%)a*I9IBxvf^IkA-d5~S+` zYHC1lZjCIIUVlw7Fy5;%HqNsn4Xs}B$7Z|8o8Z-`9qWg3s9lrMCW#AAiUcN$yeZ z?omFrXesL1_r8OFm1(d4URUIG0dciknLTi4N^A#8F|||%Z2#W0O++zn%?>obUr2TJ zT`B4=G)A&XZSLp0r`YoLfpW~o$Epo%zREy8ropBjI|c7@GfFCU-n1U=3!T7RkC2O z_WuV)IVk=gYMi8))<6JZU`&9ENcW7TFt$fwxgBN zpd|!`Pbl3!7P(u$8Zdd|$TYrrWg#5KIG5I&_-tFP*K0t1BL0H9`BhePsaB!j3%b1A zlTl$k#&;Q8S-Ug`hMlK|viEO&nmdJJqL0j{1^^Oox)(@girFtw8(01QcoXYcK^%qG zUrA&M|E7pvNAM4za!*G#;NPcseW;ROgL91j7oo;vL7j8rJtBvirRwG2)4Y6#>$S47 z=q_ngNSFoqdTmqg_CwHK^;R|3!zB`FEJeeU6Sk80+(N1nR^?gZlP`-F z>NRht`hO7A?RIS>6^iFFFm^}bXK2I8=doDr0YCE4WE(4R#Mi)xzgdWFpj5l+6~#cE zX9ihPRMJ+54Z3q+)q1Zps53~7FrbiqfY&$UHtU{Wy)JF))*J672j`4)69ivQyrKwL zhQ2T^Rw@@#EU)86e(~b&33G{Z{26me?_m&(k|&E~f-Aiap?p`GvF~%f7|d*1yA7N% zxU-5HNqoePU(%8`YMQ(Teusmo@;2ql{ewoL3?V4)u_tyZWO1Vw)?bCP9Iy8i=wZ-vK zqMz@qqoRu0=qdzNm^xvk^KqA2KF{}V_IiKsQ*W?6KI1Z?t**9UnaLlNpz8D_O!zlla!2_`;`+Mk%Fki z3ri2-l9MNs_b2Vq_&(es?or>%!5VV7v9R%EIdnwlALx{?CL}2HRB1-?Qu7eKIajcR zif?)K4$~uo>Z#cYkrdOv^HY{P~uQ<>iW4&=*P-MQy6Il z*dLWIFhe@=n`772h{C{<9ivDz;*5N66YT@2DrnFKZOvkmv0U$r$xL-*&pFx+J9-wm z{TdZ*vPCg>!p%p~O}NWMWo*l6%X?C+dh^>Y?DbrxYh|}fX!K78CVdNb5Hzf^gO-}Z zD3PHB+CD|z*n-uK^Hfma^7+e&>5)O|+J9T0zm?x5zE24)!iiUM9S+#4yLwUHJl+Aa3m z{fbUJ`EORXR2m+9f8(i8<)@>mF^jZT*n*W$>$5v0fd#Vf!D~4olZ*%9%h4(7kdyYV zkdwtVJbo3t#6Cw-_%5v~TME3O|4%GLBD*>*Gs%kMUf>_?UgqrE)d=0GbfZ0uv$#Gg zWYseVq_oy%{Jd7@^TT*)n3EcnT+&0Q*t$udC(1Q1=e=n{qr=`FlhK*KU0`CS=;cte zKXFp@<4`=`-;nRlVOLlm0j}wnFE5b)j&En=sRsY`dYcS2=xgckpz-S)qroIwmnkU} zGJl`P?~L&(6E9NPzh;P?9)4!_7v*U>%}m6AcU6UjCnm_UDco}p27R#VgW#<_zbVuV z%yn;J#4~&8ksV>^Zd8J+1#K#18PHVwJ`53N;14;=RlNeTEz6K#3?p2OxO9#=aM@JN zq={@X|7MHx*_q_1c_=r_4EuFypO;^N0Bvx;9o4M7%Th)p58WGKCJPD5ZSW;lZBJ-%@?|S^mmRl%1fNBK^DBkg zrtot4J&L70eSgQr%K-vqmX4paJqolj&{i!9RF2o0FGfzblqg*D7N`Ci{Z`d=bT%+5 z`sYI=)eQIqV3hRQ6w+9mTG_Mjku)`5eYQtFx<@`E!Rqo23!R0tn(`i-?@yFyPu^6VzTMkk^KTQKjNIESh*dKx7B;P!t^VD)I ztp7Ms;3CPL;I89^qNoA#@o$^i_L$MRyKK8&&PK)I{`Y4@Y(PdJR*UcMegf-IrIK z;Gi#z1JMmJrw*#s(G73ePotlHuNr*e6MLIf8P4Ya-NY+DiqArdsRB#dOfn?>ei6&s z?o)`O&8`znPsi&qdRSmTWdo>xZ!%Jxofv4Q#LYazWz z(SD8SZqb#l-p(JNs3+p@fv^k%bsP_BQ^QI6{?O6@`|sc2c?2LY=L&6xi@&T{my+B#ImBe+5)}I_xVpyN#tjv(|Z@v-ke)?{*e&g&pCY&$?nqt_y16LT~g* z9pOfU3M;Y>ar*#s&%A&412~S7q$$c8N|!3;o|XhRd-H;olP3w( zI?-NZegofLIo36KYq=_`dH+w?h;@n+w6*BV$*Af0w!%-@q4 z3KfJ@H;Es!@K!MF;19DD=Y;@1+C&sDKJ2vGv0e*>Bpok_Fh_PZ|FT_TI!agK3)=6r z*l|5Q09*am+K`m=b^UY$SkEdB$v0D8 z?O0j(wJLJ_W_U=Nm0aGk#r{Y0(-~HOkJlqBT?u78+z-oOwrn9M9a>tju z0|0F^4t?abi-5d>Fp~@OV0e)%%pql*%?n+n3*ybREa=KzNh38Ob&u|6P0DV2g{@>L zsllrH5go&+p437zsb{zM@vSx<|Fy?=oe&x%_(cH0?&xRvtgx5A>Hy}|4&gN<&kwaR zt!{Lqdt3q4OwNWRt(s<7Qv^8X8Ns2!*LuL)Rwk)kW@LX&Klm`{XeWSriy%pPiQ|&q z(9DR#8=jI{SdMSvAO@tvvbo|>)|uVmReqJuyyt|-u3(=*&pEN;=Z{Vb0-Os@&m^}b z5_bFxpgdAQO9e_$0s7@A0XE%Pd`A94(-rl|saqQR>hTNkjLaoF+w382ZI%jgMAmHn z2C|2$_Z0sb0W@h1C1t;H@$gh$6LI^nmcz!GYFy2^G~Eey1l2i)&e)t~+$dA5^K;L= zZz`WP@=LPmG`&EAqE@7a+0|z`uWXmO052#zhKdD&uU_( zrYr8muzH$BfgAB2>BHa2?ENd=$P^bRQed;33|#pn-Two5S|c|FdHUhwkS=%8a&D;q zB8hX=bwT4B{FH_|IQ9+9(d#FW|#FP!h&`Lery}AtFO?zp0nq4uZ^_@_?KYKNf zcWln~KPu?QZq)=7){U&!6-qUXoMI~P{B5b5W@0IvUQa}F}@YHxi24A zex6MIlm#6q-JI~=Q6H9Z$P?8eo*>7Ou>d^4KSx68m~il;^PkCo2-SC5DDy1utt`@f zXl1_rQ$zn%b)Csv%G3NPIg$`=P&5G!wS(#Zz`0nO9ad!I3~JjIe|ec(S?ilV^WFMP zBmD&|{eiM3T3_ra{S&sT`!;I&_^#4*uet9m`)BHB{ZxH!<^6p07LZd}l&WXGpDh`OKZd=D!YS#s^B4F*m(p8|(w-=9*J##t2X(Cy7NS#aM_1=LZL`sc-!y>g|)g<6V7{IU7(`>vf3>9RjO4=>UA5*-G{%i`>g$^MSTyDc3`_1IPh) zkTS6)CGX(^8^|8AVD}Dp?Ta^823;NoUbZ>9ng!R0> zH=_{AYc4*D3Y^8IyWl^ZxF=vReJDk}*s*YsoU*5q15EZ7#*E26Xv&VTff#F|-iKQ) zxECQTvEG{Moe1IKN*JgWxlpFh#*_FvJsA)UP|X4AW1eGBEvm$A(AP3zhOyaDodp$G zDn$qXK_s+UOi<{+3Dzj>W5#PmJVn9{7Rm_EhjiT2PFmgQ4Pn^f>=9C%VfIgfp8IzR zePn`(i5}D-j9?y;iR+)$P#Xv4^E{wvkcu=1dSwV3G)%5PN?J7EroU3e_&g0-!RYua zvS=kAwdkfs%t8uYce6VPpZ|lU-6&<21<8|68WX@``})^()*1nUhk!%B_DuZH$CQ8CKmJ4)Z+zJ z`59EagEscV#8inRbC|vq!9OuR;`Fah`A(&e_;__+4Mhw5UHYIYs?&?DDGC+Clnl^j zTT0MGt-)JU*qWM91oIC;=3oZtQhi>D%tN<~)vKPb#MXjbFMIEpUTbOWrF+;G#>x$_`XOY6&M@2BUo@+o*~ zyag=%wdKUht)0AMqGm(G^k9wD%A_FTG#% z@b&b5p16WjSmP^nR<(M(P33IIkY4E@TNwFCgW;=SuaDl*sdDnq?{5})9rm_?^eZFQ z-*Cn!&dDtX1m)uHA=j}H!#$$WAmDVRUHHAo`M@Pp53TETywoEw=$lftJXNO9mgu7x zHRUT5VqIp@@pCWLTYr1db2{9RPp~eXOn+5Y;rAohFOf}-#8sUq-#m&M6^BhE^%tDZ z0~1#nA@w4Lv0)McY3u4lz*SlZwAm`NO4Y~%;#R(%4thtm&rtvFS(R{T#{OF3gC2ix=`jn9 zMlO$Nv>Fl4N_0c5G%YzVVVBP+!Enad@4X>R>SpPY75cCG`YyUYWso+tTJLj(;X$?6 z@4=j8{c5eY;t56lpFfL0G1*0tpNZ0_nl(Fh6w4L0IQ?CY*0D+hTI3TxHmNy*!@--b z1H`!jyIfNESJ{RGp`L>40t2hLfGeXfZ-(86g$HhZ1ij=FUGiQ1Ig+hjOgHc2MzBaz z#E_-0K{ep%^YE@3a@V%*dqKlYF~Q#b8GAJLp4MM%8*|e5A^qttvXwtLWxRiIlH3>J z^uAZS8nD*U63;EnRgR#p2=7)6?pD=L#ph5yK_}x1;|DGo3rI!}V6t;n6L(X>ZliY0 z$V~{(@__#zE}rQDUoWm=EX;$Lvv?HdL(Ij~H{j_N+p*bPwcE@U%2Q9;tRP|fg7GS^ z!*{JeX^p!{-7R@d<^YGFGXA?Y?nWZFr^koXH*E=Ssttu}DhqEJlK@)(Q3U6_Poz|| zGKfP1=JsNtyD>)pXKPWQ`bkmI8+FnY291~wp4+60Xdln&xFD+qO{Y+k6Y1<_n30u@ zZ^-1S{u%1imV_h*G`IsU`a zn_RfF&xZ<)?T8qC-UYp+Kb`64(XfkCN-D3v%C|Y>IOYtytFVdLR!Dlg{PX&aHhUD5 zuinU5i9$J6^c5sp~xPcm2yj=TL8R`TT}?2`BBX5odK0Iuj< z3-{mA)(%IT5=-3%3xE2A?ZpOfIJ4{G?g}3EG%!sW^yzra`KOS|fa#H! zR#l&ynM&-&x4@TggaSw_BCMV>!{;ybk`+200a`k>upnH& z$PHmpk{bzXXJS-O*UsqUL&pm1BYQyG);=1)v}lfl%>@56-s?R~v(DY%)r!oAH9XnE zRRf$H5m3P$jY25A<|S;5JsFWCMafd_Uu(%6&w-w7<<_LZKQC^+16XL6#RG@E-iTrB zp*zaDbQ7e)2|HA9v6>O2<@zz%Oz5E3{R(OcPwAB;+YbfPfpG%}MYS&usHUMYrBT^t zRsV>`^}X5xqp;jjbzNJly-NHmQ|3MJ3dqez9EkfcsgZ;Ilhtt0RFMJfN)ZBVts4I{K)VV$i}!{N%n>O_h)=#hZ9tk!sT@Hu+R6^5JHy#3l0!m0 zXhfHI`$+8e^O!|^U+2H0e;J}Woi(pi(^+n4i1pi~Uf-WtFS3vyB@)d8KaF*ovaySlb{M?Y#k%L50ms)W&MKkgs&FU@40n(WTO9gY!jF>TRbG@9xuRiCpvF7AgGSNodI4;jUTCuu{&A>8E zc{9(@=KNCkI7{l&CsfKI2%-y^EU%PGtZ(>>>el@D?_s>(L<^l@so7!fTpC;E`t43# zWNTAX#u|SFbFH6c?TzM)g}u$-lEVF_2VVW5_!{1E0{G`339fT`UjKH(rn;NNrFNGH zhWCnVN}VNL>K=d2$IZ;*u=^~gZVh+_lh(+T&J(YX7!1PFS}v#3pZn_(t%vlSGgJ6l zlR7%(4sbq=-TWAexqE*@O78MzNZBlZBO&St)2~McBtPP}!)9+;4QlA} z6p0AwitFhT?@x-qPAU0z@92P2j|#i=M@5MR$TE-*Js=!*9X8NbP2AQ#bUjLLHC#ug zmnT>eJ*gBKgdCP6`w|<*X*Cm0j5v?@U}CLh00&=1*1}IW^<+Hc>U(^^+FqHo@b{xX zRghPoTl#YepKVZE0M4rXdxNOD0+Y0o%GnnrykztlS|P1LZP7?3Z9XS);UUI*I2C*? z1iSsw>x@5O(y+6Ig02^Fcu!YPbB5fys?3|F0){3EkMbPA7idUG1?+6A`XL2>haM2r zziMjdv=0KwC$d^e@P7axxXGFjKtewAn!qSnfsxGc30&*J8t_L`&ITgLReBq1y}rYC zUu1e!!_e=x<(o|h|I(@eODaxhc|jWEURd%&<=HnEt;*8J0>3`bQa|ybRZ@8OQf77!Dp7fbyRjbrZxgTjPo*MxS!~JLr@d&~!j9dj@LT#%@0Cnv?ht z`Oi|ZJ>#MBif6U?H&DIXRwZ0+D>B@MI23jP+QTr{e?x>R{~$VJT?q5Jd+zbQS=|j* zBG&SAPowtZpYKMOh69n`9>13f4v^QKJit_AbJaecaPb=OiZ-+8R!Is9dVSO6h!=~! z63Cqn%!QQO`c{xB>(jc9i@O$KSr}l_#)a)LJX1Jg$>(UBJ zv&u@LCQH{>CczJ1aDC0>?WaxI4PC6h3Sm0|>$$DIrS#u>>NNe7=1bxWvJLgziGdd# zCl4yshuQ#)3KS9Nd_%`3eacql%JDc)Rp+nhykjxriI6FgQ6d-s<3 zH0<&%sJ`ap@_p~!^vHRbQ+H!SO-;^vFv*{_q^E`vJ{-bHG3Eqk?__OtsC?6Q4?9Z! zV2LY7AA~M{YPo?(1K!z-+2RyGnLp4rPpA2pd&e7$Ok#1t=xS5E9z5i{>(j9fXp0uG zfG5a~kg_=u7)@$vqWW8Eyu*m8n(Dbk(d=j*;NdieW%9hAFvO@qLu2MJ>q&O=xoQBe zfZNRfTJ9ZwoS6>6ot7Z7x2&~5b!SGHwp#9>?kRA0@H}J3f z0;erUf+Qs>C1(PLxcALf7?W;f2v~op>WgCeJ6eq09V(D8g_ZX=Zv|rru$^)GS^@|d zR3h zJ+b!ye+vs|;+%EODuA?7eI>zHlOPrXt7_vV^q9&IW9opn^fI6&%R}Zv*U{-q6&v91 z4=N!A$bt~E)Xz`>xc6g=Y-BNA(GFZ{aGn%PDQCcKs$A|yjdJlaBV{s>8^Pq%~zt-L^11uTrRN}8JY%zHbW4D8}&!3C~jcwY>ddlQh9*^0|06-Zusjx=E z99-~OikHM^S(%O)z_s<2DasNngl+lDUDo6y%o515?TyI#7{b)-wzs^f#xZ!NgbIp=|&rtC*~R{!Jlm8i^k~Z=-V{SD;Q0wl^=Vu6F#YP6`mz_0~ z-I1^Y=63}LqoX==6+p8=B^{i^!%_L5mhEn_HG_mDyfN1ky}E&NGd5#EhTDOtNL1jR zrCsh_fOOr?TfkR6t9{TR{b7@u!;$rw$}8fMdN~B&mK5nY+X^i2IYMl#mk0xGd5gD| zxgkR9=y2#o2^~3Ygo`eXI;}uLUYuT2W09E2`Z+jUz=#2u3 zhW!TyQ6yHsZ@{RV{C6BLkFQlzNGig(2d7Y3hrBS9IV>y(bm-4|sboOq0>U88r^+3zL z3-8HeUAk`Sxs~G&ZTHQu!L_Id1XmO|V~L&v(pypiz&)w8M3Wa+)!lpTj3!ATh=?U7cIiYm2{hZlF} zjUFs(DLR5ZX~|SMZ^f}iPbPWYN*IHZdXWZ0b|ck|+plCRi(wjg(5ANTOX6lzPSQdVUh@y>7`fSlP8iFv~vz1;qC4zaD)QqQ1>b zo6!;zD?@%cGEOmS8b29vdxfA9PDII&iI3kt7lm^?))+^QwQmnn*Nw`ou(PbHe-acG zF-Xl<;PH8C^r`-;NOh4~>eu=1j>1IiM;^WG;oH!a4oZGUSULgU1Q`JFct2>7ylm*6 z5K&`H@hqS|da(ka)E$a1!&I3dcu+=&wAH)vnB^$=oiojXVRPVT;hmUuj52F8VuYTi zM@a0^^8pL#t5V=$ET@71Zs9RENP5kL6F|CO_t6#$XdX&u#059R z7YaJ&n!0kDrH}*{f?|}#wrzap7nj^GD1+;ly9z?OX~9P-uLzcrA>S<4kSv8Qr+7h= z?Q5EZ?+M9|?BN$>M}2{Z;ca&R(h18-P8lH9VE`GTvK}*HRJmHc0#;6YOApKOA_Ya5 z7k`$Y{Q(iNPv1hY2efcpMlv@%lP0><8*vmiwGjWp{5M+g>?}OZK1w6Ps9sMDR2*eg z!?(iS6ttkeGVHtLs}f-{(6X3~7hH*W2?|J)Do{j(c|Wy71xxozAS_%y#RL6HVY%2# zgA}C#5`Rw;-6fVUw{WAfF*?T)do-TAXoNXJ;9n{cT-x1?lT@QE>soi4T6e#tEX+8I zVDmChHf)1fk~xg~U_$W7Dav125OU^ScpIMeYSO0q51nOex$*hVq2kntgKB;bVdvPp zkq*W`@*@Ls4HRT@jn(_h^D9Sf5S{%}l9!Hl0r+AJbCRW<3To~0A8oH)bvJjjXpI^P z07f~~NfPYqhd*Tpe?)d~6WxS|N4S!8ysqPCDo+*J@22voKW@_A%s?8f_^pSIB63%Z z)mU<`JqC44`~oLEjpU;uJBh|uRTV=y!_2H%C0kCer#Gu1Z3BMHD7fXy9995JDK0qx zXOEt_XI>=qkNQH*!jw2z^VKCP?^n@2q|H@v8(gNrM1sB2u<{XbtniW~s2Ia@2EInl zT{7%N=8kz|PZtzzF%2Jj+_CrCekdGWj%7N--@j@&#j|jF*aVjB4$Q-+48+P2T$+Xn zg0H3kuc@%yGfFFwDZgKa`+71or=iN~ei5#b4z#o*i6tAK2W&D5&g**DJ0D-JMu=Xev})F3eJB~aYh7R5SZ z7WmM89i~lii7e=E|7YJa>juV&)*cr$R*z6OKQ&1;o$gp6X~zrtzVxL5F0^Zx=7=k2 zN?`QF2UYZ58h;b?t09?C(wbPy$7`*xL%YVP9N`S`&0}3ZXO}l+MeO7L@PS*5U&p88 zUh4^^kKXT@x-re6kUlVNtx52$DC8Ak020?U+DL4H7xB`cNAD5N1b(mczVF6_15jKo zBYQUSqQ8ER*vx^=&PQWk-}mEE((Ccv5JJTrH4q;ZCv|ksd1k z4N*7M{Ssyn&iii?soRG`Rc$%1T{c9T^O<&Ljxas36U_vF2~qKGUR6-DnK|)jHQcFxs^4GJ-aft!Jm8+wyOKPLJNz^A&VCANIzapt zWPHqQLxH|upD>s5hsO~KKFTH^3J%g+y#WbA9JRd#@msp8FwP;u4|t>ToUsgMb$POBZ42P*f=)3!eYG)KcqS(N_H_Tyro8W_lEgl=c)LI+#OLB2 zGx8NXfNYk|a#UkVm%f6y>8&GpkMEP=e5}$U^c*?-ZvrXq_tlCtXSyK^a_uHzp}HcH zXB>iS?Bh&w+`c2x)mbcTLFRv|l5JKdrG6Y0n3#vvlP&y$r84~b5a~lg30Y7TYQ|eu z2J-GVC{=+I97O{Q;yHhUE>d;=63)oh50nzleP3>--YTTd0yU@R27|@n*%$ZdI$@+h zMl^U0pQnEfh7l2;asw?EpEZN(-m8@14}MB<1B8y@TLa=Jn8?E2CcUTV_F9<{B#B!1 zErsXbc7Qm0O@0q+Z+ppV)QyXUizsK#TUG{nmSl0R#f& z#I+)*P$@S${Lx*KhZ279Up&8@eg)uOdwYH5{n`EaJ|Ih-s|--=d8s+RtXd)1QJg&p z&qv9|Q5>^KV?m90x72W3@KQsBsRDZ3Oz9JGFe+X^Y!m~0Et*>f7c86wI2BsF0@W3Y zxWc3V3dSHE3<6m%-sJC-VS@7}o?@EPw}v1NMe{>2h_-8S`Z#4py4C6eVZ}6FGqUPr zCvaJzD3#_FLBRQZZ3R%M=V~d4xpleqpS2z0LG>eWUEKVhY+|9_J8=A{$0VK`8p8Zm zd~OkZJ>b4TjMdkOkkyix1D~Sr1tDwxA|x^I)$q5So(IjSv%Nc&3tx}K zT|#{TywkAa&D+5clQzb1ptL5wOnQlWt_LPTRvz8$GM%rcn=RB)W@u z+s%-I)9cMlV)NCF7xuRQ#{XE4u-^LzJOOWzN2-1Is8)M5s=4Im&N$;NzGw|RF9;fy zB{T{$-Z%To1Fh$CF`6NMr1J7zKOKJ4V=w2mDLkHUQX4Ok5^|507|9L4mKh3wxohO4 zT@W0MvA=~wN`+4Ch|b$GN%F#Sc8WuHR7EC79IT-qOuG*{Y!pbKT0^r#337OMG}!BC zjZYo$Mb)Mh=9R3l+4G(H<4D>uH78HJy zGeb`%COx_b7nN+fSX)hri?d?ErTuWkC6znm1%j7s|Dz|q;00Ivr#Bx(XfZQNF`#;g zRDb6k$mXF7J+dt;}&I6<^b|Xi4YXia55yPlMBeZ5~z;~nDdhLkZ>*~5?i~k zfFO210eeJ7+`$k~PBq0*V^=ik*t_qHO49N`nxN;TFA`7BZAzwrrK!ItF_6mYctG!? z*%-WWdL3tsCzBmGQMD=$6weOFcjSDYj-33$=K}~SG2jI7@JB79z?az)Z_j#S@W@5q zN?^0h47@&tyd#W|bgnA;SB-imV-cu#`^W+c2#!;j@;0gp-v(wl+ z|At@zF>P-6kh2mTX=`=8>p$FKto4>sX_&I|Ix==C9`jau0wOl0@<$GnOcsg!`0Ve) zt>?awawp#=z~AT%5z3N5i&)@p1PotIxtju)1OQ9s{N{HoZQpP}pk#+Mu?l2n4h397 z&hn#{_a>hxqN#Q|8 zAZl}eYdpKLMU#lUVp1Tb4uY${#hqPcKV8p${Acs`~N(J5^L+ zELmOh7xym=vU%~`zSzlt%Q`8ikh09DEEVAIx;Rm|DYZh3%`7#xCt+o_5+jRfVVxbHUA+(E>BYUa1^`~(;g?MFcyOw-i zj<`=}ul=8zw`2v!spu29^-Xx34{0N7WSP0*sE3fMbEkCaqg4F!V>lW?_>+Y1U8O0h z)3Q;EL1kNFMsk>Yr#4{+ZKy>dd#&YEL{l#Nm#DZ(=71lqPiHe`VhP`M{Z%s%{WsPZ=&?v-M@afU};;9oIHer z^d=KQ%M!hdC^BkrU3SIW)jtb=oIiUS#mBHIOI&fnsB7{|Y6$?E)F6e|I#v{;^66eJ zVlT%Mf^{8SN5wI57csd70x~^pnBldb#3j%7D<622hfavEsFF_e;W=55rWt(qcl9gomQC@1($$dv-^%#n_2i=gKAJ+arZy_L2KS< zT?zAsGULfI8c~^w2%H@&7adzWSl0MCU-GAJIt~%n(W`c2iH)bh&+oc3vlnpr2h&*B zdfVe8b}~;wLsefx$ev!%1WQzoid4KegTgKKzaJ;ncx^=)e<@S{wGW-!wMP?I@>v@F z(m0w5DsN@|wb1Jg8F7scuO{iGF@%svS5^>h*^4_dJ0>(_nPJ7&cU2IC)LVqc|2Z-s zK+83hVx~H~A1L9ohZ5bS3s}+~Ps3*xhK3X;^Lfz6iEZ)>o!9a+g>xiiNBRIfJUlKR zWmBJ*&wcEk*m~LFE_jcGMIH$VOA0)aG87Se@<`;#V=)0?u_wa97K)U||7U@#`^#7M Yf&c#kK9({q+yXpxWo@OZr-<(+?~Z?kpRJUadvT8EVu@D3jr2_ySs;&C<#ZXznh; z4K%k9Vc`C60=oQ%cX{Ql{+obS|KY9vpWMP;grA$+lAG6z&zi@Y$5N0_SnwSmw}l12 zkbsb|fVnjf&%ZT*%&V>c9sNhi|4zf}+yD9i_~-z8#8o5&dH^Cm0unyLzd-;k00Dr2 zgo1zo_`igShK_-NjDq?G5$W}T_jmvRDgqKBG7<_3G7=gNE&u@$=~apbK*z_RBOv6F zBGParrZ=m`jgN$5I+I;>e3!i|nriZ6@T0>LI!sR=D8F>X=JsUT# zu$0E;rB~(Duf~y){-<#OGAbJS>jxoXyo#0Z0f-2QD2T|2XvnVv1MuIr@c}3VbUdh1 zXoU0{X0AjGyg`Ze7wE*&h3_ z+er8TNkHCkmTkrFxM2$0k{B}ElH7lQm7Bk=k2f=-2+MxSYk|E_7tX%}0_U*p0Q6!2 z_e#Z0<_Cdqb*JV%u=P#t+TD8?`jNq_=Vj8mT%=aBZwIl|%MZpC@3Ojm?>NKAeSOF2{>2v|}Xix*9j(SI~_GtRzq!YT^ zVZouW%y4xAl?Hf+s?{kT4pvnEwqj(=dNm zmGkM`!02)KAAsPurAgJ#-PG9gq6w;hfU9s5xc~Q40Ky;KfIySE{c8FeCJ%OiOYs|F z2EB%B>*ZkV2nGx1I8GehCzgG7ZE0V3IJ+qUf>L&UWGm zZMle!+C*a%Y;)H>QdB5mPC!{`D(9UlCi68-yN!FIOD0+zVC6jq6>$vBbbB?ObbbNiR}CW+DlARS2DQKzvtI2XD%t zHc^AYg}B~}wX!a;Nfc&hjI=mw=R#{2226v57AA;DS0)_T#5I`M(Wu|QaK<-h;1?jd z@%VH}`_gMtJA%zOCy&K9XJ|OM$K+dXqQ_hW%%ld(#xq-H$~B7&Bj72<(Q*VUsDqKg zp+Xt2S7fC3W~Et$O#_spo1<^=+equswtBYG_{TV0*=(sbD_tzZbu?e3NUv2nfa|9UX7$r@h%USvzOz`)y!yM!m&HkX?A}<)q5J)&1r5; z52gWGRZbm&m}23W=c2ep1?cGTpd_6gIdmXUJVt#FDd7|-a-JHy?5K0f7W&q`)29uy zCfPg#=58!dhZzs!#%H!f&t|U|{fcD@a-0|+;f50h(*uMZlKEltAMB)0oh-~b9GvS~ zc0Zp5y)$g?V>6LoBBijS7bNLkoOW(`GHGGI&3e3`g$ss!V#dY8r3#9o8%0O=+V(|2 z_=ET7;p9-!x-<{Tw#aAnrK66)?;Lk`#Q&~;$ioG*4G5QuSa*=R6I^RY!{!6*=9?J% zy>#>8DAak=CZIh8v@fRUTB}!jS(u_8Jn6mfm3-X&A#mHe4fx$l>qTK-w(5o>S(Gro z@jIo%Tvm~kw`D?^$&?p=7+Fb*srp2r5 zt*j_I`VCsmkkL*eks8Vfq!7a7aF5HxMX<7FO`;BAF*86IN>6dk1Z=i)m&R5tTDaur;?{m{K;GBl;Q(z&3eE```i&BSXh>A-|fvq zprqQP&?1=A6oI7;oczSjN{So?`@iJXTY+sNiNG|ZeCAv~r$`k|b})gegcdRy5@ zLcc@842}$y5<llM@-Sc`NR5? z-eoXo6_QcK&kfyLh|_j=Y(>yJ`+c_M9=n-kTTFT3)nEJjum8PmX<+)?;|q1K)XnN> zuNlq{eGKo(9g82h1T)3Cg631eQyM124h_bnxAX`*!sApCwz7Q9#I)aK7}E}+JOD$0 zO3=YSz}pduO}!nIVoy1$G$4YX8wB7cd^dce;=;XH(Hv=&t$TX2a>zLcnx-63kss#> zrgsK#R5%#ccq9=5Qm_iaC4w7=c>^>4o{{BtY-fi9jFy|L^U-VBhF(u+SM@?sAFL?~ z6PZjrOn2=K4GFloxP-Sp@y(gM0YzJ??$3@1IAs9JI*##)6cK^ygcaoxnP6ET1RglD z53UBbIT>?q(-7sT_X<({ntR=rS&w*Uv1wyN5gcMI0KkE;n4*o)ezePzoLEj`O1jc) z*P@hH5Ma}Gdy&7+w5N9q2%~G2t1q;P^0e&df+)Mbr6?Nm7p*b%a#hMzNetWimOIug z28ygvAPg;-c?(gp_EE7rVkw<+3sp-;L0MRquFiIqgZ!c><$L@1#O7&2wf7L^j$@E% zkfXomcw%*E?Xj0e^U&QI@wJNH$kV}wL?_(o2^AMny#F_a>CHLNR47FzUkV8wx7CS% zs_%wmSta&cmi%u@$0K1->>NnT*DKZFT_`nXsFXlp7w;wfepp0a89Fn=Ye!AM{!=sr zK`yY(-KckiS#a&cntRKDS{{qQE-I-0X8CWNyiHVXM z3GICyRBi>H#B19heoqtUjKjIUyjLb!;;@caX?fw)`Q0n&1q#bS14_PC+pQ3d5yWpj zU9D{5Ui27Pv6}Qj$ZsBA0cCsn^c5kRXP!V$C!^Csd1MB)gdp5J0hh8$Td)YQOlxoH zC2s!2C9e9cU6e?L+06xnysf29H<~g!_RKYKB3MugrluVX_1($E#U+ZS&rhZU`JM)d znU!RD(}EBG_I!JMF;FF{$1F(l0yw$$V)M6n++@?|%+T;zV=%H;*r;kaX(zIxXIf!Z zgj_Icru2id`!$1<>BWdV>>i@87{8EK(-e0wxdc~J741a>-BR|97=T6aB4)Z#^9of( z^PFJRZLpll`QwI2Pb^o`TYqe`k%3;C^}GJSuXFZSQ?e3Pe?qSDcpO`1RV#lF#R-bo z{(dp3P0Lc$E}!iyr;cc@E5MT*-u_vVWlzREr^07Cpu+d#^Z$WsD*xYG!(VT3%K|=b zk$#s5dayS)QGX0StiJR|`bC?TD=s{wHYLfyl7BDR{6gixH>bj1_XV483E#91Jil$j zsZ-weamu(6m&vSQg@f0j(EjEZy0y}nva0Ij7}u%@Jq@#PW%`wy^EzfBEk zl4=6Zt`aQrq~cE1S2&8PJTVEJkYOf}9dk~La$2k*$-6q=efrsail1GT1*%du@kRYY z>VDxhb&^fJw+~f*PDhPq?@wJJ^ZX~Ca@L)iy&_|oXg|oTB~&W7;#S(IbxusIC>TFC zkGe1F^~Bx_AG&<=INH67w=CY0NKH%rcp$H7tg#zO4uPOW<$62s71OXbw$9{o6-5hs z?OW*@Y30gk3s0I+Cn-@2lK56}Zs?jyp$_`JZ(k1<=WrAZ*=k$}2$)~_tvA4lqlr0% zs=Yk~(<=zmsd!1T?XacBfuO4gN#UcY^)fu`QZL`VL%i(VdR%msAZS z_dPYBAe#4A#2K+U0wLjcCgcV!Y=%?Iw7%-i8Re0sDtep})Zqb>2P3yls}vjgnAhIq ziLC=&2AaQqKwmiE33B~$34fPHVvO7MS7XNOMnn>uRh61@q&jfrTd~@wzeg2*@g;)L z;ma%5J2rm`J9X|J57spYW8u)(;&nM4sRjoYs<0pUep3nT{NORhVH#at?lwU!Bx+00 z(HNbgRUCAvt2(rzM2BCI!eN%^6d_?GP))s1wy1xrRMP;DBxJZ>9^v?$DvPm8+*i!~ zcb7DXT6>`-wBz=uqT%VobckFBw5t9epixu<9!al7EfWNxu*g7{jts#><>^EK%YxCC zozkU?c6~zZ@2}D|3;P6FiP51}ZZ!1-uXBgMP^i!QK~=&^5m{DNArT+{Y^U%a;5_{1 zxw+{Z^lb@5ah-CQ(l5x9S+-?!H*fDf@j>9~fFy7Jmp{YC^k{Pj2ZWiJxAP=9Wr96B zJ8OQsLj(gx_1gJNoN1_MMz2v$;>tZ?W4& zI}!35o$RB=wz?`4YZhZi8KDXJ;eE`8H_;iZj@^ANkzo@&JoY*2b`QzYbfk_jc%vsj zU{&x8C6}a=EZ8`fGGhg2&O7qGL2Ww+E_hryh22FSYRtavh$VqPM$?SG_6d~O;>B8g z#<))Y#n+t2%{)$kv>=?3@h8eYJ#ys0%eui>|C(jPn1*+yZG^_lD z>nz|#W}Sp~9@rKW$EA>9%(2$lYBf0q=IR#H0atBX0qeJ;oVFLCb@-51cUWJdd)%rS%S4>h^@$&mqKJ;=FgAJb3E{ALRT7xxL!=zD;6wq&)nf4m7 zOub8uMD1`WR=el9&mUq(MznU)<=B*?mTiOW*mGD)0v9SsLDLdOEtsooMU2&uW&0LI z8qd7)Yl3}AMP%CX7>6ZcajHJj*D;w_Kwtc95guQJj_^6}+l=eO$CqyLmk#(H41MZA z*~$1Xe}|rEX5os85+N09wmxabFhNA}f_fxH)S04>&w(ms>bp*tZAz%5n?-vP?>Uwg zw)kK5?isnEDaYM+JXuk(Syq2@-s{}6Sz}vfK9tLdia?`vBdQ|GGW)Qyg4HN&06fT8 z01+P#Cr1*aOj)K9Xb=M&8BR>m(vH@V`|Yf^hb#~1adLwrqk-ict7>d(kyb|G1ytG} zoMcEr)zm&(-kMeV2od$Icov}o__9R+{J#^t;wmcK4ZJ-`ggvyS*bms*S4exMBd#<9 z#|%d!Kt!6qeWEW&wQ1ohKpYj5qC778hqdidA^5#ME*XUirwOZY5d}AOM9vf ziG=-S@y0)FKaLKpO&B!;92_`@U&CA8{cvq-;TU2%bOWY9A5=0=~j2Jo~zBDiZ?7N`% zEdih8bUy?{LJ~x0+;ZRm)6F-vB9d*uOQYPwl5Io+B__kTeW`9H+*y-Cv_sXEGe=F? zf&&&_a@NSphu>nLwJ2MLxSgQ{k9EZba%@kv@yLeyzXd*A*`brIx5@R}Ux@_=ee;+; z4k#XfG+JbkBYcO#@?+GVa+$Mb*13R@CJzLB${V~iA@7{{<7DLn{57n7(rLWH@5aj}p-?Rgoq%6jhI2WXWSVtlH!PP}lwk z*oZ1hjQzo`~xKPSW6ti-VI1=;L8Yi1GGyPQLZ&!8m7OB~1X z<*7)j)a7B#w`tII=)@7Ojr{eOowj_0Gh9c(+{M zr86-+YC0vASdN7-hD=_&fk+h0%5c!+NifyLw}MCbrc^dP#*_7F;wm}G$x5uRPZ5`H zEl$)$ylppblScUL7tLmF=f{)B=YcC~v1^>9v3Eia^Yvw}<@!X}%ZL}>k zmYejRHfr@N3Dz zdA7?YDwk$2<4+MU<%SXUD{%+RqSI0{E37YG&X^ng=t=JQ&O^j{lH9BwNgDk&Qqmbc zCI#f5`^|6@ZvO!|b&X3$!=Z<)qa=#3&lP%qgXQ8y3EsB$wh0W){4%am?Kvv9$~4F- zov?$>Fhvo0D`A+KwQ;)XCRGU{y?*+J}O zy5Oe9LAm1SP%6Y=t686I65U}J4H;aK(oIc^5jLiojl-uRTnYR=q;~%hQQR_gz>}SW zQDB0De+1G3rJ%+Rc{mj?x*1<_Izi6HjlM#$jYm#9St~dygl=5x@~+Pl;{vePPqTY= zvdxQ7Z^;+zARQgVyoW^W7_`{dU;}e1pi=Muj zsoxcmi0j$K$V(&Ut~W{%RYOiaJ)A~v{A4Ax|+;}l`J%7v&hTLNN>UB!-q@PxWFgdvDk z$#^A(yhY)&#op1gESNeGW_Gl+$ZZa!dFW7G?zQ~M;;`9d7z#sEF#=i?{OmZ&s9>y6 z5V4_y5Andk3KLyI+u(0I2&X_(1SG(PnCn*S?$NXGqJ4+8r)Q@l^|}slsx)i#y|c%e zz^Ngl6{C}01Ql8FeaE9cD_UM@t0ZP`73NSvyaN~2lJdUn`#!O7k=6nAz6C2*2#3-j zS{agk^YG-`scye>J-s*VKWAcx<>Nue?WsO`?t9=Id$;xomjW&@Ff>K1|7G)J9AWJq`Wgtb&%hTf@!C-&> z7y->q5u;rbN^*`fu`xFEVxvU&RJZT!Gjs1C+z>t}N^XwBQF5@TdiBnCqe5z03UP=? zou$#?#OQ99i*J>4%dM)mRI|@SG^M;Oy}Yo*To-lHIAe%?1DtiU=5y#8W6(D?ro1vw zEiO7CTs3q6S}6cP%k}N-Xw-GB7byPZ_v;@38-}QJP`Lpe9G9WAwZ{t>J*+bqEfW~- z#sB2&GP`fY2E@dGxbr`$)XlSfdwS#E6k;dv=LmVXXP@dz;x(-M?3&A%V})kt*~d6w zgX_xb(Xmh2a=A%#h?t%AV3UVk@fMyeP#&Ka3`qbKs&y5)i7_X*iN#~2C!USC-r#Q| zEtwQV#Mfk{{~YK2g~#aOQW4}_C%Aia_d9A$EBBx|scV7wh8IG|aXKf=p(fZ#I}q~; z({dZEskqU$t*DNBj5IQ{)f*tZXw$)MA-<>N1j@JlrdCUIiZ?rKlbPpnzEwZ$B@~8U zweTU`RTcXdR@3JRueRtanP8_W!WI7bL+3zw*@D)2FmP1ixmm&~uKslQqw`rgDmrlk z4xJN$U5Qqii|B(xsC{yhi-g%U&_->e&CNUonyFkCY)J{3a!qj&!T8^M$%6KCFaK=XHRtc^vBxA6U3I*hb2^rmCP!dtQoQ+f}X_cGJR1P zL?;}DQL@QAAxK7jNQr=lc-k5D=9ACel{7Z%R4;3GI!Ir`FGAv%wGuCDi0DaT(nbq% zGkuE^_R&x($B-gOVirMVjEyLHEZ;V0)t!|s32sQt>p4R{4oC_B64V^S1|1}*&p8#| z-*~dfTP9n(2Qd~$*qY5FqUO}(hCO&`^cUIA|t~k$) z2ocHYXO{^zklHFZP!PT-R9VT%CvjjuO=~qu?Fxq}wrdn99M4%bnlKyc)e1mPQbT{; z=c%q9FtY4#kjW}DyE8C%rb9FO=`Ao81ex)rnU< z`)tQTNaW;9#cLE9?*vB}487l>nSRbHZBL7Ak(*HHt{huj`nWhkYvy#sZgx);Rzk_Qm(J*F`r$XD>)>l{kUg+1aC*v3XigiPhXQcj& zXR!b~R8;pBtw<5&P(10*TWNN?pWDZyodAj(2sp@!K=nU@6Rk6GXmk0F{)mtWbWF$v zJyIVLz|Rjo98ofT0>;2C+ZZ%S{t;7{TV4d0-O@*K4~%ZYEWy0X`z;HM!5k%bwI-+t z*Pc}j1pw$R-y(C0{S8!kZ`hI*RTP(3tl1y-!6E@3xJ;zr*$$E`h zq4i!g%P!Is%hJ9sN;>3xX$vB-l@q`M!4cMAd}i8HmH^;(s2}!Hp;32UuPr0RePiZ= zFRyvy2{SwGRf?wC+i5o24l?eXPVbQ|oO-p=kLmdu#5x{63Lj9kOSKLyzZY;Q7^L3i z?KDDz()%1)%oDgLuyQUzSg_ZP%d2yM9hNYZ?6wB^q6Q_#0`k`s@Vh7|W8o|Iw;V@&RV?b&J8UE~yWpLzHd+U(7_>+UV2@{Ut`*4skfSGs)7vsj6NwTPAe8kE zKCXW1K=~4tL^)aT5JZIUNvf{kG?IOezImT7hBkKG2tB$kzoz&~ZZBUyS5>8Heqwfz zwD_IKsSsl7=y|p*wCCsd7|>3;)Kix{FId$hw5mN=!!U4B-|j8U3x>SCRGsI<4B3~R z^hm4|i8m5-*BrZ0lfV&QBWwX3fjS4sqWKmL-JU0#-3j*DkufGy)=5M(S0K0Pr$H8a{csBNlFjdGarUJ)cs<2*by zD@$IcyLFUaz+J%HLIVoTE=f+6 z87qzE748Dylr}5!ZyoyWSQ!3Af3q`L80l2cR*xf7_zO~rqSO(YGyOk@Ow2GG(~aU% zU2h$pBW;-!#Mkc6T)h})p_BCik^1fx`Wd!*TTO57&ekrTIphQ&srx?&Q5d~r5OLtM z)JSIT?cMNtNxChfIqqYQYvG*k09%+S^p07757ZG~Zx0Zv130!UKgaHsP?fO}4s9j- zpi_?o(FoyerO%mURE-K$}&XCPFNbO@C%@b>4Cq)hY}w`W^3?d z>s2I&YO-U(xm+Yw^m5#CRs$`n)im#;-RNUQWUQ=4Pn2z*BTBzyI&*?TMnS0OMh&{a zNVds9oeR*sBzXNJRe=_U&m(RfTJ6=YNx3>04$vlii%5n0pVZSu{N^6gVc$phTB*sW z*)_|~Fmp>sJspyKAsy6MGsj_!LiyZi@Gvo8Dtov^+|yG^3dwht`z>r6kY^L(gFf%H zRp@l=QrwjCf^12dIE?76n#p3M5u&OMw@hMvdokBk&Jq!D!G2KFNVdRQTQy5yY3^NH z_>;&jnrmC7q^R+h^`k8^mB^H&+DSP*pe2p8nzV!?+naYpKXnK++#F!+Va_X} z4wj2f`we?4vMI`Y!piD+G^_c7(2f1>&Af%e>Xrop0o~!N<6W#Wk8y2jJ1-J0E@`g4 z=s>(o zy03pOJnX~|$7%MLy$)EQwRk4|jQ*9^nQ?a0(1v#`<8ye`7gTH2o>04-{coycA*(Dg zt_-}-1O|{~-S1EZj=tlnFERfBj{%akOQjbJ%}(*QJ}lmC&mUG+D{=;vHKQT@`sAIA za%lw@W0+2irlrbJeIvt>VCteH7L6LrECr7rGObdwML1bmd06A*pz^FDpxk#v)k%!D z_leCzBfUcP{#uYsUCY#_OqCA>HCdu^>Z-YjFNI}@+PoW{2%e18?KB>O*{K7pE5%&; zyi1n7YnDOWiH+;ldsXhWL9}>9*^$EDIJsp>67Pc1qc#nI^xC89_}C7|I`&MMo~b3# zW_e!?7?fG!>gM;imJS)>%-GaD&a)#EO0%(isBg7>D99x z=fsoB73nYCxOimAD}Xya-qE9IQDOfk)Q_WLs8V5oDyItOa>MQ(rt(AH+;OEC<1IP& z@4qgWB=2mJjlrAJvBkud;1vPD>NH~iWqqfLr$OU)j;Jiiv{F!$^k&W;>Dlxb3kbw; zJFd#1J~M;JF8afz)Mo_HSn&_0c{eMre*oB4xmEC|S)Gznz7wwoeD_Wxh~$tdxM#rG zB079FW#Nx7Hj0F;;X8`K5Z`8~XZSL4Q~ofqqLGakKraD-lYg;>6zU{e)7!eo?r#vT z6{R$t(qwqbL;Ug7PJ%vxBq2M;r=LH`n1QIrBAqRH5NLvz0Y;rY-GH>9XnwG1$nNcP z)HK-iMzoJoAK8j*O=KR}h$sni3N@pRVEo{a%lrsnKfA;o!6g&K7`N#t9$ zi0eTr9^$vrsnp9Qmm&WCpC#Mqakn6?=0GMqH(*f!dwl!vIm`POrly5b&t;TK!FtD% z-5*io#O!=sRWh$}PNH!rbFY4KMqZlvO)n;&J0-;tiyRLE5-STUX8O_O4sXT0CL*|% z(s;4G9r14U@DpQvSp!=VgnpWLg&`tdK=Gu!Sn&>EZcuqZK{g}jsq$T7DSf@L`3+Aaa~$i$qt<|<0(V#;9t2jaFAbX<+g^7a{F*^ug$jo z{{iZ{?*0KDYFcR0XVCru=p+St!swq|9OPONck^>EVs6r*!3w{h%Mu(Mjg%FDZj8X| z=Q!RUB~{V5H;l_A9`}r{FNdx!&@pjF2S>Xz-cLpjNeM8|_eImZl}X>rXU5x%WL5T9 z$f-_YbV5^WCh%lHX2p z9uf5GvG$c^+x@aXKvArjDg}GOWu7rVCaT*g)CSCbkd23LTLa`pF!HQ$RqdAE74j90 z9MM8QkCE2hC>{8kCiT6k+j8<6nm?+NR`#4bYNy&OQ`n!#O~hBmd0WKY^8UkeI3ZaH zc(8tM+ZeN$AUp#4ee`a-B4gV;J@OwQFuK%4^42#ADGu!g-I-xV5M@5ZuCAfM`_L}f z#;wMv4OU>?VD9E0XT%d<4K#RkcqcS-Vj94TB}jc`{pQqjqlc03+shWWa^F*W3I$k_ zbqYN5hzSf}`928u9}1#=pk?2!mddr#&sa!5AWDrwS)QAh5y;~#lRwqD>#bPBa)11Q zG_!kB((XmS{n_=o$LIJphyFiP(iG|Q5`_;ZpG?4yX#3TX{xZk3d96c#a0>zqJpLRK zOY%L}L7qbx-2b@P5Ak;8q>)H6ouC z@1Me%bR`F4B_**Q&HQcw!i;9_Jc>SR@AN9fCgskR;5u`b2jz3GM`17mf~;t5SHHqZ1%=eCu)J%+Yv z{k?d`^{rIMNE7r4w$4chI%3>}w8`F_ zEGY@zF#7U@yIv@nZRGJ~L%iA^8i(-e_iO9+2>nq+Q#S>8t^H|Yk_EiTvZPdQskFa* z@I|ZMQj=~>RqboNnOAZbSLFS9mG{%(2w7IKVu{-P-qXyeoPJcAjp+x>_DGjBu{NuiY)3b2`}rs;h6&{BU4(I6Tw;gOa1IAP zI~%lQt*a>B&%v<_k&sLh{Hb)0EPjR5rUI^!y7l~}_Oo8HM*hrDR2YN_=BUi)kwBNE z&*Tv$^aIS8G{_1F&>J%vb2YiJmWZ@mjVp zmQVBM)hnFGcoPimVB0gTSC;9cWBy7IBj;Xi>XDUzk3%a%?ZHIo<)JzA51^F4;#R9M zgOv3#u`9Cc{WpQxgf*+O3Gy>g!=9?#53Fq0co8Y5G&_^?4c%jh+(0_d(BU^O2sK-B3#Aq=iC8de>;vg4PE|8^YmSQ9TA`sFk z0ua83p>N+zBXtj_keG5h&eZMcod;I*r16~$yfBS~#UbX_Q&xV`i6ccauS+=eM&zoB52u3hq&*`i#%QO z)37J-rC;Dw6&+tIIgGn_fwZQayMefB;h2lT?oTjb_0UZ^WpZ{Y*DZAinfG+6!~39IE0NfR;xXWf3v@$^?T6NB_E(aKE@+-&PJdQN_0q}PAwhr( zN*4iJjuhW>W3dFCXki!UG%-?H<8tac3Nrq)LCf#wi_w38(!AJ31iRVLU;?1lROl#y z@sjB8mn4B>>e)C+LCa&DC$Eo>v}iYkYiCKX@JFgsKw}+6P?QDWMxlm%s8*L|ekK1k z(G>a;&o1$X{E5}Jb&@e)wz@kr+&|sW-zKSj7SvK+QB_T1_YqS-)jD0Mh+S!Ze}i8| zAM_{c3|_t78S&9-xoW=+5eF-xDiJD^Qb?gv_ws{0R~bCt>KLJEt#6C|t8p&|l-)Y` zp(}Y$ujE#VbVAfmsL7tU_EHl`w_fiQRJ@`6)2?A=(VnI_vpk*RK&ql|!|v^Ta`lSE zdnK7}V-Z!l@yXm0Oh&FE>rDB{p$;~Mz5@{*@swyL_}M1ERKFdwj(~6Kl9fB=#}=)9 zLt+XirC*@Fih|CKtER%vwzNxvnpF4^)tKYpCf z>aX4XHsXlZaad!lI5z}ku`zoRv8m{siaM{S3Rl!RKDn=>$cr=h+KV^+<;1 zzDxc}vw!$K+9foe#xbn*8J+2UKQ#~m5JF;svC{<`XPei2*(aHE$MpOIf1GvoziJ>{ z?H2x;G3;@3W$Qv#juKHU(BJ`=sE;5f52A9rAR>jH7g9S~c?-sz-qWIL(C$8adzu&X zudY~mDUhrY5sZ`W{AAE?0XhC;V9G{VRYDwcx$zpOZgA3)vzn856CCS{`(m*HMOYUq z*ON)ulWBeIJU~P`8okBG`C0Q*zc2IrSPmE3mpT4Rnr)x#21_d8bYDfCN0BY(B6Vq> z?%9S;jG5r?bwd7*5NeyS8q_22J+F3)nHmEfR>3Gd8^Ij>nyVEOqr41%tL~G!Bj5*N zHp0>1C*tR6((b32biY&c0YO3*u^yT#%RVrN|u(=zWrHBH-j)E<|fG{5wMQ- z%QGRyb2h!qT1}Kt%F*os@NJt*w~kcs zzES;`&KHKBM9vu^9MPX+hHPoub-w{HaJ+bf1Kw5A(%9}8MfcMj+md+sTq2$}iw@YkPTkgF$;_O5$>l8H4VGo6qq zZ1*=aOKJiVhCaD$Phrv^zdVb>ismnRtJ=&i`*puUv-I!=)_p}9-@xFflV5Mld+%unFa-au9S7m?b!`>n;=R{cFq;f(VXzV);T6};+Zgb{l za89_oPa(ohzc5%bB~-xYYc&JECD&R%o5Q33IKVh_%0BBa2+Jja+0(<2iVF^y;eUb}#+`xcsh1Bs#K}U_I&ee&0&ilP|ic zu;lkak(m>&ys^MFE7p*4W_N?^L?On($@!1!zrS7W%UZCNUnZ{r@kCraZqwyB>|dUUDu}uOXM-Hy)Ws$9SVMJVzg*O+;mmDdcrI_c=(+9GNYM zq`L3Zp_BGS@dh4Y4p<0b?^1wy?BRHJHaYZzKvkiwPX$I2Zzk652Xf;6ud?waoBWEW z>=#EleKzidPI_{Uidc=MABv^anb+n>zuqWWEJ$y@g^sM>(K$!h#a8$OA$utJ1-afx z+C^oRmK%T|L*~%1J~O(5oF?U}1Y4R6;>DiglTW=YCG=T(C1s5CA*LS5ra~-Rr_tV` z2%j8((Z0D3sII}*RTC%CMPe&2OB0BxYm+cEfG;sP0e(6_M5O2`o{HB(J8d6a&&j&S z<)QD*?Qd4vgTg`iNHks7R#Y+iI_k%tG$%jxvgxwj6KL-^BLLovu1z;|FHQ;{Q>Lh# z^JgiD1#UV^ni%g^sUHo@-OL^c!}uLWPMD44*ARxP&}fgsy!EU+Rs=N<9*oG$)Z}y- z@lgd$%N)4;lE)r)rEYL*A8<2-sKP+7$C>k82FaAyGfBXebehqUyKEkd^g38VM*D?EU_mNKh%W z@_o0+jGEi8{9T95DfCBT8|1xGTne^s-q5|Ury<-9XQ^xEoY0IaC~MvqjMa&6Z1I2rivy@csCNap=iqh1oumiB9*#*54v zPW&pLc9vK|Y@jT`G{xYr>xi(W`=j48G;6NGRJYUt&r;xHj z&esM;C+~abp2Z$CCf)&>bsgofawZnas%PyRL7DwJHV`^M7Dc$Vy z7Xl`b{ftxX&|seCmNrwVTT`iZv)WL!ka@hDtJkwwhRD;BUg!JD6im;GYv&9zlZtuv zt3`IKy`nvPYC?R1F`L@_ZkK|Th!%$pVq%yKIs#PVZrAV_J=_weqqBxE56o9yQJCaS}dzN?IT1&g;WB_;wT)BY!Pw@64DU~Db4^@8tu_`=Ql8V;W$u2nvMg|6{^f!jj) ze-W@>cbC_`npX(x5;zg9@FWu0cW82-vUMdO%#;N2NR{emYjf(b1O7ybfN2<^D6&;V zl~ZBK5y0M&MKQY&oT^x~RkH1I2xnP}1EvS)%uCxk;3Q&mebxlU2`(*49dD5}5UUq$Q zM=eK-)O}0S1tXbyUqU^v@2RC6v_1@2Xb|4A9?Pidw4v-b;EpGX$%;!1OO^%b#HO1c z^Gf02T-K3(fxq){L%i$_&-3ac)rtl>+Qw> zXBAi5msXG0r&QJFj59aOmsium zlowl5hO;SU2cd{T^m%}Ps9I%5z|4&4FqqjUw>dx3dN4drs0526U!|B9liqL+yj#o% zU;$WS2fq)I0TlqEMfRCa>#N&gb}=>L)1A;;qd0jan2oZ=w)aX3If~OEsD$mM>t=qB z%lI}?g84Svtcum;?tt!N&}wY$n^J2sYmn>!c`fFREUd$ft0$cF3840{Ku_KH&s<~LPo;k+)cLW#TA!Y zO^u6B#j2TFwlImhm{vg@9gsN;$-iv7^85!#%wts=^r^O#l}4ltHf_)t7iT`7K!d%m z{jEslaJ8cG3scqd7^P}v;=_oFVA$b3{j{UEu6($w&GJI{rWJlxe(9AclMlwTn%XU` z9L{10T53C@^|ykF6wk^y9bN+dzvJd9`e*6U5z*o6XPKar{z4Co*P#1x-#g)*oO7{M z_Z2s&j0}Qow9#TB!tZc9lQ?x?0hrFd2yn3aQUHa!Kjda!+bY{{9HvfiK^`+{^M&Bl z)YLvUbmt}GY5PBbjW2=j_Sk@pUSa9sUXZ^74KlSsFY?w z4ej45T9`>%Hs6yDEUP%p0^5u0&VXm5aon%HA+C?lr#*_eL1UEhKPjFKn%p7JM*^O< z)D>HpbOb^0qiAFu!T`-3;xx3KjKh4=Pb~y2!M3 zsi|JHP4%q2ckA4JiuzbBLxvpQ*D!*aW^v8u)esSVI7j!5jt$Q1=vN@c7K~AVK<7@t z<+HMxA82Tk>2{v!INgmfMt)MMOsblBdwAb!JzoRMYI&qoU#5CAJVK7g?T$%B!NP)+ zelqm0Cn4pE89TRWNP#($&68T3=6i4D{JTYdJMW8vtN(+R!mjfPOMtu^Am|+4KhWiY zY9^hdOKPc5#M|sX9&WlVyVpQM_im60!PV}S%Q8-q+K@+gBRO2N*q&Eal~Udto`F`C z_qnLL%BCf}sJdLvuncoY%$ZP@I>k4Lks0yT=q1xnW0HepwcM`8^#RIIMC_@Uv)fVE=j_PSD{Gg|XnV~zN}$q%PB zvH<^UhQRgCj1;}L9y+N~awc?Qp=e_nDTY&XuuM;~sSjgpgu=9oSoPfGe34;gG@>*lfO8#^u2BZP(wPXzvW9hCb;H_&eiqZ@Sm%_J2QK0xun^p2gkRgp*gx* z^+;yFd&wq30H+(l2p*rBDJg-gOuIt-W{W}4TZ$=ESxfm{;(+U&LRv)Kd$_Hv>9CPW9YL(e~G7*2K zWvEny*gRpPCnZ!Eg-qMJ#kE=BsEo`5gy>*cVaq0(c+8NFHUp4Gb#I+2&iVC)V#s$M zHBXIUwBfU}BB}1lgbfm*Vb&yqo(?;RUMVD|>5*0WmaxjR z#Y6~SZ-QlWEa?^85{qOZ*RVj1U|R;-WmR*Ai#sb z!aYM>e<}MIPZ7>s{gd0~Fh$y$p(%qXtCC79xf90s^JRE^scs04%`PJpe~1ieY4d4j{ApLRsA0WkXfD&40z?<&IEKz7c9tboc+oKq`-8Cxc?@HTc znf&}+<86cv`P_+y{pd#sox1TOj~v_su!JTEQtTfNZ>p%Ae~Ybr$qjrJ?n*e1vs-?R zImWyCLq^jLqMZNPCQ0`OvSQRvr>!OCa~IX+X2OzdhNitsr9;d1r(b2Wew>kBiYeav z2G>aXIsR+)axP%OGs*}{M8+bNKa|_2?M;$Zkyv`Z$yPJlP}XDfY}~~6{SY4-TDTYS zenL{>8vm9)G!)0zC+HpwvLj=bJP@oDxgC)l!}w4z#YVp+6@uw#^nkeAzZ_sd9rg$K zi^8lf2}^)0gx`{n%Str7<1p={%>BQ(0!Uw@j0VCmOPcNpw?TL}lfau^jIuPi%f46}~(uw}}lwl#%+C;9DiH8sDABcgXu1S=uAz5^2;8vr&9ab(^%-j~Z}Zx5plgDtiwkU} zg3@fX02=;?}+FgsJ0sSBA#w@{=<{WAXz_e{XJU;))D;V{Fc8bx8C*E zhRd|3O)^CicbV0#s%yVBAZ##ML&c1-Pjt|&EK14b6s<;c>~6dnMQMfz4uWzO_1 z%+IpodU~Ui&oAM&pyClW{B&U=bxTTMUNVLXvaqU-$(>87=~9@OlVm8qv@p$#QorQS z4R^C*+2ZDHIF1u=jPIVWjq+NTm&qE@ElGirn${TcIa0ik9L6Ro^(OknAt{AdG@;n6 z51G7G%RUO~5nrH$TT(ldCw96T7ZObpMaUoL4S3Lwe%%#Y>9#}{pZmHZ#06rP*HsKo zp%;_WFn|kGuWXB{qWmYXI&zGvn;Uy?GfhI;5 zEjd6*8Yc0pT3X-~cj=H$ZmhA!p@uuXH}npi zuDvEYqf_}lliqSEzpFo{4wzR!tk~YQfc&xyXT-LN*vW*Wckj>xB_Leu&vl-ywmU;Y z#pC0gS@a6ZAM$O+I6{eiyENGRZ~~f}$^v#}R=_eHh1{_@s)9~>-(s`eU*$|qvw53} zr>Ek`Mw?B3T&`M5!fbWB)Z;u#$}~qjswS6`WcqcpF{L#R7@jl?f4G4pc$65;N;xC! zHcJCZ#@sou#jI*Lm{rGJZet^BU%ogfZf@mIM7(v36f~Y|Q3=hIrKBZE!Ev4b4JMst z7#a8d$+cyW0$79p*-&wQ{BMTKl=$R~Cb*qO{afr&&_;9Zh5Q|-AeWJQQ>2OfbI=St>T4;7`go~`uMrYExUX$z7f$Iw!B zAW`*`UV!(VLUy|pG@%5Plo(8XQ;dW+=r==bCB+~%PXJ}fuU|dS4pG>=i`G$-hdwr) z0$Evz)cs!;#YBkoNJtMLqusIAuXKEtNgHr>K^0y1Vos@h``R`Ptk73v%-{D}M<-3^(*u&TyZ~ zkyn`^UWu=!HA0H}`M1RP=`nZX2o(QO+gkdNyPiGq^`3*>QPZ1>iQ&@vP7N)SFHLt5 zoS;+^zN+zuE#U{6IZ~LUOy{`;kcJE)7~^`)8%+{s@p#i%&=cy_Cy?BD^)Dwmh8F-Z zM9YRKo>UI;Mz}%AXCnh>*=8Y5#4@_9F${WuOnX_Hyu+_A3}9Hy`XfL)GIv)a-k)co z$Zez2j0V<9CaNiQRgSyS?d{wXS4YroU(gfyH)5980}Bk~$qayjK_)2~nCS9weZQjo z=I1^*O}v)}vhaxg@DDm9E0?>7do4=U^O_*2(8Ehu9|SZz#U=j-Sg`OCAh;vNWUc%$ zvDa6hn~%*zn3SHk-_!ZZFHP(0(W1G<@8XH;H(ra)??_az2c3g%i}Pv%{aPF2?ud08 z(xji!s_j7A#_aRx16=}#tz9iHrB$P%kQ^T#6l$`0No0zfpk5ahhklW&XUJM-FLa4Xhx z=o`dR5Mrzo8a<4=!+F~^H!0<2N(A)~Z#*rQ5VsBU7I%E%*P=0{@=3Nx8@;n-qlXJ@ zV^X7WVeI~1t1PfLc@+1XEu8x=b+Wu@4=WuG02!cyE=uPmDjY(4uczL!b-ZniY9qI!H&i=**-Q8EVCJc27;6o7^UP#QYg%5_wNkouBAyI)v8 z1B?qQGmi7xtvh-bdcca=K!TMmF~h^KoI-Val)uqwS_Y@(@O&ePqS!%MW6)`^k^p;e zuUmxJM&JJcte<{8o=ZeN-N*4yymNfCMV%emZxPtGpp?Y1q+11=nl-ZtO@uji_GeLR5gnbfySm(!fT5e{uIl^WO7o z21FKm9(8ZoTR(+TTxrKEKy9YfitYJ_24P~L3Allw1|r&Co+!5Fh!Gn8128J>s+=UD zgX8t(eX8kzA(-l@3!LJTv1X#G*SGy5sC5p0&y^+h1>S!+e|-5PyMSTl0#XcgN<5F# zVuW=q`N>LIp~;CY!+U_MsVRk=VoO~h-ax9UR1{XG5S>))R%wn?3M3fA0AQ|`-HLIk z$OiW4;$kZtW8PFtAyU%?PdcKg;|vZ22T4LeO_vQ!^T}3O>B_Cdw61v(z~lu>HXMpx zNvy0G=x|;VWNJRi3W^{U5=20T%qIa4_LBTyCOz+CjsBDR#&mRE&OT_Ov7H`yo1MPJ zjpVB8RbBz}z8u+o(Q&A?H1Cc%Mg%R)9xJfC2S@h)O86a@KoA2-O^y&BR@vmsywi30*o>{CiX)PH-r9ZYn8va@3FJ)hK?uF>KhfqZ(k?u)?gg!@+>3B2Jir+zz3a_rVvy z^T!WE9@>np`KWhlNyK0TKtWc z3Ey1D2na%GmI3(F@*fr5eQFCXoe2z=&R)hx+?L6PzoP{r#4^h z+4_)Zii>$ZQLc=Xgz1a3+-O>;s(9+Mcmz7ot3}Y(V)-?3;<^tcAPlsj>SA>-L?^^3 z(=6jAG?9f(bc%83X7lkt7_@%Y)C4&VTqO9vwcGA_JUR(tH1p2UA0wHL)m99Z3?XGO z<=xUSrOq%IN32N_eLp`DIHwrsg>#XS@HVoS0K?8mOEQA@yPFP=E}g`%9SR~HQyeN6Ihqus@6+Ll+0M1AtKTJ8`@8ba_MAJiUKNPXA}>cO0uLy$nQ z(bazdj8;#q1md)bOH1|kE}k^i)OXB}btE<><-0JH*i#B0b-|kquD{JkIdd}Sug}ZM z)25kpbs5M$brR}62fkIvD|o=$_SN=HeR45&pTGAX9&=Kn%&vikR*SeQBwmRdu$ zv<#>6%nu66Q+S13T4=ym=i|xf;%IOGWbH(M*+xp(6F@u;d^qt0sQQ4}XmNNKHn&S>??BA7!n9J=VEbkx7a(UIX zGc5$B)z!aihpwq~z9jJp>aF$jITRWHBd9p8S#XP)u$hLwkB3+y%dq@7jY8{zZf7kiE|duEe~Z`eTb zb-rx8KmEMr{h!h77Vq`A#}!GGTa9_L5WI1Q+5(dUyEk36tYup*4_V2_?7wI5TtJ!M zl)xMZ$^6~v=}vpO+y)ENTxMPLqAL`?j6eYI_U#<`;`u=2>zUst*>0ovVuK@7_Ajf` zC6I@AZLG&tl5-CNjB{h9hEZ`$glct#?1)AcFM}N+RkC=RtXY-`9y{Zgt!tt*n10G` z6B2}eN+1-NtY{AA987XfA;eQlJZJmU&eoysyZ-6dmg)KSCdagr4@sLyysRu7 zdxwoOl4!KF)O6xmN{vN%3UIWTlypOsMk`;tnyx)i7uZvsN%S)oz%tjkh5d{TeBsK| zd{|ZO$W33-pfx92z)I$|xn^K>?)DeOwAwN-hy^8z4ICjPJw3dA{PT-kO&nH*I}co3 za3i@9;vNZHVJ&r#gcKnv^PT8F@=1z5vA71H#!}qu* z+?J#M4}dozae;3q6 zq!>BUDOQ$9G)n$$l^RP_QtZ`81=@d0f`>jbXDveuLwTeaseTjz;4Wvu9?&!4#%q4h zfJG=@-I)|r)*2f$HU)a2CiWO*JaaO1Uf;iU!MGo^IJ>`ebUYRHJl*fL0m-F9;@Q>&s^5=zw%@0 zn+xo&$%dUU6Pft`e($WF6k`bMf^}I)m1wtu9_hG|49)R9M4_uou$%GfF|4{ii)iq9d35L8Z!709TyWUCPb zqrLWibi8Ch{Qox-p5*V1Wc~o5cXa1hh>~kF%WqwNe}aoD#4n)JB17$ad%d$g8r|Ur z;c)%L=sqk3;@~t*F|nr>7t|x9Q&Puf4eOS4A(%`GBLs8V?ry-ZZ4y*47gDvLCTOw~ z=t)$`=%FN{!LbIzD;|dHw?pw_iV#I-0hA9gu+p~nLIXbyILIEUewy1LHjeUAEX2<~ zrK}IJR9xD%I?FJnw<}YN6IzW|W=m4)gs{a#ValK`YqFEDp?QLkp-r8W0RV68EI<*s z5iyJJav-trelyYEV^WIYGSw0un{c6?kIX3uGaURV_nz136~9lHBiuz!{kM>6bHu{y z`6OW|lKGS@W5NOgXR4 zFUM++&e+&~Szoz<*dlPY9K za8@M@SnDA+%+hqU{7t3z$V~gE&+C_|R7t7hnPwSrC%ZM`s9xTcI{3+ZW9*=Pkck4j z!1-~Pw1Vs?UV4fOqc19RExlLFgIawiI-~vC-$me^T@)oAUd=;+Y4+WL?s^aV=G6gug+wobJVpyv`_B|3@$|CcB z=-X_*QG_C4t%X*`##S4|eB)2HrPB7A$?cS-JH?dJ+nD=)+Z>jXVknM@qn|C?KdN&I zNxOKR6?^08RP#5jYmJ1{P7Wly3NMGhn|XZxwEOn=%uVoDam0_1a?b3pHu;)FOszc_ z0Onfv1V{Y%TgA6Gt>-U%?L>YNw0b`r^bssF-3lmbs(D|)zw7nJ;50uRFn(REK~X_ZpJ;tjWE|GO`6a(l>AAyQ z9^H~ZEc&IVxho0S>`Fx44qZ56!#@`IQgw0F`R!=UF(9eqpuIWIPbBWge51ZD6YoRN zdN}l;!&MfIGQWXXK>y|#ANg+=)uZD!;PWahH3qzdh z>L4bHMmC{F5`tVzzlRtI%oQwMS{o`$I3sXQDS$G95RToNgo*Mvm@~#7~~hBc(2l zOmrfl<+iKe_{g9SdPpXVybeOuOS~8c@SALZ;0QRef zDllt6oMem~tqJU2zU5L|WOAp-ewP|p(A0kvD@*_WD={oBkKQ>ki}_dorf*-clOnr!>m?q_eJfE|PWSsytTG`_Of?cs zxrqaF(J+O+PJ|lw7BPxqea)(I#c@0)e)~nRmPZa!b&u^EN(xf&5^LIcyH`qu)Osog zCR-|W5RT}U=b^zxh5l86s>_vyNb8hF;!rw=AC4xT?n7)Mn|sntyPbO46rl*utOmqX zD#oQjCYpzWJ>JcLK+l*R1dB|Di|lf^CI|#l+@CBaJsld07s;v|9RuFSpje|NC1Lyb zv0h??`yj+ya*&HmBq_gzmfkWlfsS{W12P0OjsFU@X>M=2P{99KJOXpHl<-8>q%87P zwoB7L{u!tP8o+Oj>yCcxsCPui-Qj-i*b1avNe+xsgI-T+uz}IFPHIr6*lrH0OB;UD zPeqbyo}-RC7B4r|%}lDq*(bS+geWDD$;<_S{5Q-`u)Y*EAvJwSA~CHwB9!P^IXr9b zVn|eQWb$DGfbZdh%jIR**0*Tpi%dnV$8EOb42>p^&g_`^JGOjC3{+76uHo^z^x|5@ z__M(4*eHaLp9seqI>l%ZS#GOGaBcUuRu*U~ zGb7rb>QLL-pGrvyV99lTJ&<1Q7(CqFy*<=?cF1+_zN+C?ZEPc>c&LdLT(Z-$1|b%5 z*Qrlla_CeX72p)dQtL^kujhFG0e1T!c1Wb=!FI)MCSJT;@!wprJGpB61fWz`OBxDQ zt&-6s-$mu~AjQn1jWMc%e+Qj5WFISnx9U!;I#Z{^AaL-dJdci+y8eqlsqg8bRdf=5 zx)@vu`;6{o4W9Tm#W5npR!!MGKS;cKLuzF^S8kI~Nh*)0{RFu3yZP(LYH!h*BT{_y z@UdnXT781I?DUDhBwuzlK6Pzkv50xm9#wTv= z_TW(&vBk$Uj+E{(4sPI4nc@iwiwP4mk3`TU$UtP3lZd1mOprci>q&GWJ3O!D{c)A` zPGvIHhIhux`D6*c8KCBqw;EMr-}soFRfS@kSHAcUKs{iDFxDk}13rztTNIZVg)+rkn35qj!Z?IJZP!EqvbojoFjZ&3N z^cxP_si>5|Y@{Bi&(2G+HA}-1 z!GaR=COK0N<^+tnnXooOz#RlkAf9_Mvy12nl{!p<05hIAa6~3k@EIc%CMqP!MThDQ zzBoAUrBkRPBBt<6wYZbNJ{3P{T~1v?dhwW?iElWCv5ZnyU$x|>alV@Y_h0`N#(p_ul?Lm*}(v7ipz zMa=HFzferRFGrQ<3twovB`I@DKD@iw-{~7<_sA36O?qX~^O(}#{hpvzCfDstz5ItF z^W82~!DPARVHPv)OcsxuatdQ`QF<&f&kuW|`=;qsU@r5uwy zPz)1Irr^V6Gr zr_kLDTUc&~$1yT^|8`u}Hw*-~wnWG1YOD5`$fC31lh$0D={0QB7hG^Z`-G6TXRnB0q`EeDs0*<#ixMt8GjrxTb%|K`f!bFItRA>PGRi-=wR65pXmV;SWA-M4i4iPO zm~oPC|BRr*3ly7S~80-LsvZzIIL^T;hKye=}9?3@nRo4D8B>SIs5^NHMjrCZ4Dzw%Z; zlrPLTUK*De=|6wsRhE#yPnN2IcyehrK)O@QJ5xVev#AMsa=LXbFIKQiNK_ryW1|IN zRu>}Wk^!nx&9O0{80Z{JAVQ?7cH}y{idE{8oGyG;{N*2}XzHrQqul^r=sn_C9c99| zd^fbLqRG>{w@dGsg+E^yli3jurIHBpJ!!vpGCGxh!E_!-Anp$c2&@kzwGni7^hWPC zITFE&g6IwvB8s4Y^c}IG^-<11ps)$LP}h;yVWR5e6SO(WOr3PtWBeNl#(b*TaTRyQmmox$Si#Liy@8kN7HwleyO}u=asvScXBhh zp6fes(X%2I#yiZ0EUg(G{XT=8owqeZ0UT5mQYvqn%utc{`v?y_FcBU=s@*qab>^|< z{7Y&EQf$K3@cSE9sx`%|cxPIY2V5r7XP)JgH8 z?w2G-J7>eCULez^ebx3^lc)SJdIu;ghp6yC4$wq2yCHgIm-a_i4EH|m2+B*wj(NKn zCDY?rx|YNe|0#|g&A{GjkoS1OE$M}A$)NWwkvLggqppjzyKZthFZGTaK*;c6Ys?!H z?r~G*oEnK$)ud{3z;AC*?c>4nRL#Ye)GQ?FNNB00>H+)ZJ&45--$d>g^Do0ySDr{W zE7fDJ#<@&YDe)$Do|Va@T6%Vj!Z5fWsZMQ{eX~>~gD`Do6U~r#`K5~FPBDwFYo*w4w2>-Y7t`(R`CFU2J0`;U)1OCiw+ddspmy-U$YJtl zkYt!?@~^g`!gmrjh7dwe1{}SC{L3|?lOV5A9)%LV*?U?HmF4g1x+=0#;m_VW9!(n; z0+(wb2P3e|W$&c*%%!=u_^4(zLA1+6$JcU4OR7a`Q?wl{ipf1_4U(zxTDN92Z;|z> z+X0;6sxty_*2HN^|Cj6C-N#QZ(>@Vy3W>DeR|8r5K*<} zSSe$yi?f?>Y>qIiqF^a(h7{&;?Ky)W+gtP<`l4fF^c$@a2eRJHf zYc72kH{ep^k~c>ph9Kcw0e{N+5sYT`Agn!|zba6`B*o8qJ=^kZf@J6aAG-f=pT(?V z>i7g+rEo&B-G1zoQVPRN0lP=^X1BvWc5qbnm%`#`hU@`(SCUZ-49q32XJw>L$2k38 z{yv+f=TRT{ImX@1+TUC)^yCvcW35ZQEx=lc%V9G~{`j|c{^8WWD`i>Zk{Oz06m<@> zTG*B=uJvu*^G`3YPQ&WPoCxWG%esD^E~=IME)wI(GkHWUR&v07Z4@l`qAVTrB+c%H z$Bu0Yqp4-CSa{94dXQC(j`a|+EIAUp4dU^39#R^LP)A*p8@HFh^FW8 z!CL0T#ca~L*OXam>g1;Z(08?6$U&drdA0;J3m9!9W8%h!RTFS93*t@BsC565>LuAq z0jpwRRak4Nn**(-Wv}Fjy2E@Xnii;1^Oa7RTe(=t0duOD2kQB_UUEvqsFYfoozg3P> z6O2i>DZagn!xOtlKqF#IDX->j@boPk`o^J-dxg%pL=5I&^mFIuekH6P#tSq2id4Ap z(~@&rlQLNY8yblsXyp5>Xfa}^L1gN;56)0dG40gZ2zq?I*dVD(Qxirnn5OoBPhsp0 zq}8t3#EfUP_3D}mV}#Zr^TK7+MzZVjXZ`%*JFCDg^970ESGSi)=T$h1mX)d|r3$9S zo5w6GS;o_)yrWpzF`L3|4uP<4Ls%_?(#259YpX#LVcBTHa z$Q7~BTuMw+@Q9S*A}VNev3j5h|L6;`!ER`@o|97pJi{2sqH!mhBrx{8)!`BjUR$W*`q8aJO1(nc2R$RxkXKzasf-n_fTDF7 zeQ<33Et@liWruCJy&Q8fu>=?05lPhY6WkUxzJ3%YFU{U7Y*2c(@KU6Bh-Q{BPy2b%VZbIA zBnXfYJQNrJAOSc--VjXCVA^wRE2~Pq33{5WKx?UPZf2e$j7k)ujQ{{Q0Q7bUX-+v`ECzIE=Oio!hJRV_6Z5`N0gg z`z4aFF`b^h8d6aVoGmK~qB{z0#0x@=+qC4myUwhDJ$Ud6)zwsvU zKN&GMFoagJ+yr8&x*F+NnOtgL#3;A?W%!@B~`BD5)4{TW^}_{(G;4U|Ms%; z&a5M2$8O{wu0(m_lx%O{(=2Wi*)kgLNxOF1?LlopB4)!tJm2w8v2ZC z3Dnpk#*XK(NW0-EeYJ3I^^quDsv@R$E@Q5b`B!A61_kG@-SmrLOY7_CZ<9s|^Bh6z z5$}M&LCyW7d%vIL>4!HQ==hm`==V;3qQ`CdocHlKtQSj(m3UlY00FpomDJl@_Pae>yT5tw7NEi9Nd=hAS$62oklo4UTlHX~Ejtt9|83Ic{Hf3#QQxBT7q<7v z?0d3lr=M*=*ktEfcd|KqQYt)v4s|5KX^p{wjj+bS@dg0^7$Xhj-_j;VyZDOJYsnx$c(nB#9}s&{mL zFAC~k$KKpIYJ@?im1#Qkn0fvx-e8{Xd-j+~>v(l2864lOXHE9IAgZvGE5(PuJ8vHU zR*J_%t3hG6Fn#&92)bCM5&)IAWe^`x@@r@HnF?u_r7TyYSxt;KrFwRr3YXEbaLd>g z>0r~~pfu2=Q{q2BHKWUafaKrC_e>r(f^La5h?P4%(v?G$)sdPSCEuDD$BSd2rBqH} z_3%f`L+FCT0!NQi3;Za+?t1|eACY>1JCaD}*Y`k?EZ@jVzqZh<4X!w&nzF|RglMO%KfhT0eF{+Zn6xnf*CC9~+*>QxB)o=i1=#G%B4W`ll zT={gaLa6J_wp8irVoZD*obvqDm+ar+tErBr3gjmMz!#k_I-pI{7t@M642YcW8}uo$ zt8A?Fzi=K1@43#4%xlkk#eAi<31*9I=Rd$4 z$+yW%AJGWK#{kq*bZ}h#fetVI2kk9F9Ij&^2H^Sn`jJ%qU{3+40zi?9A5It?18YBYI zhVEm798X1d=}UudGiwANRE-i}f92>uygf*@X~acZQYuP>cM|7!!ZcmBjd9MUtCvtz z6-Dbw>S9bmM_4#D534;tT{Zy?%(7XBI(?WHoJw3kP_av5qEd@?d6eHvk;^U8py{MV z&0ZGy#vKuYDZ+}Oq4}@pZ&g+4W7t%a=c5t@%g9D+DAA+*BqsE!v(PC869w=1n@D$m z$gXh@mlo~uD0eY9^0X=WF~n6dX6dm!x9SKfPS(*{(eoa_Z`w4hZkJE|W&c?a6CatR zTRpudCEL1A6d6~0z0*)(#vD4 zDlpp?zHK=xnToox^Daa7WNn!+Z4zeoqRw*h4=TvT8CR?e2rb*xJ`zj3ui*{*dokvv z**hh<&9*inL`>O|fgpQ@g%L1c;fi3|{!)8~a(!!)33VBk3zAcJ}WWS;VW=mKc02EPq zAhjR(hn`wt-GAd@4a)U36kL;eIez=e1IZlR9Iva#kHfsZ`?`|-54?U z?>af)ImSNj@~bsGrO!`f{5>*~dZml>qWAeS3KhMPv9@QCGc~k_B85*qs-m0wM}y%2 zEte6FO-xdg3LO)5FpLk)H-NuR^|!P0@r|VT$S8IydIUdT3Git5fc(Ki{Yv=o`ueh7 zfe!-{fO(j73GTSPd>}(O8OuZT35pb9U7?+{>&dtv}&5kUp))|6W_7KE(BS{|ATOGb={*5hv$J~<;QL2dW zGZmy(cn1N!8EUvtlowC>8!w&h=|p)xh5PY(oiolb0Ok!WHr!v&B>w@ta?SGi_W1TB z3Iy)!N9Rn?MbSmk1^}c%0HGkrMy9CqnOG$~!r+_V;IJ^SLlqi zbvdwW?&n=rv|MFNPZ&dyBBl((owc%2AV!o=*JEeZ96B+2V_N|!LPHk`ayxza4GES+ zE{PZmQS(QdF?v!SI(r;CIV*AO=I*+T?VfDDnvO>n-qz#UwHY*XYvxBlV=jCXRU^h#1kRpq1$|X}FA?L8@ zv@-NPvbRrOaxtj4+X3|7e3&b}=;MJ&r;KgO3#s+q30sD>EM^}6B%gOa_6;=B8tEWK zTC6-onD}eP3xFqL6x+8?f6m3=hr|9Ur9DAJM7Ps%^uUU_$GZhe(&tC+L*LY{#t&f< z{X+*j0BZa59(u$;z%O3=$jk=q3)E$MAvjddZHrMF)%19)j~H4YkUo!;vJ#0G6CLpm z04)gLl>k{2atP!7pPn<-Uy^foO%SAoH*H!X#)kj9zuC%8 z*UYU~W?ivZi9E@i_x*Y=``pa@5AdMT|H}3ua`DlhIZUEqK+Q-53qnH2McbyHOtF=g zX*J8n0y;|$)TPJ*!qEndMNwUYHxrF^KAsnYPZAIwKLg7{H`fC4&_$+J<&1o?6RIqd zF9x7T+t+jqb{okKR)#7MVrae)Q8I<6i$V{_LbY!OGXC(@q|EkCaKU!1T4iEOSj5R| z`Wa!$u>C)c$}z=G7&?$7HxdM((&$pnEFiGq6%}e988&U$~R6H_c@r>YcMDS4a>Nva`?S!9g&%f?K zVL1hVkZDD323_8e8=st?@n7M5{@SbcJG!QO@g!O%%^Psz3#kwTGk&G_gX78C&PIcW z2(YlQ2tlZ7s0Y`Jwmk@iZR0)F)9KTe*o>ZXTEG>ARL`2?3tW@95RFOdFW$tO@w{!8 zX3;zpm>eWsw~zI7 za|TWnX`dMu14rm6A0*^bT=1;VNcUPGZ8NBC9w#J*dw z(4utY^sYFX)_=KnJe~0-Mflp3D|9TTYmF)xX(N`Nt&ON4ViS^^% zL;rsE?*DNjs+HR0cM_|oZT?1W!fr?F+6YBIZURLg+KK2&;%guRb4Pwa;&ZlqL;E+r z;QDnaCStpTEt+ueJ-8~?f@E8?LA8=k^#+h<>3mpP-@4Kvyb;{@JvZ#4Pk~ zc5Jp^w6~d@$EaW-poW7eed|EfC|L@H2^|7blkJ75(%Ln7-Cn_9TFMG97dfJ0)(4lzWYRGFdeO?NQr8aYz z2^#j8li(ZTMR@(L*OcQZ56bv*6B))+5V{Ov&>D{e1av7 zY&sZQ+kNm7?Ef|qHKw(}$s7WOPXw|zhMY&ES-BO`LrQyB@hyGbgp;vfQtKTw)p61G zCcVpb#t5#Y#55%Tu^8hA{P@AeU@0DsIN2dnGoWEYr2;=qao(g*Otry7_Y#al%r1p9 zo<$%jT4=0#VwkDukjveW?=GiKp~7S$+mC;^v-(eG5zSCS>5r@}{ehd4hBKHLDT9F_NU+2qe6PlvuOHq+2`eWjyC-pmkL0Jhi9Cy%N&!q(I1caH37W|94|SpY z<+)!cqgEUxC4*XC+$z7q*N2W=v1uw4!{1Gt!P2z++2;5^mAz$HRNogr3P?zIch}H@ zbV--w&^dIsw9+}m07Hy~G($5mLkdVY(v3(-3knE|zl-1d-1~of@7ulB*?aAMp7Ua_ z^9jK=Z0L2QXDB!SIeUksCbKvTWzi%!h+5;HX(`8yFDo7}#p zmDB4b+40p3s>8ys?F6U{cUq>lni~J1jW6YgnXX;61>`bdgRgj!DN(rjLwaf=&KX(g ze-8$5K2}8Ko}Toi0mu=WuOERNR~~OX{Jkgr)%nA-$$~E9?$yms>f#e@3oQ;mkc0+g z%CQ9*5?)~K8^BlStYCXn&4Z(|!RSQ0Kkj}K&;1XLF(LyEg9U?)@fWe4%v&4v)6)$j z|M5sn3EXgh7`%?5JAOcvhZ!B*O7?oss>T=XnapdRm1~(RRstp$=!9mLdI=h?1{SX? z?h}E6-CLO(6Gd3`JTqTalxO5!?bz#IrB3*kD%JYW{%FN$MuW#<9C@OZEvm1yIU$?? zJTk1|Q4gEpHi*obfY;^N5SIBD9N?f}VW=w{By*~{Ec}v+&Y4u0gZ>eM{rh%Ec`(}- zjd65i$GR|2qr=gX!%05Ythmdf%9?FLu-5_{B*b^K5G~A>B2dWnAtgx1fEVjEx{lnF zFb-H}mhtcG-=X7Kl1R_Y=}wP+G(k4+yqcsC%Asem6t$p}B8eah@MZ)n$UrarzLYVR z&&<{})l@V^iQZ}0qs%??*;Roiz|bWWEG{R>H?OM0WS$?U zX_>1re5S;vhQ=7ZLprjWr<6>q&?;*4bIF1?iBG-dmptt**50BPme|{!g5XbF&V|Kn zHEryicwee`*Tw4m0k`7dyHp1PL0lTT8`KR!O)2%fkt(r;}Oo_Ibj|Hnl3 z$)%*2E>-P8z}l!QO!5_o`tk3{Lv&?o8pHIY`*Tlb2DoQXZ`4@UqU{Ss^8luR&N6s zw*6*o8obiq(tMK36`}paOYcynMW@9iPhmt3WE@!Kvg~_SBjpgpf=OwqQR^J+^pi2X zPNp&IHin1uj3yKQsz|Uda_K#zjBrd@m2)DX4(yf|pzmyguffj>Q59@!C;D7(Gy*au zqsEHlG?;E!l=eE*D}sH6Zaw`3_XkNkFNS67?uHgx&okZVI4+01zX-O<{!HaoSnkhG z>|U?CSMxb7wP#79Yq7e#X+)2$Js6RF%5pxDsw z`l$}&O9D+p;r36#JBoF4?Dac6*V#~h$K026FfM0;Y)(can{yw(jJm8$l0bNnVB3W1 zlr@6Y(cN|d;Q?zH3@keQy19ds>K1aue>8OyHrN`}&CrWrmr0*k$gt)Y4@~Fh5;x1= z*Y{OrWp_AqJg~~k)}|9sj=?eDR3^+p@TRqNppBeR@G$VXFMD^X4WQfBaWuh1Ch4?} zS(9xPWO$1yriwh^P{*Pr2 zMT+8_;2btJ8S19~`)?cRgMQm94{w))alkH2FW`#y{K5PI;TCdEjtA$oL=usf7g~M< z7f#2JH};+DF6YN97(qY-%rJ1U_=AWJZHjFpaAWaMTKr7bC_M2{fT*77i29Q^CLJs!>TXMT9Kk^qM}xZx*#JU`;ZN9$30FK4c!p%9 zX55vp$c8PZx7mU_gWM34xt8uX32co8bn?P=EbLl-f_1f0u9{j` zhM|NkTiH|z*jfPTiuTp>QyT@B4Q9*J@ZygSgrAkqsivWT0^O6(h!y^TZ%O>By)@(6 zL!WaYb=?K7IiYHMWCy&ipMGK1<&wc!&1lb`Mf}uDSr*7uK-lAN@AG#XGYaJrF zov=2jmvhgvDy1W`xy%wIPerkcBbOenFMCC|Q=@|&t);xv*yG!Kni0;wp61`9Tt6-QgqOyb|_ z;yR88yFcq@l6pUuDKkM~349kH2bv7vC)q7{hes){0XHN4phe|CL>AFuge>s?wOj(% z)p={o0nzE32l;J8G_uiBdDldqIdsH32b+T#q-=tT$>`XB74(VF6Y`3y) z0KGSy|IMjn{EZfOXkpi6*E1k+ZN!Je8aJ(#UGlMyi_mF!Cg|@N%PsxFc5Z-LOQ+{u zEKFU+T$!`&I%FH1DEuSTGZunR^(Z#1sa1B9jdvr@WFSr}TLg2yRmHO3<9N4R#M)Y1 zMiNO32|sXtsxi(VwY!h-2g`wH9&;`xQDeYFzqY``dWnRb zdR4scgH6>Jbv3wT){mSYJx}X`HFh%ebhk&tZwcRkijl2m|A<(c#F3%8_*^2v>v{u;)lxfUXtUanIs%Jqu zp^@twmy<^Qjws^G%ZO8_cP~w|uN&t?8gSm;r;_i<9bF{gdn`wY>m|fA0PRF_s(7AU zyIJ&#-EpaI@hjHPM6N%#)HeuHr{ZLv&)fD7w8Yv{dl!a(-4G=tfW_U4-=7W}RNhQZi7j{S<|+Rm%4XK1M)2$@Is?zMsx6K7Ley}LIPWpri@KR5 z(D}F-Wz+f==aXC6ZovU$fjaLS+4Cm0DN^)B)lUKjxpbs58Fp+Yi$7WGb>P#fR8znhn>?V799g&@Z z*C&2mL?7~!WhkUKO@4go3=d-{p{~=j|1K~G|z5T zHRa}+VXr(-P)bQm48qYH_P-9%lI}VLiigV`w^VaiDFnvz@Kgc8zR&kFhs9(ybmBKD zb5~THC5w#5#w_c!o zNN`;S@6o%ub+6S)4!zaZsss1HYTXzKu3c(org(=uLVGni`0a*{^@pM9N-@T4I?Csx z2CGi!7xUjBu(7gB^as+>R)>a8bL3q*3nal#E%)2+rETmL*AmZ;3J@Y{TfPL#yeaa% z+8{H&n7;$4sD3>uBLN~wKc+uyIyaBe$N{2fmWmw2^MKm3h0uiVHRpE zn?wXBlt`4PS5ZW3BveTPbksi`G#%*bF&vyDrG7h$xtCmL$A%>BKnb zaVZSm{w=ZhfJx?EIOn&rhRk8hjcZWqIXcVBoFRJR_^&^w@?xP}{2v-kLWLgVugeqJ zxAHrU;;EadNUyQ!Agh6mmJgD{2Kjg&ko*a(lY-t#_St<}eFdFZDO}w2gUa%0X%63y z*l==M*0#Is2C{(cW>V^E8if-i!I!7~*H0ft$HQOg&r+}0Ap5oK{*hYI25217~P*pTs;%f7q$PB6xmIlPdL!r%GGEz3O zgP;Y~MYYoC8{&K;mqd-%@UQ^c|FT?^uW@Vi%Zb*+PNiXQ=99Qefu*IiueuA>!FP9s zcEYI}w+$R!q8hUTsD%fl71{sB(sl5Mc_M3CJyO@@oo6PcUt-%HLY@+9;^K4jhrot9 zi69P-IV#}EXnr4vP32mf9x+o-FL+YWvDJTeO^oJ^?=EwItd5#6KI?_JTxsPme@!)> z=P1wnE^Zmo&7FD3n?IzZv~;Z;&`h*XtI%LtVeG@Q{{3Yt(p8prp}eNzUDxC9>EBHr zpw0tW%U+&Fo-8WU!l;Ey?p@PBcerSSceGjpxO8uw(wD;#n({7M*~UiMeTCDm7z&gJ zYj6;le=aQ!hW~`F(3rEQr9xT&ZwN@Sn*`6++uloEKTI$n%MxIEmW2mPi2YpBg=spS z#U%`Pr=|zhWvOz1ER`_ELeVCsTqj}=o@3VZhn9V>ZqF6rRk5mhci3ClyI4eDB{qhM z)k!;RsEd|H;-xu^inJFwk;Tvz1Sq9dvi{a>HR>DS$4z?kFmdbJvYgs zD*W}oXhQ^r_?TC>9Azt1&MasG`*ez;vT!S$>I7ZW$lj>P`=!BSibn7OoCT~r0;oR| zchmO@W+C=s!MFHhOBiv8x=V1eHf|Zj(=?G$WgvYHGFu1oya12mdmzX(Ij;5C@0U>? zA%jBB7uomn;Y_L<4ej!!Au~k%TRaL#?ncSTT;~HwW6oQICCc2AA*@m4r}4yh{Hk4E z?5qsXSZ3~ZrCg`AG?iDjFD6>eq|xBsU4ImpiTnc`n~K6vw(lKg|PaX~NRo z!z1biv_5XT-u8HfjCEq&xNA5c{H3P1^jz|cx`3p?^)J211kcQF#~kx}oQkuE9*1yH zenkCTU(i(0o-93VMEcnxiZTd25EtoAK!vJNS`L4qGUqvn=xuMTIw zdqy_#UMP4k7GN-`I@w=Q31vfD2B){hY>Weko}X8$iSrGG`!%ifXG1pvH?3rqRR0Vt z3RthLm{`wyb?q#o2yXOyjJ>3YUGHSwd#OH~!X@AXR#`KmcuF7|yn07>jmEF?o5vDJ z$&j0|&?;ht zzc5bGa1Etu4RDkO&{MiEGDBk$RVF+zwp1V9T$l#$EynDi_!wR+n~ZnQub$Qi{Qkk! zVA#N|y#AND{L?yDabLC<)A6QNunH#_G4#PC&}GUTULo3Os$a!8*F!eM4$&3W7}O$* zHt-xCV~v{MFf$z4UGfS!3)6-_X-w_fhYYIR zDmke|n%aAJF7?s-;1D=5#yUGQYTeh%{#g~sBSZy1RjYRt#!+St4~$RM568GmtAFb7sYYmm z)<+F%#k-NS0$nF7-+>sNUvanM9liR2)tPPHJ|w2KYp>{yd<=MM)GrZ7Yg&1RZLB3LpslnJlk^OIb9<;{vBn-}ZL!$FD+AGY){X$YR*zBnX$1C5*tEG% zt;B|O+2Nn*c3Iu%06p{Vs7W!;`i49Jkdu`KKo%IcSG({LX9>H(YWW<0KvE{qggr#^ zx|k2@~y*wRqe)#4p2BPiq7eMQ0n|<&}-5?sl4wU`EAISp*E=+m4U$! z+o`qrcw$~~p;etcBt*%F2iu)Zzo|Vv@3v^p3We2e)s8v?EmX^1@H_ubUb{)8w0{qg z+N$gkGuShJCGKKLq03CXP*Gia!1nwgmn+ZOk6kt<*-TK%-B5@1G;lp=q1!dmqK@9W z^XJ-j3XL?eSCE-YetJ=7L{KJ|jdOt&Un{pmyJ4)6y|oMRmAeYVmAF-E=o`y|N^vRE zqEg2d*N~;5&qHZe0Dru|R^{rG{Y(+O!&`!C=bozDfFNm2Mx46Iy|>$KCV^j(kSefC zSwlK_QvZdDvC+_Hb|YY$e>S_SO29sDHMF;z z`<;1(7}a8{)!5Z+jCgigxz`(Vh)?(Ykvoxo&D;#-n}#DbR@gp}r0Uit3WSrc-{~{f zJ~f;q7Xzri`B*ls^`0_8o-|-D3Y->=U^lj6vTdz;-i^4(1G8_hUJ0=rz<8c4IFc%& zr&9C`Sh36XJQ*e~f7^Gu*AY`%Y%mQTr`Y{@wvhGi!CrE=rLhdxJ(S?AD0} zRWVsak2KE_q7!sf34%78mZ{+hR-iT@Pe3{ z`8sxIqhw`wR6#*k*%VIHf2S{JfFk}V4~r$&o3ykXH1m;Ia~F4w5r>Ua(^ekFjD1eU zcFT<~^!}`uo)a!-o3C?XZLY?Pw)B#igOq2Q>h$-~?*i|?GuVx^#CHzicLXc`6UF(| z3awjFXM`P@>RO&RnT5ZEP})Rg{t2m1s@DG96lpYJ$GoZ1MWEA!vvWB$x8J@#a!^rG zsu0=4WWcgHeSGGX$_r2Hz`4tfkI8OH{Q9R|Tr%E=7F?gP1@~zul*S^fLM6gJ*ilF{ z!|U;D^oR4b&7OhmY&E?G&^*Jzkz$3jS-R$hpMF9@^#xuOL|S4L#8HZ=Ach=dG*X{u z8=19|;iYTT%ZW)>?9P0Uk@4zO-TJg=sf%9ry*s0<4}$r5c%_Cb-okUpe7%Iqy<(ol zd>w`=6*5VQ*p~WM=mgtOO|a57tUJnBS5KPkT);7|sTn^Ph-hgaL(NUSc0^1r0??UB za|F+=*pHffxv_hOV+an>gJ=dSgMI{5wI=HOy_DTE5x4Y#f_nSkR@Q#Jr z&DOf{LLLS?UP43HPQ9uwEvcPi5OZHS<8vRPbxQz01^n;*+KREMT5!#(MPFCl1g-Vy zr$$}ea(-+q1pDbgT{k{;;xKJ`6lk7!^8GO0glu0-cd! znAAA@OWaboa;Mde{-|)7+f9auLzV@xY{KFTEQjIucj;BuD&H^oH%(rHq_lmh<(fI3g9EG&necW>7s~Xvn#CJZoSR#6vv$WF+AC{z*W`z(&t$ z-YJM29Y@N+T!FPNQy_3VVKyw&5Y>Vts)6Z@z~0Q5-;(=$vtyh(KLJj@G_4gxtiW}( zEnB$MPzq_jFlCIIrM=>b{^5y{)_7$nSK48~wE;=QtPx@JjlvGo%=hfz{82A)@Tf7W z5_NWDK9nVev0z{N^`VHwd8Ye)Ih4z6k=ap|Mt4F@(_(E-fuk9lnWLI%B#law7z$;^k@kOcl+W5J{tuaH3}5L+OPq)NAE}4u{@C*vUJH zPF0C-U)e8P%pEjw9x~RJ-bl(Jj~$BZ7{`(Hr4ijoLo(3X`Ly=$K|t|>M8^+tyZ7p# zNxjofc4ls9vVn8la0#Q=A1-Wl(E}Q~uS5Et{!8#UkCCjY=aAZ#NWu8%2j`TyOhOP& zt-8+n*&*HbGRh?3yyJ*BNNAv7rrPhtJv%Y@_BWv=B*lgFrCB4;3y5Dd!A`zFkp_V4 zA9PP!Rv#SIFFU2XNg0kdcRvo6G*U7}Bg6j^g|^fmWF8}NZsoS^I#QN32b=G01XZ!G z05y_KcW=7)RXsj`pQ?1K#GVbZU^3TsB=laabEBKxkW6rK7$jv0P0C6%G3f+M#D?Op zISR4x!!PTl>>BH6f{qro)lG18a!Z7Y%Zm7R8&eD@@nkrG9qbU5BsF%|zz;^bN z^OnWfgOA~k3*aE@C1HzA!~JVPujTVJK$<@j(M%JgV|{00z(E$<-!n@N_Z4Aj0|iHl zxUgHUvBh*ocv(xF)N0u~Zo@7PZ6AJsgI;9|?T-N9X_QgzB|^kb%f>v%gVI$_ZdRLzCL)DW^qJ@lax4780*tnxqY?>eO+4+{g@<1a?9CZuAf$* zOyf#(x|zIbwYf7fPfzK78p^{>aU_@96oNGA@m176-cR;oS(=9E9eF~teFGb+tGs8V zOYM0HzkwpM1QL)>5SJg&hk(W-^Ziv6BoyQ?kB#kULRe-KQwgV$hmi(W8J4urH^65s4Naf=42-Oo=w1U-So;U$FKLDpA+^h0|yM4 z99f~6YF7s_H@*fbV+281+dNDVIm##l6>}zWUVut%`j@?`pPubL-sdJKmvLfLXI=&B zf?pbDEro9-rf(O(ExB6m(m8z(BQ2)6KR^Zj5FJwJZ%PbGh{yZ!EI|z$Plf6P&XelC zzs2DtVW%}81L_XWD0`X$#{D#g+p zE^{MlCE0=Bs`H8q!l`$#=LEY4eY}b{RG&~YC8ADN)oCpa!OZOYg#A3%%dkZcxCMga z@na`2+I9SOg8vDh9t`Tlp=3f|?b%qW%w5-etlc&_GI^_>?z?RA)J)Ig5RkIub25Lv zkgJB>bud-n)+adJmlM$TtbcHN(6oe?i8CXdljK?{MFSOFsJeVZ62CJSRC+BXm&Xnk#)r>iM#@M)qJ)00mbkn;73Mn_Uc_OZM& zR*b=ZMev5nLg1tHs*rx~%=T?%vAc}%Xn~ObN*d<8IaIa#;8crKj4vK-auJMBh$wdeQOe4pVJum zhBvQ`IDYDGc$;#idnEtL41U4tt8{kvgk4oCRu+}wyUyF_^hkAr&GSeU!rlaVWr#TW zAv(W3)LF=uhsE4k&KBqxxCbe&4@BD4*qKn2_T^)x#XZ_Wx|%{6lkMXP3!MUmow)EU z=u*PQzj=tMejzqOmw-slkx5EXhg*#Dyz`Xy z2kr6@DJsRa7rp9e;I%Nmzwh$Qqto+bJ6O2LznYO4hDM^yZ`Y`Wu$b0PABKZxwchFl zNKc5bA0vWTvK*}@Y0K)W*51GwVglzCwkjBPgKHyZ9$$z-r*A8*YJh;d2siD))mFkm zXb>G1UlXZAO}lQ{r)>$9<|T_q3EIVgVEwsPqK!69gxS~+n&cFlJ!t+o#DLfDU}UKV4up;5LKJfh_faQ zPHVu~d1E*+v)&vvN!GVdMdNQ7Heph??AaFQ`2NEcmcI{WXP3oAZb!|cRegKhysDFN zb^UqQRSWs@^Ui`8I#KcMmdfU2!mo}38yAw@^qb2+L~o~=zidM0+uy&b83-p5%h=ql z=i$}+JK7g%$tn|+py_zj7v=)=eL7la#cOYj*!u@iz|=ZRuleIfLG``li)J(=Zvxe^$BM$m67SHn@g z!EeZxo=s>S@S2K7V_|E!Wv#pB>gZiH7Aa~Z(Jy~#OR3SYf27ko^Javu`?b4YpP@Lw z-^wc*>g&XXO)GUW+k7V(m3u`}l8^sp^U?WsIZ=}K(=>-{{$QBN?uMVR_v*rZ6kH4n zX0D5WxSKBstekiE_Ki-MeaiY&QyB?j>xsphD3sD ziqQ$hJZ@H@Hp+5}nW@#IwfBSJtxMW@TUc#@9CWN8mdm;B?39Wd?DNuR4Ea*j9ljOQ z$i$fHOp2KT<~Qsz=qy5pv!u8(DJfH}huNPS`ER%mbZ$@_-2+r|#5a7yQ^r=I+)OBh z##-rdK{eZY(>4I+1kF|>0*;6V=T&L()mo>gC#LDbIIF5{DBqNq(IsukDdkpXPhW3l z)OE0o(6OLVd1TjkVoPsm9+2}4ipC># z9tqC=tJcSe=H4F{;S5d<eig_NA4>dD^s~adAxrXrr-MZ05WF$EFsnJ(+#?)$~Pdk=cHMmk7$U};Jgg`xqbHvfW3oJJBnftRM0k|ot_kC-t8`Izv- zR;Tx~S!=Ltqh)=E55;;b6L0HyvywI;_AUbf1Lm-e)eva<%naLYf)aE$Kqx)F03+XZ%oE9!5^t{Y%>J=*}%{oQQz@eG3D`R)7s0XIP zn5Cu%bXU7HFoCCXgglvWZs6E>7myUFJDH&fyt<|Aq+rIs(-=Eswx85aZ3bJBZ&G-E zvuGLF7xwj9o$}+2Hc#v|HG`^&L6l?}-PI&-V+p?_I|{@-fug_-D7Xmq#VS!-YoKP=L=d2qN)Lexwy`YWYH1W9M5Liv66VjYWF4T#N}t zvxxlr&E%JVQ$`e~q2_kZ$vp~|O2@s6uN)c8{GH8)Y3Adh&D(lIOI_G5Ta8hZSP9L} z_(hPYJm?QW_mq(~f3wOuu}RBKvzA9<*7p# zUNLh9!tKlftOgD}{G3!x+%oRUgK{ou`NnV!(JY8#VeZnrl0Mtq1*MWvK7rlKysU^( zL2FDftpu+VE*a-=V?9tKKK|o4o_D<^qwEBNt8|KXpkmhbB+M`&ooXqRs?*JleQ|V2 zfCGNY8zhkh{PJ$1)c#5MPi#xsFVQ@5)~h_IyTYr$z0=ZZX?g`zI2;&%FK=AT7O);V>ixqdEuV$^ygtyPd25UWGDWXnz z1*rnULHR@9eun)y*P1%)^!TuM&!L7{E5qHdsqrEr`g38Xoll#RVRC0zazmZBW>g!g z;+*pYGlfd@+?{lvVxL&KoPDZowo4>Z|8q)UgfaYmyl#-kYG}Gy^2saMhjdsYFhTo)Q zo?Lagww`0mg0BcM_NYGfkj-XIui8={>40g%Y9Rv3D12riaqHN0H(T$5T)Dst28wr% zXpRN#p7h}x7knPC#$^)6e;1?T>h3ieDsyLspxllj&tpivR)?cO`D&xNV$T9$nFIlR z0dNp;9DcMjEb8<%vbZ+<=%eQm^*Lm%yaF!zlEipT>sFvab$XQz{%d=e zGUC@yj=aLUF*TW(sQ8jQhmLM3zJ*s^kN^$_H`*-LZ|!4$5Z(4M;FRo_x0hNUO$Ow zxm6XSv;8ia8%QX0EB`6aVD~Ra;u-c6S}u*|DJcA8dGGpP@ZV5sNkA;|%H+fU6Oj4w z<1q?(9*cIg8T#jmtf0%>wDR!fANKX~>fb|Uzhkd|`Cb3{{%@AwkA2Yp>VCrBt&IM+ z3-S4DDw)ayi@Gi~#djbVcps!;vL^w;QZpS&2QFmWwetUf_G&1kn}a~7jPVx^0fZDC z?Mrx7;h2Mhz}@PZ`nH4u0mhdnq^$Sz^&t|a`xpti<~!0S=|+}^sJ=Px#AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^000SaNLh0L01k8j01k8kYb3MQ002N> zNklbmW!3JY&Y>WZZdk-ZEBq1m5q?dEj2q%HG z6G9RaQb-{L4g?Yip#%tEx@~a9y<2Xwtgc;W=3DFjF?(;xhI3E3_qor#&+j*n|MAw| zQ@*mw`@U-psqVyo<4^(!Bu9Tr3L*ds018#HDr#I8NB|B%K(5f&KXjybsJAzt$@-oT z1qc8f*NH?UiQ4MwQH_b}D!56208eZd5M~DH$ZHiZbL>ITqi;+Z(DH9p3E@ow3ad~; z`If^QVSoSu6d(Aw2QX z52#$cm!mGh#i@W2Q~{_Khcmo)Wi34xK|$qvKI#l3hpRXsTDns4#^mT9Qt5HRM^h-3 ze=+=9l*R|D(C`El4lfA+1p^?+QF9m0k}9b9M5VLRh%pT(kwE2-%ik?NF_8f%JjaNY zL&Nt+7%^bOUpQuj{x3i1zqx_mb?1~PT_IM;I7|s3F8Q8ao3?ap*s}iB*ZOwv&mB23 zc(^;;H>iPzb0-V{%uqtCB3?PFA=OZyXd69m>5@q&&uyDF3lNnwASLrK(tM1Vjic5L zj$ZENc_x5Vguuk1O<|Px((qGo>4&EDUmbDU@~kW1Lsi5ogop@4{7!qPAQDvwv5Aa0 zC*I8riD*H^5;60;*eNYPVQIOGsDg}f04^Dz@ZQW(zf(^{m;sQI7I*bAb0-j0!v;iv zDP77ctco&m`T9zN&{zsa3?>~tdKh616%dgCP-Z%M?vA=Tfq3{?OzE`8Olvr0!HBs4 z-~dkexk>?q@@_n4&=e3+fQ&JvH6Vbfh^S@e5&KyGzp;VCaZyzPJ8>WZJ5yn(U3_q8wFj;~@B_Id;k7RQBSS%iiMpR3-yyONILDVN)m+ydWq# zc@=^(5Ov)8>YDmw6<`2QBn=32=$dq745Fb86D2Z4Nx;oYdN7;Kdww7#R}^|&Qm8}> zH`ms=h$+%gOU1KkdG16NVCDo65#;lMmnjqiE5tCM+Ek^10~DY(T-`iCDBcnM}l@HI=ED8zChn6oNu`Z*SkgV8n6iYO31nS^&?g$E1Lu z^jm;cLF@o2fbw=wKn2e?hNF&&as-F~L!v>+2+4?;gXmbV@V|S9m(3CVpW49Tu!>bx zGEM?W^c>v#>f=wY{_9gaUtN(N^s0a)QN%dm2B$DSf`r}>6#A!PtVBei@l$3?l=b~? zAX*ulfBA)%ed6Z!6OUK*AOSG}0@8PEVEp_3$|#J01Gq20wd%2DFK#)|nF}-$jYXnS zKt;7QKg1vag}~1jJTDMmEI_Jih?z-593t0YhqSJ$a#VFqLv>|SP0jQP?bBM@M%UI6 z43G(eyfF-r!U&wT+qORP+~2nxI6RQ|eNe#{FR%(VYyeg$Byb4zspOe1EI}2lWUTNr%U`?iFON&KBI9e?^E_*PU#zI8WhTd%sOvh6n8R_F*2>g%7hQ1D z^y#b~lahwUfE`K!W?N^+E34P-?Ck95JTg@9j|>j>4Q0r2d=XG75m0rABgRAw)z?%- zj8O%M^1j#G-|u;zLx{6ZX&Ut}pZVPA$|^zDgx*y_#8%l*G~?Un-+c4U&6~IG?GSbf zo@WdvBJQZFis|j`m!5TILp)`XWfdYBj^jseU@dK6`hR8vm;AuUlnoFOfY?+3=FrY< zPygz^=k9$l)7e`AR1#v2qaqMh9hnpkTP-G1Vxr<^4#y~*S0xa$CFBCX+XAWR)t~=| ztN-b<6me91V!R^>f0v-3G`<970gF04Lxm52{hwdnw6$)`q)0_=AY>H+1&EXtq6AhV zC^0jW6#)@LiAa?IC1zq)5fK~MKm#k*BlRO94T;!E(Uee<6Ej)0__P?a7*s5 z|NPLme)cO<*W{+^oJ0jo1jL~qEC%ta1ceQPLRRwWSm2#Dd)CcYUVhT}DL^5RG!uv* z3cwhuwy@8xeB%#)duGMv?GmftSb~j9>=3bqD1^yCg;Wg0*!-dG8_qm&#`nMU<+kb? z)f|xkBuWa$p^B9|H{bu{Q?G5@)}8YaOR^gQkzr;Lqh98~o^$8TzWsBbt&X}RKC=o) zVSG#9{nanN|A#*`O`3s7rHLg4MC=l=LKF%Ci7=^=AjtG}Y*_i#kKX)+n?7u`P|AKI zp!mvd8y|Y^`B&F(I+FDeOOg{KHsl(^21<@GR;-F85hZBxfRmL#&wVQ&d$Q0yPzxj@4vDIj5D(Ge z%(b|)h#ABH@L5@u+uzY7C z{7%CL1}Fe4qTPMj$6tEs!p?NXaHBeGP;E@KYs2g<{YHbjJj33y% z@8tp!a$>1U0V^0pP$7c&1wT6&@pCl}E;)7Km)`$j)hu8M>;rFZ+O%xN+Fe6~Yj^KY z2Y?#`94Q$a1sEKLAWR?)GQC~Z#-2WV=KIdO;Dia2EV9-H5tFnqPrUNVAD(%7&7KZF znoQKxD>-5@A`vJ>HY%(EylkyYSDn82>N8JktVlr%hJ>K11{C!X`^h5@+Qo}?7=l`ef&k7G3jLX^uN;Xd-B{czRFqUnY(<27_ijIVO!M!)|F5KZ zgK#OTQgp|Wu7COQT`RWj;i`I##Dratqbe+(QD4%1erLx6cl~I==IQ2!P|d-?(v`h_N~XCV_)hBamQg%5y8w0 zCXTOfZjM(Z$pA{EM8vslM)JY(Wy|^w9qu2<$AP%ReOBgNxa6OHaYv%LNrHR{oesD0 z(NOKX>}mqof(;TtObJo~ zL#2?5i~o_UE?+cxQgdBZ#26LdA`k_E5BK$L>)5|ynpF3=9mJ8K-DS{$GV1w{`T7PRa@& z6=wL^f%@wDg_EZy;4?gck&G1Yt+5%1oOjZKhu(Pk8+YC9RF8ri0~o}r2vh`!IPnR` z&3^Eyr{8z&H7AXqplU(35Tu#3kjb#9K@qzHft1UJr^q9bs*o25QzX^Umhuy<<}GpMK%%H3{}4?Xs43FEr$(lo;ws|B$eHc>^`7 z7OIdk_MostHsY8^5|OHeCP<+o77#X$7pP}# zA|8#96D^_BqY|TLw#>L z3+aQM2M%?0WrIR*Zyy^6M8r^qh{U6ADjKV=s-8Y&Qk9be81O{0s@CxECUwe-W<-`- zq6tdd0sw?ml}*%`RM6k`(jOoA>#zT?W99k;(B>K!q=8j?)Ycu&Lz%^xwCDGUR5Vs! z`2K4aUVYhw<7dE00RrTqo=T>e){H;}!a#x(?%3m|jy-Pn`5(Qxd&l+{AARbX2OfU$ zwRNlKp7HQ&&yAjTybX>RLnX)c?>gV3ZisLO1mr2$ zjYaAbo4Wee9ylD2B@?xcffZFKhzvwE@B_n!i8TzvMuto(5_k>O)eTOy7xb_bUY&)a zzkU2qFRk0uFnM~;5~#?~k`e=~8u7iuJGMRj#N$;7Cy=zu07Rh##YlpNl!2HNsjaRs zq@tFMTPC=*h;S&NhSe}aker~RzC(P<@yAaa*LGmv&WgsiK*^TCl5i8)p0Z`sz>Kh&4W1|Uo9*+5k(C{RAVX!^9ze((d$m6f6%RF&L}7reE3 z)v7JqHt*TDzqdc9bfBx-50s5j6^K?O5~CXG2-MZnlgWE92E?HcQW6yl5mKp0M5_~t zX%i{+sxoX)$W=t6O*NG>$BmgWzJ0-r<7bQ+XW(1O za0oz>I>+$(rNDgzuqF@@DuLC|pA?hPqOVpW zuwxkmzCUQCZcM{P@45V(n{H^GIvog9vl?`T#09}nxPEj5-AARwSpyMIHABSp6USZk zh0kC5ksDw7%hNx-<7bQKEco-XXJ*Y`0yzTK(%Skjp@LAh%B^sFxxrU^ZJ_S9(?Zal&UqcL;$0u*p-P~W>*S3H?F<%tfeQ8nF7rago{Zd zg%3v{QV@{>r7b6h$jfFL>uLhuJKWQks;aS~qN;>I#6)AsXdJ46wPE7q8050)2%B-E zn)(NaGM)!^ltvCC2xLGp$2Bl0+BsEd0Ib@$nUkqNigE@W!F`e{#M<;=d(|jkdLslv z>3hUF!pw#gpaWBxN)gmrOU3IH|E$BwR~U_jXICPyV&1rkcYN^+-@W(V9bNkZH|fNa zZX^aW$}A8l!I-N0(JHpf^E&edD_NBuwU$%~;u;u{R5X%w%;@^s_NJz(V_IiSo-nbw zxjG6U0`&z}K?L_mHusZzfBD$UZ{#CMM3QjhFpiQ@A|@AV9d?Y1KRor!`4^nmT-g*7 z6Bhi(Xa0K2oj*2pO_9n5j#da8w|-2NIDASX^{wpg&ogl>Q6Gr}f%QY>3L7U9iG+DE zLp>WD^zEK?yA&FUxF%9v*;Eg}D-^7?Ohkqwktjf-NHE0OjzVtt`kjA$b3?;p&(5DV z@uo{JK7QOd(JUhX#CeCSQjnBYJt8np%y2y0)A_>h?|$sZzvS}&a*=uY^Vk6(GoEjNEcHO*uR zb~sBR1xfg9I*dCIR1=BFt_|xhTX5|S=U;T!efR$D)z>N;M@N$h&$mh>5~Af$kRiCN zLtTg3YN|f*-uI6k+jiSef4ZTgCstWym326#A|QlcHKap|WE3HXLVso`UXipSA)r{s zS)fA9xoqyFljax1bBO_43d+h`vxMR(fw%zga8Hj_IF1`A5W;XH?5UQdTcHYvG*piT zD!J2V%|78fQ(s-T{`t37t>3xlK+i!RCLklkG7=N0sXPed5)3ufK)q4%9~=>>_}W*}pOUS_aEC3VhlC=aEO zX(D3g2$53)q0I=HR5>&dAPdN)@44ZUD=vC*+4Ft9o%IcMs!GHobU*(UI3C055Ctn# z*bU&kwd(+r7$PSOmH+~b<2sdf6>JJY;7cG@U<2zHP{>ypv{c1TJNwkjmYhDLZE_$z zhNWbeh|1cg5QC(Vu)7k}08tXJ_wa=Js$YNROOMTe;VVD+VgI00)6{0cR>J&PnGj^t zeTVm-J#X$;|KTGOs$13`+DiE}s|}gCVIWF|E#pY?4uFAij3a?{Lire(qJUB0z_0|d zczoOD^>L2-k{M<|i%QF~Mg^h(u`ik}1XhVdK8$sQpoU2eDZh(OORcI}8&tWG3+A43 z!Q4e%>FxtvUE4bL?d$C7$z{3+hWgUko}rz{xA=O==ArAFdP z43!W8CMCdx{)@};f?{G*>(@T`@c@y3TmIsm_dk^Pm|}^LY7FBi$54a4KRbY(EoB&*f?HuSG$Y%S7hV~sgG?d8-DG`^lM2$L5Q+<6?UBl@5x|+C> zTXV))R{=*(Un zS0tPXE#s$*ZJpBAI(zDrhIkE-xAw5Z?!~2NC z9oN*fe8c8MO@md1+EA-Rq+txk#z`~3wtfBLNymB8W55I%ehei*6V9Lf3l-3K}Y zI8i5}mUM*w=i)Xf6BDI4T$MO!5G^2+3#`aM#C1odMvY3f%o#ru5Ww@``_`s&*_`L4 zGr9hu^k6pI)!*NjDRd9!)^Fdnv$M-aV&q0Or216^0wRv360rnp&D#g}eC20%{`{-A z86u`Y#E&`7#Fo)%gWV{ z{^GYQ9(n{BuK{QZ;pM>6$R$wJ{j!B-0y`k$MA35M^oy^); zUm!%GidY#I_UNRdDAftCR#9C1$E~-sNWT-%x z*C>@1CaEfu|GrBved_sTlF7QsN?$BsLdPl~fPE9GpET{Gx88cst>2hGVG6+q@<5Fw<;b+s;{5lF-!nMwc&)Yg`i-r-O?fcyIH?N@*PbIH-I;uwWf zHk7Ioh&7;8RbAKM;QIZW=eJK0$&x{ULUU6?DwXIS$`b-nHQ;idPO79t%EJXG1SU3s z2@`rzQbtidHylD4W~ihy8A(+N)IgQ2uZ5tHa|j`cMMZ`?RN1PiRke;`)gZi(NRZdQ zhMEe8ge2hNa7h`Ego3GTkJSki7+Wap-?44irX5GN@7ehB@{KRPMxL}pOe`Li5M^Zp z(vozU0uj$j0h$)^fVv5zFT3)R1(%%HK6?hoYk-^t{eZF|lsiG&8gUscsHhOBFa0M0TxjqL=y=z1{$a;AXF^M3B`U8v4$za4r`#$K!+H#VCr!T zrp`Q?QOx`H2(hCemz;P!LBFMaq!U%u;S zsnKI%74-$H78-I|AXqXKuLunP!}q>(&b;}j&YCe};`sVhGVVqRAaE`Sx(Cv4y#2-# zufO)z_FbmB9&X%*H60~TFpSTLoWXQ9lP^G>uv$ThJmBp2TSR0ucf|Nh0ond^VW41FY+mOk5=sq|@0#5FjLED9kg8bz+uONkzrCwk)AgsEFF4Wn(1OS1H?C~czJ^xbnP$mMzfFqt|SUQ?xR=@%bq#7$5 zC$%qKyr_Nd33Ja{5=+$rJ~U^89wufpT*Mb{o|16cFed@$NT&b!mCyd=N z#4FuYW89dKFAs`x7lbM{CNhj5pUY+XMx~->E}DDw(zB+vj*d|rP+&-r<#Mn(jE9Y| z9L177Ca{oksKP;fccwQFR(8PVoeVO&PIk!e>g}I2dK6%N9VGR+3KsV#@97&~*AOu=(IG-0GE~mMi)M(~ zFoQT|Dh>?wFWRaZ6C)-ZvL>FFQXx~Ib@ z6S&bxO%s77$IUGj`lt)~)>m)2?br9_GDB`fEl1)C z6G_!rv7KIi|Aw7Utln4|d$KCxPHZ1jU6HhbUy9<)P&U7_<3PV(=+An|y2b#8z@cjj zb!_SyB}-(YCIM6(>gmbk3ox-Fc~(qv7_cB#a5NToO{Jh9 z0AK+Va}q!myD^YMOd-5bbQDCQa3b-*w|U<>T&0izzKb|0nl1#Eje@m^*bj>ql$e}| zup8$%5O|u6ndH7~|DT?JaVSs|j|+-|FH&_K_A^6~pm5ds=Z>#!7R?d~iS8r?C<4R* zUk3YkY}|Tq+s@rvx9-@w%LY;`AX8G6Xgo6IxT$U9+N)a{M~@p**FF}UEQQJi=3-cV zOo62+M9JYOkj%qdyM6alZ@m8c`i;B0d&EsdQ#E88A3b~;m-QSdo zows1#)n_lAHmVKq6j=%UFfJ&Sr;TKv-&qw51&gvzX8Fb~e_y_8`SzWi>4J3<);Lm> zLl%qd7-H1g+|cN%)S_uq&Ny-AiBl$~A_nU7$U2_?6j8+jQaIUyUAAW3UtfKF)4?MH zVl2l3GGUGthR{p|6&J!muFBDIwW)JXo_p0t2&!U?i9}n1s?F zNYtRv*EPPb;+Buzd{X;3)f^K5VpOi%yY<1RpM7o1md>GE09PE>jU|i|HS91`;0J*X z3SQny5Yp*kT4mToA~AN1ahyOT+!A3z$hAQkxmXz~K*Ea{foJ zyeh>|6o@RT>;@>4%XnT;Q$4!mUrk8}Mn}uD%Kt3jsd{29NSO`cT`JB+pkTvEAl{Q7 zdf~0N9(nP_wLA6}$aO2KO(d=$5iM1tALRj=G-BAx3}$<}rnWSlf9iruPdjydZ6lDk zHcKQ-IJU&U2#uBr3q3|q5^kg;LzxeM)X2R~qW$6%ex4z#^X; z>fBey!M8vEnTt<9H?V^)17!aTM6gK?SspAqm#7?N8 zC?@w}NdiZ$*WYRT58w9bPrdKFi$${>5+|TQ)o_fF>dN-4SpW8lO9sT^D3fQt29)5-lVuf%u;I`3PxMJT{?a^qd(pyLx+HU$y#h-vC7u#&wmT);dAH zci+wrU2?%UKK8Mw5r|JjqH4GTh;*jAH|*TCYRi_5d-m=;)Y+f$GX*QmCK6>gD$GR0 zq1Lsu%tTZq5bJ9Yh*yX@oODfHMSM!z=xJ?jbEi!`aq6@<#S}wUe1MpvJ30@3`Cq@k zZ0)90<5-iZQa2Kkz{N081rS)@Sg+7~xNrB?`|kYVg^SO0!Rz*Hx#{zt-`+piI&o&e zu>eNGa?wzXCdx#l${Mhr-M8iK3+A8vliPoA^H;y{!m8Cx<0o?@DasNSxrHl~m7%O~ z)aC|{WDf4X{LCeHeC68@J@d%d@4PG4+!{^QcoNoXsN}Pf?w{OL_mQivxZspiTzF95 zkN`rWy8+JT3NJ5zrMG|J!m}@|N{+HJWP?0YsJ&J#-sUjd0f4w9-#&`T3UXJ)x@qX$5`dQ2}OuS9mAy7&kTA4JuRvDjTc{Z<=JP| zMN>f5+ALGJdi7m>-T%}#62PJiitO$@{L-7N_H=jmX7l?xy8ubVzgJ1)%zNR|r zaD7Fxt*&9J?p}c*HdeF< z39^c{4)OT5(MbmliP*(wo-uY*BdN!*#oiagHDRRW2;9DG_O(^3w;$>p$azCKud};1 zQz#(heM3J<+R|9>Sle7%aoUL|oOs;S2!ut{WAAn2YvNtpt8mD%DU`IkvH3d~?gR31eFuN2NF=2oCfgerd&=gR0u;oAiXn>#`XsC(;VJ*HH4n16;0Ax@s zI@JG}yVX+R>QT-g04XscOjQ5`0fazSEHjTRMIeBS5l{rkC<-(T-r$&|pom^0StiLX zf)cQ;1Xc)vO!2QS5CEB?po64bB46q+gKz-YgfMR?wf7Z%Q2fn^jshCC;V@hb*#sy6 zp0xoHF-L(UhQod-srIu9p8ypZ$*h&ja)_Czd}#&(3sE2+6bgj`vnin?6mi{{8+Bkx z-I~H1@Kt@$fJT&-msg8|h+;qt2#U~DiPS1ft(^;o8M_d`%T%6$;}xpcvG%5*XtE3BammiAbbq z7gUrOrIHC6(OxU$142cRQkX@<0W4rKjBAz)gj7_;3W%5uhjWJ{kO{vps!$CpjR6r6 zW@e`1YM~KksHjH{PZ=V9VIpUk6U77vLdAYy#r84G#@cWvhJcR}nG!U4)Zi3>mXNdv zrQ8^iVt_;}u_=n3!&oX5J=5@Rup&gHR!hi8Ske*(g-UG1+H$M2Qd^QR%Y{NjB!ucH zgvEv{dxo<)4J!#kCr%uu{Grf<2_sf|c@sj54Ty+CE{9Bb-7+L8BC4U}8_cGt1l8i| zHS81#NGfi80&D1q2&zJ4LLn40hi5X5IXVL^&0sN*GC&N-st6HV3E^jh5uKS-tf(-7 zctqEjVs8iC31xt-8i5gx|K_iMy6b`ahrFOBRXKO+^s^Q&m_EL}y{WmvNfg)R@O|(| z(zP#_-rv)`;_a<3ytR7$?mdIb@rqiC#H@&jGFVAg~wpUhGH8eIM6cU3JLL334 zzq`A-z5%EJ0Av80%#yA%%<@g~np3l4~dH=lvjv#S$9k*hPEJs!A~Z{e5q(Ts3e0$(5B=AOXT^ z%J9L1lHDBXJdWB6PRTxrVTD=}`M`yjr4m&?{A1Djsu->x-0VAfMaWv2XXm!-x6?4)*o;<$R6AqgBmu;{;;W+EU*fEeBu>WhO(A zd@euKTjlD~IWw+5@7(#5jwAS@gI26zu=(Gyb%%rf5uub4k-PEDH#&ChUcYw3+iTY? zIrH=neeyHefuX<;pkPxW-T+6U0Mz%%jTVil4am5VK&>t0GSOrbKt7vRP%KvY`yc=0 zkq3VNoge*p`l6*oh4esQe_wy|=qBSh09k9jOlGLBFA|NDag$Zm@mR(F-TS<}mq=6) zbJu}AgM*oI6DF8Q0_ulNr-)qyS#lgmPzujUMTp~K3!C0vURP7wJa!5|xt`9~m%aG> ztE(nYYPtHo?@d%xD#E6pu`Mg!{Kltmsg6rcL!&aEaPq=)ue$h~U-|OBuKf=_^$Zn5 z&;m37aesFgf#a!oBoYNNaSSNz+`6Hrs-|{Sy@JH^)~#7FrhR;UXp(9OhtO&VAp|zqsNYkB~o4{XRXAONm2E3Sz<&J zDeD!CV*=mva`{Ac4TuPG;J5^)sp)e4!o+Cafo@L6Gl%2RzMapTD(2%;cz)~tB_YoEPk;rtUm zck8W@WD1a#FTVJ%w|?`ZpZdqsFMAJB4iH#@aUedi0UU>-o%;?IW_gk@*30*IcUh5C zRfRI8DwD)K>@UlqWnX4~PO z^&JOZT(j}16|0|GvFfRntDju4_K6j%pIy6Q)t&=8`qJG#`EJrpR z97Bf0&kW|e4>d&e>LrW5a?|^7JnP)Hx*CxoNS>((w*Na`^uOwRk51i{R0wRgt>5s$ ztFNCjVaj`M_`rfw7muGZ#qa9+$!&KS#q34rJouxZeC{7Ud(K&BW_o(BKl}13*KKK^ zaQo-}>5*UEd;F}~m7`kk{_0o0^~G;oaqaag&R0MA`3HV?{}ng9PqTxEcWyuV)FpMT zW45newRZW+NAG{~CwKhp%In^bps@Cpm%ja(e|q7ezZ}@!@#gF6kDD>`kM}+J{9pfe z{#oZFs;c@A9e(r0*KYgrxBIv68auk>(;xis+7+wjFIf1KTW|aBzudm))Ps#^ZBQqeDukSF1_%;fkUso@akD-p84l{?)lYEelmO3%w)1+PPo{ z_Mg8vdDa{a)M7(HQ{pU=Ji z%o7_{y!qDaYoGbkpIYjwzxIhQ9oc(u&f?QIu3U4|#qZy-aow4hT>t$q{PR7x|FAw5 zzw@}vo4+9#(wJNItd_SW*%AHV72ix-~y?8ATg;wL_L!%a8sSh@0J*WBo;opR#B zRZl&0>&HIx*0NXkZrSnnnhm3xTk0B{i*%`=u3;SIdY^pwkyDnOR?{>dpeQ?c-+J3g zC!R3%lJZQuUgckkS~ zdi|ESw`MYfykOg*(Lp5ir4F@oe|mC(r-ot+zC=*S&X}28GIs z%2ZWdtg<0m(-d!LjWv#mjB1OFYK@L+jn=h9s~Y2}S~n6WGS-TS9t#|S9OkHDBZXY| zA?oj%QJ?(ml@~mG`!{d7;e#_>+1wZ}$ z@3(K?^YQn*_s8G-?)I&_D@RX=I%fCIJrFv6`kc<)9e;lC;p*nr_g;7Po!|R@|KXnN zuDd$P{()V)L6!68&P%w~xY0;O+XWY1dbq2PxF(jWUUJ6L_Hh&L`S!O88SlJnKi1OL zvUl$RH`Zk0wNq!$o44fDk9_gdpT6rCU-;qo>&A{-y!4#4Z@pbtQMcl$zuo)G-<*5H zXTSdSFRpp*rFz{h`_WyC&bf5M-p+YvU-+Rf{qr?9-=twjps-;j#EDd$ zap97$-}b4iZ@TIF%dUIozI!tL`PIvwuc>WH*43VI?)mIA>{_wr3pame^QQfi$BkLE z^!yi}esbAk51z8*%CIW{P|tK zc=+KzFMIhw_rZ8=qZ3UjnGjwORUT$aj*WGxn8$#b8Daz9OJ^iE*jyRAXu<3Y7M^m_ z^l2$d0BLIvQ?Xab$n2VqPFDXn#nK@gtZF^Ex$8(r=kI@c?|D~T>&7FCFFLPr^3)@_p%c-XJ_EDo5 zcKOS%BFWfTqu$_Uf|N`ww)i zTmH%kr!QS{))}d)cx8R9iPTX|<&B^GRI+h&>y$C;{r4g zPAJs(G$?pOeKylq!@=y)_1B%T=!@^Y?mdgo7&ofHp`5it1dloF&3F`BTWS?eWuo}M z)f148j=GEWC7}#vsAkCdM~=>vg(o`-|M7e(`HVM)mB_^<;4xn zqkux9x@ykJ3kU_@&kbfXVksW5>6RnK-_twst6&TeNs~Rb_n5>NlNO zqk_ft%sF$aswxM1de*JknjPvIH+g(*L$ip#Yv=Yvb>hrR zFA>;HYnRVFY0l}FU+yFm?GxHAy7F>15I;LGIFN{^X3jnV>KVgoy_&|hwy{kwKKFMG zvL~N$#_ZG1=s(5NkW!KhitJm%r)7~_F&T&ds)h7z3&zf=m z#TP0H>AnLU9lOuG;GzSEyP~nk>@&}vcKnp}>)$?Z%GBnuV}AFW-|X43ZOW{v7r*yC zGnXu`tglu_Nf!+ zEt-GQ>8FmJIzw#lf`un61+M4;Noi=XT6liYj`1V;RoUED;yusbO zcFaC;&dm9XCeJ)>U+2M&j(zb8)6m?&C@eku^zjqNL2`qGy;-j??YJpb^$nR^cEhGE zJx2~sJATTj=227<`!hkM(9}Nu_!DOA+qZYu=8XsT?YZEJOV|WQ(*3RDnnsOjK5@a^ zNi(MdJ{#KGdFZ5trx>G$4)1Fi*E;#Q*@*=9?B26=$Nsue6)j_1Bhe_xVq|64QEkt| z{i?f;jdrzMSPuXqFeU+{`U-uou3h)W`i&cRcN|G)x(3s}8ZxdBl$azeuu%qy?^P$_ zwTXD8;aO8BO&d36&Xh@$TUuSXK+Z~*ARJN)ig)v_G@?81|BBQfhjZwn4!-RX`LNfcl_# z$&Og4ud2i$E$o$eX%FzA3QDNth(dlO4!F?%GPR(h#8oA%*i*ILM-KJ&^iG^KjhRBB zOG%{>&T~A(Z-IOXxs?(vOkO^lPN!?@+fd|G(?HnwJOJ`QHP8!4iR_J*>N-5JJ{uQE z0sSLtyho06UC2Q~eFYK40jrWHB2cXK)`c991PZ0X9v`R#0<~!}VW0OLKtK!_EYjWT zgOWvlUJIb`#XW;X2v_~mT{u7z7y#mchp?xDhB=xk)t`oU5(UygD6J0w1`1Gs5-Mo| zz~Og>0F>sP0aeKojc`B8szRIq;=mvfFLk;LoBjuYDMm(YfJ$IM#S*6gg{DDai4_-z zMN7N)-)}ZaD!bl6lOFpz4-KUkCITb?&P$Y8LM zR$E!o*4$VXk4F$Tf-9)ztpujbDZabP;{V)Xtp#9=(PDi1hJw}=Hg$Abrq#ou!z`@L>I9%;?*o62^?NjL{!xn z^UgZ~K+Gje_|6wNl;6D~qRK?&a~3UhkpK;QV0qz4uwhk|@ZB!NfelKRCIX}snU`MT zq}IwY_f|fFAP8Sm5(d>FBScIn^<{-Bv#}y0UI|6kT4D~_n>)d^*(qd3-$-k1{9^Kipwm&}Wo zHY)wO#CiDjDh@;O?4<5h$1a^V0xnicj%ir3;!8!RWq!Tx|C4`#tt%!8 zZDwqJ?_ub^f9A41(w1vBFf(bJ)o{B@1vRjPxqJ4nDKvu^|$(eA^-n> z{D17DJ;VR$F0-XRow*M@fIzjxHKHUXu_VKd3>85o#d7T=GeAvZrIGp!Q02KT=8%s>r-ARDp@Qq!%H^Ku6{1-oD!McPKu{0}(yPQS#Xt}t1PMq}L|`AqLQ#-jL|PCr z1VtefU5ZGv0Rj?0I!GuI0-~Zx!_UZ*=j(Y=2Aa6qQ~(gju)rBPnYX5#@k-3XOP}B{If0yxl@-kyTPz){DkT3- z3Sy3X@hJXD%aJJc!gH=dki+g4oj^SF!;rCn`A{x$=i#r7~z= zC-|UTS~T&MtsQ5DQx~@N2_21T++c?@g1W*uIbq!@^z1d|cBh_9U64wI902FDWX9lJ zQ#n~d0=R;u`+VT23{PruUW?g!U+7L{jNd6``8yiO=FZ#WFq{aH3Dwgd;+@PHYoR-%X|IvFP_5PBzN) z{EfF^-3?V)3eQw5(~$cl85iV_UOj`>+Zu~m$XzNW^l<24=?4j_2z(TxIGoZGc%tF; zVec~&O=aon@`CQ}xbf&;Zby@S88?Rx%`3)~h@tfx#jH;jNje;l|52Sy_xtjJMO1rA zq(UTI!H}pnSA_0pKEmIugAs0GN2LvDDk~YlYt$aZc)VfPP8rZE!z@Rf@OV*hV=PWN zQl{?rU_}Q-p#q_$;O%CT_$7*ny*E`rIEgCNd`n&@C!Cd<)0)9|R_qY8T?eO&8h09d z+2(W6ig7HT32`3$(okEGRBA8X@UzXV2zJ8i*4tZxHJy?ONbnl$=V4I5PE93+!JG4yG+CM_X-(&u#k{IOUCYnOVD%| zV&X*lwnwX>k3DsK;dG|urwsXfaa7+Ezanio>?%ff&xb*N4p9!%k@04FbVK#!%Muvz zI)WcWyapl22q1tS6y+!Ta+u3^22Dx{#Rj61tF>M)&PWfPpJH&_iGUz-%2~Xi$S&v- z_aoK%moo2BIhKMkd!kEa5`SDR)rEqbvPW>5pf&%HMvy%W*=kfe*nM&BYdmYRaUDUe z(ol_D)Nl*<+Sl;)Kz^0Ubz zEXL@s;@o@#GxsJ!zhl&5lW3;PT0eCo^w&hjKvn+d><(mtjDUV6d+O%;U3zh~E+6c= zb!+NsX~iVOSy7Y_!6%vM^DGm+^YrxXPzS4xe1m~QN_oOHP~2;`i81erx%FFz&GBkq zk~k5dN!+RBH~Wh1>bEvUpvi~nH%(31vwxP`k+=&*o(@nIHM~uyS@@0B@mF3aOTveP z7gXqiu^P#JhA%?Iy>Ox>j_9Y);9Zd{kEfoor2`u7lO!yi>e{`Q{TO3V}gF4>t~d| zy6*o}*iS`6>G?Ui91Lypc~@6az&r08J+Z439{bmCp~Za3IViUNS(hdM;fuB?;&>fr z7T+26>)N}(X7%g+%V98PWqFaCquk-W5pSJv@f%!y)t>KP0v)WdGp+ZmIUHC;o%PZX zS$fjtx`$>7x6Nxf?e^x9G58S(MZvL}FYC)zgfF%+`=m;($ED$i8YN;iWVi`AX%~9m zyznx<-^XB(eGbyIo$LH2Cs{cPu*)tAL6m`vsRKhuilv5$|N2|CoIytToYfXng?gHq zATGby)qHB1tk`#{Vf@{5AHuu27l;PJ=MaHA^08OKHrickxivbH3R)==sZu`R_`L;* zI2%QwIbAHMt8LMqg)ZNh8W>o38d(uCx>fK&U-qnTuuImrZ?8v0C{`wK+$-ykVA_)9 zZHUSk8aCya6npHUl%$9(gqhaI4DD`~Ek6CEX5r6|t%5*oY=2|F%ZZss1aTN^fj>dI zp0nuekW?U#rg`aps~%|@OTBReqipf={Yw5cU|#;XWwUXg%D+xs9aXeCFud(gHSit> zQ0g7g@2&4Pk75<-#viQ@XX@CI%iWmP?qUS9Ho}wuioS?|nQPX91qg zH<16B6(z>Pvd8=9(O<=-6h4`Ww=XP>TasGhk_Ut4xvjmow>-%%$aub@S3>FiXwUr^ zQs{^i#tsJ)*ovBZV!4uDb_aSAFx0Mpa^9%3!R4pGxg7zcHuZrAHpWkQ-?d7B>A3)c zzlU3Zhn73f04M|!rG?PdLg_i75Ll!R7J<@0=wT5En2UY>KfrD$_HXJx0fY_~gT^A! zT8N`OK(_E&)PDgavbz^C`(D?BkD~tVC1eWxJ6a}O#XZ5|GC>qmTC$Q04z*xanFriBmV+= C&PhK2 literal 0 HcmV?d00001 diff --git a/PMUSimulator/pmu.c b/PMUSimulator/pmu.c new file mode 100755 index 0000000..9e40642 --- /dev/null +++ b/PMUSimulator/pmu.c @@ -0,0 +1,304 @@ +/* ----------------------------------------------------------------------------- + * pmu.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "PmuGui.h" +#include "ServerFunction.h" +#include "CfgGuiFunctions.h" +#include "CfgFunction.h" +#include "ShearedMemoryStructure.h" + +/* Common fixed path for storage of few common files */ +#define UI_fILE "/usr/local/share/PMU/pmu.xml" + + +/* ---------------------------------------------------------------- */ +/* main program starts here */ +/* ---------------------------------------------------------------- */ + +int main(int argc, char **argv) +{ + /* local variables */ + GtkBuilder *builder; + GError *error = NULL; + + int ShmID, err; + char *ptr1; + struct stat st; + key_t MyKey; + + system("clear"); + + pidLocal = fork(); + + if (pidLocal == 0) + { + start_server(); + } + else + { + /* Main process for PMU Configuration Setup */ + usleep(1000); + + MyKey = 12345; /* obtain the shared memory */ + ShmID = shmget(MyKey, sizeof(pid_t), 0666); + ShmPTR = (struct P_id *) shmat(ShmID, NULL, 0); + p1 = *ShmPTR; /* get process-a's ID */ + + /* Init GTK+ */ + gtk_init(&argc, &argv); + + /* Create new GtkBuilder object */ + builder = gtk_builder_new(); + + /* Add glade file to GtkBuilder */ + if(!gtk_builder_add_from_file(builder, UI_fILE, &error)) + { + g_free(error); + return(1); + } + + /* Allocate data structure */ + pmu_data = g_slice_new(pmuStruct); + + /* Get objects from UI */ + #define GW(name) CH_GET_WIDGET(builder, name, pmu_data) + GW(Pmu_Simulator); + GW(create_cfg_button); + GW(header_frm_button); + GW(pmu_details_button); + GW(stat_modification_button); + GW(cfg_modification_button); + GW(pmu_menubar); + GW(menuitem2); + GW(rights_lable); + GW(admin_label); + GW(about_menuitem); + GW(exit_menuitem); + GW(E_button); + GW(manage_data_source); + GW(pmu_properties); + GW(start_server); + GW(menu_setup_cfg); + GW(menu_data_source); + GW(menu_cfg_modify); + GW(menu_stat_modify); + GW(menu_header_frm); + GW(text_view); + GW(text_view1); + GW(open_cfg); + GW(time_lable); + #undef GW + + /* Connect signal to builder */ + gtk_builder_connect_signals(builder, pmu_data); + gtk_builder_connect_signals(builder, NULL); + + // Changes how a toplevel window deals with its size request and user resize attempts. + gtk_window_set_policy (GTK_WINDOW (pmu_data->Pmu_Simulator), FALSE, TRUE, TRUE); + gtk_window_set_position(GTK_WINDOW(pmu_data->Pmu_Simulator), GTK_WIN_POS_CENTER); + gtk_window_set_icon(GTK_WINDOW(pmu_data->Pmu_Simulator), create_pixbuf("/usr/local/share/PMU/logo.png")); + + /* Set the Title of Main Window */ + gtk_window_set_title (GTK_WINDOW (pmu_data->Pmu_Simulator), "PMU SIMULATOR"); + + /* Disable all buttons except create Configuration button because cfg is not present in the system */ + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->create_cfg_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->manage_data_source), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->header_frm_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->cfg_modification_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->stat_modification_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->pmu_details_button), FALSE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menuitem2), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->pmu_properties), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->open_cfg), FALSE); + + /* Get the user's name for storing the PMU Setup File */ + ptr1 = malloc( 200*sizeof(char)); + memset(ptr1,'\0',200); + strcpy(ptr1,getenv("HOME")); + + if (ptr1 == NULL) + { + printf("user not found\n"); + exit(1); + } + strcat(ptr1, "/iPDC"); + + + if(stat(ptr1,&st) == 0) + { + strcat(ptr1, "/PMU"); + + if(stat(ptr1,&st) == 0) + { + strcat(pmuFolderPath, ptr1); + + FILE * output; + int check; + char buff[200], is_empty[100]; + + strcpy(buff, "ls "); + strcat(buff, pmuFolderPath); + strcat(buff, " | wc -l"); + + output = popen(buff,"r"); + fgets (is_empty, 100, output); //write to the char + pclose (output); + + check = atoi(is_empty); + + if (check == 0) //No Setup files is present + { + /* Setup files is not present in the system, so start with building new PMU Setup file */ + pmu_server (); + } + else + { + gtk_widget_set_visible(GTK_WIDGET(pmu_data->open_cfg), TRUE); + } + } + else + { + if (mkdir (ptr1, 0700)) + { + printf ("cannot create directory `%s': %s\n", pmuFolderPath, strerror (errno)); + validation_result ("cannot create iPDC directory on proposed path!"); + } + else + { + strcat(pmuFolderPath, ptr1); + + /* Setup files is not present in the system, so start with building new PMU Setup file */ + pmu_server (); + } + } + + strcpy(ptr1,getenv("HOME")); + strcat(ptr1,"/iPDC/DataDir"); + + if(stat(ptr1,&st) != 0) + { + if (mkdir (ptr1, 0700)) + { + printf("Cannot create directory '%s': %s\n", ptr1, strerror(errno)); + } + } + } + else + { + if (mkdir (ptr1, 0700)) + { + printf ("cannot create directory `%s': %s", pmuFolderPath, strerror (errno)); + } + else + { + strcat(ptr1, "/PMU"); + + if (mkdir (ptr1, 0700)) + { + printf ("cannot create directory `%s': %s", pmuFolderPath, strerror (errno)); + validation_result ("cannot create PMU directory on proposed path!"); + } + else + { + strcat(pmuFolderPath, ptr1); + + /* Setup files is not present in the system, so start with building new PMU Setup file */ + pmu_server (); + } + } + } + + /* Decorate the GUI */ + pmu_colors(); + + /* Signal handling for buttons on Main PMU Window */ + g_signal_connect (pmu_data->create_cfg_button, "clicked", G_CALLBACK(cfg_create_function), NULL); + g_signal_connect (pmu_data->menu_setup_cfg, "activate", G_CALLBACK(cfg_create_function), NULL); + + g_signal_connect (pmu_data->manage_data_source, "clicked", G_CALLBACK(manage_data_sources), NULL); + g_signal_connect (pmu_data->menu_data_source, "activate", G_CALLBACK(manage_data_sources), NULL); + + g_signal_connect (pmu_data->header_frm_button, "clicked", G_CALLBACK(hdr_create_function), NULL); + g_signal_connect (pmu_data->menu_header_frm, "activate", G_CALLBACK(hdr_create_function), NULL); + + g_signal_connect (pmu_data->stat_modification_button, "clicked", G_CALLBACK(stat_chng_options), NULL); + g_signal_connect (pmu_data->menu_stat_modify, "activate", G_CALLBACK(stat_chng_options), NULL); + + g_signal_connect (pmu_data->cfg_modification_button, "clicked", G_CALLBACK(Change_pmu_configuration), NULL); + g_signal_connect (pmu_data->menu_cfg_modify, "activate", G_CALLBACK(Change_pmu_configuration), NULL); + + g_signal_connect (pmu_data->pmu_details_button, "clicked", G_CALLBACK(show_pmu_details), NULL); + g_signal_connect (pmu_data->start_server, "activate", G_CALLBACK(pmu_server), NULL); + g_signal_connect (pmu_data->open_cfg, "activate", G_CALLBACK(pmu_setup_file_selection), NULL); + g_signal_connect (pmu_data->pmu_properties, "activate", G_CALLBACK(show_pmu_details), NULL); + g_signal_connect (pmu_data->about_menuitem, "activate", G_CALLBACK(about_pmu), NULL); + g_signal_connect (pmu_data->exit_menuitem, "activate", G_CALLBACK(destroy), NULL); + g_signal_connect (pmu_data->E_button, "clicked", G_CALLBACK(destroy), NULL); + g_signal_connect_swapped (pmu_data->Pmu_Simulator, "destroy", G_CALLBACK (destroy), NULL); + + /* Destroy builder, since we don't need it anymore */ + g_object_unref(G_OBJECT(builder)); + + /* Show window. All other widgets are automatically shown by GtkBuilder */ + gtk_widget_show(pmu_data->Pmu_Simulator); + + pthread_t t; + if((err = pthread_create(&t,NULL,display_time,NULL))) + { + perror(strerror(err)); + exit(1); + } + + /* GTK Main */ + gtk_main(); + + /* Free any allocated data */ + g_slice_free(pmuStruct, pmu_data); + } + return(0); +} + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/pmu.glade b/PMUSimulator/pmu.glade new file mode 100755 index 0000000..55edcdf --- /dev/null +++ b/PMUSimulator/pmu.glade @@ -0,0 +1,454 @@ + + + + + + + True + + + 10 + + + + True + gtk-network + 1 + + + True + gtk-execute + 1 + + + True + gtk-new + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-directory + 1 + + + True + gtk-dialog-authentication + 1 + + + True + gtk-dialog-warning + 1 + + + True + gtk-justify-fill + 1 + + + PMU SIMULATOR - v1.3 + center-always + 710 + 590 + calibrate + False + center + + + True + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to create a new PMU setup file. + 5 + image3 + False + True + + + + + Open PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved PMU setup file. + 5 + image4 + False + True + + + + + PMU Properties + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the PMU setup informations. + 5 + image5 + False + True + + + + + gtk-quit + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the PMU Simulator Software. + True + True + True + + + + + + + + + True + Edit + True + + + True + + + Setup Configuration + True + Create Configuration Frame for PMU Simulator +with variable parameters. + image2 + False + True + + + + + Manage Data Source + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + image6 + False + True + + + + + Configuration Modification + True + Modify the configuration of running PMU, with the STAT Word's bit change. + image7 + False + True + + + + + STAT Word Modification + True + Introduce diffrent STAT bits errors during data frame transmission. + image8 + False + True + + + + + Header Frame Setup + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + image9 + False + True + + + + + + + + + True + _Help + True + + + True + + + gtk-about + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to see the publisher, licensing, and version details. + True + True + True + + + + + + + + + + + Setup Configuration + 240 + 40 + True + True + True + Create Configuration Frame for PMU Simulator +with variable parameters. + 0 + + + 20 + 225 + + + + + Header Frame Setup + 240 + 40 + True + True + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + 0 + + + 20 + 425 + + + + + STAT Word Modification + 240 + 40 + True + True + True + Introduce diffrent STAT bits errors during data frame transmission. + 0 + + + 20 + 375 + + + + + PMU Properties + 240 + 40 + True + True + True + View the details of PMU Configuration, +and PMU Server informations. + 0 + + + 20 + 475 + + + + + Configuration Modification + 240 + 40 + True + True + True + Modify the configuration of running PMU, with the STAT Word's bit change. + 0 + + + 20 + 325 + + + + + Go online + 110 + 40 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 550 + + + + + EXIT + 100 + 40 + True + True + True + + Click to exit the PMU Simulator Software. + + + 603 + 550 + + + + + Manage Data Source + 240 + 40 + True + True + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + 0 + + + 20 + 275 + + + + + 150 + 40 + True + + + 289 + 552 + + + + + 235 + 40 + True + + + 20 + 187 + + + + + 800 + 20 + True + + + -1 + 525 + + + + + 720 + 105 + True + False + False + fill + False + + + 39 + + + + + 410 + 287 + True + False + Simulation of Phasor Measurement Unit. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + False + False + + + 290 + 225 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 548 + 145 + + + + + + diff --git a/PMUSimulator/pmu.xml b/PMUSimulator/pmu.xml new file mode 100644 index 0000000..51a0355 --- /dev/null +++ b/PMUSimulator/pmu.xml @@ -0,0 +1,454 @@ + + + + + + + True + + + 10 + + + + True + gtk-network + 1 + + + True + gtk-execute + 1 + + + True + gtk-new + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-directory + 1 + + + True + gtk-dialog-authentication + 1 + + + True + gtk-dialog-warning + 1 + + + True + gtk-justify-fill + 1 + + + PMU SIMULATOR - v1.3 + center-always + 710 + 590 + calibrate + False + center + + + True + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to create a new PMU setup file. + 5 + image3 + False + True + + + + + Open PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved PMU setup file. + 5 + image4 + False + True + + + + + PMU Properties + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the PMU setup informations. + 5 + image5 + False + True + + + + + gtk-quit + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the PMU Simulator Software. + True + True + True + + + + + + + + + True + Edit + True + + + True + + + Setup Configuration + True + Create Configuration Frame for PMU Simulator +with variable parameters. + image2 + False + True + + + + + Manage Data Source + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + image6 + False + True + + + + + Configuration Modification + True + Modify the configuration of running PMU, with the STAT Word's bit change. + image7 + False + True + + + + + STAT Word Modification + True + Introduce diffrent STAT bits errors during data frame transmission. + image8 + False + True + + + + + Header Frame Setup + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + image9 + False + True + + + + + + + + + True + _Help + True + + + True + + + gtk-about + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to see the publisher, licensing, and version details. + True + True + True + + + + + + + + + + + Setup Configuration + 240 + 40 + True + True + True + Create Configuration Frame for PMU Simulator +with variable parameters. + 0 + + + 20 + 225 + + + + + Header Frame Setup + 240 + 40 + True + True + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + 0 + + + 20 + 425 + + + + + STAT Word Modification + 240 + 40 + True + True + True + Introduce diffrent STAT bits errors during data frame transmission. + 0 + + + 20 + 375 + + + + + PMU Properties + 240 + 40 + True + True + True + View the details of PMU Configuration, +and PMU Server informations. + 0 + + + 20 + 475 + + + + + Configuration Modification + 240 + 40 + True + True + True + Modify the configuration of running PMU, with the STAT Word's bit change. + 0 + + + 20 + 325 + + + + + Go online + 110 + 40 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 550 + + + + + EXIT + 100 + 40 + True + True + True + + Click to exit the PMU Simulator Software. + + + 603 + 550 + + + + + Manage Data Source + 240 + 40 + True + True + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + 0 + + + 20 + 275 + + + + + 150 + 40 + True + + + 289 + 552 + + + + + 235 + 40 + True + + + 20 + 187 + + + + + 800 + 20 + True + + + -1 + 525 + + + + + 720 + 105 + True + False + False + fill + False + + + 39 + + + + + 410 + 287 + True + False + Simulation of Phasor Measurement Unit. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + False + False + + + 290 + 225 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 548 + 145 + + + + + + diff --git a/PMUSimulator/pmu.xml$ b/PMUSimulator/pmu.xml$ new file mode 100644 index 0000000..51a0355 --- /dev/null +++ b/PMUSimulator/pmu.xml$ @@ -0,0 +1,454 @@ + + + + + + + True + + + 10 + + + + True + gtk-network + 1 + + + True + gtk-execute + 1 + + + True + gtk-new + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-directory + 1 + + + True + gtk-dialog-authentication + 1 + + + True + gtk-dialog-warning + 1 + + + True + gtk-justify-fill + 1 + + + PMU SIMULATOR - v1.3 + center-always + 710 + 590 + calibrate + False + center + + + True + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to create a new PMU setup file. + 5 + image3 + False + True + + + + + Open PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved PMU setup file. + 5 + image4 + False + True + + + + + PMU Properties + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the PMU setup informations. + 5 + image5 + False + True + + + + + gtk-quit + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the PMU Simulator Software. + True + True + True + + + + + + + + + True + Edit + True + + + True + + + Setup Configuration + True + Create Configuration Frame for PMU Simulator +with variable parameters. + image2 + False + True + + + + + Manage Data Source + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + image6 + False + True + + + + + Configuration Modification + True + Modify the configuration of running PMU, with the STAT Word's bit change. + image7 + False + True + + + + + STAT Word Modification + True + Introduce diffrent STAT bits errors during data frame transmission. + image8 + False + True + + + + + Header Frame Setup + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + image9 + False + True + + + + + + + + + True + _Help + True + + + True + + + gtk-about + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to see the publisher, licensing, and version details. + True + True + True + + + + + + + + + + + Setup Configuration + 240 + 40 + True + True + True + Create Configuration Frame for PMU Simulator +with variable parameters. + 0 + + + 20 + 225 + + + + + Header Frame Setup + 240 + 40 + True + True + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + 0 + + + 20 + 425 + + + + + STAT Word Modification + 240 + 40 + True + True + True + Introduce diffrent STAT bits errors during data frame transmission. + 0 + + + 20 + 375 + + + + + PMU Properties + 240 + 40 + True + True + True + View the details of PMU Configuration, +and PMU Server informations. + 0 + + + 20 + 475 + + + + + Configuration Modification + 240 + 40 + True + True + True + Modify the configuration of running PMU, with the STAT Word's bit change. + 0 + + + 20 + 325 + + + + + Go online + 110 + 40 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 550 + + + + + EXIT + 100 + 40 + True + True + True + + Click to exit the PMU Simulator Software. + + + 603 + 550 + + + + + Manage Data Source + 240 + 40 + True + True + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + 0 + + + 20 + 275 + + + + + 150 + 40 + True + + + 289 + 552 + + + + + 235 + 40 + True + + + 20 + 187 + + + + + 800 + 20 + True + + + -1 + 525 + + + + + 720 + 105 + True + False + False + fill + False + + + 39 + + + + + 410 + 287 + True + False + Simulation of Phasor Measurement Unit. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + False + False + + + 290 + 225 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 548 + 145 + + + + + + diff --git a/README b/README new file mode 100755 index 0000000..beae887 --- /dev/null +++ b/README @@ -0,0 +1,275 @@ +/* ----------------------------------------------------------------- + * README + * + * iPDC - A Free Phasor Data Concentrator + * Covered under the GPL License 3.0. + * + * Copyright (C) 2012 Nitesh Pandit + * Copyright (C) 2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * --------------------------------------------------------------- */ + + +Be up to date with about iPDC new + +By visiting + http://ipdc.codeplex.com/ + http://sourceforge.net/projects/iitbpdc/ + http://freecode.com/projects/ipdc + + You can also JOIN us on FaceBook at "http://www.facebook.com/pages/PhasorDataConcentrator". + + Visit Our another project regarding Wide Area Frequency Measurement System" developed at IIT BOmbay: "http://www.ee.iitb.ac.in/~anil/" + + +iPDC.x.y.z +----------- + + 4-files and 4-folders are present in iPDC.x.y.z.tar.gz, they are + + 1. iPDC-1.3.1 + 2. PMUSimulator-1.3.1 + 3. DBServer-1.1 + 4. DataDir + 5. Release Notes 1.3.1 + 6. change.log + 7. README + 8. COPYING + + +General Information +------------------- + + iPDC consists of 3 different modules, + + iPDC - Phasor Data Concentrator compliant with IEEEC37.118 synchrophasor standard, + DBServer - which is used to store the data in MySQL database, and + PMUSimulator - which simulates the Phasor Measurement Unit compliant with IEEEC37.118 synchrophasor standard. + + This version works in Unix and Unix-like operating systems. It uses GCC compiler, GTK+ graphical user interface library & also POSIX thread library, and MySQL as database server. + + +Dependencies +------------- + + gcc + mysql-server-5.0 + mysql-client-5.0. + mysql-common + libmysqlclient16* + GTK+2.5 + glade 3.6.7 (optional for development) + NTP-client (For synchronization of system clock) + + +INSTALLATION: +------------ + + Dependencies installation: Installation of glade internally installed the GTK+ libraries and there is no need to explicit installation of GTK+. NTP is recommended for better results by iPDC and PMU Simulator. + + su/sudo apt-get update (recommended) + su/sudo apt-get install mysql-server-5.0 (or latest available version) + su/sudo apt-get install mysql-client-5.0 (or latest available version) + su/sudo apt-get install mysql-common + su/sudo apt-get install libmysqlclient16 (or latest available version) + su/sudo apt-get install libmysqlclient16-dev (or latest available version) + su/sudo apt-get install glade + su/sudo apt-get install ntp (http://howto.eyeoncomputers.com/ubuntu/install-ntp/) + + For detailed explanation of iPDC, DBServer, and PMUSimulator working refer the User Manual. Available on website. Make sure you have done with the dependency installation before go for installation of iPDC software. + + A) iPDC Installation -> + + Multiple instance can be run on same machine by ONLY one time installation. + First go to the source folder on terminal then, + + 1. Extract iPDC.x.y.tar.gz. + 2. cd iPDC.x.y/iPDC.x + 3. su/sudo make install (It will be needing root permision to create folder & copying file on them) + 4. Run iPDC via terminal or you could found its shortcut on menu named iPDC. + + + B) Install DBServer -> + + DBServer can be installed on the same machine or a different machine. + If DBServer is to be installed on a different machine then copy iPDC.x.y/DBServer to that machine(cp iPDC.x.y/DBServer /PATH....). Install dependencies like demysql-server-5.0, mysql-common, libmysqlclient15off, mysql-client-5.0. on that machine and Then follow the steps given below. + + 1. cd /PATH/iPDC.x.y/DBServer.x.y + 2. mysql -u root -p <"Db.sql" + 3. make + 4. ./DBServer or DBServer (accesseble only from folder) + + C) Install PMUSimulator -> + + If you need to run simulator on different from iPDC machine then Copy the PMU Simulator on that machine. + Single installation of PMU Simulator will work in case you need to simulate multiple PMUSimulator on the same machine. + + 1. cd /PATH/iPDC.x.y/PMUSimulator.x.y + 2. su/sudo make install (It will be needing root permision to create folder & copying file on them) + 3. Run - PMU via terminal or you could found its shortcut on menu name PMU Simulator. + + +USAGE +------ + + i) When iPDC acts as a Client -> + + 1. Run DBServer on terminal of the machine where DBServer is installed. This will be listening on port 9000 for data & CFG frames from iPDC. + + 2. Run PMU Simulator in the machine where PMUSimulator is installed. You can run the PMU Simulator from anywhere in the system. Enter the PMU Port numbers for TCP and UDP. Port should be other than 9000, as 9000 is used by DBServer. + + 3. Run iPDC and enter the details like TCP Port, UDP Port. + These are the ports on which PDC would listen to command frames from other PDC's, or applications. + Also enter PDC ID, that will be use for authenticate to other ends PDC's. + Enter the IP Address of the machine where DBServer is running. (if local, may use like 127.0.0.1) + Now add the PMU/Source devices by entring their minimal details. + As soon as the PMU details are entered, a command frame is sent to machine where the PMU/Simulator is running. + And communication between iPDC and PMUSimulator (PMU) will take place as follows. + + + 4. Communications + + 1. iPDC sends a command frame to PMU, requesting its configuration. + + 2. At PMU on receiving of a request for Configuration frame, PMU send back the latest configuration frame iPDC. + + 3. iPDC then send a command frame to requesting PMU to start data frames transmission. + + 4. PMU on reception of the command frame for send data would reply with data frames. + + iPDC -----------> PMU (Command to send CFG) + iPDC <----------- PMU (CFG Sent) + iPDC -----------> PMU (Command to send Data) + iPDC <----------- PMU (Data Sent) + iPDC <----------- PMU (Data Sent) + iPDC <----------- PMU (Data Sent) + iPDC -----------> PMU (Command to stop Data) + + 5. In the above mentioned PMU-iPDC communication, iPDC would act as a client and PMU as server. + + ii) When iPDC acts as a Server -> + + When iPDC acts as a Server, it sends the combined frames (data and Configuration) to other iPDC on requesting. + The details of these other end iPDC's need to be entered first. In this case the iPDC would work like as PMU Server. + iPDC receives a command frames from other iPDC it would first authenticate the request. + If the request is from authentic iPDC then combined frame would sent to respective iPDC. Remaining same as iPDC-PMU Communication. + / + More details of the s/w can be found in the Technical Report on iPDC on the website. + + +UNINSTALL +---------- + + Uninstall iPDC -> + cd iPDC.x.y/iPDC.x/ + su/sudo make uninstall (will be needing roots permission) + + Uninstall DBServer -> + cd iPDC.x.y/DBServer.x/ + make clean + + Uninstall PMUSimulator -> + cd iPDC.x.y/PMUSimulator.x/ + su/sudo make uninstall (will be needing roots permission) + + +Future Planning +-------------- + + We are planning of having following major Future milestone. Help and suggestions are required from open source community. + + 1. Visualization applications for phasor data. + 2. Porting of complete iPDC software on Windows Environment + 3. Import/export Data file in comtrade format. + + These are our major thrust area, currently the only way to study the data is in MySQL database, or in DBserver terminal, but it is not sufficient! We intend to develop a interface (something like charting Visualization) in which we can render the data in real time. + + To increase the usability and versatility of the application second objective is also appears to be quite essential due to the popularity of the windows environment. + + +Can I HELP?? +----------------- + + Yes, SURE you can help us..!! in fact we really NEED you and will be happy to have your support. + We have brought the project up to this level but as all other open source software project + this project also needs programmer/developer community's Love, Care & Support. + So please FEEL FREE to join us - support us – Contact us in any ways you wish... + + +How Can I HELP? +------------------ + + Currently you can help us (mainly) in following ways + + 1. If you are good UI designer (QT, JNI, GTK, Pyton, etc... anything) then please help us design more user friendly and attractive GUI for iPDC. + 2. If you are good (or even rookie will also do, because no body is a born programmer!!) at Visualization programming like charting API, graphics or any other data rendering methods which can handle large amount of data and possibilily in real time using python, C/C++, Perl etc. + 3. Apart from above mentioned things, if there is anything else you think needs to be done for improvement(OBVIOUSLY!!) of the project and in that you can help us, please DO CONTACT US. We will be more than happy to have your support. + 4. If possible please let us know where you are using iPDC software. This really help us. + + +PROBLEMS & FAQ +--------------- + + If you get into problems, find this application useful or find bug in the software, just feel anything except nothing about it. + Please feel free to contact us through bug report on website's discussions page or issue tracker page or via email. + Our motivation for further work grows with every mail. + Join the forum/issue tracker on the iPDC websites to get latest updates about iPDC software. + + +How to Reach Us:- +------------------ + + Nitesh Pandit : panditnitesh@gmail.com + + Gopal Gajjar: gopal@ee.iitb.ac.in + + Kedar Khandeparkar: kedark@ee.iitb.ac.in + + Rathin Dholakia: rathindholakia@gmail.com + + Or you can visit our sites: + "http://ipdc.codeplex.com/", + "http://sourceforge.net/projects/iitbpdc/", + "http://wafms.co.cc" + + +Credits +-------- + + C and GCC for programming language and compiler respectively. + MySQL database for iPDC Database. + GDB as debugging tool for software. + Glade & GTK+ for GUI functionality of software. + Dia software for image creation for report and docs. + Kile for report generation and also for presentation. + Wireshark for IEEE C37.118 protocol understanding and testing. + www.photoserch.com for Royalty Free Images. + www.onlinelogomaker.com for logo creation of software. + And many other open source softwares and websites/forums that has been contributed to iPDC project directly or indirectly. + + +Note +----- + + CFG stands for Configuration Frame. + If NTP Client is not running on the machines where iPDC, PMU Simulator, and DBserver running, so they will not be time synchronized. Your final results may be incorrected. + NTP Client and your near server of NTP is highly recommended. You can also use IIT Bombay's NTP Server. + Commands for NTP has not been added into makefile, so if you want NTP synchronization then please install NTP client and start it. For installation of NTP-client and NTP-server configuration on your Linux machine please visit respective community website. diff --git a/Release Notes 1.3.1 b/Release Notes 1.3.1 new file mode 100755 index 0000000..e97a93b --- /dev/null +++ b/Release Notes 1.3.1 @@ -0,0 +1,78 @@ +/* ----------------------------------------------------------------- + * Release Notes* + * + * iPDC - A Free Phasor Data Concentrator + * Covered under the GPL License 3.0. + * + * Copyright (C) 2012 Nitesh Pandit + * Copyright (C) 2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * --------------------------------------------------------------- */ + +-------------------------------------------------------------------------- +04.09.2012 : iPDC suite version-1.3.1 Changes and Bug Fixed (from v 1.3.0) +-------------------------------------------------------------------------- + + New User Manual for iPDC-v1.3.1 available on websites. + + Bug resolved : PMU Simulator TCP connection error and hang connection for client (PDC). + + Now PMU Simulator (server) can communicate more than one PDCs (clients) over TCP and UDP parallely. + + PMU Simulator is now sending the exact data frames as mentioned in data rate by user. + + PMU Simulator data rate has been verified by iPDC database entries and PMU Connection Tester. + + PMU Simulator is now having an option to introduce CheckSum error in a sending data frame. + + Bug resolved : Digital word resolution for configuration parser in parser.c from iPDC & DBServer modules. + + New table has added to DBServer modules named RECEIVED_FRAME_TIME. This table stores REceived frame time log in iPDC Database. + + Stability increased of iPDC Database Server for handling dynamic changes and continuous storage of data. + + Now PHASOR_MEASUREMENTS are storing in Polar format AMPLITUDE and ANGLE. + + Table attributes and Primary Key have been changed for some tables in iPDC Database. + + Now the measurements are storing in the file also along with MySQL database by DBServer. + + The 'images' folder is added in iPDC and PMUSimulator packages to store project images. + + iPDC.desktop and PMU.desktop files are added to iPDC and PMUSimulator respectively. These files will create Menu shortcuts. + + File overwite feature for iPDC and PMU Configuration has been added. + + Makefile has been updated for new version installation. + + GUI modifications for iPDC and PMUSimulator have been done in many aspects. + + iPDC, DBServer and PMUSimulator are successfully tested with physical devices individually. + + Sample Measurement files for 50 and 60 Hz are present in the PMUSimulator folder, and will be copied to /home/$USER/iPDC/DataDir* during installation of Simulator. + + iPDC_DB_Queries is removed from iPDC. + + In DBServer folder 'Sample DBConnect.c' (earlier db.c) is a sample file having the C program to connect the MySQL-Database. The same file is also having the iPDC-Database tables and different queries. + + For more details please refer the UserManual-1.3.1. + +-----------------------------------------------Enf of File---------------------------------------- diff --git a/change.log b/change.log new file mode 100755 index 0000000..1608967 --- /dev/null +++ b/change.log @@ -0,0 +1,209 @@ +/* ----------------------------------------------------------------- + * Change.log + * + * iPDC - A Free Phasor Data Concentrator + * Covered under the GPL License 3.0. + * + * Copyright (C) 2012 Nitesh Pandit + * Copyright (C) 2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * --------------------------------------------------------------- */ + + +10.05.2011 : First release, version 1.0.0 + + + Size of variable char buff[] changed from 2000 to 10000 in file ipdcGui.h. + + Size of MAXBUFLEN from from file global.h has been changed to 10000. + + A member variable int tcpup has been added to struct Upper_Layer_Details in file connections.h + + [for more info read the Release Notes] +--------------------------- + +5.11.2011 : Second release, version 1.1.0 + + Bugs fixed and no modification for DBServer-1.0. + [for more info read the Release Notes] + +--------------------------- + +08.12.2011 : Third release, version 1.2.0 + + No modifications iPDC-v1.1 and not also for DBServer-1.0. + New features are added in PMUSimulator-1.2 i.e. read measurements + from csv file, etc. [for more info read the Release Notes] + +--------------------------- + +09.02.2012 : Forth release, version 1.2.1 + + Changes in iPDC : + + Removed opening of extra terminal for displaying the received data. + + No changes in DBServer. + + New features to PMU Simulator-1.2.1 + + Major changes in PMU Simulator : + + Bug Resolution : + + Resolved bug causing unexpected crash in PMU Simulator on some operating systems. + + Resolved bug in reporting of frequency. + + New Features: + + Now the configuration file can be saved for future use. The files are saved in ~/iPDC/ directory and can be reloaded again. + + Simplified the work flow for starting the PMU simulator server and reading the data for simulation from a CSV file. + + Now multiple PMU simulators can be run on single machine simultaneously. + + The simulator would loop through the data file continuously until stopped through PDC command or exiting PMU Simulator. + + [for more info read the Release Notes] + +--------------------------- + +23.05.2012 : Fifth release, version 1.3.0 + + Now ChangeLog, COPYING, and Release_note files are become common. Previously these three files have seprate copy in each individual folders. + + Changes in iPDC-1.3 : + + Bug Resolution : + + None. + + New Features: + + Now iPDC has a centralized file structure. + + Only a single file for each iPDC and that will store with iPDC-ID. File structure will be explained in release notes document. + + A setup file for a iPDC will contains the information about + iPDC Server, + Connected Source Devices, + Connected Destination Devices, and + finally configuration frames of sources. + + Because of this single Setup File previously generated four local file will not be crated in the iPDC source folder, they are + pdc.txt + ipaddress.txt + upperpdc_ip.txt + cfg.bin + + Now the iPDC setup is already saved and could be reload on restart of iPDC. The files are saved in $HOME~/iPDC/iPDC/ directory. + + Installation of iPDC will create folder name iPDC at /usr/local/share/iPDC & copy the four files into it, for global run + iPDC.xml + ipdcLogo.png + ipdcLogo1.png + PSLAB.PNG + + Now multiple iPDC can be run on single machine simultaneously through only single installation. + + User is able to view the Setup File before uploading on iPDC. + + Setup File will only used for reloading. All operations are based on memory objects and only certain changes will lead to setup file access. + + + No changes in DBServer-1.0. + + + Changes in PMU Simulator : + + Bug Resolution : + + TCP server error has been resolved. Now it will be remain in listening mode after iPDC connection got closed. + + New Features: + + Now PMU Simulator has a centralized file structure. + + Only a single file for each PMU Simulator and that will store with PMU-ID. File structure will be explained in release notes document. + + A setup file for a PMU Simulator will contains the information about + PMU Server, and + Configuration frame. + + Because of this single Setup File previously generated three local file will not be crated in the PMU Simulator source folder, they are + pmuServer.txt + cfg2.bin + header.bin + + Now the PMU Simulator setup is already saved and could be reload on restart of PMU. The files are saved in $HOME~/iPDC/PMU/ directory. + + Installation of PMU Simulator will create folder name PMU at /usr/local/share/PMU & copy the four files into it, for global run + pmu.xml + pmuLogo.png + pmuLogo1.png + PSLab.PNG + + Now multiple PMU Simulator can be run on single machine simultaneously through only single installation. + + User is able to view the Setup File before uploading on PMU Simulator. + + Setup File will only used for reloading. All operations are based on memory objects and only certain changes will lead to setup file access. + + [for more info read the Release Notes] + + iPDC and PMU Simulator logos and slight GUI modification has been done. + + +--------------------------- + +04.09.2012 : Sixth release, version 1.3.1 + +1. Updated iPDC modules +2. Changed iPDC GUI + 2.1 Removed image buttons + 2.2 Changed the dashboard image + 2.3 Disabled Fields now invisible + 2.4 Added "Select All" Function + 2.5 Added local System Time Display + 2.6 Added Setup file overwrite warrning +3. Modified the make file, required for software icon in status bar. +4. Added menu item support +5. Fixed Ubuntu Unity Global menu error +6. PMU GUI changes:- + 4.1 Added Local System Time display + 4.2 Removed image buttons + 4.3 Added Setup file overwrite warrning +7. Changed PMU algorithm for multiple connection by PDC client at PMU Server. +8. Fixed: GUI crashing when selecting "Change Data Rate" +9. Fixed: Rectangular to Polar conversion bug, +10. Added: Received Frame Time in Database +11. Fixed: n-phasors & n-analogs configuration was showing wrong phasor magnitude. +12. Added: Overwrite Function for iPDC and PMU configuration file. +13. Added: new Measurement files with proper directory structure. +14. Pending: In Float-Float-Rec Combination, even if POW is selected, database logs it as PEAK only + +Future Milestones:- + +What we are (and you should) EXPECT in our Future Release:- + 1. Visualization facility to see and Rendering data visibilly + 2. Port the Programme to Windows Environment + 3. Import/Exort data in COMTRADE format. + 4. Check and implement Real Time Application Interface + +-----------------------------------------------Enf of File---------------------------------------- diff --git a/iPDC/Doxyfile b/iPDC/Doxyfile new file mode 100755 index 0000000..e6dc49a --- /dev/null +++ b/iPDC/Doxyfile @@ -0,0 +1,1285 @@ + # ----------------------------------------------------------------------------- + # Doxyfile for documentation of iPDC + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # 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. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = iPDC - (Phasor Data Concentrator) + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = YES + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = gif + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = /usr/local/bin/dot + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/iPDC/Makefile b/iPDC/Makefile new file mode 100755 index 0000000..04e0448 --- /dev/null +++ b/iPDC/Makefile @@ -0,0 +1,94 @@ + # ----------------------------------------------------------------------------- + # Makefile for building iPDC + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # 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. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + + +SHELL = /bin/sh +prefix = /usr/local +includedir = /usr/src/include + +INSTALL = /usr/bin/install -c +INSTALL_PREFIX = /usr/local/ +CREATE_DIR = /usr/local/share/ +DESKTOP_DIR = /usr/share/applications + +FILE1 = iPDC.xml +FILE2 = ipdcLogo.png +FILE3 = PSLab.PNG +FILE4 = ipdcLogo1.png +FILE5 = logo.png +FILE6 = iPDC.desktop + +CC = gcc +LIBS = -lpthread +LDLIBS=`pkg-config --cflags --libs gtk+-2.0` +CFLAGS=-g -fcommon `pkg-config --cflags --cflags gtk+-2.0` + +SOURCES = \ + ipdc.c \ + recreate.c recreate.h \ + connections.c connections.h \ + new_pmu_or_pdc.c new_pmu_or_pdc.h \ + parser.c parser.h \ + dallocate.c dallocate.h \ + align_sort.c align_sort.h \ + ipdcGui.c ipdcGui.h + +OBJECTS = ipdc.c recreate.o connections.o new_pmu_or_pdc.o parser.o dallocate.o align_sort.o ipdcGui.o + +CLEAN_OBJECTS = recreate.o connections.o new_pmu_or_pdc.o parser.o dallocate.o align_sort.o ipdcGui.o iPDC.xml + +PROGRAM = iPDC + +COMPILE = $(CC) + +$(PROGRAM): $(OBJECTS) + $(CC) $(OBJECTS) $(LDLIBS) $(LIBS) -o $@ + +%.o: %.c + $(COMPILE) $(CFLAGS) -c $< + +install: $(PROGRAM) + gtk-builder-convert iPDC.glade iPDC.xml + mkdir -p $(CREATE_DIR)iPDC/$ + cp -f $(FILE1) $(CREATE_DIR)iPDC/$(FILE1) + cp -f images/$(FILE2) $(CREATE_DIR)iPDC/$(FILE2) + cp -f images/$(FILE3) $(CREATE_DIR)iPDC/$(FILE3) + cp -f images/$(FILE4) $(CREATE_DIR)iPDC/$(FILE4) + cp -f images/$(FILE5) $(CREATE_DIR)iPDC/$(FILE5) + cp -f images/$(FILE6) $(DESKTOP_DIR)/$(FILE6) + cp $(PROGRAM) $(INSTALL_PREFIX)bin/$(PROGRAM) +# rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +uninstall: + rm -f $(INSTALL_PREFIX)bin/$(PROGRAM) + rm -rf $(CREATE_DIR)iPDC$ + rm -rf $(DESKTOP_DIR)/$(FILE6) + rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +clean: + rm -f $(CLEAN_OBJECTS) $(PROGRAM) diff --git a/iPDC/align_sort.c b/iPDC/align_sort.c new file mode 100755 index 0000000..78aaa64 --- /dev/null +++ b/iPDC/align_sort.c @@ -0,0 +1,1016 @@ +/* ----------------------------------------------------------------------------- + * align_sort.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "align_sort.h" +#include "connections.h" +#include "dallocate.h" + + +/* ------------------------------------------------------------------------------------ */ +/* Functions in align_sort.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. void time_align(struct data_frame *df) */ +/* 2. void assign_df_to_TSB(struct data_frame *df,int index) */ +/* 3. void dispatch(int index) */ +/* 4. void sort_data_inside_TSB(int index) */ +/* 5. void clear_TSB(int index) */ +/* 6. void create_dataframe(int index) */ +/* 7. void create_cfgframe() */ + +/* -----------------------------------------------------------------------------*/ + + +int i; +int front = -1; +int rear = -1; +pthread_mutex_t mutex_on_TSB = PTHREAD_MUTEX_INITIALIZER; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION time_align(): */ +/* It searches for the correct TSB[index] where data frame df is to be */ +/* assigned. If the df has soc and fracsec which is older then soc and fracsec */ +/* of TSB[first] then we discard the data frame */ +/* ---------------------------------------------------------------------------- */ + +void time_align(struct data_frame *df) { + + int flag = 0; + + pthread_mutex_lock(&mutex_on_TSB); + if(front == -1) { // TSB is used for the first time + + front = rear = 0; + assign_df_to_TSB(df,front); + pthread_mutex_unlock(&mutex_on_TSB); + return; + + } else { + + unsigned long int df_soc,df_fracsec,tsb_soc,tsb_fracsec; + + df_soc = to_long_int_convertor(df->soc); + df_fracsec = to_long_int_convertor(df->fracsec); + tsb_soc = to_long_int_convertor((unsigned char *)TSB[front].soc); + tsb_fracsec = to_long_int_convertor((unsigned char *)TSB[front].fracsec); + + if((df_soc < tsb_soc) || ((df_soc == tsb_soc) && (df_fracsec < tsb_fracsec))) { + + pthread_mutex_unlock(&mutex_on_TSB); + return; + } + + if(rear >= front) { + for(i = rear; i>= front; i--) { + + if(!ncmp_cbyc ((unsigned char *)TSB[i].soc,df->soc,4)) { + + if(!ncmp_cbyc ((unsigned char *)TSB[i].fracsec,df->fracsec,3)) { /* 3 bytes is actual fraction of seconds and 1 byte is Time quality */ + + flag = 1; + break; + + } + + } else { + + continue; + + } //if for soc ends + }// for ends + } else { + + for(i = rear; i< front; i++) { + + if(!ncmp_cbyc ((unsigned char *)TSB[i].soc,df->soc,4)) { + + if(!ncmp_cbyc ((unsigned char *)TSB[i].fracsec,df->fracsec,3)) { /* 3 bytes is actual fraction of seconds and 1 byte is Time quality */ + + flag = 1; + break; + } + + } else { + + continue; + + } //if for soc ends + }// for ends + } + + } // if other than the front = -1 + + if(flag) { + + //Assign to existing TSB + assign_df_to_TSB(df,i); + + } else { + + rear = (rear + 1) % MAXTSB; + + if(front == rear) { // All TSB are full. Dispatch the TSB[rear] and use it to assign new df + + dispatch(rear); + front = (front + 1) % MAXTSB; + assign_df_to_TSB(df,rear); + + } else { + + assign_df_to_TSB(df,rear); + + } + } + pthread_mutex_unlock(&mutex_on_TSB); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION assign_df_to_TSB(): */ +/* It assigns the arrived data frame df to TSB[index] */ +/* ---------------------------------------------------------------------------- */ + +void assign_df_to_TSB(struct data_frame *df,int index) { + + /* Check if the TSB is used for the first time. If so we need to + allocate memory to its member variables */ + if(TSB[index].soc == NULL) { // 1 if + + struct cfg_frame *temp_cfg = cfgfirst; + + TSB[index].soc = malloc(5); + TSB[index].fracsec = malloc(5); + + memset(TSB[index].soc,'\0',5); + memset(TSB[index].fracsec,'\0',5); + + copy_cbyc((unsigned char *)TSB[index].soc,df->soc,4); + copy_cbyc((unsigned char *)TSB[index].fracsec,df->fracsec,4); + + TSB[index].first_data_frame = df; /* Assign df to the 'first_data_frame' in the data frame linked list of TSB[index] */ + + /* Now we need to store the pmu/pdc id in the pmupdc_id_list that would be required while sorting */ + struct pmupdc_id_list *temp_pmuid; + while(temp_cfg != NULL) { + + /* Create a node of the type 'pmupdc_id_list' and copy the pmu/pde id from the cfg to it */ + struct pmupdc_id_list *pmuid = malloc(sizeof(struct pmupdc_id_list)); + pmuid->idcode = malloc(3); + memset(pmuid->idcode,'\0',3); + copy_cbyc((unsigned char *)pmuid->idcode,temp_cfg->idcode,2); + pmuid->num_pmu = to_intconvertor(temp_cfg->num_pmu); + pmuid->nextid = NULL; + + if(TSB[index].idlist == NULL) { /* Assign the pmuid to the idlist as it is the first id in the list */ + + TSB[index].idlist = temp_pmuid = pmuid; + + } else { + + temp_pmuid->nextid = pmuid; + temp_pmuid = pmuid; + + } + + temp_cfg = temp_cfg->cfgnext; + } // while ends . A pmu/pdc id list is created for the TSB[index] + + } else { // 1 if else + + struct cfg_frame *temp_cfg = cfgfirst; + if(TSB[index].first_data_frame == NULL) { // 2 if + + /* After TSB[index] is cleared this is the first data frame for it. + The memory for the member variables of TSB[index] has already + been allocated. Hence after dispatch() and clear_TSB() operation + this TSB is to be assigned the data_frame for the first time. */ + + copy_cbyc((unsigned char *)TSB[index].soc,df->soc,4); + copy_cbyc((unsigned char *)TSB[index].fracsec,df->fracsec,4); + + TSB[index].first_data_frame = df; /* Assign df to the 'first_data_frame' in the data frame linked list of TSB[index] */ + + /* Now we need to store the pmu/pdc id in the pmupdc_id_list + that would be required while sorting */ + struct pmupdc_id_list *temp_pmuid; + while(temp_cfg != NULL) { + + /* Create a node of the type 'pmupdc_id_list' and + copy the pmu/pde id from the cfg to it */ + + struct pmupdc_id_list *pmuid = malloc(sizeof(struct pmupdc_id_list)); + pmuid->idcode = malloc(3); + memset(pmuid->idcode,'\0',3); + copy_cbyc((unsigned char *)pmuid->idcode,temp_cfg->idcode,2); + pmuid->num_pmu = to_intconvertor(temp_cfg->num_pmu); + pmuid->nextid = NULL; + + if(TSB[index].idlist == NULL) { /* Assign the pmuid to the idlist as it is the first id in the list */ + + TSB[index].idlist = temp_pmuid = pmuid; + + } else { + + temp_pmuid->nextid = pmuid; + temp_pmuid = pmuid; + + } + + temp_cfg = temp_cfg->cfgnext; + } // while ends + + } else { // 2 if else + + /* Traverse the data frames of TSB[index] and assign the df to 'dnext' of + the last element in the data frame LL.*/ + struct data_frame *temp_df,*check_df; + + /* Need to check if df with same idcode and soc is already assigned to + the TSB[index] */ + check_df = TSB[index].first_data_frame; + while(check_df != NULL) { + + if(!ncmp_cbyc(check_df->idcode,df->idcode,2)) { + + free_dataframe_object(df); + return; + + } else { + + check_df = check_df->dnext; + + } + } + + temp_df = TSB[index].first_data_frame; + while(temp_df->dnext != NULL) { + + temp_df = temp_df->dnext; + + } + + temp_df->dnext = df; + } // 2 if ends + + } // 1 if ends +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION dispatch(): */ +/* It dispatches the combined data frame to all the destination devices */ +/* ---------------------------------------------------------------------------- */ + +void dispatch(int index) { + + int size,flag = 0; + sort_data_inside_TSB(index); + dataframe = NULL; + pthread_mutex_lock(&mutex_Upper_Layer_Details); + struct Upper_Layer_Details *temp_pdc = ULfirst; + + while(temp_pdc != NULL ) { + + if((temp_pdc->UL_upper_pdc_cfgsent == 1) && (temp_pdc->UL_data_transmission_off == 0)) { + + if(flag == 0) { + + size = create_dataframe(index); + flag = 1; + } + + if(temp_pdc->config_change == 1) { + + dataframe[14] = 0x04; + dataframe[15] = 0x00; + + } else { + + dataframe[14] = 0x00; + dataframe[15] = 0x00; + + } + + if(temp_pdc->port == UDPPORT) { + + if (sendto(temp_pdc->sockfd,dataframe, size, 0, + (struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) + perror("sendto"); + + } else if((temp_pdc->port == TCPPORT) && (temp_pdc->tcpup == 1)) { + + if(send(temp_pdc->sockfd,dataframe,size, 0)== -1) { + perror("send"); + printf("TCP connection closed\n"); + temp_pdc->tcpup = 0; + pthread_cancel(temp_pdc->thread_id); + } + } + } + temp_pdc = temp_pdc->next; + } + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + if(dataframe != NULL) free(dataframe); + + clear_TSB(index); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION sort_data_inside_TSB(): */ +/* This function sorts the data frames in the TSB[index] in the order of the */ +/* Idcodes present in the 'struct pmupdc_id_list list' of the TSB[index] */ +/* ---------------------------------------------------------------------------- */ + +void sort_data_inside_TSB(int index) { + + struct pmupdc_id_list *temp_list; + struct data_frame *prev_df,*curr_df,*sorted_df,*r_df,*s_df,*last_df,*p_df; + int match = 0; + unsigned int id_check; + + /* Pointer track_df will hold the address of the last sorted data_frame object. + Thus we assign to the 'track_df->dnext ' the next sorted data_frame object and so on */ + + temp_list = TSB[index].idlist; /* Starting ID required for sorting */ + last_df = TSB[index].first_data_frame; + p_df = TSB[index].first_data_frame; + + curr_df = last_df; + sorted_df = prev_df = NULL; + + while(temp_list != NULL) { // 1 while + + match = 0; + while(curr_df != NULL) { // 2. Traverse the pmu id in TSB and sort + + if(!ncmp_cbyc(curr_df->idcode,(unsigned char *)temp_list->idcode,2)){ + + match = 1; + break; + + } else { + + prev_df = curr_df; + curr_df = curr_df->dnext; + + } + + } // 2 while ends + + if (match == 1) { + + if(prev_df == NULL) { + + r_df = curr_df; + s_df = curr_df->dnext; + if(sorted_df == NULL) { + + sorted_df = r_df; + TSB[index].first_data_frame = sorted_df; + } else { + + sorted_df->dnext = r_df; + sorted_df = r_df; + } + sorted_df->dnext = s_df ; + curr_df = last_df = s_df; + + } else { + + if(sorted_df == NULL) { + + r_df = curr_df; + s_df = r_df->dnext; + prev_df->dnext = s_df; + sorted_df = r_df; + TSB[index].first_data_frame = sorted_df; + sorted_df->dnext = last_df ; + curr_df = last_df; + prev_df = NULL; + + } else {//if(sorted_df != NULL) { + + r_df = curr_df; + s_df = r_df->dnext; + prev_df->dnext = s_df; + sorted_df->dnext = r_df; + sorted_df = r_df; + sorted_df->dnext = last_df ; + curr_df = last_df; + prev_df = NULL; + } + } + + } else { // id whose data frame didnot arrive No match + + char *idcode; + idcode = malloc(3); + + struct data_frame *df = malloc(sizeof(struct data_frame)); + if(!df) { + + printf("Not enough memory data_frame.\n"); + } + df->dnext = NULL; + + // Allocate memory for df->framesize + df->framesize = malloc(3); + if(!df->framesize) { + + printf("Not enough memory df->idcode\n"); + exit(1); + } + + // Allocate memory for df->idcode + df->idcode = malloc(3); + if(!df->idcode) { + + printf("Not enough memory df->idcode\n"); + exit(1); + } + + // Allocate memory for df->soc + df->soc = malloc(5); + if(!df->soc) { + + printf("Not enough memory df->soc\n"); + exit(1); + } + + // Allocate memory for df->fracsec + df->fracsec = malloc(5); + if(!df->fracsec) { + + printf("Not enough memory df->fracsec\n"); + exit(1); + } + + /* 16 for sync,fsize,idcode,soc,fracsec,checksum */ + unsigned int size = (16 + (temp_list->num_pmu)*2)*sizeof(unsigned char); + + df->num_pmu = temp_list->num_pmu ; + + //Copy FRAMESIZE + int_to_ascii_convertor(size,df->framesize); + df->framesize[2] = '\0'; + + //Copy IDCODE + copy_cbyc (df->idcode,(unsigned char *)temp_list->idcode,2); + df->idcode[2] = '\0'; + + //Copy SOC + copy_cbyc (df->soc,(unsigned char *)TSB[index].soc,4); + df->soc[4] = '\0'; + + //Copy FRACSEC + copy_cbyc (df->fracsec,(unsigned char *)TSB[index].fracsec,4); + df->fracsec[4] = '\0'; + + df->dpmu = malloc(temp_list->num_pmu * sizeof(struct data_for_each_pmu *)); + if(!df->dpmu) { + + printf("Not enough memory df->dpmu[][]\n"); + exit(1); + } + + for (i = 0; i < temp_list->num_pmu; i++) { + + df->dpmu[i] = malloc(sizeof(struct data_for_each_pmu)); + } + + int j = 0; + + // PMU data has not come + while(j < temp_list->num_pmu) { + + df->dpmu[j]->stat = malloc(3); + if(!df->dpmu[j]->stat) { + + printf("Not enough memory for df->dpmu[j]->stat\n"); + } + + df->dpmu[j]->stat[0] = 0x00; + df->dpmu[j]->stat[1] = 0x0F; + df->dpmu[j]->stat[2] = '\0'; + j++; + } + + if(sorted_df == NULL) { + + r_df = df; + sorted_df = r_df; + TSB[index].first_data_frame = sorted_df; + sorted_df->dnext = last_df ; + curr_df = last_df; + prev_df = NULL; + + } else { + + r_df = df; + sorted_df->dnext = r_df; + sorted_df = r_df; + sorted_df->dnext = last_df ; + curr_df = last_df; + prev_df = NULL; + } + } + + temp_list = temp_list->nextid; //go for next ID + + } // 1. while ends + + p_df = TSB[index].first_data_frame; + while(p_df != NULL){ + + id_check = to_intconvertor(p_df->idcode); + p_df = p_df->dnext; + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION clear_TSB(): */ +/* It clears TSB[index] and frees all data frame objects after the data frames */ +/* in TSB[index] have been dispatched to destination device */ +/* ---------------------------------------------------------------------------- */ + +void clear_TSB(int index) { // + + unsigned long int tsb_soc,tsb_fracsec; + tsb_soc = to_long_int_convertor((unsigned char *)TSB[front].soc); + tsb_fracsec = to_long_int_convertor((unsigned char *)TSB[front].fracsec); + + memset(TSB[index].soc,'\0',5); + memset(TSB[index].fracsec,'\0',5); + + struct pmupdc_id_list *t_list,*r_list; + t_list = TSB[index].idlist; + + while(t_list != NULL) { + + r_list = t_list->nextid; + free(t_list->idcode); + free(t_list); + t_list = r_list; + } + + struct data_frame *t,*r; + t = TSB[index].first_data_frame; + + while(t != NULL) { + + r = t->dnext; + free_dataframe_object(t); + t = r; + } + + TSB[index].first_data_frame = NULL; + TSB[index].idlist = NULL; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION create_dataframe(): */ +/* It creates the IEEEC37.118 Standard based combined data frame from the data */ +/* frames received from all the source devices to be sent to destination */ +/* devices */ +/* ---------------------------------------------------------------------------- */ + +int create_dataframe(int index) { + + int total_frame_size = 0; + unsigned char temp[3]; + struct data_frame *temp_df; + unsigned int fsize; + uint16_t chk; + + temp_df = TSB[index].first_data_frame; + + while(temp_df != NULL) { + + fsize = to_intconvertor(temp_df->idcode); + fsize = to_intconvertor(temp_df->framesize); + total_frame_size = total_frame_size + fsize; + total_frame_size -= 16; // skip SYNC + FRAMESIZE + idcode + soc + fracsec + checksum + temp_df = temp_df->dnext; + } + + total_frame_size = total_frame_size + 18/* SYNC + FRAMESIZE + idcode + soc + fracsec + checksum + outer stat */; + + dataframe = malloc((total_frame_size + 1)*sizeof(char)); // Allocate memory for data frame + if(!dataframe) { + + printf("No enough memory for dataframe\n"); + } + dataframe[total_frame_size] = '\0'; + + // Start the data frame creation + int z = 0; + byte_by_byte_copy(dataframe,DATASYNC,z,2); // SYNC + z += 2; + + memset(temp,'\0',3); + int_to_ascii_convertor(total_frame_size,temp); + byte_by_byte_copy(dataframe,temp,z,2); // FRAME SIZE + z += 2; + + memset(temp,'\0',3); + int_to_ascii_convertor(PDC_IDCODE,temp); + byte_by_byte_copy(dataframe,temp,z,2); // PDC ID + z += 2; + + byte_by_byte_copy(dataframe,(unsigned char *)TSB[index].soc,z,4); //SOC + z += 4; + byte_by_byte_copy(dataframe,(unsigned char *)TSB[index].fracsec,z,4); //FRACSEC + z += 4; + + unsigned char stat[2]; //Outer Stat + stat[0] = 0x00; + stat[1] = 0x00; + byte_by_byte_copy(dataframe,stat,z,2); //outer stat + z += 2; + + temp_df = TSB[index].first_data_frame; + while(temp_df != NULL) { // 1 + + int j = 0; + while(j < temp_df->num_pmu) { // 2 + + if(temp_df->dpmu[j]->stat[1] == 0x0f) { + + // Copy STAT + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->stat,z,2); + z += 2; + j++; + continue; + } + + //Copy STAT + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->stat,z,2); + + z += 2; + + int i = 0; + + //Copy Phasors + if(temp_df->dpmu[j]->phnmr != 0) { + + if(temp_df->dpmu[j]->fmt->phasor == '1') { + + while(i < temp_df->dpmu[j]->phnmr) { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->phasors[i],z,8); // Phasors + z += 8; + i++; + } + + } else { + + while(i < temp_df->dpmu[j]->phnmr) { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->phasors[i],z,4); // Phasors + z += 4; + i++; + } + } + } + + //Copy FREQ + if(temp_df->dpmu[j]->fmt->freq == '1') { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->freq,z,4); // FREQ + z += 4; + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->dfreq,z,4); // FREQ + z += 4; + + } else { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->freq,z,2); // FREQ + z += 2; + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->dfreq,z,2); // FREQ + z += 2; + + } + + // Copy Analogs + if(temp_df->dpmu[j]->annmr != 0) { + + if(temp_df->dpmu[j]->fmt->analog == '1') { + + for(i = 0; idpmu[j]->annmr; i++){ + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->analog[i],z,4); // ANALOGS + z += 4; + } + + } else { + + for(i = 0; idpmu[j]->annmr; i++){ + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->analog[i],z,2); // ANALOGS + z += 2; + } + } + } + + i = 0; + + //Copy DIGITAL + if(temp_df->dpmu[j]->dgnmr != 0) { + + while(i < temp_df->dpmu[j]->dgnmr) { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->digital[i],z,2); // DIGITAL + z += 2; + i++; + } + } + j++; + } // 2 while + + temp_df = temp_df->dnext; + } // 1 while + + // Attach a checksum + chk = compute_CRC(dataframe,z); + dataframe[z++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + dataframe[z++] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + + return z; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION create_cfgframe(): */ +/* It creates the IEEEC37.118 Standard based combined configuration frame from */ +/* the configuration frames received from all the source devices to be sent to */ +/* destination devices */ +/* ---------------------------------------------------------------------------- */ + +int create_cfgframe() { + + struct cfg_frame *temp_cfg; + int total_frame_size = 0,count = 0; + unsigned char datarate[2],soc[4],fracsec[4]; // hard coded + int total_num_pmu = 0; + unsigned char time_base[4]; + unsigned int fsize,num_pmu,phnmr,dgnmr,annmr; + unsigned int data_rate,temp_data_rate; + unsigned long int sec,frac = 0,temp_tb,tb; + uint16_t chk; + + sec = (long int)time (NULL); + long_int_to_ascii_convertor(sec,soc); + long_int_to_ascii_convertor(frac,fracsec); + + temp_cfg = cfgfirst; + + while(temp_cfg != NULL) { + + if(count == 0) { // Copy the soc,fracsec,timebase from the first CFG to the combined CFG + + //SEPARATE TIMBASE + tb = to_long_int_convertor(temp_cfg->time_base); + copy_cbyc (time_base,temp_cfg->time_base,4); + + data_rate = to_intconvertor(temp_cfg->data_rate); + copy_cbyc (datarate,temp_cfg->data_rate,2); + + fsize = to_intconvertor(temp_cfg->framesize); + total_frame_size += fsize; + count++; // count used to count num of cfg + + num_pmu = to_intconvertor(temp_cfg->num_pmu); + total_num_pmu += num_pmu; + temp_cfg = temp_cfg->cfgnext; + + } else { + + fsize = to_intconvertor(temp_cfg->framesize); + total_frame_size += fsize; + total_frame_size -= 24; + + // take the Lowest Timebase + temp_tb = to_long_int_convertor(temp_cfg->time_base); + if(temp_tb < tb) { + + copy_cbyc (time_base,temp_cfg->time_base,4); + tb = temp_tb; + + } + + // take the highest data rate + temp_data_rate = to_intconvertor(temp_cfg->data_rate); + if(temp_data_rate > data_rate) { + + copy_cbyc (datarate,temp_cfg->data_rate,2); + data_rate = temp_data_rate; + } + count++; // count used to count num of cfg + + num_pmu = to_intconvertor(temp_cfg->num_pmu); + total_num_pmu += num_pmu; + temp_cfg = temp_cfg->cfgnext; + } + + } // While ENDS + + cfgframe = malloc((total_frame_size + 1)*sizeof(unsigned char)); // Allocate memory for data frame + cfgframe[total_frame_size] = '\0'; + + // Start the Combined CFG frame creation + int z = 0; + byte_by_byte_copy(cfgframe,CFGSYNC,z,2); // SYNC + z += 2; + + unsigned char temp[3]; + memset(temp,'\0',3); + int_to_ascii_convertor(total_frame_size,temp); + byte_by_byte_copy(cfgframe,temp,z,2); // FRAME SIZE + z += 2; + + unsigned char tmp[2]; + tmp[0]= cfgframe[2]; + tmp[1]= cfgframe[3]; + int newl; + newl = to_intconvertor(tmp); + printf("CFG Frame Len %d.\n",newl); + + memset(temp,'\0',3); + int_to_ascii_convertor(PDC_IDCODE,temp); + byte_by_byte_copy(cfgframe,temp,z,2); // PDC ID + z += 2; + + byte_by_byte_copy(cfgframe,soc,z,4); //SOC + z += 4; + byte_by_byte_copy(cfgframe,fracsec,z,4); //FRACSEC + z += 4; + byte_by_byte_copy(cfgframe,time_base,z,4); //TIMEBASE + z += 4; + + memset(temp,'\0',3); + int_to_ascii_convertor(total_num_pmu,temp); + byte_by_byte_copy(cfgframe,temp,z,2); // No of PMU + z += 2; + + int i,j; + temp_cfg = cfgfirst; + + while(temp_cfg != NULL) { // 1 + + num_pmu = to_intconvertor(temp_cfg->num_pmu); + j = 0; + + while (j < num_pmu) { //2 + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->stn,z,16); // STN + z += 16; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->idcode,z,2); // IDCODE + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->data_format,z,2); // FORMAT + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->phnmr,z,2); // PHNMR + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->annmr,z,2); // ANNMR + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->dgnmr,z,2); // DGNMR + z += 2; + + phnmr = to_intconvertor(temp_cfg->pmu[j]->phnmr); + annmr = to_intconvertor(temp_cfg->pmu[j]->annmr); + dgnmr = to_intconvertor(temp_cfg->pmu[j]->dgnmr); + + // Copy Phasor Names + if(phnmr != 0){ + + for(i = 0; ipmu[j]->cnext->phnames[i],z,16); // Phasor Names + z += 16; + } + } + + // Copy Analog Names + if(annmr != 0){ + + for(i = 0; ipmu[j]->cnext->angnames[i],z,16); // Analog Names + z += 16; + } + } + + // Copy Digital Names + if(dgnmr != 0) { + + struct dgnames *temp_dgname = temp_cfg->pmu[j]->cnext->first; + while (temp_dgname != NULL) { + + for(i = 0;i<16;i++) { + + byte_by_byte_copy(cfgframe,temp_dgname->dgn[i],z,16); // Digital Names + z += 16; + + } // Copy 16 channel names of digital word + + temp_dgname = temp_dgname->dg_next; + } // Go to next Digital word + + } + + // PHUNIT + if(phnmr != 0){ + + for (i = 0; ipmu[j]->phunit[i],z,4); // PHUNIT + z += 4; + } + } + + // ANUNIT + if(annmr != 0){ + + for (i = 0; ipmu[j]->anunit[i],z,4); // ANUNIT + z += 4; + + } + } + + // DGUNIT + if(dgnmr != 0){ + + for (i = 0; ipmu[j]->dgunit[i],z,4); // DGUNIT + z += 4; + } + + } + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->fnom,z,2); // FNOM + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->cfg_cnt,z,2); // CFGCNT + z += 2; + + j++; // index for pmu_num + + } // while 2 + + temp_cfg = temp_cfg->cfgnext; // Take next CFG + + } // while 1 + + + byte_by_byte_copy(cfgframe,datarate,z,2); // DATA RATE + z += 2; + + chk = compute_CRC(cfgframe,z); + cfgframe[z++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cfgframe[z++] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + return z; +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/align_sort.h b/iPDC/align_sort.h new file mode 100755 index 0000000..73cf615 --- /dev/null +++ b/iPDC/align_sort.h @@ -0,0 +1,79 @@ +/* ----------------------------------------------------------------------------- + * align_sort.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#define MAXTSB 5 + +/* ---------------------------------------------------------------- */ +/* global variable */ +/* ---------------------------------------------------------------- */ + +int front,rear; + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +/* Data Structure for Time Stamp Buffer */ +struct TimeStampBuffer { + + char *soc; + char *fracsec; + struct pmupdc_id_list *idlist; + struct data_frame *first_data_frame; + +}TSB[MAXTSB]; + +struct pmupdc_id_list { + + char *idcode; + int num_pmu; + struct pmupdc_id_list *nextid; +}; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void time_align(struct data_frame *df); + +void assign_df_to_TSB(struct data_frame *df,int index); + +void dispatch(int index); + +void sort_data_inside_TSB(int index); + +void clear_TSB(int index); + +int create_dataframe(int index); + +int create_cfgframe(); + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/connections.c b/iPDC/connections.c new file mode 100755 index 0000000..5be9af9 --- /dev/null +++ b/iPDC/connections.c @@ -0,0 +1,623 @@ +/* ----------------------------------------------------------------------------- + * connections.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ipdcGui.h" +#include "connections.h" +#include "parser.h" +#include "global.h" +#include "new_pmu_or_pdc.h" +#include "align_sort.h" + + +/* ---------------------------------------------------------------------*/ +/* Functions defined in connections.c */ +/* ---------------------------------------------------------------------*/ + +/* 1. void setup() */ +/* 2. void* UL_udp() */ +/* 3. void* UL_tcp() */ +/* 4. void* UL_tcp_connection() */ +/* 5. void PMU_process_UDP() */ +/* 6. void PMU_process_TCP() */ +/* 7. void sigchld_handler() */ + +/* -------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int yes = 1; /* argument to setsockopt */ +char display_buf[200]; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION setup(): */ +/* It creates two threads by calling tcp() and udp() in each thread. */ +/* ---------------------------------------------------------------------------- */ + + +void setup(){ + + /* ---------------------------------------------------------------- */ + /* Initialize Global Mutex Variables from global.h */ + /* ---------------------------------------------------------------- */ + + int err; + + /* Create UDP socket and bind to port */ + + if ((UL_UDP_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + + perror("socket"); + exit(1); + + } else { + + printf("UDP Socket:Sucessfully created\n"); + + } + + if (setsockopt(UL_UDP_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + UDP_my_addr.sin_family = AF_INET; // host byte order + UDP_my_addr.sin_port = htons(UDPPORT); // short, network byte order + UDP_my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(UDP_my_addr.sin_zero),'\0', 8); // zero the rest of the struct + + if (bind(UL_UDP_sockfd, (struct sockaddr *)&UDP_my_addr, + sizeof(struct sockaddr)) == -1) { + perror("bind"); + exit(1); + } else { + + printf("UDP Socket Bind :Sucessfull\n"); + } + + + /* Created socket and bound to port */ + /* Create TCP socket and bind and listen on port */ + + if ((UL_TCP_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + perror("socket"); + exit(1); + } else { + + printf("TCP Socket:Sucessfully created\n"); + } + + if (setsockopt(UL_TCP_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + TCP_my_addr.sin_family = AF_INET; // host byte order + TCP_my_addr.sin_port = htons(TCPPORT); // short, network byte order + TCP_my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(TCP_my_addr.sin_zero), '\0', 8); // zero the rest of the struct + + if (bind(UL_TCP_sockfd, (struct sockaddr *)&TCP_my_addr, sizeof(struct sockaddr)) + == -1) { + perror("bind"); + exit(1); + + } else { + + printf("TCP Socket Bind :Sucessfull\n"); + } + + if (listen(UL_TCP_sockfd, BACKLOG) == -1) { + + perror("listen"); + exit(1); + + } else { + + printf("TCP Listen :Sucessfull\n"); + } + + sa.sa_handler = sigchld_handler; // reap all dead processes + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + if (sigaction(SIGCHLD, &sa, NULL) == -1) { + perror("sigaction"); + exit(1); + } + + /* TCP created socket and is litening for connections */ + + printf("\nUDP Listening on port %d for command frames from Upper PDC\n",UDPPORT); + printf("\nTCP Listening on port %d for command frames from Upper PDC\n",TCPPORT); + printf("\nPort %d for Sending the data frames for archival from iPDC\n",DBPORT); + + UL_TCP_sin_size = sizeof(struct sockaddr_in); + UL_UDP_addr_len = sizeof(struct sockaddr); + DB_addr_len = sizeof(struct sockaddr); + + /* Threads are created for UDP and TCP to listen on port 6001 and 6000 respectively in default attr mode*/ + if((err = pthread_create(&UDP_thread,NULL,UL_udp,NULL))) { + + perror(strerror(err)); + exit(1); + } + + if((err = pthread_create(&TCP_thread,NULL,UL_tcp,NULL))) { + + perror(strerror(err)); + exit(1); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION UL_udp(): */ +/* Handles upper layer PDC command frames */ +/* ---------------------------------------------------------------------------- */ + +void* UL_udp(){ + + /* UDP data Received */ + while(1) { + + memset(UL_udp_command,'\0',19); + memset(display_buf,'\0',200); + + if ((numbytes = recvfrom(UL_UDP_sockfd,UL_udp_command, 18, 0,(struct sockaddr *)&UL_UDP_addr, (socklen_t *)&UL_UDP_addr_len)) == -1) { + // Main if + perror("recvfrom"); + exit(1); + + } else { /* New datagram has been received */ + + int pdc_flag = 0; + pthread_mutex_lock(&mutex_Upper_Layer_Details); + struct Upper_Layer_Details *temp_pdc = ULfirst; + + if(ULfirst == NULL) { + + pdc_flag = 0; + + } else { + + while(temp_pdc != NULL ) { + + if((!strcmp(temp_pdc->ip,inet_ntoa(UL_UDP_addr.sin_addr))) && + (!strncasecmp(temp_pdc->protocol,"UDP",3)) && (temp_pdc->port == UDPPORT)) { + + pdc_flag = 1; + break; + } else { + + temp_pdc = temp_pdc->next; + } + } + } + + if(pdc_flag){ + + unsigned char c = UL_udp_command[1]; + c <<= 1; + c >>= 5; + temp_pdc->sockfd = UL_UDP_sockfd; + + if(c == 0x04) { /* Check if it is a command frame from Upper PDC */ + + printf("\nCommand frame Received at iPDC.\n"); + c = UL_udp_command[15]; + + if((c & 0x05) == 0x05){ //Send CFg frame to PDC + + printf("\nCommand frame for CFG Received\n"); + + while(root_pmuid != NULL); // Wait till all the status change has been cleared + + printf("sockfd = %d,ipaddress = %s\n",temp_pdc->sockfd,inet_ntoa(temp_pdc->pdc_addr.sin_addr)); + + if(temp_pdc->address_set == 0) { + + memcpy(&temp_pdc->pdc_addr,&UL_UDP_addr,sizeof(UL_UDP_addr)); + + } + numbytes = create_cfgframe(); + + if ((numbytes = sendto (temp_pdc->sockfd,cfgframe, numbytes, 0, + (struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1)) { + + perror("sendto"); + + } else { + + printf("Sent iPDC Configuration Frame\n"); + } + free(cfgframe); + + temp_pdc->UL_upper_pdc_cfgsent = 1; + temp_pdc->config_change = 0; + + } else if((c & 0x02) == 0x02) { // if data frame + + if(temp_pdc->UL_upper_pdc_cfgsent == 1) { // Only if cfg is sent send the data + + temp_pdc->UL_data_transmission_off = 0; + + } else { + + printf("Data cannot be sent as CMD for CFG not received\n"); + + } + + } else if ((c & 0x01) == 0x01){ + + temp_pdc->UL_data_transmission_off = 1; + + } + + } else { /* If it is a frame other than command frame */ + + printf("Not a command frame\n"); + } + + + } else { /* If the command frame is not from authentic PDC*/ + + printf("Command frame from un-authentic PDC\n"); + } + + } // Main if ends + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + } // while ends +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION UL_tcp(): */ +/* It Handles Upper Layer PDC connections. */ +/* ---------------------------------------------------------------------------- */ + +void* UL_tcp() { + + int err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { // In the detached state, the thread resources are + + // immediately freed when it terminates, but + perror(strerror(err)); // pthread_join(3) cannot be used to synchronize + exit(1); // on the thread termination. + } + + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { // Shed policy = SCHED_FIFO (realtime, first-in first-out) + + perror(strerror(err)); + exit(1); + } + + int sin_size,new_fd,pdc_flag = 0; + + while (1) { + + sin_size = sizeof(struct sockaddr_in); + + if (((new_fd = accept(UL_TCP_sockfd, (struct sockaddr *)&UL_TCP_addr, + (socklen_t *)&sin_size)) == -1)) { // main if starts + perror("accept"); + + } else { /* New TCP connection has been received*/ + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + struct Upper_Layer_Details *temp_pdc = ULfirst; + if(ULfirst == NULL) { + + pdc_flag = 0; + + } else { + + while(temp_pdc != NULL ) { + + if((!strcmp(temp_pdc->ip,inet_ntoa(UL_TCP_addr.sin_addr))) && + (!strncasecmp(temp_pdc->protocol,"TCP",3)) && (temp_pdc->port == TCPPORT)) { + + pdc_flag = 1; + break; + } else { + + temp_pdc = temp_pdc->next; + } + } + } + if(pdc_flag) { + + temp_pdc->sockfd = new_fd; + pthread_t t; + + /* PDC is authentic. Send the command frame for cfg frame */ + printf("server: got connection from %s\n", + inet_ntoa(temp_pdc->pdc_addr.sin_addr)); + + /* Creates a new thread for each TCP connection. */ + if((err = pthread_create(&t,&attr,UL_tcp_connection,(void *)temp_pdc))) { + + perror(strerror(err)); + exit(1); + } + + } else { /* If PMU ip is not in the ipdcINFO.bin */ + + printf("Request from %s TCP which is un-authentic\n", + inet_ntoa(UL_TCP_addr.sin_addr)); + } + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + } // main if ends + + } // While ends + + pthread_attr_destroy(&attr); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION UL_tcp_connection(): */ +/* It handles command frames from upper layer PDC on TCP . */ +/* ---------------------------------------------------------------------------- */ + +void* UL_tcp_connection(void * temp_pdc) { + + struct Upper_Layer_Details *udetails = (struct Upper_Layer_Details *) temp_pdc; + int UL_new_fd = udetails->sockfd; + udetails->thread_id = pthread_self(); + + while(1) { + + memset(UL_tcp_command,19,0); + int bytes_read = recv(UL_new_fd,UL_tcp_command,18,0); + if(bytes_read == -1) { + + perror("recv"); + udetails->tcpup = 0; + pthread_exit(NULL); + + } else if(bytes_read == 0){ + + printf("The Client connection exit.\n"); + udetails->tcpup = 0; + pthread_exit(NULL); + + } else { + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + unsigned char c = UL_tcp_command[1]; + c <<= 1; + c >>= 5; + + if(c == 0x04) { /* Check if it is a command frame from Upper PDC*/ + + printf("Command frame Received\n"); // Need to further check if the command is for cfg or data + c = UL_tcp_command[15]; + + if((c & 0x05) == 0x05){ //Send CFg frame to PDC + + while(root_pmuid != NULL); // Wait till the staus chage list becomes empty + numbytes = create_cfgframe(); + udetails->tcpup = 1; + + if (send(UL_new_fd,cfgframe,numbytes, 0)== -1) + perror("send"); + free(cfgframe); + + udetails->UL_upper_pdc_cfgsent = 1; + udetails->config_change = 0; + + } else if((c & 0x02) == 0x02) { + + if(udetails->UL_upper_pdc_cfgsent == 1) { // Only if cfg is sent send the data + + udetails->UL_data_transmission_off = 0; + + } else { + + printf("Data cannot be sent as CMD for CFG not received\n"); + + } + + } else if ((c & 0x01) == 0x01){ // Put the data transmission off + + udetails->UL_data_transmission_off = 1; + } + } else { /* If it is a frame other than command frame */ + + printf("Not a command frame\n"); + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + } + + } // while + close(UL_new_fd); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION PMU_process_UDP(): */ +/* This function processes the frames as per their type( data, config). */ +/* The received frames are from Lower Layer PMU/PDC on UDP. */ +/* ---------------------------------------------------------------------------- */ + +void PMU_process_UDP(unsigned char *udp_buffer,struct sockaddr_in PMU_addr,int sockfd){ + + int stat_status; + unsigned int id; + unsigned char id_char[2]; + + id_char[0] = udp_buffer[4]; + id_char[1] = udp_buffer[5]; + id = to_intconvertor(id_char); + + unsigned char c = udp_buffer[1]; + c <<= 1; + c >>= 5; + if(c == 0x00){ /* If data frame */ + + stat_status = dataparser(udp_buffer); + + /* Change in cfg frame is handled */ + if((stat_status == 10)||(stat_status == 14)) { + + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(1,id,(char *)cmdframe); + + if (sendto(sockfd,cmdframe,18, 0, + (struct sockaddr *)&PMU_addr,sizeof(PMU_addr)) == -1) + perror("sendto"); + free(cmdframe); + + } else if (stat_status == 15) { /* Data Invalid */ + + printf("Data Invalid\n"); + + } + + } else if(c == 0x03) { /* If configuration frame */ + + printf("\nConfiguration frame received.\n"); + cfgparser(udp_buffer); + + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(2,id,(char *)cmdframe); + printf("\nReturn from create_command_frame\n"); + + /* Command frame sent to send the data frames */ + if (sendto(sockfd,cmdframe, 18, 0, + (struct sockaddr *)&PMU_addr,sizeof(PMU_addr)) == -1) + perror("sendto"); + free(cmdframe); + + } else { + + printf("Erroneous frame\n"); + + } + fflush(stdout); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION PMU_process_TCP(): */ +/* This function processes the frames as per their type( data, config). */ +/* The received frames are from Lower Layer PMU/PDC on TCP. */ +/* ---------------------------------------------------------------------------- */ + +void PMU_process_TCP(unsigned char tcp_buffer[],int sockfd) { + + int stat_status; + unsigned int id; + unsigned char id_char[2]; + + id_char[0] = tcp_buffer[4]; + id_char[1] = tcp_buffer[5]; + id = to_intconvertor(id_char); + + unsigned char c = tcp_buffer[1]; + c <<= 1; + c >>= 5; + + if(c == 0x00){ /* If data frame */ + + stat_status = dataparser(tcp_buffer); + + /* Handle the Stat word */ + if((stat_status == 10)||(stat_status == 14)) { + + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(1,id,(char *)cmdframe); + + if (send(sockfd,cmdframe,18, 0)== -1) + perror("send"); + free(cmdframe); + + } else if (stat_status == 15) { /* Data Invalid */ + + printf("Data Invalid\n"); + } + + } else if(c == 0x03) { /* If configuration frame */ + + printf("\nConfiguration frame received.\n"); + cfgparser(tcp_buffer); + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(2,id,(char *)cmdframe); + printf("Return from create_command_frame().\n"); + + /* Command frame sent to send the data frames */ + if (send(sockfd,cmdframe,18, 0)== -1) + perror("send"); + free(cmdframe); + + } else { + + printf("\nErroneous frame\n"); + } + fflush(stdout); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION sigchld_handler(): */ +/* ---------------------------------------------------------------------------- */ + +void sigchld_handler(int s) { + while(wait(NULL) > 0); +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/connections.h b/iPDC/connections.h new file mode 100755 index 0000000..b87d944 --- /dev/null +++ b/iPDC/connections.h @@ -0,0 +1,109 @@ +/* ----------------------------------------------------------------------------- + * connections.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include + + +/* ---------------------------------------------------------------- */ +/* global variable */ +/* ---------------------------------------------------------------- */ + +#define DBPORT 9000 /* The port users will be connecting to */ +#define BACKLOG 10 /* How many pending connections queue will hold */ +#define MAXBUFLEN 2000 + +int UL_UDP_addr_len,UL_TCP_sin_size, numbytes; +unsigned char UL_udp_command[19]; +unsigned char UL_tcp_command[19]; + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +struct sigaction sa; + +struct Lower_Layer_Details { + + unsigned int pmuid; + char ip[16]; + int port; + char protocol[4]; + int sockfd; + int up; /* used only in tcp */ + struct sockaddr_in llpmu_addr; + pthread_t thread_id; + int data_transmission_off; + int pmu_remove; + int request_cfg_frame; + struct Lower_Layer_Details *next; + struct Lower_Layer_Details *prev; + +}*LLfirst,*LLlast; + + +struct Upper_Layer_Details { + + char ip[16]; + int port; + char protocol[4]; + int sockfd; + int tcpup; + pthread_t thread_id; + struct sockaddr_in pdc_addr; + int config_change; + int UL_upper_pdc_cfgsent; + int UL_data_transmission_off; + int address_set; + struct Upper_Layer_Details *next; + struct Upper_Layer_Details *prev; + +}*ULfirst,*ULlast; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void setup(); + +void* UL_tcp(); + +void* UL_tcp_connection(void * newfd); + +void* UL_udp(); + +void PMU_process_UDP(unsigned char *,struct sockaddr_in,int sockfd); + +void PMU_process_TCP(unsigned char tcp_buffer[],int sockfd); + +void sigchld_handler(int s); /* TCP signal handler */ + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/dallocate.c b/iPDC/dallocate.c new file mode 100755 index 0000000..a03e794 --- /dev/null +++ b/iPDC/dallocate.c @@ -0,0 +1,170 @@ +/* ----------------------------------------------------------------------------- + * dallocate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include "parser.h" +#include "dallocate.h" +#include "global.h" + + +/* ------------------------------------------------------------------------------------ */ +/* Functions defined in dallocate.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. void free_cfgframe_object(struct cfg_frame *cfg) */ +/* 2. void free_dataframe_object(struct data_frame *df) */ +/* 3. void free_2darray(char** array, int x) */ + +/* ------------------------------------------------------------------------------------ */ + + +/* -------------------------------------------------------------*/ +/* FUNCTION free_cfgframe_object(): */ +/* It frees memory allocated to cfg objects. */ +/* ------------------------------------------------------------ */ + +void free_cfgframe_object(struct cfg_frame *cfg) { + + int j = 0; + unsigned int phn,ann,dgn,num_pmu; + struct dgnames *t_dgnames,*r_dgnames; + + num_pmu = to_intconvertor(cfg->num_pmu); + + while(jpmu[j]->stn); + free(cfg->pmu[j]->idcode); + free(cfg->pmu[j]->data_format); + free(cfg->pmu[j]->fmt); + + // Extract PHNMR, DGNMR, ANNMR + phn = to_intconvertor(cfg->pmu[j]->phnmr); + ann = to_intconvertor(cfg->pmu[j]->annmr); + dgn = to_intconvertor(cfg->pmu[j]->dgnmr); + + if(phn != 0) + free_2darray(cfg->pmu[j]->cnext->phnames,phn); + if(ann != 0) + free_2darray(cfg->pmu[j]->cnext->angnames,ann); + + if(dgn != 0) { + t_dgnames = cfg->pmu[j]->cnext->first; + + while(t_dgnames != NULL) { + + r_dgnames = t_dgnames->dg_next; + free_2darray(t_dgnames->dgn,16); + t_dgnames = r_dgnames; + } + } + + if(phn != 0) + free_2darray(cfg->pmu[j]->phunit,phn); + if(ann != 0) + free_2darray(cfg->pmu[j]->anunit,ann); + if(dgn != 0) + free_2darray(cfg->pmu[j]->dgunit,dgn); + + free(cfg->pmu[j]->phnmr); + free(cfg->pmu[j]->annmr); + free(cfg->pmu[j]->dgnmr); + free(cfg->pmu[j]->fnom); + free(cfg->pmu[j]->cfg_cnt); + + j++; + } // End of While + + free(cfg->framesize); + free(cfg->idcode); + free(cfg->soc); + free(cfg->fracsec); + free(cfg->time_base); + free(cfg->data_rate); + free(cfg->num_pmu); + free(cfg); +} + + +/* -------------------------------------------------------------*/ +/* FUNCTION free_dataframe_object(): */ +/* It frees memory allocated to data objects. */ +/* -------------------------------------------------------------*/ + +void free_dataframe_object(struct data_frame *df) { + + int j = 0; + + // Free the blocks + while(j < df->num_pmu) { + + if(df->dpmu[j]->stat[1] == 0x0F) { + + free(df->dpmu[j]->stat); + j++; + continue; + } + + free(df->dpmu[j]->stat); + free(df->dpmu[j]->freq); + free(df->dpmu[j]->dfreq); + + if(df->dpmu[j]->phnmr != 0) + free_2darray(df->dpmu[j]->phasors,df->dpmu[j]->phnmr); + if(df->dpmu[j]->annmr != 0) + free_2darray(df->dpmu[j]->analog,df->dpmu[j]->annmr); + if(df->dpmu[j]->dgnmr != 0) + free_2darray(df->dpmu[j]->digital,df->dpmu[j]->dgnmr); + j++; + } // End of While + + free(df->framesize); + free(df->idcode); + free(df->soc); + free(df->fracsec); + free(df); +} + + +/* -------------------------------------------------------------*/ +/* FUNCTION free_2darray: */ +/* It frees memory allocated to 2D Arrays. */ +/* -------------------------------------------------------------*/ + +void free_2darray(unsigned char** array, int n){ + + int i; + for(i = 0; i < n; i++) + free(array[i]); + free(array); +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/dallocate.h b/iPDC/dallocate.h new file mode 100755 index 0000000..07fa446 --- /dev/null +++ b/iPDC/dallocate.h @@ -0,0 +1,43 @@ +/* ----------------------------------------------------------------------------- + * dallocate.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +/* Frees memory allocated to cfg objects */ +void free_cfgframe_object(struct cfg_frame *cfg); + +/* Frees memory allocated to data objects */ +void free_dataframe_object(struct data_frame *); + +/* frees memory allocated to 2D arrays */ +void free_2darray(unsigned char** array, int x); + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/global.h b/iPDC/global.h new file mode 100755 index 0000000..baf5440 --- /dev/null +++ b/iPDC/global.h @@ -0,0 +1,74 @@ +/* ----------------------------------------------------------------------------- + * global.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include + +#define MAX_STRING_SIZE 5000 + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +pthread_mutex_t mutex_cfg; /* To lock cfg data objects */ +pthread_mutex_t mutex_file; /* To lock PMU Setup File */ +pthread_mutex_t mutex_Lower_Layer_Details; /* To lock objects of connection table that hold lower layer PMU/PDC ip and protocol */ +pthread_mutex_t mutex_Upper_Layer_Details; /* To lock objects of connection table that hold upper layer PDC ip and protocol */ +pthread_mutex_t mutex_status_change; + +unsigned char *cfgframe,*dataframe; + +struct sockaddr_in UDP_my_addr,TCP_my_addr; /* my address information */ +struct sockaddr_in UL_UDP_addr,UL_TCP_addr; /* connector’s address information */ +int UL_UDP_sockfd,UL_TCP_sockfd; /* socket descriptors */ +pthread_t UDP_thread,TCP_thread,p_thread; + +FILE *fp_log,*fp_updc; +char tname[20]; + +/* iPDC Setup File path globaly */ +char ipdcFolderPath[200]; +char ipdcFilePath[200]; + + +/* -------------------------------------------------------------------- */ +/* global DataBase variables */ +/* -------------------------------------------------------------------- */ + +struct sockaddr_in DB_Server_addr; // address information +int DB_sockfd,DB_addr_len; + +int PDC_IDCODE,TCPPORT,UDPPORT; +char dbserver_ip[20]; + +unsigned char DATASYNC[3],CFGSYNC[3],CMDSYNC[3],CMDDATASEND[3],CMDDATAOFF[3],CMDCFGSEND[3]; + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/iPDC.glade b/iPDC/iPDC.glade new file mode 100755 index 0000000..8b4892b --- /dev/null +++ b/iPDC/iPDC.glade @@ -0,0 +1,546 @@ + + + + + + + True + gtk-properties + + + True + gtk-go-up + 10 + 1 + + + True + gtk-go-down + 1 + + + True + gtk-select-color + 1 + + + True + gtk-close + 1 + + + True + gtk-add + 1 + + + True + gtk-about + 1 + + + True + gtk-missing-image + + + True + gtk-quit + 10 + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-new + 1 + + + True + gtk-sort-ascending + 1 + + + True + gtk-remove + 1 + + + True + gtk-media-stop + 1 + + + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + iPDC - v1.3 + center-on-parent + 710 + 590 + gnome-obex-server + False + center + + + True + + + Add a Source Device + 240 + 35 + True + True + True + PMU/PDC device from which configuration +and data frames would be received. + 0 + + + 20 + 180 + + + + + Remove a Source Device + 240 + 35 + True + True + True + Remove PMU/PDC device from which +data frames are being received. + 0 + + + 20 + 225 + + + + + Turn OFF Data Transmission + 240 + 35 + True + True + True + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + 0 + + + 20 + 270 + + + + + Turn ON Data Transmission + 240 + 35 + True + True + True + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + 0 + + + 20 + 315 + + + + + Request Configuration Frame + 240 + 35 + True + True + True + Send Command frame to PMU/PDC device +to get configuration frame. + 0 + + + 20 + 360 + + + + + Add a Destination Device + 240 + 35 + True + True + True + PDC device to whom iPDC sends +configuration and data frames. + 0 + + + 20 + 405 + + + + + Remove a Destination Device + 240 + 35 + True + True + True + Remove PDC device to whom iPDC +sends data frames. + 0 + + + 20 + 449 + + + + + iPDC Connection Table + 240 + 35 + True + True + True + Display source and destination devices connection tables. + 0 + + + 20 + 495 + + + + + EXIT + 100 + 35 + True + True + True + Click to exit the iPDC Software. + + + 603 + 555 + + + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to create a new iPDC setup file. + image6 + False + True + + + + + Open iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved iPDC setup file. + image4 + False + True + + + + + iPDC Properties + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the iPDC setup informations. + image5 + False + True + + + + + Connection Table + True + Display source and destination devices connection tables. + image12 + False + True + + + + + Quit + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the iPDC Software. + image3 + False + True + + + + + + + + + True + Edit + True + + + True + + + Add Source + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + PMU/PDC device from which configuration +and data frames would be received. + image7 + False + True + + + + + Remove Source + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Remove PMU/PDC device from which +data frames are being received. + image8 + False + True + + + + + Data OFF + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + image9 + False + True + + + + + Data ON + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + image10 + False + True + + + + + Request CFG + True + Send Command frame to PMU/PDC device +to get configuration frame. + image11 + False + True + + + + + Add Destination + True + PDC device to whom iPDC sends +configuration and data frames. + image14 + False + True + + + + + Remove Destination + True + Remove PDC device to whom iPDC +sends data frames. + image13 + False + True + + + + + + + + + True + _Help + True + + + True + + + About + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to see the publisher, licensing, and version details. + image15 + False + True + + + + + + + + + + + Go online + 100 + 35 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 555 + + + + + 235 + 40 + True + + + 20 + 143 + + + + + 180 + 28 + True + True + + + 260 + 560 + + + + + 421 + 350 + True + False + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + + + 285 + 181 + + + + + 720 + 70 + True + False + False + fill + False + + + 36 + + + + + 800 + 20 + True + + + -20 + 536 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 545 + 107 + + + + + + diff --git a/iPDC/iPDC.xml b/iPDC/iPDC.xml new file mode 100644 index 0000000..5bc42e1 --- /dev/null +++ b/iPDC/iPDC.xml @@ -0,0 +1,546 @@ + + + + + + + True + gtk-properties + + + True + gtk-go-up + 10 + 1 + + + True + gtk-go-down + 1 + + + True + gtk-select-color + 1 + + + True + gtk-close + 1 + + + True + gtk-add + 1 + + + True + gtk-about + 1 + + + True + gtk-missing-image + + + True + gtk-quit + 10 + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-new + 1 + + + True + gtk-sort-ascending + 1 + + + True + gtk-remove + 1 + + + True + gtk-media-stop + 1 + + + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + iPDC - v1.3 + center-on-parent + 710 + 590 + gnome-obex-server + False + center + + + True + + + Add a Source Device + 240 + 35 + True + True + True + PMU/PDC device from which configuration +and data frames would be received. + 0 + + + 20 + 180 + + + + + Remove a Source Device + 240 + 35 + True + True + True + Remove PMU/PDC device from which +data frames are being received. + 0 + + + 20 + 225 + + + + + Turn OFF Data Transmission + 240 + 35 + True + True + True + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + 0 + + + 20 + 270 + + + + + Turn ON Data Transmission + 240 + 35 + True + True + True + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + 0 + + + 20 + 315 + + + + + Request Configuration Frame + 240 + 35 + True + True + True + Send Command frame to PMU/PDC device +to get configuration frame. + 0 + + + 20 + 360 + + + + + Add a Destination Device + 240 + 35 + True + True + True + PDC device to whom iPDC sends +configuration and data frames. + 0 + + + 20 + 405 + + + + + Remove a Destination Device + 240 + 35 + True + True + True + Remove PDC device to whom iPDC +sends data frames. + 0 + + + 20 + 449 + + + + + iPDC Connection Table + 240 + 35 + True + True + True + Display source and destination devices connection tables. + 0 + + + 20 + 495 + + + + + EXIT + 100 + 35 + True + True + True + Click to exit the iPDC Software. + + + 603 + 555 + + + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to create a new iPDC setup file. + image6 + False + True + + + + + Open iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved iPDC setup file. + image4 + False + True + + + + + iPDC Properties + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the iPDC setup informations. + image5 + False + True + + + + + Connection Table + True + Display source and destination devices connection tables. + image12 + False + True + + + + + Quit + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the iPDC Software. + image3 + False + True + + + + + + + + + True + Edit + True + + + True + + + Add Source + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + PMU/PDC device from which configuration +and data frames would be received. + image7 + False + True + + + + + Remove Source + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Remove PMU/PDC device from which +data frames are being received. + image8 + False + True + + + + + Data OFF + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + image9 + False + True + + + + + Data ON + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + image10 + False + True + + + + + Request CFG + True + Send Command frame to PMU/PDC device +to get configuration frame. + image11 + False + True + + + + + Add Destination + True + PDC device to whom iPDC sends +configuration and data frames. + image14 + False + True + + + + + Remove Destination + True + Remove PDC device to whom iPDC +sends data frames. + image13 + False + True + + + + + + + + + True + _Help + True + + + True + + + About + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to see the publisher, licensing, and version details. + image15 + False + True + + + + + + + + + + + Go online + 100 + 35 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 555 + + + + + 235 + 40 + True + + + 20 + 143 + + + + + 180 + 28 + True + True + + + 260 + 560 + + + + + 421 + 350 + True + False + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + + + 285 + 181 + + + + + 720 + 70 + True + False + False + fill + False + + + 36 + + + + + 800 + 20 + True + + + -20 + 536 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 545 + 107 + + + + + + diff --git a/iPDC/iPDC.xml$ b/iPDC/iPDC.xml$ new file mode 100644 index 0000000..5bc42e1 --- /dev/null +++ b/iPDC/iPDC.xml$ @@ -0,0 +1,546 @@ + + + + + + + True + gtk-properties + + + True + gtk-go-up + 10 + 1 + + + True + gtk-go-down + 1 + + + True + gtk-select-color + 1 + + + True + gtk-close + 1 + + + True + gtk-add + 1 + + + True + gtk-about + 1 + + + True + gtk-missing-image + + + True + gtk-quit + 10 + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-new + 1 + + + True + gtk-sort-ascending + 1 + + + True + gtk-remove + 1 + + + True + gtk-media-stop + 1 + + + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + iPDC - v1.3 + center-on-parent + 710 + 590 + gnome-obex-server + False + center + + + True + + + Add a Source Device + 240 + 35 + True + True + True + PMU/PDC device from which configuration +and data frames would be received. + 0 + + + 20 + 180 + + + + + Remove a Source Device + 240 + 35 + True + True + True + Remove PMU/PDC device from which +data frames are being received. + 0 + + + 20 + 225 + + + + + Turn OFF Data Transmission + 240 + 35 + True + True + True + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + 0 + + + 20 + 270 + + + + + Turn ON Data Transmission + 240 + 35 + True + True + True + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + 0 + + + 20 + 315 + + + + + Request Configuration Frame + 240 + 35 + True + True + True + Send Command frame to PMU/PDC device +to get configuration frame. + 0 + + + 20 + 360 + + + + + Add a Destination Device + 240 + 35 + True + True + True + PDC device to whom iPDC sends +configuration and data frames. + 0 + + + 20 + 405 + + + + + Remove a Destination Device + 240 + 35 + True + True + True + Remove PDC device to whom iPDC +sends data frames. + 0 + + + 20 + 449 + + + + + iPDC Connection Table + 240 + 35 + True + True + True + Display source and destination devices connection tables. + 0 + + + 20 + 495 + + + + + EXIT + 100 + 35 + True + True + True + Click to exit the iPDC Software. + + + 603 + 555 + + + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to create a new iPDC setup file. + image6 + False + True + + + + + Open iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved iPDC setup file. + image4 + False + True + + + + + iPDC Properties + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the iPDC setup informations. + image5 + False + True + + + + + Connection Table + True + Display source and destination devices connection tables. + image12 + False + True + + + + + Quit + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the iPDC Software. + image3 + False + True + + + + + + + + + True + Edit + True + + + True + + + Add Source + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + PMU/PDC device from which configuration +and data frames would be received. + image7 + False + True + + + + + Remove Source + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Remove PMU/PDC device from which +data frames are being received. + image8 + False + True + + + + + Data OFF + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + image9 + False + True + + + + + Data ON + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + image10 + False + True + + + + + Request CFG + True + Send Command frame to PMU/PDC device +to get configuration frame. + image11 + False + True + + + + + Add Destination + True + PDC device to whom iPDC sends +configuration and data frames. + image14 + False + True + + + + + Remove Destination + True + Remove PDC device to whom iPDC +sends data frames. + image13 + False + True + + + + + + + + + True + _Help + True + + + True + + + About + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to see the publisher, licensing, and version details. + image15 + False + True + + + + + + + + + + + Go online + 100 + 35 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 555 + + + + + 235 + 40 + True + + + 20 + 143 + + + + + 180 + 28 + True + True + + + 260 + 560 + + + + + 421 + 350 + True + False + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + + + 285 + 181 + + + + + 720 + 70 + True + False + False + fill + False + + + 36 + + + + + 800 + 20 + True + + + -20 + 536 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 545 + 107 + + + + + + diff --git a/iPDC/images/PSLab.PNG b/iPDC/images/PSLab.PNG new file mode 100755 index 0000000000000000000000000000000000000000..bc47b48e24a71731a83d204da9df20b4e9c8f923 GIT binary patch literal 272332 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

r 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 i=kU& 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 literal 0 HcmV?d00001 diff --git a/iPDC/images/logo.png b/iPDC/images/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..757d992506fa1c5b7424ee67e01702d7e443b070 GIT binary patch literal 2787 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 literal 0 HcmV?d00001 diff --git a/iPDC/ipdc.c b/iPDC/ipdc.c new file mode 100755 index 0000000..cf92447 --- /dev/null +++ b/iPDC/ipdc.c @@ -0,0 +1,315 @@ +/* ----------------------------------------------------------------------------- + * ipdc.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "connections.h" +#include "parser.h" +#include "global.h" +#include "ipdcGui.h" + +/* Common fixed path for storage of few common files */ +#define UI_fILE "/usr/local/share/iPDC/iPDC.xml" + + +/* ---------------------------------------------------------------- */ +/* main program starts here */ +/* ---------------------------------------------------------------- */ + +int main(int argc, char **argv) +{ + /* local variables */ + int err; + char *ptr1; + struct stat st; + + memset(tname,'\0',20); + strcpy(tname,"/dev/pts/"); + + GtkBuilder *builder; + GError *error = NULL; + + PDC_IDCODE = 0; + system("clear"); + + /* Init GTK+ */ + gtk_init(&argc, &argv); + + /* Create new GtkBuilder object */ + builder = gtk_builder_new(); + + if(!gtk_builder_add_from_file(builder, UI_fILE, &error)) + { + g_warning("%s", error->message); + g_free(error); + return(1); + } + + /* Allocate data structure */ + data = g_slice_new(ChData); + + /* Get objects from UI */ + #define GW(name) CH_GET_WIDGET(builder, name, data) + GW(ipdc); + GW(add_pmu_button); + GW(remove_pmu_button); + GW(cmd_data_off_button); + GW(cmd_data_on_button); + GW(cmd_cfg_button); + GW(add_pdc_button); + GW(remove_pdc_button); + GW(display_conn_table_button); + GW(enter_pdc_detail_menuitem); + GW(exit_button); + GW(menubar); + GW(menuitem2); + GW(open_ipdc_setup); + GW(pdc_details_menuitem); + GW(menu_add_source); + GW(menu_remove_source); + GW(menu_data_off); + GW(menu_data_on); + GW(menu_request_cfg); + GW(menu_add_destination); + GW(menu_remove_destination); + GW(menu_conn_table); + GW(about_menuitem); + GW(exit_menuitem); + GW(text_view); + GW(text_view1); + GW(rights_label); + GW(admin_label); + GW(time_lable); + #undef GW + + /* Connect signals */ + gtk_builder_connect_signals(builder, data); + gtk_builder_connect_signals(builder, NULL); + + // Changes how a toplevel window deals with its size request and user resize attempts. + gtk_window_set_policy (GTK_WINDOW (data->ipdc), FALSE, TRUE, TRUE); + gtk_window_set_position(GTK_WINDOW(data->ipdc), GTK_WIN_POS_CENTER); + gtk_window_set_icon(GTK_WINDOW(data->ipdc), create_pixbuf("/usr/local/share/iPDC/logo.png")); + + /* Set the Title of Main Window */ + gtk_window_set_title (GTK_WINDOW (data->ipdc), "iPDC"); + + /* Disable all the (mentioned) buttons on main ipdc window */ + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pmu_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pmu_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_off_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_on_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_cfg_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pdc_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pdc_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->display_conn_table_button), FALSE); + + gtk_widget_set_visible(GTK_WIDGET(data->menuitem2), FALSE); + gtk_widget_set_visible(GTK_WIDGET(data->menu_conn_table), FALSE); + gtk_widget_set_visible(GTK_WIDGET(data->pdc_details_menuitem), FALSE); + + memset(ipdcFilePath, '\0', 200); + ptr1 = malloc(200*sizeof(char)); + memset(ptr1, '\0', 200); + + /* Get the user's name for storing the iPDC Setup File */ + strcpy(ptr1,getenv ("HOME")); + + if (ptr1 == NULL) + { + printf("user not found\n"); + exit(1); + } + strcat(ptr1, "/iPDC"); + + if(stat(ptr1,&st) == 0) /* If main iPDC folder not present in the system? */ + { + strcat(ptr1, "/iPDC"); + + if(stat(ptr1,&st) == 0) + { + strcat(ipdcFolderPath, ptr1); + + FILE * output; + int check; + char buff[200], is_empty[100]; + + strcpy(buff, "ls "); + strcat(buff, ipdcFolderPath); + strcat(buff, " | wc -l"); + + output = popen(buff,"r"); + fgets (is_empty, 100, output); //write to the char + pclose (output); + + check = atoi(is_empty); + + if (check == 0) //No Setup files are present + { + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* fill the iPDC details */ + fill_pdc_details (NULL); + } + else + { + char ch[300]; + + //ptr1 = getenv ("HOME"); + strcpy(ch, "Fill the iPDC setup details manualy or open the iPDC setup file\nfrom the "); + //strcat(ch, ptr1); + //strcat(ch, "/"); + strcat(ch, ipdcFolderPath); + + //validation_result (ch); + } + } + else + { + if (mkdir (ptr1, 0700)) + { + printf ("Cannot create directory `%s': %s\n", ipdcFolderPath, strerror (errno)); + validation_result ("Cannot create iPDC directory on proposed path! "); + } + else + { + strcat(ipdcFolderPath, ptr1); + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* fill the iPDC details */ + fill_pdc_details (NULL); + } + } + } + else + { + if (mkdir (ptr1, 0700)) + { + printf ("Cannot create directory `%s': %s", ipdcFolderPath, strerror (errno)); + validation_result ("Cannot create iPDC directory on proposed path! "); + } + else + { + strcat(ptr1, "/iPDC"); + + if (mkdir (ptr1, 0700)) + { + printf ("Cannot create directory `%s': %s", ipdcFolderPath, strerror (errno)); + validation_result ("Cannot create iPDC sub-directory on proposed path! "); + } + else + { + strcat(ipdcFolderPath, ptr1); + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* fill the iPDC details */ + fill_pdc_details (NULL); + } + } + } + + /* Decorate the main window of iPDC */ + ipdc_colors(); + + /* Signals Definitions*/ + g_signal_connect (data->add_pmu_button, "clicked", G_CALLBACK(add_pmu), NULL); + g_signal_connect (data->menu_add_source, "activate", G_CALLBACK(add_pmu), NULL); + + g_signal_connect (data->remove_pmu_button, "clicked", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "1"); + g_signal_connect (data->menu_remove_source, "activate", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "1"); + + g_signal_connect (data->cmd_data_off_button, "clicked", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "2"); + g_signal_connect (data->menu_data_off, "activate", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "2"); + + g_signal_connect (data->cmd_data_on_button, "clicked", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "3"); + g_signal_connect (data->menu_data_on, "activate", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "3"); + + g_signal_connect (data->cmd_cfg_button, "clicked", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "4"); + g_signal_connect (data->menu_request_cfg, "activate", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "4"); + + g_signal_connect (data->add_pdc_button, "clicked", G_CALLBACK(add_new_pdc), NULL); + g_signal_connect (data->menu_add_destination, "activate", G_CALLBACK(add_new_pdc), NULL); + + g_signal_connect (data->remove_pdc_button, "clicked", G_CALLBACK(remove_pdc), NULL); + g_signal_connect (data->menu_remove_destination, "activate", G_CALLBACK(remove_pdc), NULL); + + g_signal_connect (data->display_conn_table_button, "clicked", G_CALLBACK(connection_table), NULL); + g_signal_connect (data->menu_conn_table, "activate", G_CALLBACK(connection_table), NULL); + + g_signal_connect (data->exit_button, "clicked", G_CALLBACK(destroy), NULL); + g_signal_connect (data->open_ipdc_setup, "activate", G_CALLBACK(ipdc_setup_fileSelector), NULL); + g_signal_connect (data->pdc_details_menuitem, "activate", G_CALLBACK(display_pdc_detail), NULL); + g_signal_connect_swapped (data->enter_pdc_detail_menuitem, "activate", G_CALLBACK(fill_pdc_details), NULL); + g_signal_connect (data->exit_menuitem, "activate", G_CALLBACK(destroy), NULL); + g_signal_connect (data->about_menuitem, "activate", G_CALLBACK(about_ipdc), NULL); + g_signal_connect (data->ipdc, "destroy", G_CALLBACK(destroy), NULL); + + /* Destroy builder, since we don't need it anymore */ + g_object_unref(G_OBJECT(builder)); + + /* Show window. All other widgets are automatically shown by GtkBuilder */ + gtk_widget_show(data->ipdc); + + pthread_t t; + if((err = pthread_create(&t,NULL,display_time,NULL))) + { + perror(strerror(err)); + exit(1); + } + + /* GTK Main */ + gtk_main(); + + pthread_join(UDP_thread, NULL); + pthread_join(TCP_thread, NULL); + pthread_join(p_thread, NULL); +// pthread_join(t, NULL); + + close(UL_UDP_sockfd); + close(UL_TCP_sockfd); + + /* Free any allocated data */ + g_slice_free(ChData, data); + + return(0); +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/ipdcGui.c b/iPDC/ipdcGui.c new file mode 100755 index 0000000..71deac4 --- /dev/null +++ b/iPDC/ipdcGui.c @@ -0,0 +1,2633 @@ +/* ----------------------------------------------------------------------------- + * ipdcGui.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ipdcGui.h" +#include "global.h" +#include "connections.h" +#include "new_pmu_or_pdc.h" +#include "recreate.h" + +/* ------------------------------------------------------------------------------------ */ +/* Functions in ipdcGui.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. int isNumber(char *s); */ +/* 2. void destroy (GtkWidget *widget, gpointer udata); */ +/* 3. GdkPixbuf *create_pixbuf(const gchar * filename); */ +/* 4. void display_pdc_detail (GtkButton *widget, gpointer udata); */ +/* 5. void about_ipdc (GtkButton *widget, gpointer udata); */ +/* 6. void ipdc_help (GtkButton *but, gpointer udata); */ +/* 7. void validation_result (char *msg); */ +/* 8. void ipdc_colors(); */ +/* 9. void final_pdc_setup_call(); */ + +/* 10. int validation_pdc_detail (GtkButton *button, gpointer udata); */ +/* 11. void validation_setup_file_name (GtkWidget *widget, gpointer data); */ +/* 12. int add_pmu_validation (GtkButton *but, gpointer udata); */ +/* 13. int cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata); */ +/* 14. int new_pdc_validation (GtkButton *but, gpointer udata); */ +/* 15. int remove_pdc_validation (GtkButton *but, gpointer udata); */ + +/* 16. void fill_pdc_details (char *filePath); */ +/* 17. void add_pmu (GtkButton *but, gpointer udata); */ +/* 18. void cmd_or_remove_pmu (GtkButton *but, gpointer udata); */ +/* 19. void add_new_pdc (GtkButton *but, gpointer udata); */ +/* 20. void remove_pdc (GtkButton *but, gpointer udata); */ +/* 21. void connection_table (GtkButton *but, gpointer udata); */ +/* 22. void ipdc_setup_fileSelector (GtkWidget *widget, gpointer udata); */ +/* 23. void view_setup_file (GtkWidget *w, GtkFileSelection *fs); */ +/* 24. void apply_ipdc_setup (GtkWidget *w, gpointer udata); */ +/* 25. void* display_time(); */ +/* */ +/* ------------------------------------------------------------------------------------ */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION isNumber(char *s): */ +/* It checks the passing character is a number or not, return 0 if its a */ +/* otherwise returns 1. */ +/* ---------------------------------------------------------------------------- */ + +int isNumber(char *s) +{ + int dot=0, num=0, end=0; + + while(isspace(*s))s++; + if(*s == '-')s++; + if(! *s)return 0; + while(*s) + if(isspace(*s)) + end=1, s++; + else if(end) + return 0; + else if(isdigit(*s)) + num=1, s++; + else if(*s=='.') + if(dot) + return 0; + else + dot=1,s++; + else + return 0; + return num; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION destroy (GtkWidget *widget, gpointer udata): */ +/* It Destroy(close) the iPDC main window with child (if any open) and */ +/* also close the opened terminal. */ +/* ---------------------------------------------------------------------------- */ + +void destroy (GtkWidget *widget, gpointer udata) +{ + FILE *f; + char name[20],*psid,*psname,psN[15]; + + g_print ("\niPDC Closing Now.\n\n"); + gtk_main_quit(); + exit(1); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION GdkPixbuf *create_pixbuf(const gchar * filename) */ +/* function creates a new pixbuf by loading an image from a file. */ +/* The file format is detected automatically. If NULL, error will be set. */ +/* ---------------------------------------------------------------------------- */ + +GdkPixbuf *create_pixbuf(const gchar * filename) +{ + GdkPixbuf *pixbuf; + GError *error = NULL; + + pixbuf = gdk_pixbuf_new_from_file(filename, &error); + + if(!pixbuf) + { + fprintf(stderr, "%s\n", error->message); + g_error_free(error); + } + + return pixbuf; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION display_pdc_detail (GtkButton *widget, gpointer udata) */ +/* It displays the details of running iPDC software on your machine */ +/* to user at any time. */ +/* ---------------------------------------------------------------------------- */ + +void display_pdc_detail (GtkButton *widget, gpointer udata) +{ + /* local variables */ + int rows=0; + char line[20]; + char *markup; + GtkWidget *new_window, *table; + GtkWidget *label, *ok_button; + FILE *file_1; + + /* Open the file 'ipdc?.bin' in read mode */ + file_1 = fopen (ipdcFilePath,"rb"); + + if (file_1 != NULL) + { + /* If its available, then create a new dialog window for displaying the iPDC details. */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "iPDC Details"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + gtk_window_set_resizable ( GTK_WINDOW (new_window), FALSE); + + /* create a table of 8 by 2 squares. */ + rows = 6; + table = gtk_table_new (rows, 2, FALSE); + + /* set the spacing to 10 on x and 10 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 16); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "close" button to the bottom of the dialog */ + ok_button = gtk_button_new_from_stock (GTK_STOCK_OK);// or GTK_STOCK_APPLY); + + /* This simply creates a grid of labels on the table to demonstrate the window. + g_markup_printf_escaped (): function to display diffrent color and font of text on label */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("iPDC Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("iPDC ID Code"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("Database Server IP"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + label = gtk_label_new ("Database Server Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + /* This simply read from file and print on label in the table. */ + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + + memset(line,'\0',sizeof(line)); + fgets(line,20,file_1); + + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + + memset(line,'\0',sizeof(line)); + fgets(line,20,file_1); + + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3); + gtk_widget_show (label); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 3, 4); + gtk_widget_show (label); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 4, 5); + gtk_widget_show (label); + fclose (file_1); + + /* This is print static text (9000) on label in the table. */ + label = gtk_label_new ("9000"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 5, 6); + gtk_widget_show (label); + + /* Define signal on ok_button when it "clicked". */ + g_signal_connect_swapped (ok_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + + /* This makes it so the ok_button is the default. */ + gtk_widget_set_can_default (ok_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), ok_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (ok_button); + gtk_widget_show (ok_button); + + /* Finally show the new_window. */ + gtk_widget_show (new_window); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION about_ipdc (GtkButton *widget, gpointer udata) */ +/* It display the information about iPDC Software like authors, licensing, etc. */ +/* ---------------------------------------------------------------------------- */ + +void about_ipdc (GtkButton *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *about_dialog; + + const gchar *auth[] = {"\nDr. A.M. Kulkarni ", "\nNitesh Pandit ", "\nKedar V. Khandeparkar ", "\nGopal Gajjar ", NULL}; + + /* Create a about dialog for displaying about the iPDC. */ + about_dialog = gtk_about_dialog_new (); + + /* Define the diffrent properties of about_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)about_dialog, " "); + gtk_about_dialog_set_comments ((GtkAboutDialog *)about_dialog, "Authors :\nNitesh Pandit\nKedar Khandeparkar");//nWide Aera Measurement System\nDepartment of Electrical Engineering\nIndian Institute of Technology, Bombay\nMumbai, INDIA"); + + gtk_about_dialog_set_license ((GtkAboutDialog *)about_dialog, "iPDC - A Free Phasor Data Concentrator & PMU Simulator\n\nGeneral Public License (GPL)\n\nAuthors:\n\t\tNitesh Pandit \n\t\tKedar V. Khandeparkar \n\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"); + + gtk_about_dialog_set_logo ((GtkAboutDialog *)about_dialog, create_pixbuf("/usr/local/share/iPDC/ipdcLogo1.png")); + gtk_about_dialog_set_website ((GtkAboutDialog *)about_dialog, "\nhttp://ipdc.codeplex.com/\n"); + gtk_about_dialog_set_copyright ((GtkAboutDialog *)about_dialog, "Copyright (C) 2011-2012 GPL3"); + gtk_about_dialog_set_authors ((GtkAboutDialog *)about_dialog, auth); + gtk_about_dialog_set_logo ((GtkAboutDialog *)about_dialog, NULL); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (about_dialog, "response", G_CALLBACK (gtk_widget_destroy), about_dialog); + + /* Finally show the about_dialog. */ + gtk_widget_show_all (about_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ipdc_help (GtkButton *but, gpointer udata) */ +/* It shows the general guidelines to user to fill the entries for connecting, */ +/* or disconnecting devices in iPDC Software. */ +/* ---------------------------------------------------------------------------- */ + +void ipdc_help (GtkButton *but, gpointer udata) +{ + /* local variables */ + GtkWidget *help_dialog; + + /* Create a about dialog for displaying iPDC help. */ + help_dialog = gtk_about_dialog_new (); + + /* Define the diffrent properties of about_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)help_dialog, "iPDC HELP\n"); + gtk_about_dialog_set_comments ((GtkAboutDialog *)help_dialog, "1) ID Code should be integer i.e. 50, 60, etc.\n2) Port should be >1500 && < 65535.\t\t\n3) IP Address should be like 192.168.23.10. "); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (help_dialog, "response", G_CALLBACK (gtk_widget_destroy), help_dialog); + + /* Finally show the about_dialog. */ + gtk_widget_show_all (help_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_result (char *msg) */ +/* It displays the status message of last performed operation. */ +/* ---------------------------------------------------------------------------- */ + +void validation_result (char *msg) +{ + /* local variables */ + GtkWidget *val_dialog; + + /* Create a new about dialog to displaying the status message of last performed operation. */ + val_dialog = gtk_about_dialog_new (); + + /* Define the diffrent properties of val_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)val_dialog, " "); + gtk_about_dialog_set_comments ((GtkAboutDialog *)val_dialog, msg); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (val_dialog, "response", G_CALLBACK (gtk_widget_destroy), val_dialog); + + /* Finally show the val_dialog. */ + gtk_widget_show_all (val_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ipdc_colors(): */ +/* It fills the colors in text on lables and set the images on given buttons. */ +/* It called in main only one time to initialized all the parameters. */ +/* ---------------------------------------------------------------------------- */ + +void ipdc_colors() +{ + GtkTextBuffer *buffer, *buffer1; + GtkTextMark *cursor, *cursor1; + GtkTextIter iter, iter1; + char *markup11; + + markup11 = g_markup_printf_escaped ("Admin Operations"); + gtk_label_set_markup (GTK_LABEL (data->admin_label), markup11); + g_free (markup11); + + markup11 = g_markup_printf_escaped ("@All Rights Reserved"); + gtk_label_set_markup (GTK_LABEL (data->rights_label), markup11); + g_free (markup11); + + /* Set the image (iPDC-logo) on a specific textview1 */ + buffer1 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data->text_view1)); + cursor1 = gtk_text_buffer_get_insert (buffer1); + gtk_text_buffer_get_iter_at_mark (buffer1, &iter1, cursor1); + gtk_text_buffer_insert_pixbuf (buffer1, &iter1, create_pixbuf("/usr/local/share/iPDC/ipdcLogo.png")); + gtk_widget_show (data->text_view1); + + /* Set the general image on a textview */ + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data->text_view)); + cursor = gtk_text_buffer_get_insert (buffer); + gtk_text_buffer_get_iter_at_mark (buffer, &iter, cursor); + gtk_text_buffer_insert_pixbuf (buffer, &iter, create_pixbuf("/usr/local/share/iPDC/PSLab.PNG")); + gtk_widget_show (data->text_view); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_pdc_detail (GtkButton *button, gpointer udata) */ +/* It Validates the user enterd details for iPDC device. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_pdc_detail (GtkButton *button, gpointer udata) +{ + /* local variables */ + char *errmsg1, ip[20]; + const char *text, *text1, *text2, *text3; + + /* Get the text entries filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_id)); + text1 = gtk_entry_get_text(GTK_ENTRY(p_udp)); + text2 = gtk_entry_get_text(GTK_ENTRY(p_tcp)); + text3 = gtk_entry_get_text(GTK_ENTRY(p_ip)); + memset(ip,'\0',20); + strcat(ip, text3); + + if(!isNumber((char *)text) || !(atoi(text) > 0) || (PDC_IDCODE == atoi(text))) + { + errmsg1 = " Not a valid iPDC ID value! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!isNumber((char *)text1) || !(atoi(text1) > 1500 && atoi(text1) < 65535) || (atoi(text1) == 9000)) + { + errmsg1 = " Not a valid iPDC UDP Port, must not be 9000! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!isNumber((char *)text2) || !(atoi(text2) > 1500 && atoi(text2) < 65535) || (atoi(text2) == atoi(text1)) || (atoi(text2) == 9000)) + { + errmsg1 = " Not a valid iPDC TCP Port!\nMust be different from UDP port & 9000. Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!checkip(ip)) /* Check text_box entry for valid IP Address or not? */ + { + errmsg1 = " Not a valid IP Addess for iPDC-Database Server! Try again \n"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else /* Only if all the text_box entries were right */ + { + PDC_IDCODE = atoi(text); + UDPPORT = atoi(text1); + TCPPORT = atoi(text2); + memset(dbserver_ip, '\0', 20); + strcpy(dbserver_ip, (char *) text3); + + FILE *fp_ptr; + + /* Open the file "ipdc?.bin" and write all the enterd informations */ + memset(ipdcFilePath, '\0', 200); + strcpy(ipdcFilePath, ipdcFolderPath); + strcat(ipdcFilePath, "/"); + strcat(ipdcFilePath, "ipdc"); + strcat(ipdcFilePath, text); + strcat(ipdcFilePath, ".bin"); + ipdcFilePath[strlen(ipdcFilePath)] = '\0'; + + /* Close/destroy the pdc_detail_window */ + gtk_widget_destroy (pdc_detail_window); + + fp_ptr = fopen (ipdcFilePath,"rb"); + + if(fp_ptr == NULL) + { + final_pdc_setup_call(); + } + else + { + /* Close the open iPDC Setup file */ + fclose(fp_ptr); + + GtkWidget *table, *label, *yes, *no; + + /* Create a new dialog window for PMU Server Setup */ + new_window = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (new_window), "Warning!"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a table of 4 by 2 squares. */ + table = gtk_table_new (4, 3, FALSE); + + /* Set the spacing to 50 on x and 5 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 15); + gtk_table_set_col_spacings (GTK_TABLE (table), 5); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + yes = gtk_button_new_with_label ("YES"); + no = gtk_button_new_with_label ("NO"); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Warning!"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("iPDC Setup File with the given ID code is alredy present\nin the system. Do you want to overwrite it?"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 3, 4); + gtk_widget_show (label); + + /* Signal handling for buttons on PMU Server Setup Window */ + g_signal_connect (yes, "clicked", G_CALLBACK(validation_setup_file_name), (gpointer) "yes"); + g_signal_connect (no, "clicked", G_CALLBACK(validation_setup_file_name), (gpointer) "no"); + g_signal_connect (new_window, "destroy", G_CALLBACK(gtk_widget_destroy), new_window); + g_signal_connect_swapped (new_window, "response", G_CALLBACK(gtk_widget_destroy), new_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (yes, TRUE); + gtk_widget_set_can_default (no, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), yes, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), no, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (yes); + gtk_widget_show (yes); + gtk_widget_grab_default (no); + gtk_widget_show (no); + + /* Finally show the new_window */ + gtk_widget_show (new_window); + } + + return 1; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_setup_file_name (GtkWidget *widget, gpointer data) */ +/* It Validates the user's choice, whether he wants to go with new iPDC setup, */ +/* or want to fill the new iPDC setup details? */ +/* ---------------------------------------------------------------------------- */ + +void validation_setup_file_name (GtkWidget *widget, gpointer data) +{ + char t[4]; + strcpy(t, (char *) data); + + /* destroy the warning window */ + gtk_widget_destroy (new_window); + + /* Match the user's choice and take appropiate action? */ + if(!strcmp(t, "yes")) + { + /* User with ok with overwtithing new iPDC setup, then call the final setup call*/ + final_pdc_setup_call(); + } + else + { + /* User do not want to overwtithing new iPDC setup, then again call iPDC setup window */ + fill_pdc_details (NULL); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION final_pdc_setup_call() */ +/* It will create the iPDC setup file and intialize the few global variable. */ +/* ---------------------------------------------------------------------------- */ + +void final_pdc_setup_call() +{ + /* local variables */ + char buff[50]; + FILE *fp_ptr; + + fp_ptr = fopen (ipdcFilePath,"wb"); + + fputs("ipdcServer", fp_ptr); + fputs(" 1", fp_ptr); + fputc('\n',fp_ptr); + memset(buff, '\0', 50); + sprintf(buff, "%d", PDC_IDCODE); + fputs(buff, fp_ptr); + fputc('\n',fp_ptr); + + memset(buff, '\0', 50); + sprintf(buff, "%d", UDPPORT); + fputs(buff, fp_ptr); + fputc('\n',fp_ptr); + + memset(buff, '\0', 50); + sprintf(buff, "%d", TCPPORT); + fputs(buff, fp_ptr); + fputc('\n',fp_ptr); + + fputs(dbserver_ip, fp_ptr); + fputc('\n',fp_ptr); + + fputs("LowerDevices 0", fp_ptr); + fputc('\n',fp_ptr); + + fputs("UpperDevices 0", fp_ptr); + fputc('\n',fp_ptr); + + fputs("SourcesCFG 0", fp_ptr); + fputc('\n',fp_ptr); + fclose(fp_ptr); + + /* Enable all (mentioned) buttons on main ipdc window */ + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pmu_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pmu_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_off_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_on_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_cfg_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pdc_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pdc_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->display_conn_table_button), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(data->menu_conn_table), TRUE); + gtk_widget_set_visible(GTK_WIDGET(data->pdc_details_menuitem), TRUE); + + /* Disable the menuitem for iPDC details entries */ + gtk_widget_set_visible(GTK_WIDGET(data->enter_pdc_detail_menuitem), FALSE); + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* setup() call to stablish the connections at iPDC restart */ + recreate_cfg_objects(); + setup(); + + validation_result (" iPDC Setup is successfully done. "); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_pmu_validation (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd details for add Source devices (PMU/PDC). */ +/* It gives the successful message and go ahead with entered data if */ +/* all entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int add_pmu_validation (GtkButton *but, gpointer udata) +{ + /* local variables */ + int ret; + char *errmsg1, ip[20], tmp[4]; + const char *text, *text1, *text2, *text3; + + /* Get the text entries filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_id)); + text1 = gtk_entry_get_text(GTK_ENTRY(p_ip)); + text2 = gtk_entry_get_text(GTK_ENTRY(p_port)); + text3 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_protocol)); + memset(ip,'\0',20); + strcat(ip, text1); + strcpy (tmp, text3); + + if ((!isNumber((char *)text)) || !(atoi(text) > 0) || (atoi(text) == PDC_IDCODE)) /* Check text_box entry for valid integer or not? */ + { + errmsg1 = " Not a valid Source Device ID code! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!isNumber((char *)text2) || !(atoi(text2) > 1500 && atoi(text2) < 65535) || (atoi(text2) == TCPPORT) || (atoi(text2) == UDPPORT) || (atoi(text2) == DBPORT)) /* TCP and UDP port of iPDC should not match with it */ + { + errmsg1 = " Not a valid Port for Source Device! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!checkip(ip)) /* Check text_box entry for valid IP Address or not? */ + { + errmsg1 = " Not a valid IP Addess of Source Device! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else /* Only if all the text_box entries were right */ + { + /* call add_PMU() to actual add pmu/pdc and start communication */ + ret = add_PMU((char *)text, (char *)text1, (char *)text2, (char *)text3); + if (ret == 0) + { + /* Close/destroy the add_pmu_window */ + gtk_widget_destroy (add_pmu_window); + + errmsg1 = " Source Device Successfully Added. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Device details already exists! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd details for function Removes the Source devices */ +/* or send command frames to Source devices. It gives the successful message */ +/* and go ahead with entered data if all entries were right, */ +/* else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata) +{ + /* local variables */ + int ret; + char *errmsg1, tmp[4]; + + /* Get the text entries filled by user */ + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn)) == TRUE) + { + set_all = 1; + + if(!strcmp(find_butn, "1")) /* If function called by 'Remove source device' */ + { + /* call remove_Lower_Node() to remove source device */ + ret = remove_Lower_Node(NULL, NULL); + + if (ret == 0) + { + /* Close/destroy the Source remove window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Source device successfully removed. "; + validation_result (errmsg1); + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); + return 0; + } + } + else if(!strcmp(find_butn, "2")) /* If function called by 'Send Data Transmission OFF' */ + { + /* call put_data_transmission_off() to put OFF data of source device */ + ret = put_data_transmission_off(NULL, NULL); + + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Data Transmission OFF now for given device. "; + validation_result (errmsg1); + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else if(!strcmp(find_butn, "3")) /* If function called by 'Send Data Transmission ON' */ + { + /* call put_data_transmission_on() to put ON data of source device */ + ret = put_data_transmission_on(NULL, NULL); + + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Data Transmission ON now for given device. "; + validation_result (errmsg1); + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); + return 0; + } + } + else if(!strcmp(find_butn, "4")) /* If function called by Send Configuration request */ + { + /* call configuration_request() to send Configuration request */ + ret = configuration_request(NULL, NULL); + + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Configuration Frame request sent to given device "; + validation_result (errmsg1); + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); + return 0; + } + } + else + { + errmsg1 = " UNKNOWN FUNCTION CALL??? Try again"; + validation_result (errmsg1); + return 1; + } + } + else + { + const char *text, *text1; + + text = gtk_entry_get_text(GTK_ENTRY(p_id)); + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_protocol)); + memset(tmp, '\0', 4); + strcpy (tmp, text1); + + if ((!isNumber((char *)text)) || !(atoi(text) > 0) || (atoi(text) == PDC_IDCODE)) /* Check text_box entry for valid integer or not? */ + { + errmsg1 = " Not a valid Source Device ID code! Try again "; + validation_result (errmsg1); + return 0; + } + else /* Only if all the text_box entries were right */ + { + if(!strcmp(find_butn, "1")) /* If function called by 'Remove source device' */ + { + /* call remove_Lower_Node() to remove source device */ + ret = remove_Lower_Node((char *)text, (char *)text1); + if (ret == 0) + { + /* Close/destroy the Source remove window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Source device successfully removed. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else if(!strcmp(find_butn, "2")) /* If function called by 'Send Data Transmission OFF' */ + { + /* call put_data_transmission_off() to put OFF data of source device */ + ret = put_data_transmission_off((char *)text, (char *)text1); + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Data Transmission OFF now for given device. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else if(!strcmp(find_butn, "3")) /* If function called by 'Send Data Transmission ON' */ + { + /* call put_data_transmission_on() to put ON data of source device */ + ret = put_data_transmission_on((char *)text, (char *)text1); + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Data Transmission ON now for given device. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else if(!strcmp(find_butn, "4")) /* If function called by Send Configuration request */ + { + /* call configuration_request() to send Configuration request */ + ret = configuration_request((char *)text, (char *)text1); + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Configuration Frame request sent to given device "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else + { + errmsg1 = " UNKNOWN FUNCTION CALL??? Try again"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 1; + } + } + } + +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION new_pdc_validation (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd details for add Destination devices as PDC. */ +/* It gives the successful message and go ahead with entered data if */ +/* all entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int new_pdc_validation (GtkButton *but, gpointer udata) +{ + /* local variables */ + int ret; + const char *text, *text1; + char *errmsg1, ip[20], tmp[6]; + + /* Get the text entries for PDC, filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_ip)); + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_protocol)); + memset(ip,'\0',20); + strcat(ip, text); + strcpy (tmp, text1); + + if(!checkip(ip)) /* Check text_box entry for valid IP Address or not? */ + { + errmsg1 = " Not a valid IP Addess for Destination Device! Try again"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else /* Only if all the text_box entries were right */ + { + /* call add_PDC() to actual add pdc and start communication */ + ret = add_PDC((char *)text, (char *)text1); + if (ret == 0) + { + gtk_widget_destroy (new_window); + + errmsg1 = " Destination device is successfully added. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Device details already exists! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_pdc_validation (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd details for remove Destination devices as PDC. */ +/* It gives the successful message and go ahead with entered data if */ +/* all entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int remove_pdc_validation (GtkButton *but, gpointer udata) +{ + /* local variables */ + int ret; + const char *text, *text1, *text2; + char *errmsg1, ip[20], tmp[6]; + + /* Get the text entries for remove source device by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_ip)); + text1 = gtk_entry_get_text(GTK_ENTRY(p_port)); + text2 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_protocol)); + memset(ip,'\0',20); + strcat(ip, text); + strcpy (tmp, text2); + + if(!isNumber((char *)text) || !(atoi(text1) > 1500 || (atoi(text1) < 65535)) || (atoi(text) == PDC_IDCODE)) + { + errmsg1 = " Not a valid port of Destination Device! Try again"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!checkip(ip)) /* Check text_box entry for valid IP Address or not? */ + { + errmsg1 = " Not a valid IP Addess of Destination Device! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else /* Only if all the text_box entries were right */ + { + /* Call remove_PDC() to remove PDC device entry as well as objects if it presents */ + ret = remove_PDC((char *)text, (char *)text1, (char *)text2); + if (ret == 0) + { + /* Close/destroy the remove PDC window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Destination device is successfully removed. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = "Entered destination device not found! Try again"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION fill_pdc_details () */ +/* This function called by main once to accept the iPDC details from user */ +/* on a 'iPDC Setup' window. If teher is already a file 'ipdcINFO.bin' available */ +/* then it read the file and initialized them globally. */ +/* ---------------------------------------------------------------------------- */ + +void fill_pdc_details (char *filePath) +{ + if(filePath != NULL) + { + /* Open the file 'ipdcINFO.bin' in read mode */ + FILE *file_1 = fopen (filePath,"rb"); + + if (file_1 != NULL) + { + char line[20]; + + /* If file is present initialize the global varialbes by details in file */ + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + PDC_IDCODE = atoi(line); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + UDPPORT = atoi(line); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + TCPPORT = atoi(line); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + strcpy(dbserver_ip, line); + fclose (file_1); + + /* Disable all the (mentioned) buttons on main ipdc window */ + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pmu_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pmu_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_off_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_on_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_cfg_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pdc_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pdc_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->display_conn_table_button), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(data->menu_conn_table), TRUE); + gtk_widget_set_visible(GTK_WIDGET(data->pdc_details_menuitem), TRUE); + + /* Desable the menuitem button if there is already enty for iPDC */ + gtk_widget_set_visible(GTK_WIDGET(data->enter_pdc_detail_menuitem), FALSE); + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* Recreate the configuration objects and connection table */ + recreate_cfg_objects(); + recreate_Connection_Table(); + + /* setup() call to stablish the connections if any */ + setup(); + } + } + else + { + /* local variables for iPDC Detail windows */ + char *markup15; + GtkWidget *table, *label; + GtkWidget *valdbutton, *help_button, *cancle_button; + + /* Create a new dialog window for iPDC Setup */ + pdc_detail_window = gtk_dialog_new (); + g_signal_connect (pdc_detail_window, "destroy", G_CALLBACK (gtk_widget_destroy), pdc_detail_window); + gtk_window_set_title (GTK_WINDOW (pdc_detail_window), "iPDC Setup"); + gtk_container_set_border_width (GTK_CONTAINER (pdc_detail_window), 10); + + /* Create a table of 6 by 2 squares. */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 16); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(pdc_detail_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few button to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Add"); + cancle_button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); + help_button = gtk_button_new_from_stock (GTK_STOCK_HELP);// or GTK_STOCK_APPLY); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new (" "); + markup15 = g_markup_printf_escaped ("Fill iPDC Details"); + gtk_label_set_markup (GTK_LABEL (label), markup15); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup15); + + label = gtk_label_new ("iPDC ID Code"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("Database Server IP "); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + label = gtk_label_new ("Database Server Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_id, 1, 2, 1, 2); + gtk_widget_show (p_id); + + p_udp = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_udp, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_udp, 1, 2, 2, 3); + gtk_widget_show (p_udp); + + p_tcp = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_tcp, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_tcp, 1, 2, 3, 4); + gtk_widget_show (p_tcp); + + p_ip = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_ip, 15); + gtk_table_attach_defaults (GTK_TABLE (table), p_ip, 1, 2, 4, 5); + gtk_widget_show (p_ip); + + label = gtk_label_new (" "); + markup15 = g_markup_printf_escaped ("9000"); + gtk_label_set_markup (GTK_LABEL (label), markup15); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 5, 6); + gtk_widget_show (label); + + /* Signal handling for buttons on iPDC Setup Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (validation_pdc_detail), NULL); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + g_signal_connect_swapped (cancle_button, "clicked", G_CALLBACK (gtk_widget_destroy), pdc_detail_window); + g_signal_connect_swapped (pdc_detail_window, "destroy", G_CALLBACK (gtk_widget_destroy), pdc_detail_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (cancle_button, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdc_detail_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdc_detail_window)->action_area), cancle_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdc_detail_window)->action_area), help_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (cancle_button); + gtk_widget_show (cancle_button); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + + /* Finally show the pdc_detail_window */ + gtk_widget_show (pdc_detail_window); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_pmu (GtkButton *but, gpointer udata) */ +/* It open the add source device dialog window, and user have to enter */ +/* the source device details of which he wants to connect. */ +/* ---------------------------------------------------------------------------- */ + +void add_pmu (GtkButton *but, gpointer udata) +{ + /* local variables */ + char *markup1; + GtkWidget *table, *close_button; + GtkWidget *valdbutton, *help_button, *label; + + /* Create a new dialog window for Source Device Details */ + add_pmu_window = gtk_dialog_new (); + g_signal_connect (add_pmu_window, "destroy", G_CALLBACK (gtk_widget_destroy), add_pmu_window); + gtk_window_set_title (GTK_WINDOW (add_pmu_window), "Add Source Device"); + gtk_container_set_border_width (GTK_CONTAINER (add_pmu_window), 10); + gtk_window_set_resizable ( GTK_WINDOW (add_pmu_window), FALSE); + + /* Create a table of 5 by 2 squares. */ + table = gtk_table_new (5, 2, FALSE); + + /* Set the spacing to 20 on x and 30 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 16); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(add_pmu_window)->vbox), table, FALSE, FALSE, 0); + gtk_widget_show (table); + + /* Add few button to the bottom of the dialog */ + close_button = gtk_button_new_with_label ("close"); + valdbutton = gtk_button_new_with_label ("Add"); + help_button = gtk_button_new_with_label ("Help"); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new ("-"); + markup1 = g_markup_printf_escaped ("Enter Source Device Details"); + gtk_label_set_markup (GTK_LABEL (label), markup1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup1); + + label = gtk_label_new ("Source ID Code"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("Source IP Address"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Source Port Number"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_id, 1, 2, 1, 2); + gtk_widget_show (p_id); + + p_ip = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_ip, 15); + gtk_table_attach_defaults (GTK_TABLE (table), p_ip, 1, 2, 2, 3); + gtk_widget_show (p_ip); + + p_port = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_port, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_port, 1, 2, 3, 4); + gtk_widget_show (p_port); + + /* Create combo boxe for user with some fixed values */ + p_protocol = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "UDP"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "TCP"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_protocol), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_protocol, 1, 2, 4, 5); + gtk_widget_show (p_protocol); + + /* Signal handling for buttons on Source Device Details Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (add_pmu_validation), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), add_pmu_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_button, TRUE); + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (add_pmu_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (add_pmu_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (add_pmu_window)->action_area), close_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + + /* Finally show the add_pmu_window */ + gtk_widget_show (add_pmu_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cmd_or_remove_pmu (GtkButton *but, gpointer udata) */ +/* It is a common function for Remove Source Device and Send Different command */ +/* frames to Source devices. */ +/* ---------------------------------------------------------------------------- */ + +void cmd_or_remove_pmu (GtkButton *but, gpointer udata) +{ + /* local variables */ + GtkWidget *scrolled_window, *window2, *hbox1; + GtkWidget *table, *close_button; + GtkWidget *valdbutton, *help_button, *label; + + int on_flag = 0, off_flag = 0, min_rows = 6; + char *markup2; + char *p_buff, tmp_str[20]; + + /* Copy the 'udata' that came along with signal to identifies which function should execute */ + strcpy(find_butn,(char *) udata); + memset(buff, '\0', strlen(buff)); + + /* Create a new dialog window for the scrolled window to be packed into */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + + /* Set the window title according to fired signal */ + if(!strcmp(find_butn, "1")) + { + gtk_window_set_title (GTK_WINDOW (new_window), "Remove Source Device"); + } + else if(!strcmp(find_butn, "2")) + { + gtk_window_set_title (GTK_WINDOW (new_window), "Turn OFF Data Transmission"); + } + else if(!strcmp(find_butn, "3")) + { + gtk_window_set_title (GTK_WINDOW (new_window), "Turn ON Data Transmission"); + } + else + { + gtk_window_set_title (GTK_WINDOW (new_window), "Configuration Frame Request"); + } + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 350); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), scrolled_window, FALSE, TRUE, 0); + gtk_widget_show (scrolled_window); + + hbox1 = gtk_hbox_new (FALSE, 16); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), hbox1, FALSE, TRUE, 0); + gtk_widget_show (hbox1); + + window2 = gtk_alignment_new (0,0,0,0); + gtk_box_pack_start (GTK_BOX (hbox1), window2, FALSE, TRUE, 0); + gtk_widget_show (window2); + + /* create a table of 4 by 2 squares. */ + table = gtk_table_new (20, 4, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 4); + gtk_table_set_col_spacings (GTK_TABLE (table), 8); + + /* Pack the table into the scrolled window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Open the file 'ipdcINFO.bin' in read mode */ + set_all = 0; + struct Lower_Layer_Details *t = LLfirst; + + if (t == NULL) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup2 = g_markup_printf_escaped ("No records were found.\n-------------------------------------------------------------------\n"); + gtk_label_set_markup (GTK_LABEL (label), markup2); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 4, 1, 2); + gtk_widget_show (label); + g_free(markup2); + } + else + { + /* Check wether fired signal from remove source or send CFG request */ + /* Add the button with title according to fired signal */ + + if(!strcmp(find_butn, "4")) + { + valdbutton = gtk_button_new_with_label ("Send"); + } + else if(!strcmp(find_butn, "1")) + { + valdbutton = gtk_button_new_with_label ("Remove"); + } + else if(!strcmp(find_butn, "2")) /* if signal fired from send Transmission OFF request to Source device */ + { + /* Add a "Send" button to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Send"); + } + else if(!strcmp(find_butn, "3")) /* if signal fired from send Transmission ON request to Source device */ + { + /* Add a "Send" button to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Send"); + } + + t = LLfirst; + int i = 2; + + while(t != NULL) + { + if((!strcmp(find_butn, "1")) || (!strcmp(find_butn, "4")) || (!strcmp(find_butn, "2") && (t->data_transmission_off == 0)) || (!strcmp(find_butn, "3") && (t->data_transmission_off == 1))) + { + /* Concate all the data into a big buffer */ + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t->pmuid); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strcpy(tmp_str, t->ip); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t->port); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strncpy(tmp_str, t->protocol,3); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + i++; + } + t = t->next; + } // while ends + + if (i != 2) + { + /* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window. */ + label = gtk_label_new (" "); + markup2 = g_markup_printf_escaped ("Connections Detail"); + gtk_label_set_markup (GTK_LABEL (label), markup2); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 4, 0, 1); + gtk_widget_show (label); + g_free(markup2); + + label = gtk_label_new ("Source ID"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, 1, 2); + gtk_widget_show (label); + } + else + { + gtk_widget_set_sensitive (valdbutton, FALSE); + if (!strcmp(find_butn, "2")) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup2 = g_markup_printf_escaped ("No records were found.\n"); + gtk_label_set_markup (GTK_LABEL (label), markup2); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + g_free(markup2); + } + else if (!strcmp(find_butn, "3")) /* Simply check for source objects whose Transmission is not ON (or OFF) */ + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup2 = g_markup_printf_escaped ("No records were found.\n"); + gtk_label_set_markup (GTK_LABEL (label), markup2); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + g_free(markup2); + } + } + if (i < min_rows) + { + int jj; + for (jj = i; jj < min_rows; jj++) + { + label = gtk_label_new (" "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 4, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Create combo boxe for user with some fixed values */ + p_protocol = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "UDP"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "TCP"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_protocol), 0); + gtk_box_pack_end (GTK_BOX (hbox1), p_protocol, FALSE, TRUE, 0); + gtk_widget_show (p_protocol); + + label = gtk_label_new ("Protocol"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_box_pack_end (GTK_BOX (hbox1), p_id, FALSE, TRUE, 0); + gtk_widget_show (p_id); + + label = gtk_label_new ("Source ID Code"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + chkBtn = gtk_check_button_new_with_label("Select All"); + gtk_box_pack_end (GTK_BOX (hbox1), chkBtn, FALSE, TRUE, 0); + gtk_widget_show (chkBtn); + + /* Add a "Help" button to the bottom of the dialog */ + help_button = gtk_button_new_with_label ("Help"); + + /* Signal handling for buttons on Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (cmd_or_remove_pmu_validation), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + g_signal_connect (chkBtn, "toggled", G_CALLBACK (select_function), NULL); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), help_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + } + + /* Add a "Close" button to the bottom of the dialog */ + close_button = gtk_button_new_with_label ("Close"); + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_widget_set_can_default (close_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_button, TRUE, TRUE, 0); + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + on_flag = 0, off_flag = 0; + + /* Finally show the new_window */ + gtk_widget_show (new_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION checkbox_function(GtkWidget *widget, gpointer data) */ +/* This is called when checkboxes are selected, and do the appropriate */ +/* changes in the other checkbox or widget? */ +/* ---------------------------------------------------------------------------- */ + +void select_function(GtkWidget *widget, gpointer data) +{ + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn)) == TRUE) + { + gtk_widget_set_sensitive(GTK_WIDGET(p_id), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(p_protocol), FALSE); + } + else + { + gtk_widget_set_sensitive(GTK_WIDGET(p_protocol), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), TRUE); + gtk_entry_set_text(GTK_ENTRY(p_id), " "); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_new_pdc (GtkButton *but, gpointer udata) */ +/* It open the Destination Details window, and user have to enter */ +/* the Destination details of which he wants to connect. */ +/* ---------------------------------------------------------------------------- */ + +void add_new_pdc (GtkButton *but, gpointer udata) +{ + /* local variables */ + char *markup3; + GtkWidget *table, *close_button; + GtkWidget *valdbutton, *help_button, *label; + + /* Create a new dialog window for Destination Detail */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "Add Destination"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + gtk_window_set_resizable ( GTK_WINDOW (new_window), FALSE); + + /* Create a table of 4 by 2 squares. */ + table = gtk_table_new (4, 2, FALSE); + + /* Set the spacing to 50 on x and 35 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 16); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), table, FALSE, FALSE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + close_button = gtk_button_new_with_label ("close"); + valdbutton = gtk_button_new_with_label ("Add"); + help_button = gtk_button_new_with_label ("Help"); + + /* this simply creates a grid of toggle buttons on the table to demonstrate the scrolled window. */ + label = gtk_label_new (" "); + markup3 = g_markup_printf_escaped ("Enter Destination Device Details"); + gtk_label_set_markup (GTK_LABEL (label), markup3); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free(markup3); + + label = gtk_label_new ("Destination IP Address"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_ip = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_ip, 15); + gtk_table_attach_defaults (GTK_TABLE (table), p_ip, 1, 2, 2, 3); + gtk_widget_show (p_ip); + + /* Create combo boxe for user with some fixed values */ + p_protocol = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "UDP"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "TCP"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_protocol), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_protocol, 1, 2, 3, 4); + gtk_widget_show (p_protocol); + + /* Signal handling for buttons on Destination Details Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (new_pdc_validation), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_button, TRUE); + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + + /* Finally show the new_window */ + gtk_widget_show (new_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_pdc (GtkButton *but, gpointer udata) */ +/* It open the Destination Details window, and user have to enter */ +/* the Destination details of which he wants to remove. */ +/* ---------------------------------------------------------------------------- */ + +void remove_pdc (GtkButton *but, gpointer udata) +{ + /* local variables */ + GtkWidget *scrolled_window, *label, *hbox1, *window2; + GtkWidget *table, *close_button; + GtkWidget *valdbutton, *help_button; + + char *markup4; + char *p_buff, tmp_str[20]; + int i, min_rows = 10; + + /* Create a new dialog window for the scrolled window to be packed into */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "Remove Destination"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 350); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it. */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + hbox1 = gtk_hbox_new (FALSE, 16); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), hbox1, FALSE, TRUE, 0); + gtk_widget_show (hbox1); + + window2 = gtk_alignment_new (0,0,0,0); + gtk_box_pack_start (GTK_BOX (hbox1), window2, FALSE, TRUE, 0); + gtk_widget_show (window2); + + /* create a table of 6 by 2 squares. */ + table = gtk_table_new (20, 3, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the scrolled window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + close_button = gtk_button_new_with_label ("close"); + valdbutton = gtk_button_new_with_label ("Remove"); + help_button = gtk_button_new_with_label ("Help"); + + struct Upper_Layer_Details *t1 = ULfirst; + memset(buff, '\0', strlen(buff)); + + if (t1 == NULL) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup4 = g_markup_printf_escaped ("No Higher Level PDC is Registered With This iPDC."); + gtk_label_set_markup (GTK_LABEL (label), markup4); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 3, 1, 2); + gtk_widget_show (label); + g_free(markup4); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 2, 3); + gtk_widget_show (label); + } + else + { + i = 4; + while(t1 != NULL) + { + memset(tmp_str,'\0',sizeof(tmp_str)); + strcat(tmp_str, t1->ip); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t1->port); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strncat(tmp_str, t1->protocol, 3); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + i++; + t1 = t1->next; + } + + if (i != 4) + { + /* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window. */ + label = gtk_label_new (" "); + markup4 = g_markup_printf_escaped ("Destination Connections Detail"); + gtk_label_set_markup (GTK_LABEL (label), markup4); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 0, 1); + gtk_widget_show (label); + g_free(markup4); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 2, 3); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 3, 4); + gtk_widget_show (label); + } + if (i < min_rows) + { + int jj; + for (jj = i; jj < min_rows; jj++) + { + label = gtk_label_new (" "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Create combo box for user with some fixed values */ + p_protocol = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "UDP"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "TCP"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_protocol), 0); + gtk_box_pack_end (GTK_BOX (hbox1), p_protocol, FALSE, TRUE, 0); + gtk_widget_show (p_protocol); + + label = gtk_label_new ("Protocol"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_port = gtk_entry_new(); + gtk_box_pack_end (GTK_BOX (hbox1), p_port, FALSE, TRUE, 0); + gtk_widget_show (p_port); + + label = gtk_label_new ("Port"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + p_ip = gtk_entry_new(); + gtk_box_pack_end (GTK_BOX (hbox1), p_ip, FALSE, TRUE, 0); + gtk_widget_show (p_ip); + + label = gtk_label_new ("IP Address"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + /* Signal handling for buttons on Remove PDC Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (remove_pdc_validation), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), help_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + } + + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_widget_set_can_default (close_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_button, TRUE, TRUE, 0); + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + + /* Finally show the new_window */ + gtk_widget_show (new_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION connection_table (GtkButton *but, gpointer udata) */ +/* It Displays the connection tables, first is Source device connection table, */ +/* another one is Destination device connection table. */ +/* ---------------------------------------------------------------------------- */ + +void connection_table (GtkButton *but, gpointer udata) +{ + /* local variables */ + GtkWidget *scrolled_window; + GtkWidget *table, *close_button; + GtkWidget *label; + + char *p_buff, tmp_str[20]; + char *markup5, *markup6, *markup7, *markup8; + int i = 1; + + /* Create a new dialog window for the scrolled window to be packed into */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "iPDC Connections"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a new scrolled window. */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 350); + + /* the policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it. */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), scrolled_window, FALSE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of 20 by 5 squares */ + table = gtk_table_new (20, 5, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the scrolled window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "close" button to the bottom of the dialog */ + close_button = gtk_button_new_from_stock (GTK_STOCK_OK);// or GTK_STOCK_APPLY); + + /* Print some text on lable with color and proper font */ + label = gtk_label_new ("-"); + markup5 = g_markup_printf_escaped ("Source Devices Connection Table\t\t"); + gtk_label_set_markup (GTK_LABEL (label), markup5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 0, 1); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 1, 2); + gtk_widget_show (label); + + struct Lower_Layer_Details *t = LLfirst; + memset(buff, '\0', strlen(buff)); + + if (t == NULL) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup6 = g_markup_printf_escaped ("No Lower Level PMU/PDC is Registered With This iPDC."); + gtk_label_set_markup (GTK_LABEL (label), markup6); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 2, 3); + gtk_widget_show (label); + g_free(markup6); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 3, 4); + gtk_widget_show (label); + } + else + { + i = 2; + label = gtk_label_new ("ID Code"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1,i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + i++; + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i, i+1); + gtk_widget_show (label); + i++; + + while(t != NULL) + { + /* Concate all the data into a big buffer */ + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t->pmuid); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strcpy(tmp_str, t->ip); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t->port); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strncpy(tmp_str, t->protocol,3); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + + i++; + t = t->next; + } + } + + /* Print some text on lable with color and proper font */ + label = gtk_label_new ("-"); + markup7 = g_markup_printf_escaped ("\nDestination Devices Connection Table"); + gtk_label_set_markup (GTK_LABEL (label), markup7); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i+2, i+3); + gtk_widget_show (label); + g_free (markup7); + + i = i+3; + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i, i+1); + gtk_widget_show (label); + i++; + + struct Upper_Layer_Details *t1 = ULfirst; + memset(buff, '\0', strlen(buff)); + + if (t1 == NULL) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup8 = g_markup_printf_escaped ("No Higher Level PDC is Registered With This PDC."); + gtk_label_set_markup (GTK_LABEL (label), markup8); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 4, i, i+1); + gtk_widget_show (label); + g_free(markup8); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i, i+1); + gtk_widget_show (label); + i++; + } + else + { + label = gtk_label_new ("IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + i++; + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i, i+1); + gtk_widget_show (label); + i++; + + while(t1 != NULL) + { + memset(tmp_str,'\0',sizeof(tmp_str)); + strcpy(tmp_str, t1->ip); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t1->port); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strncpy(tmp_str, t1->protocol,3); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + i++; + t1 = t1->next; + } + } + + /* Signal handling when Window will distroy or closed */ + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + + /* Finally show the new_window or Connection window */ + gtk_widget_show (new_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ipdc_setup_fileSelector(GtkWidget *widget, gpointer udata) */ +/* It will display a file selector window to the user. User have the */ +/* responsibility to choose the correct previously saved file for iPDC Setup. */ +/* ---------------------------------------------------------------------------- */ + +void ipdc_setup_fileSelector (GtkWidget *widget, gpointer udata) +{ + strcat(ipdcFolderPath,"/"); + + /* Create a new file selection widget */ + ipdc_setup_window = gtk_file_selection_new ("iPDC Setup file selection"); + + /* Connect the ok_button to view_setup_file function */ + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (ipdc_setup_window)->ok_button), "clicked", (GtkSignalFunc) view_setup_file, ipdc_setup_window ); + + /* Connect the cancel_button to destroy the widget */ + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (ipdc_setup_window)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (ipdc_setup_window)); + + /* Lets set the filename, as if this were a save dialog, and we are giving a default filename */ + gtk_file_selection_set_filename (GTK_FILE_SELECTION(ipdc_setup_window), ipdcFolderPath); + + gtk_widget_show(ipdc_setup_window); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION view_setup_file(GtkWidget *w, GtkFileSelection *fs) */ +/* This function displays the different attributes of selected iPDC Setup File. */ +/* It will show the iPDC connectoin details before apply. */ +/* ---------------------------------------------------------------------------- */ + +void view_setup_file (GtkWidget *w, GtkFileSelection *fs) +{ + /* local variables */ + GtkWidget *label, *hsep; + GtkWidget *table, *scrolled_window; + GtkWidget *apply_button, *cancel_button; + + int tempi, rowCount; + int sDevices, dDevices, rowi; + char *d1, buff[200], *s; + char *markup,*rline = NULL; + + size_t len = 0; + ssize_t read; + FILE *fp1; + + s = (char *)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + strcpy(fptr, s); + + gtk_widget_destroy(ipdc_setup_window); + + fp1 = fopen(s, "rb"); + + if (fp1 == NULL) + { + validation_result(" Setup file doesn't exist! Try again"); + } + else + { + rowCount = 11; + sDevices = 0; + dDevices = 0; + tempi = 0; + + while(tempi < 6) //iPDCServer + { + read = getline(&rline, &len, fp1); + tempi++; + } + + if(read > 0) //LowerDevices + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + sDevices = tempi; + rowCount = rowCount + 5*sDevices; + + while (tempi > 0) + { + read = getline(&rline, &len, fp1); + tempi--; + } + } + + read = getline(&rline, &len, fp1); //UpperDevices + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + dDevices = tempi; + rowCount = rowCount + 4*dDevices; + + while (tempi > 0) + { + read = getline(&rline, &len, fp1); + tempi--; + } + } + fclose (fp1); + + /* Open the iPDC Setup File in read mode */ + fp1 = fopen(s, "rb"); + + /* If its available, then create a new dialog window for displaying the iPDC details. */ + setup_display_window = gtk_dialog_new (); + g_signal_connect (setup_display_window, "destroy", G_CALLBACK (gtk_widget_destroy), setup_display_window); + gtk_window_set_title (GTK_WINDOW (setup_display_window), "iPDC Setup"); + gtk_container_set_border_width (GTK_CONTAINER (setup_display_window), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 450); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(setup_display_window)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares */ + rowCount = dDevices + sDevices + 15; + table = gtk_table_new (rowCount, 5, FALSE); + + /* set the spacing to 10 on x and 10 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "close" button to the bottom of the dialog */ + apply_button = gtk_button_new_from_stock (GTK_STOCK_APPLY); + cancel_button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); + + /* This simply creates a grid of labels on the table to demonstrate the window. + g_markup_printf_escaped (): function to display diffrent color and font of text on label */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("iPDC Setup File Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("iPDC Server "); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 2, 3); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("iPDC ID Code"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC UDP Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC TCP Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("DB Server IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("DB Server Port "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 4, 5, 3, 4); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 4, 5); + gtk_widget_show (label); + + /* This simply read from file and print on label in the table. */ + getline(&rline, &len, fp1); //To read 'ipdcServer 1' line + + getline(&rline, &len, fp1); + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + getline(&rline, &len, fp1); + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 5, 6); + gtk_widget_show (label); + + getline(&rline, &len, fp1); + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 5, 6); + gtk_widget_show (label); + + getline(&rline, &len, fp1); + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, 5, 6); + gtk_widget_show (label); + + /* This is print static text (9000) on label in the table. */ + sprintf(buff, "9000"); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 4, 5, 5, 6); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 6, 7); + gtk_widget_show (label); + + getline(&rline, &len, fp1); //To read 'LowerDevices' line + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Source Devices "); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 7, 8); + gtk_widget_show (label); + g_free (markup); + + sprintf(buff, "Measurement Received From Total : %d Devices", sDevices); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 8, 9 ); + gtk_widget_show (label); + + rowi = 9; + if (sDevices > 0) + { + label = gtk_label_new ("Source ID"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Source IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi+1; + } + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi+1; + int i = 1; + + for(i; i <= sDevices; i++) + { + + getline(&rline, &len, fp1); + + d1 = strtok (rline,","); + label = gtk_label_new (d1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, rowi, rowi+1); + gtk_widget_show (label); + + d1 = strtok (NULL,","); + label = gtk_label_new (d1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, rowi, rowi+1); + gtk_widget_show (label); + + d1 = strtok (NULL,","); + label = gtk_label_new (d1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, rowi, rowi+1); + gtk_widget_show (label); + + d1 = strtok (NULL,"\n"); + label = gtk_label_new (d1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi + 1; + } + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi+1; + getline(&rline, &len, fp1); //To read 'UpperDevices' line + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Destination Devices"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + g_free (markup); + + rowi = rowi + 1; + + sprintf(buff, "Consolidated Measurement Provided To Total : %d Devices", dDevices); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi + 1; + if (dDevices > 0) + { + label = gtk_label_new ("Destination IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi + 1; + } + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + rowi = rowi+1; + + for(i=0; iaction_area), apply_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (setup_display_window)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + gtk_widget_grab_default (apply_button); + gtk_widget_show (apply_button); + + /* Finally show the setup_display_window. */ + gtk_widget_show (setup_display_window); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION apply_ipdc_setup (GtkWidget *w, gpointer udata) */ +/* This function apply the user selected iPDC Setup File and go ahead with the */ +/* Setup file's information. */ +/* ---------------------------------------------------------------------------- */ + +void apply_ipdc_setup (GtkWidget *w, gpointer udata) +{ + gtk_widget_destroy(setup_display_window); + + int flag=0; + char *s = fptr; + char *l1, *d3, *d4; + + size_t l2 = 0; + ssize_t result; + FILE *fp; + + fp = fopen(s, "rb"); + + if (fp == NULL) + { + validation_result(" iPDC Setup file doesn't exist! Try again "); + } + else + { + if ((result = getline(&l1, &l2, fp)) > 0) + { + d3 = strtok (l1, " "); + d4 = strtok (NULL, "\n"); + + if((!(strcmp(d3, "ipdcServer"))) && (atoi(d4) == 1)) + { + strcpy(ipdcFilePath, s); + ipdcFilePath[strlen(ipdcFilePath)] = '\0'; + flag = 1; + } + else + { + fclose(fp); + validation_result(" Setup file data does not matched? Try a proper file "); + } + } + else + { + fclose(fp); + validation_result("Setup file is empty?? Try a proper file "); + } + } + + if(flag == 1) + fill_pdc_details (ipdcFilePath); +} + + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION display_time() */ +/* Display the time on time lable on main PMU Simulator window. */ +/* ---------------------------------------------------------------------------- */ + +void* display_time() +{ + struct timeval tv; + struct tm* ptm; + char time_string[40]; + + while(1) + { + /* Obtain the time of day, and convert it to a tm struct. */ + gettimeofday (&tv, NULL); + + /* Format the date and time, down to a single second. */ + memset(time_string, '\0', 40); + ptm = localtime (&tv.tv_sec); + strftime (time_string, sizeof (time_string), "%Y-%m-%d, %H:%M:%S", ptm); + + gtk_label_set_text(GTK_LABEL(data->time_lable), time_string); + sleep(1); + } + + /* Exit the display time thread at the time of PMU Closing */ + pthread_exit(NULL); +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/ipdcGui.h b/iPDC/ipdcGui.h new file mode 100755 index 0000000..d171a3d --- /dev/null +++ b/iPDC/ipdcGui.h @@ -0,0 +1,171 @@ +/* ----------------------------------------------------------------------------- + * ipdcGui.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#ifndef __SUPPORT_H__ +#define __SUPPORT_H__ + +#include + +/* Convenience macros for obtaining objects from UI file */ +#define CH_GET_OBJECT(builder, name, type, data) \ + data->name = type(gtk_builder_get_object (builder, #name) ) +#define CH_GET_WIDGET(builder, name, data) \ + CH_GET_OBJECT(builder, name, GTK_WIDGET, data) + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +/* Main data structure definition */ +typedef struct _ChData ChData; + +struct _ChData +{ + /* Main application window */ + GtkWidget *ipdc; + + /* Main window button widgets */ + GtkWidget *add_pmu_button; + GtkWidget *remove_pmu_button; + GtkWidget *cmd_data_off_button; + GtkWidget *cmd_data_on_button; + GtkWidget *cmd_cfg_button; + GtkWidget *add_pdc_button; + GtkWidget *remove_pdc_button; + GtkWidget *display_conn_table_button; + GtkWidget *exit_button; + + /* Manubar button widgets */ + GtkWidget *menubar; + GtkWidget *open_ipdc_setup; + GtkWidget *enter_pdc_detail_menuitem; + GtkWidget *pdc_details_menuitem; + GtkWidget *exit_menuitem; + GtkWidget *about_menuitem; + + GtkWidget *menuitem2; + GtkWidget *menu_add_source; + GtkWidget *menu_remove_source; + GtkWidget *menu_data_off; + GtkWidget *menu_data_on; + GtkWidget *menu_request_cfg; + GtkWidget *menu_add_destination; + GtkWidget *menu_remove_destination; + GtkWidget *menu_conn_table; + + /* Main window extra widgets */ + GtkWidget *admin_label; + GtkWidget *rights_label; + GtkWidget *time_lable; + GtkWidget *text_view; + GtkWidget *text_view1; +}; + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +char find_butn[2]; +char buff[8000]; +char fptr[200]; +char *markup; +long int time_thrd_id; +int set_all; + + +ChData *data; +GtkWidget *ipdc_setup_window; +GtkWidget *pdc_detail_window; +GtkWidget *add_pmu_window, *chkBtn; +GtkWidget *new_window, *setup_display_window; +GtkWidget *p_id, *p_udp, *p_tcp, *p_ip; +GtkWidget *p_port, *p_protocol; +pthread_t show_sys_time; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +int isNumber(char *s); + +void destroy (GtkWidget *widget, gpointer udata); + +GdkPixbuf *create_pixbuf(const gchar * filename); + +void display_pdc_detail (GtkButton *widget, gpointer udata); + +void about_ipdc (GtkButton *widget, gpointer udata); + +void ipdc_help (GtkButton *but, gpointer udata); + +void validation_result (char *msg); + +void ipdc_colors(); + +void fill_pdc_details (char *filePath); + +int validation_pdc_detail (GtkButton *button, gpointer udata); + +void validation_setup_file_name (GtkWidget *widget, gpointer data); + +void final_pdc_setup_call(); + +void add_pmu (GtkButton *but, gpointer udata); + +int add_pmu_validation (GtkButton *but, gpointer udata); + +void cmd_or_remove_pmu (GtkButton *but, gpointer udata); + +void select_function(GtkWidget *widget, gpointer data); // + +int cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata); + +void add_new_pdc (GtkButton *but, gpointer udata); + +int new_pdc_validation (GtkButton *but, gpointer udata); + +void remove_pdc (GtkButton *but, gpointer udata); + +int remove_pdc_validation (GtkButton *but, gpointer udata); + +void connection_table (GtkButton *but, gpointer udata); + +void ipdc_setup_fileSelector (GtkWidget *widget, gpointer udata); + +void view_setup_file (GtkWidget *w, GtkFileSelection *fs); + +void apply_ipdc_setup (GtkWidget *w, gpointer udata); + +void* display_time(); + +#endif + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/new_pmu_or_pdc.c b/iPDC/new_pmu_or_pdc.c new file mode 100755 index 0000000..1910e84 --- /dev/null +++ b/iPDC/new_pmu_or_pdc.c @@ -0,0 +1,1591 @@ +/* ----------------------------------------------------------------------------- + * new_pmu_or_pdc.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------------------------*/ +/* Functions defined in new_pmu_or_pdc.c */ +/* ---------------------------------------------------------------------------------------------*/ + +/* 1. int add_PMU(char pmuid[], char ip[], char port[], char protocol[]) */ +/* 2. void* connect_pmu_tcp(void *temp) */ +/* 3. void* connect_pmu_udp(void *temp) */ +/* 4. void add_PMU_Node(struct Lower_Layer_Details *temp_pmu) */ +/* 5. int remove_Lower_Node(char pmuid[], char protocol[]) */ +/* 6. void* remove_llnode(void*) */ +/* 7. int put_data_transmission_off(char pmuid[], char protocol[]) */ +/* 8. void* data_off_llnode(void* temp) */ +/* 9. int put_data_transmission_on(char pmuid[], char protocol[]) */ +/* 10. void* data_on_llnode(void* temp) */ +/* 11. int configuration_request(char pmuid[], char protocol[]) */ +/* 12. void* config_request(void* temp) */ +/* 13. int add_PDC(char ip[], char protocol[]) */ +/* 14. int remove_PDC(char ip[], char port_num[], char protocol[]) */ +/* 15. void display_CT() */ +/* 16. void create_command_frame(int type,int pmuid,char *) */ +/* 17. int checkip(char ip[]) */ + +/* ---------------------------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ipdcGui.h" +#include "connections.h" +#include "parser.h" +#include "global.h" +#include "new_pmu_or_pdc.h" +#include "dallocate.h" + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_PMU(): */ +/* It Makes an entry in iPDC Setup File for each new Lower layer PMU/PDC. */ +/* A node is created of the type Lower_Layer_Details. A separate thread is */ +/* created for each added lower layer PMU/PDC accoring to the protcol (TCP/UDP).*/ +/* ---------------------------------------------------------------------------- */ + +int add_PMU(char pmuid[], char ip[], char port[], char protocol[]) { + + int err; + int flag = 0; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + if(LLfirst != NULL) + { + struct Lower_Layer_Details *temp_ptr; + + temp_ptr = malloc(sizeof(struct Lower_Layer_Details)); + if(!temp_ptr) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + + temp_ptr = LLfirst; + + while (temp_ptr != NULL) + { + if(temp_ptr->pmuid == atoi(pmuid)) { + + flag = 1; + break; + + } else { + + temp_ptr = temp_ptr->next; + continue; + } + } + } + + if(flag) /* 2 if there is a match */ + { + printf("%s %s is already in the LowerDevices list Enter another PMU\n",pmuid,protocol); + return 1; + + } + else if(!flag) + { + /* Make a node that contains PMU IP, Port and Protocol details */ + struct Lower_Layer_Details *temp_pmu; + + temp_pmu = malloc(sizeof(struct Lower_Layer_Details)); + if(!temp_pmu) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + + temp_pmu->pmuid = atoi(pmuid); // PMUID + strcpy(temp_pmu->ip,ip); // ip + temp_pmu->port = atoi(port); // port + strcpy(temp_pmu->protocol,protocol); // protocol + temp_pmu->protocol[3] = '\0'; + temp_pmu->up = 1; + temp_pmu->data_transmission_off = 0; + temp_pmu->pmu_remove = 0; + temp_pmu->request_cfg_frame = 0; + temp_pmu->next = NULL; + temp_pmu->prev = NULL; + + pthread_t t; + + if(!strncasecmp(protocol,"UDP",3)) { + + if((err = pthread_create(&t,&attr,connect_pmu_udp,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + + } else if(!strncasecmp(protocol,"TCP",3)) { + + if((err = pthread_create(&t,&attr,connect_pmu_tcp,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + struct Upper_Layer_Details *temp_pdc = ULfirst; + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + return 0; + } // If no match + + return 1; +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION connect_pmu_tcp(): */ +/* It Makes a new tcp connections with each added Lower Layer PMU/PDC. */ +/* ---------------------------------------------------------------------------- */ + +void* connect_pmu_tcp(void *temp) { + + int tcp_sockfd,port_num,yes = 1; + struct sockaddr_in PMU_addr; + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + unsigned char *tcp_BUF,*ptr,length[2]; + unsigned int flen; + uint16_t cal_crc,frame_crc; + + port_num = temp_pmu->port; + + if ((tcp_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + perror("socket"); + exit(1); + } + + if (setsockopt(tcp_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + bzero(&PMU_addr,sizeof(PMU_addr)); + PMU_addr.sin_family = AF_INET; + PMU_addr.sin_addr.s_addr = inet_addr(temp_pmu->ip); + PMU_addr.sin_port = htons(port_num); + memset(&(PMU_addr.sin_zero), '\0', 8); // zero the rest of the struct + + /* Copy the information of Lower Layer PMU/PDC to the node */ + temp_pmu->thread_id = pthread_self(); + bzero(&temp_pmu->llpmu_addr,sizeof(PMU_addr)); + temp_pmu->llpmu_addr.sin_family = AF_INET; + temp_pmu->llpmu_addr.sin_addr.s_addr = inet_addr(temp_pmu->ip); + temp_pmu->llpmu_addr.sin_port = htons(port_num); + memset(&(temp_pmu->llpmu_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pmu->sockfd = tcp_sockfd; + temp_pmu->up = 1; + + if (connect(tcp_sockfd, (struct sockaddr *)&PMU_addr, + sizeof(PMU_addr)) == -1) { // Main if + + perror("connect"); + temp_pmu->up = 0; + add_PMU_Node(temp_pmu); + pthread_exit(NULL); + + } else { + /* Add PMU*/ + add_PMU_Node(temp_pmu); + + tcp_BUF = malloc(MAXBUFLEN* sizeof(unsigned char)); + + /* Sending Command for obtaining CFG */ + int n,bytes_read; + char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(1,temp_pmu->pmuid,cmdframe); + if ((n = send (tcp_sockfd,cmdframe,18,0) == -1)) { + + perror("send"); + + } else { + + free(cmdframe); + while(1) { + + memset(tcp_BUF, '\0', MAXBUFLEN * sizeof(unsigned char)); + bytes_read = recv (tcp_sockfd, tcp_BUF,MAXBUFLEN-1,0); + + if(bytes_read == 0) { /* When TCP Peer Terminates */ + + printf("No data received Closing tcp socket %d\n",tcp_sockfd); + temp_pmu->up = 0; + + struct Upper_Layer_Details *temp_pdc = ULfirst; + pthread_mutex_lock(&mutex_Upper_Layer_Details); + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + pthread_exit(NULL); + + } else if(bytes_read == -1) {/* When TCP Peer Terminates */ + + perror("recv"); + temp_pmu->up = 0; + + struct Upper_Layer_Details *temp_pdc = ULfirst; + pthread_mutex_lock(&mutex_Upper_Layer_Details); + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + } else { + + ptr = tcp_BUF; + ptr += 2; + copy_cbyc(length,ptr,2); + flen = to_intconvertor(length); + cal_crc = compute_CRC(tcp_BUF,flen-2); + ptr += flen -4; + frame_crc = *ptr; + frame_crc <<= 8; + frame_crc |= *(ptr + 1); + + if(frame_crc != cal_crc) { + + continue; + } + if (sendto(DB_sockfd,tcp_BUF, MAXBUFLEN-1, 0, + (struct sockaddr *)&DB_Server_addr,sizeof(DB_Server_addr)) == -1) { + perror("sendto"); + } + + tcp_BUF[bytes_read] = '\0'; + PMU_process_TCP(tcp_BUF,tcp_sockfd); + } + + } // while ends + } + }// Main if + + close(tcp_sockfd); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION connect_pmu_udp(): */ +/* It Makes a new udp connections with each added Lower Layer PMU/PDC. */ +/* ---------------------------------------------------------------------------- */ + +void* connect_pmu_udp(void *temp) { + + int udp_sockfd,port_num,addr_len,yes = 1; + unsigned char *udp_BUF,*ptr,length[2]; + unsigned int flen; + uint16_t cal_crc,frame_crc; + + struct sockaddr_in PMU_addr,their_addr; + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + struct Lower_Layer_Details *t ; + + port_num = temp_pmu->port; + + if ((udp_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + perror("socket"); + exit(1); + } + + if (setsockopt(udp_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + bzero(&PMU_addr,sizeof(PMU_addr)); + PMU_addr.sin_family = AF_INET; + PMU_addr.sin_addr.s_addr = inet_addr(temp_pmu->ip); + PMU_addr.sin_port = htons(port_num); + memset(&(PMU_addr.sin_zero), '\0', 8); // zero the rest of the struct + + /* Copy the information of Lower Layer PMU/PDC to the node */ + temp_pmu->thread_id = pthread_self(); + bzero(&temp_pmu->llpmu_addr,sizeof(PMU_addr)); + temp_pmu->llpmu_addr.sin_family = AF_INET; + temp_pmu->llpmu_addr.sin_addr.s_addr = inet_addr(temp_pmu->ip); + temp_pmu->llpmu_addr.sin_port = htons(port_num); + memset(&(temp_pmu->llpmu_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pmu->sockfd = udp_sockfd; + temp_pmu->up = 1; + + /* Add PMU*/ + add_PMU_Node(temp_pmu); + + udp_BUF = malloc(MAXBUFLEN* sizeof(unsigned char)); + + /* Sending Command fro obtaining CFG */ + addr_len = sizeof(struct sockaddr); + int n,bytes_read; + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(1,temp_pmu->pmuid,(char *)cmdframe); + + if ((n = sendto(udp_sockfd,cmdframe, 18, 0, (struct sockaddr *)&PMU_addr,sizeof(PMU_addr)) == -1)) { + + perror("sendto"); + + } else { + + free(cmdframe); + + /* UDP data Received */ + while(1) { + + memset(udp_BUF,'\0',MAXBUFLEN * sizeof(unsigned char)); + bytes_read = recvfrom (udp_sockfd, udp_BUF,MAXBUFLEN-1,0,(struct sockaddr *)&their_addr,(socklen_t *)&addr_len); + if(bytes_read == -1) { + + perror("recvfrom"); + exit(1); + + } else { // New Datagram received + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + int flag = 0; + if(LLfirst == NULL) { + + flag = 0; + + } else { + + t = LLfirst; + while(t != NULL) { + + if((!strcmp(t->ip,inet_ntoa(their_addr.sin_addr))) + && (!strncasecmp(t->protocol,"UDP",3))) { + + flag = 1; + break; + + } else { + + t = t->next; + } + } + } + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag) { + + ptr = udp_BUF; + ptr += 2; + copy_cbyc(length,ptr,2); + flen = to_intconvertor(length); + cal_crc = compute_CRC(udp_BUF,flen-2); + ptr += flen -4; + frame_crc = *ptr; + frame_crc <<= 8; + frame_crc |= *(ptr + 1); + + if(frame_crc != cal_crc) { + + continue; + } + + //process the frame + int n; + + if ((n = sendto(DB_sockfd,udp_BUF, MAXBUFLEN-1, 0, + (struct sockaddr *)&DB_Server_addr,sizeof(DB_Server_addr)) == -1)) { + perror("sendto"); + } + + udp_BUF[bytes_read] = '\0'; + + //Call the udphandler + PMU_process_UDP(udp_BUF,PMU_addr,udp_sockfd); + + } else { + + printf("Datagram PMU not authentic. We donot pass the buffer for further processing %s\n",inet_ntoa(their_addr.sin_addr)); + } + } // Main if ends + + } // while ends + } + + close(udp_sockfd); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_PMU_Node(): */ +/* It creates a node of the type Lower_Layer_Details for each newly added */ +/* Lower Layer PMU/PDC. */ +/* ---------------------------------------------------------------------------- */ + +void add_PMU_Node(struct Lower_Layer_Details *temp_pmu) { + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + temp_pmu->prev = NULL; + LLfirst = temp_pmu; + + } else { + + LLlast->next = temp_pmu; + temp_pmu->prev = LLlast; + } + + temp_pmu->next = NULL; + + LLlast = temp_pmu; + + write_cfg_to_file(); + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_Lower_Node(): */ +/* It sets the remove flag for a Lower Layer PMU/PDC do that it can be removed */ +/* later. */ +/* ---------------------------------------------------------------------------- */ + +int remove_Lower_Node(char pmuid[], char protocol[]) { + + int flag = 0, err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + if(LLfirst == NULL) { + + printf("No PMU present?\n"); + return 1; + + } else { + + flag = 1; + } + + if(flag) { + + int match = 0; + struct Lower_Layer_Details *temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + if(set_all == 1) { + + match = 1; + break; + + } else { + + if((temp_pmu->pmuid == atoi(pmuid)) && (!strncasecmp(temp_pmu->protocol,protocol,3))) { + + match = 1; + break; + + } else { + + temp_pmu = temp_pmu->next; + } + } + } + + if(match) { + + if(set_all == 1) { + + temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + pthread_t t; + if((err = pthread_create(&t,&attr,remove_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + temp_pmu = temp_pmu->next; + } + + } else { + + pthread_t t; + if((err = pthread_create(&t,&attr,remove_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + struct Upper_Layer_Details *temp_pdc = ULfirst; + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + return 0; + + } else { + + printf("No match for entered PMU\n"); + return 1; + } + } + + return 1; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_llnode(): */ +/* ---------------------------------------------------------------------------- */ + +void* remove_llnode(void* temp) { + + int flag=0; + + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + struct Lower_Layer_Details *temp_ptr; + pthread_t tid = temp_pmu->thread_id; + + /* Remove the object from structure 'Lower Layer Details'*/ + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + /* remove the entry from CFG linked list and remove that CFG objects */ + /* remove the entry from iPDC Setup File */ + if(LLfirst != NULL) + { + temp_ptr = malloc(sizeof(struct Lower_Layer_Details)); + if(!temp_ptr) + { + printf("Not enough memory temp_pmu\n"); + exit(1); + } + temp_ptr = LLfirst; + + while (temp_ptr != NULL) + { + if(((temp_ptr->pmuid == temp_pmu->pmuid)) && (!strcmp(temp_ptr->protocol,temp_pmu->protocol))) + { + if((temp_ptr->prev != NULL) && (temp_ptr->next != NULL)) //deletion of inbetween node + { + temp_ptr->prev->next = temp_ptr->next; + temp_ptr->next->prev = temp_ptr->prev; + temp_ptr = temp_ptr->next; + } + else if((temp_ptr->prev == NULL) && (temp_ptr->next != NULL)) //deletion of first node + { + temp_ptr = temp_ptr->next; + temp_ptr->prev = NULL; + LLfirst = temp_ptr; + } + else if((temp_ptr->prev != NULL) && (temp_ptr->next == NULL)) //deletion of last node + { + temp_ptr = temp_ptr->prev; + temp_ptr->next = NULL; + LLlast = temp_ptr; + } + else + { + LLfirst = NULL; + LLlast = NULL; + } + flag = 1; + break; + } + else + { + temp_ptr = temp_ptr->next; + continue; + } + } + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag == 1) + { + /* remove the cfg object from memory */ + int ind = 0,match = 0; + struct cfg_frame *temp_cfg = cfgfirst,*tprev_cfg; + unsigned char id_CODE[2]; + tprev_cfg = temp_cfg; + + id_CODE[0] = temp_pmu->pmuid >> 8; + id_CODE[1] = temp_pmu->pmuid ; + + while(temp_cfg != NULL){ + if(!ncmp_cbyc(id_CODE,temp_cfg->idcode,2)) { + + match = 1; + break; + + } else { + + ind++; + tprev_cfg = temp_cfg; + temp_cfg = temp_cfg->cfgnext; + } + }// While ends + + if(match) { + + pthread_mutex_lock(&mutex_cfg); + + if(!ind) { + + // Replace the cfgfirst + cfgfirst = cfgfirst->cfgnext; + free_cfgframe_object(temp_cfg); + + } else { + + // Replace in between cfg + tprev_cfg->cfgnext = temp_cfg->cfgnext; + free_cfgframe_object(temp_cfg); + } + + pthread_mutex_unlock(&mutex_cfg); + } + } + + pthread_cancel(tid); + + /* Close the socket connection */ + close(temp_pmu->sockfd); + + free(temp_pmu); + + write_cfg_to_file(); + + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION put_data_transmission_off(): */ +/* ---------------------------------------------------------------------------- */ + +int put_data_transmission_off(char pmuid[], char protocol[]) { + + int flag = 0,err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + printf("No PMU present?\n"); + return 1; + + } else { + + flag = 1; + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag) { + + int match = 0; + struct Lower_Layer_Details *temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + if(set_all == 1) { + + match = 1; + break; + + } else { + + if((temp_pmu->pmuid == atoi(pmuid)) && (!strncasecmp(temp_pmu->protocol,protocol,3))) { + + match = 1; + break; + + } else { + + temp_pmu = temp_pmu->next; + } + } + } + + if(match) { + + if(set_all == 1) { + + temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + pthread_t t; + temp_pmu->data_transmission_off = 1; + + if((err = pthread_create(&t,&attr,data_off_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + temp_pmu = temp_pmu->next; + } + + } else { + + pthread_t t; + temp_pmu->data_transmission_off = 1; + + if((err = pthread_create(&t,&attr,data_off_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + return 0; + + } else { + + printf("No match for entered PMU\n"); + return 1; + } + } + + return 1; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION data_off_llnode(): */ +/* ---------------------------------------------------------------------------- */ + +void* data_off_llnode(void* temp) { + + char *cmdframe = malloc(19); + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + + create_command_frame(3,temp_pmu->pmuid,cmdframe); + cmdframe[18] = '\0'; + + if(!strncasecmp(temp_pmu->protocol,"UDP",3)) { + + int n; + + if ((n = sendto(temp_pmu->sockfd,cmdframe, 18, 0,(struct sockaddr *)&temp_pmu->llpmu_addr,sizeof(temp_pmu->llpmu_addr)) == -1)) { + + perror("sendto"); + + } else { + + printf("Sent CMD to put data transmission OFF\n"); + } + + } else if(!strncasecmp(temp_pmu->protocol,"TCP",3)){ + + int n; + + if(temp_pmu->up == 1) { + if ((n = send(temp_pmu->sockfd,cmdframe, 18,0) == -1)) { + + perror("send"); + + } else { + + printf("Sent CmD to put data transmission OFF\n"); + } + } + } + + free(cmdframe); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION put_data_transmission_on(): */ +/* ---------------------------------------------------------------------------- */ + +int put_data_transmission_on(char pmuid[], char protocol[]) { + + int flag = 0,err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + printf("No PMU Present?\n"); + return 1; + + } else { + + flag = 1; + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag) { + + int match = 0; + struct Lower_Layer_Details *temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + if(set_all == 1) { + + match = 1; + break; + + } else { + + if((temp_pmu->pmuid == atoi(pmuid)) && (!strncasecmp(temp_pmu->protocol,protocol,3))) { + + match = 1; + break; + + } else { + + temp_pmu = temp_pmu->next; + } + } + } + + if(match) { + + if(set_all == 1) { + + temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + pthread_t t; + temp_pmu->data_transmission_off = 0; + + if((err = pthread_create(&t,&attr,data_on_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + temp_pmu = temp_pmu->next; + } + + } else { + + pthread_t t; + temp_pmu->data_transmission_off = 0; + + if((err = pthread_create(&t,&attr,data_on_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + return 0; + + } else { + + printf("No match for entered PMU\n"); + return 1; + } + } + + return 1; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION data_on_llnode(): */ +/* ---------------------------------------------------------------------------- */ + +void* data_on_llnode(void* temp) { + + char *cmdframe = malloc(19); + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + + create_command_frame(2,temp_pmu->pmuid,cmdframe); + cmdframe[18] = '\0'; + + if(!strncasecmp(temp_pmu->protocol,"UDP",3)) { + + int n; + + if ((n = sendto(temp_pmu->sockfd,cmdframe, 18, 0,(struct sockaddr *)&temp_pmu->llpmu_addr,sizeof(temp_pmu->llpmu_addr)) == -1)) { + + perror("sendto"); + + } else { + + printf("Sent CMD to put data transmission ON.\n"); + } + + } else if(!strncasecmp(temp_pmu->protocol,"TCP",3)){ + + int n; + + if(temp_pmu->up == 1) { + + if ((n = send(temp_pmu->sockfd,cmdframe, 18,0) == -1)) { + + perror("send"); + + } else { + + printf("Sent CmD to put data transmission ON.\n"); + } + } + } + + free(cmdframe); + pthread_exit(NULL); +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION configuration_request(): */ +/* ---------------------------------------------------------------------------- */ + +int configuration_request(char pmuid[], char protocol[]) { + + int flag = 0,err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + printf("No PMU Present?\n"); + return 1; + + } else { + + flag = 1; + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag) { + + int match = 0; + struct Lower_Layer_Details *temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + if(set_all == 1) { + + match = 1; + break; + + } else { + + if((temp_pmu->pmuid == atoi(pmuid)) && (!strncasecmp(temp_pmu->protocol,protocol,3))) { + + match = 1; + break; + + } else { + temp_pmu = temp_pmu->next; + } + } + } + + if(match) { + + if(set_all == 1) { + + temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + pthread_t t; + + if((err = pthread_create(&t,&attr,config_request,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + temp_pmu = temp_pmu->next; + } + + } else { + + pthread_t t; + + if((err = pthread_create(&t,&attr,config_request,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + return 0; + + } else { + + printf("No match for entered PMU\n"); + return 1; + } + } + + return 1; +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION config_request(): */ +/* ---------------------------------------------------------------------------- */ + +void* config_request(void* temp) { + + int err; + char *cmdframe = malloc(19); + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + if(!strncasecmp(temp_pmu->protocol,"UDP",3)) { /* If Peer is UDP */ + + int n; + cmdframe[18] = '\0'; + + create_command_frame(1,temp_pmu->pmuid,cmdframe); + + if ((n = sendto(temp_pmu->sockfd,cmdframe, 18, 0,(struct sockaddr *)&temp_pmu->llpmu_addr,sizeof(temp_pmu->llpmu_addr)) == -1)) { + + perror("sendto"); + + } else { + + free(cmdframe); + temp_pmu->data_transmission_off = 0; + } + + } else if(!strncasecmp(temp_pmu->protocol,"TCP",3)){ /* If Peer is TCP */ + + int n; + + if(temp_pmu->up == 0) { /* If TCP Peer is DOWN */ + + pthread_t t; + + if((err = pthread_create(&t,&attr,connect_pmu_tcp,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + + struct Upper_Layer_Details *temp_pdc = ULfirst; + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + } else { /* If TCP Peer is UP */ + + cmdframe[18] = '\0'; + + create_command_frame(1,temp_pmu->pmuid,cmdframe); + + if ((n = send(temp_pmu->sockfd,cmdframe, 18,0) == -1)) { + + printf("temp_pmu->sockfd %d \n",temp_pmu->sockfd); + perror("send"); + + } else { + + printf("CMD to send CFG \n"); + free(cmdframe); + temp_pmu->data_transmission_off = 0; + } + } + } + + pthread_exit(NULL); +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_PDC((char ip[], char protocol[]): */ +/* It Makes an entry in iPDC Setup File for the upper PDC. The pre-existing */ +/* entry will be removed from the file and also the list Upper_Layer_Details */ +/* ---------------------------------------------------------------------------- */ + +int add_PDC(char ip[], char protocol[]) { + + int flag = 0; + struct Upper_Layer_Details *temp_ptr; + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + if(ULfirst != NULL) + { + temp_ptr = malloc(sizeof(struct Upper_Layer_Details)); + + if(!temp_ptr) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + temp_ptr = ULfirst; + + while (temp_ptr != NULL) + { + if((!strcmp(temp_ptr->ip, ip)) && (!strncasecmp(temp_ptr->protocol, protocol, 3))) { + + flag = 1; + break; + + } else { + + temp_ptr = temp_ptr->next; + continue; + } + } + } + + if(flag) /* 2 if there is a match */ + { + printf("%s %s is already in the UpperDevices list Enter another PDC.\n",ip,protocol); + return 1; + + } + else if(!flag) + { + /* Make a node that contains PMU IP, Port and Protocol details */ + struct Upper_Layer_Details *temp_pdc; + temp_pdc = malloc(sizeof(struct Upper_Layer_Details)); + + if(!temp_pdc) { + + printf("Not enough memory temp_pdc\n"); + exit(1); + } + + strcpy(temp_pdc->ip,ip); // ip + + if(!strncasecmp(protocol,"UDP",3)) { + + temp_pdc->port = UDPPORT; // port + + } else { + + temp_pdc->port = TCPPORT; // port + } + + strncpy(temp_pdc->protocol,protocol,3); // protocol + temp_pdc->protocol[3] = '\0'; + + bzero(&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)); + temp_pdc->pdc_addr.sin_family = AF_INET; + temp_pdc->pdc_addr.sin_addr.s_addr = inet_addr(temp_pdc->ip); + temp_pdc->pdc_addr.sin_port = htons(temp_pdc->port); + memset(&(temp_pdc->pdc_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pdc->config_change = 0; + temp_pdc->tcpup = 1; + temp_pdc->UL_upper_pdc_cfgsent = 0; + temp_pdc->UL_data_transmission_off = 1; + temp_pdc->address_set = 0; + + if(ULfirst == NULL) { + + ULfirst = temp_pdc; + temp_pdc->prev = NULL; + + } else { + + ULlast->next = temp_pdc; + temp_pdc->prev = ULlast; + } + + ULlast = temp_pdc; + temp_pdc->next = NULL; + + write_cfg_to_file(); + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + return 0; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_PDC((char ip[], char port_num[], char protocol[]): */ +/* ---------------------------------------------------------------------------- */ + +int remove_PDC(char ip[], char port_num[], char protocol[]) { + + int flag = 0; + struct Upper_Layer_Details *temp_pdc; + + if(ULfirst == NULL) { + + printf("No PDC Present?\n"); + return 1; + + } else { + + temp_pdc = malloc(sizeof(struct Upper_Layer_Details)); + temp_pdc = ULfirst; + + while(temp_pdc != NULL) { + + if(!strcmp(temp_pdc->ip,ip)) { + + if(((!strncasecmp(temp_pdc->protocol,"UDP",3)) && (temp_pdc->port == UDPPORT)) || ((!strncasecmp(temp_pdc->protocol,"TCP",3)) && (temp_pdc->port == TCPPORT))) { + + flag = 1; + break; + } + } + temp_pdc = temp_pdc->next; + } + + if(flag == 1) { + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + if(temp_pdc->prev == NULL) { + + ULfirst = temp_pdc->next; + if(ULfirst != NULL) ULfirst->prev = NULL; + + } else { + + temp_pdc->prev->next = temp_pdc->next; + } + + if(temp_pdc->next == NULL) { + + ULlast = temp_pdc->prev; + + } else { + if(temp_pdc->prev != NULL) + temp_pdc->prev->next = temp_pdc->next; + } + + write_cfg_to_file(); + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + return 0; + } + return 1; + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION display_CT(): */ +/* ---------------------------------------------------------------------------- */ + +void display_CT() { + + printf("#### CONNECTION TABLE OF SOURCE DEVICES ####\n"); + printf("--------------------------------------------------------------------------------\n"); + printf("| PMU ID | IP | Port | Protocol | Up |\n"); + printf("--------------------------------------------------------------------------------\n"); + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + printf("No PMU Present?\n"); + + } else { + + struct Lower_Layer_Details *t = LLfirst; + + while(t != NULL) { + + printf("|\t%d\t|%s\t|\t%d\t|\t%s\t|\t%d\t|\n",t->pmuid,t->ip,t->port,t->protocol,t->up); + t = t->next; + + } + printf("--------------------------------------------------------------------------------\n"); + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + printf("#### CONNECTION TABLE OF DESTINATION DEVICES ####\n"); + printf("-------------------------------------------------\n"); + printf("| IP | Port | Protocol |\n"); + printf("-------------------------------------------------\n"); + + if(ULfirst == NULL) { + + printf("No PDC Present?\n"); + + + } else { + + struct Upper_Layer_Details *t = ULfirst; + + while(t != NULL) { + + printf("|%s\t|\t%d\t|\t%s\t|\n",t->ip,t->port,t->protocol); + t = t->next; + } + printf("-------------------------------------------------\n"); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION create_command_frame(): */ +/* ---------------------------------------------------------------------------- */ + +void create_command_frame(int type,int pmu_id,char cmdframe[]) { + + int f = 18; + long int sec,frac = 0; + unsigned char fsize[2],pmuid[2],soc[4],fracsec[4]; + uint16_t chk; + + memset(cmdframe,'\0',19); + memset(fsize,'\0',2); + + int_to_ascii_convertor(f,fsize); + int_to_ascii_convertor(pmu_id,pmuid); + + sec = (long int)time (NULL); + long_int_to_ascii_convertor(sec,soc); + long_int_to_ascii_convertor(frac,fracsec); + + int index = 0; + + switch(type) { + + case 1 : byte_by_byte_copy((unsigned char *)cmdframe,CMDSYNC,index,2); // SEND CFG + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,fsize,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,pmuid,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,soc,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,fracsec,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,CMDCFGSEND,index,2); + index += 2; + chk = compute_CRC((unsigned char *)cmdframe,index); + cmdframe[index++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cmdframe[index] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + break; + + case 2 : byte_by_byte_copy((unsigned char *)cmdframe,CMDSYNC,index,2); // SEND DATA ON + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,fsize,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,pmuid,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,soc,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,fracsec,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,CMDDATASEND,index,2); + index += 2; + chk = compute_CRC((unsigned char *)cmdframe,index); + cmdframe[index++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cmdframe[index] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + break; + + case 3 : byte_by_byte_copy((unsigned char *)cmdframe,CMDSYNC,index,2); // PUT OFF DATA TRANSMISSION + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,fsize,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,pmuid,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,soc,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,fracsec,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,CMDDATAOFF,index,2); + index += 2; + chk = compute_CRC((unsigned char *)cmdframe,index); + cmdframe[index++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cmdframe[index] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + break; + + default: printf("Please enter a valid request?\n"); + break; + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION checkip(): */ +/* ---------------------------------------------------------------------------- */ + +int checkip(char ip[]) { + + struct sockaddr_in sa; + int result = inet_pton(AF_INET, ip, &(sa.sin_addr)); + return result; +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/new_pmu_or_pdc.h b/iPDC/new_pmu_or_pdc.h new file mode 100755 index 0000000..f347996 --- /dev/null +++ b/iPDC/new_pmu_or_pdc.h @@ -0,0 +1,68 @@ +/* ----------------------------------------------------------------------------- + * new_pmu_or_pdc.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +int add_PMU(char pmuid[], char ip[], char port[], char protocol[]); + +void add_PMU_Node(struct Lower_Layer_Details *temp_pmu); + +void* connect_pmu_tcp(void *); + +void* connect_pmu_udp(void *); + +int remove_Lower_Node(char pmuid[], char protocol[]); + +void* remove_llnode(void*); + +int put_data_transmission_off(char pmuid[], char protocol[]); + +void* data_off_llnode(void* temp); + +int put_data_transmission_on(char pmuid[], char protocol[]); + +void* data_on_llnode(void* temp); + +int configuration_request(char pmuid[], char protocol[]); + +void* config_request(void* temp); + +int add_PDC(char ip[], char protocol[]); + +int remove_PDC(char ip[], char port_num[], char protocol[]); + +void display_CT(); + +void create_command_frame(int type,int pmuid,char *); + +int checkip(char ip[]); + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/parser.c b/iPDC/parser.c new file mode 100755 index 0000000..dd6793d --- /dev/null +++ b/iPDC/parser.c @@ -0,0 +1,1548 @@ +/* ----------------------------------------------------------------------------- + * parser.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------------------------ */ +/* Functions defined in parser.c */ +/* -------------------------------------------------------------------------------------*/ + +/* 1. void cfgparser(char []) */ +/* 2. void write_cfg_to_file() */ +/* 3. void dataparser(char[]) */ +/* 4. int check_statword(char stat[]) */ +/* 5. void add_id_to_status_change_list(unsigned char idcode[]); */ +/* 6. void remove_id_from_status_change_list(unsigned char idcode[]) */ +/* 7. unsigned int to_intconvertor(unsigned char []) */ +/* 8. void long_int_to_ascii_convertor (long int n,unsigned char hex[]); */ +/* 9. void int_to_ascii_convertor(unsigned int n,unsigned char hex[]); */ +/* 10.void copy_cbyc(unsigned char dst[],unsigned char *s,int size) */ +/* 11.int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size) */ +/* 12.void byte_by_byte_copy(unsigned char dst[],unsigned char src[],int index,int n) */ +/* 13.unsigned long int to_long_int_convertor(unsigned char array[]) */ +/* 14.uint16_t compute_CRC(unsigned char *message,int length) */ + +/* ------------------------------------------------------------------------------------ */ + + +#include +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "dallocate.h" +#include "align_sort.h" +#include "connections.h" +#include "recreate.h" + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfgparser(): */ +/* It creates configuration objects for the received configuration frames. */ +/* Configuration frame is also written in the file `cfg.bin`. */ +/* If the object is already present, it will replace in cfg_frame LL and */ +/* also in the file `cfg.bin` by calling */ +/* ---------------------------------------------------------------------------- */ + +void cfgparser(unsigned char st[]){ + + unsigned char *s; + unsigned char sync[3]; + unsigned int num_pmu,phn,ann,dgn; + int i,j,dgchannels,match = 0; + + struct cfg_frame *cfg; + struct channel_names *cn; + + /******************** PARSING BEGINGS *******************/ + + pthread_mutex_lock(&mutex_file); + + cfg = malloc(sizeof(struct cfg_frame)); + + if(!cfg) { + + printf("No enough memory for cfg\n"); + } + + printf("Inside cfgparser()\n"); + s = st; + + /* Memory Allocation Begins - Allocate memory to framesize */ + cfg->framesize = malloc(3*sizeof(unsigned char)); + if(!cfg->framesize) { + + printf("No enough memory for cfg->framesize\n"); + } + + // Allocate memory to idcode + cfg->idcode = malloc(3*sizeof(unsigned char)); + if(!cfg->idcode) { + printf("No enough memory for cfg->idcode\n"); + } + + // Allocate memory to soc + cfg->soc = malloc(5*sizeof(unsigned char)); + if(!cfg->soc) { + printf("Not enough memory for cfg->soc\n"); + } + + // Allocate memory to fracsec + cfg->fracsec = malloc(5*sizeof(unsigned char)); + if(!cfg->fracsec) { + printf("Not enough memory for cfg->fracsec\n"); + } + + // Allocate memory to time_base + cfg->time_base = malloc(5*sizeof(unsigned char)); + if(!cfg->time_base) { + printf("Not enough memory for cfg->time_base\n"); + } + + // Allocate memory to time_base + cfg->time_base = malloc(5*sizeof(unsigned char)); + if(!cfg->time_base) { + printf("No enough memory for cfg->time_base\n"); + } + + // Allocate memory to num_pmu + cfg->num_pmu = malloc(3*sizeof(unsigned char)); + if(!cfg->num_pmu) { + printf("No enough memory for cfg->num_pmu\n"); + } + + // Allocate memory to data_rate + cfg->data_rate = malloc(3*sizeof(unsigned char)); + if(!cfg->data_rate) { + printf("No enough memory for cfg->data_rate\n"); + } + + //Copy sync word to file + copy_cbyc(sync,(unsigned char *)s,2); + sync[2] = '\0'; + s = s + 2; + + // Separate the FRAME SIZE + copy_cbyc(cfg->framesize,(unsigned char *)s,2); + cfg->framesize[2] = '\0'; + unsigned int framesize; + framesize = to_intconvertor(cfg->framesize); + s = s + 2; + + //SEPARATE IDCODE + copy_cbyc(cfg->idcode,(unsigned char *)s,2); + cfg->idcode[2] = '\0'; + int id = to_intconvertor(cfg->idcode); + printf("ID Code %d\n",id); + s = s + 2; + + /**** Remove the id from the list of Stat change if it is present ****/ + remove_id_from_status_change_list(cfg->idcode); + + //SEPARATE SOC + copy_cbyc(cfg->soc,(unsigned char *)s,4); + cfg->soc[4] = '\0'; + s =s + 4; + + //SEPARATE FRACSEC + copy_cbyc(cfg->fracsec,(unsigned char *)s,4); + cfg->fracsec[4] = '\0'; + s = s + 4; + + //SEPARATE TIMEBASE + copy_cbyc (cfg->time_base,(unsigned char *)s,4); + cfg->time_base[4]='\0'; + s = s + 4; + + //SEPARATE PMU NUM + copy_cbyc (cfg->num_pmu,(unsigned char *)s,2); + cfg->num_pmu[2] = '\0'; + s = s + 2; + + num_pmu = to_intconvertor(cfg->num_pmu); + printf("Number of PMU's %d\n",num_pmu); + + // Allocate Memeory For Each PMU + cfg->pmu = malloc(num_pmu* sizeof(struct for_each_pmu *)); + if(!cfg->pmu) { + printf("Not enough memory for pmu[][]\n"); + exit(1); + } + + for (i = 0; i < num_pmu; i++) { + cfg->pmu[i] = malloc(sizeof(struct for_each_pmu)); + } + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jpmu[j]->stn = malloc(17*sizeof(unsigned char)); + if(!cfg->pmu[j]->stn) { + printf("Not enough memory cfg->pmu[j]->stn\n"); + exit(1); + } + + // Memory Allocation for idcode + cfg->pmu[j]->idcode = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->idcode) { + printf("Not enough memory cfg->pmu[j]->idcode\n"); + exit(1); + } + + // Memory Allocation for format + cfg->pmu[j]->data_format = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->data_format) { + printf("Not enough memory cfg->pmu[j]->data_format\n"); + exit(1); + } + + // Memory Allocation for phnmr + cfg->pmu[j]->phnmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->phnmr) { + printf("Not enough memory cfg->pmu[j]->phnmr\n"); + exit(1); + } + + // Memory Allocation for annmr + cfg->pmu[j]->annmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->annmr) { + printf("Not enough memory cfg->pmu[j]->annmr\n"); + exit(1); + } + + // Memory Allocation for dgnmr + cfg->pmu[j]->dgnmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->dgnmr) { + printf("Not enough memory cfg->pmu[j]->dgnmr\n"); + exit(1); + } + + // Memory Allocation for fnom + cfg->pmu[j]->fnom = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->fnom) { + printf("Not enough memory cfg->pmu[j]->fnom\n"); + exit(1); + } + + // Memory Allocation for cfg_cnt + cfg->pmu[j]->cfg_cnt = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->cfg_cnt) { + printf("Not enough memory cfg->pmu[j]->cfg_cnt\n"); + exit(1); + } + + //SEPARATE STATION NAME + copy_cbyc (cfg->pmu[j]->stn,(unsigned char *)s,16); + cfg->pmu[j]->stn[16] = '\0'; + s = s + 16; + + //SEPARATE IDCODE + copy_cbyc (cfg->pmu[j]->idcode,(unsigned char *)s,2); + cfg->pmu[j]->idcode[2] = '\0'; + s = s + 2; + + //SEPARATE DATA FORMAT + copy_cbyc (cfg->pmu[j]->data_format,(unsigned char *)s,2); + cfg->pmu[j]->data_format[2]='\0'; + s = s + 2; + printf("Data Format Word %d\n", to_intconvertor(cfg->pmu[j]->data_format)); + + unsigned char hex = cfg->pmu[j]->data_format[1]; + hex <<= 4; + + // Extra field has been added to identify polar,rectangular,floating/fixed point + cfg->pmu[j]->fmt = malloc(sizeof(struct format)); + if((hex & 0x80) == 0x80) cfg->pmu[j]->fmt->freq = '1'; else cfg->pmu[j]->fmt->freq = '0'; + if((hex & 0x40) == 0x40 ) cfg->pmu[j]->fmt->analog = '1'; else cfg->pmu[j]->fmt->analog = '0'; + if((hex & 0x20) == 0x20) cfg->pmu[j]->fmt->phasor = '1'; else cfg->pmu[j]->fmt->phasor = '0'; + if((hex & 0x10) == 0x10) cfg->pmu[j]->fmt->polar = '1'; else cfg->pmu[j]->fmt->polar = '0'; + + //SEPARATE PHASORS + copy_cbyc (cfg->pmu[j]->phnmr,(unsigned char *)s,2); + cfg->pmu[j]->phnmr[2]='\0'; + phn = to_intconvertor(cfg->pmu[j]->phnmr); + s = s + 2; + + //SEPARATE ANALOGS + copy_cbyc (cfg->pmu[j]->annmr,(unsigned char *)s,2); + cfg->pmu[j]->annmr[2]='\0'; + ann = to_intconvertor(cfg->pmu[j]->annmr); + s = s + 2; + + //SEPARATE DIGITALS + copy_cbyc (cfg->pmu[j]->dgnmr,(unsigned char *)s,2); + cfg->pmu[j]->dgnmr[2]='\0'; + dgn = to_intconvertor(cfg->pmu[j]->dgnmr); + s = s + 2; + + printf("CFG consist Phasor = %d, Analogs = %d Digitals = %d.\n",phn,ann,dgn); + + cn = malloc(sizeof(struct channel_names)); + cn->first = NULL; + + ////SEPARATE PHASOR NAMES + if(phn != 0){ + + cn->phnames = malloc(phn*sizeof(unsigned char*)); + + if(!cn->phnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < phn; i++) { + + cn->phnames[i] = malloc(17*sizeof(unsigned char)); + } + + i = 0; //Index for PHNAMES + + while(iphnames[i],(unsigned char *)s,16); + cn->phnames[i][16]='\0'; + printf("Phnames %s\n",cn->phnames[i]); + s = s + 16; + i++; + } + } + + //SEPARATE ANALOG NAMES + if(ann != 0){ + + cn->angnames = malloc(ann*sizeof(unsigned char*)); + + if(!cn->angnames) { + + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < ann; i++) { + + cn->angnames[i] = malloc(17*sizeof(unsigned char)); + } + + + i=0; //Index for ANGNAMES + + while(iangnames[i],(unsigned char *)s,16); + cn->angnames[i][16]='\0'; + printf("ANGNAMES %s\n",cn->angnames[i]); + s = s + 16; + i++; + } + } + + int di; + struct dgnames *q; + i = 0; //Index for number of dgwords + + while(i < dgn) { + + struct dgnames *temp1 = malloc(sizeof(struct dgnames)); + + temp1->dgn = malloc(16*sizeof(unsigned char *)); + if(!temp1->dgn) { + + printf("Not enough memory temp1->dgn\n"); + exit(1); + } + + for (di = 0; di < 16; di++) { + + temp1->dgn[di] = malloc(17*sizeof(unsigned char)); + } + + temp1->dg_next = NULL; + + for(dgchannels = 0;dgchannels < 16; dgchannels++){ + + copy_cbyc (temp1->dgn[dgchannels],(unsigned char *)s,16); + temp1->dgn[dgchannels][16]='\0'; + s += 16; + printf("%s\n",temp1->dgn[dgchannels]); + } + + if(cn->first == NULL){ + + cn->first = q = temp1; + + } else { + + while(q->dg_next!=NULL){ + + q = q->dg_next; + } + q->dg_next = temp1; + } + + i++; + } //DGWORD WHILE ENDS + + cfg->pmu[j]->cnext = cn;//Assign to pointers + + ///PHASOR FACTORS + if(phn != 0){ + + cfg->pmu[j]->phunit = malloc(phn*sizeof(unsigned char*)); + + if(!cfg->pmu[j]->phunit) { + + printf("Not enough memory cfg->pmu[j]->phunit[][]\n"); + exit(1); + } + + for (i = 0; i < phn; i++) { + + cfg->pmu[j]->phunit[i] = malloc(5); + } + + i = 0; + + while(ipmu[j]->phunit[i],(unsigned char *)s,4); + cfg->pmu[j]->phunit[i][4] = '\0'; + s = s + 4; + i++; + } + }//if for PHASOR Factors ends + + //ANALOG FACTORS + if(ann != 0){ + + cfg->pmu[j]->anunit = malloc(ann*sizeof(unsigned char*)); + + if(!cfg->pmu[j]->anunit) { + + printf("Not enough memory cfg->pmu[j]->anunit[][]\n"); + exit(1); + } + + for (i = 0; i < ann; i++) { + + cfg->pmu[j]->anunit[i] = malloc(5); + } + + i = 0; + + while(ipmu[j]->anunit[i],(unsigned char *)s,4); + cfg->pmu[j]->anunit[i][4] = '\0'; + s = s + 4; + i++; + } + } // if for ANALOG Factors ends + + if(dgn != 0){ + + cfg->pmu[j]->dgunit = malloc(dgn*sizeof(unsigned char*)); + + if(!cfg->pmu[j]->dgunit) { + + printf("Not enough memory cfg->pmu[j]->dgunit[][]\n"); + exit(1); + } + + for (i = 0; i < dgn; i++) { + + cfg->pmu[j]->dgunit[i] = malloc(5); + } + + i=0; + + while(ipmu[j]->dgunit[i],(unsigned char *)s,4); + cfg->pmu[j]->dgunit[i][4] = '\0'; + s = s + 4; + i++; + } + } //if for Digital Words FActtors ends + + copy_cbyc (cfg->pmu[j]->fnom,(unsigned char *)s,2); + cfg->pmu[j]->fnom[2]='\0'; + s = s + 2; + + copy_cbyc (cfg->pmu[j]->cfg_cnt,(unsigned char *)s,2); + cfg->pmu[j]->cfg_cnt[2]='\0'; + s = s + 2; + j++; + }//While for PMU number ends + + copy_cbyc (cfg->data_rate,(unsigned char *)s,2); + cfg->data_rate[2] = '\0'; + s += 2; + cfg->cfgnext = NULL; + printf("Data Rate %d\n", to_intconvertor(cfg->data_rate)); + + /* Adjust the configuration object pointers and Lock the mutex_cfg */ + pthread_mutex_lock(&mutex_cfg); + + // Index is kept to replace the cfgfirst if it matches + int index = 0; + + if (cfgfirst == NULL) { // Main if + + cfgfirst = cfg; + + } else { + + struct cfg_frame *temp_cfg = cfgfirst,*tprev_cfg; + tprev_cfg = temp_cfg; + + //Check if the configuration frame already exists + while(temp_cfg!=NULL){ + if(!ncmp_cbyc(cfg->idcode,temp_cfg->idcode,2)) { + + match = 1; + break; + + } else { + + index++; + tprev_cfg = temp_cfg; + temp_cfg = temp_cfg->cfgnext; + } + }// While ends + + if(match) { + + if(!index) { + + // Replace the cfgfirst + cfg->cfgnext = cfgfirst->cfgnext; + free_cfgframe_object(cfgfirst); + cfgfirst = cfg; + + } else { + + // Replace in between cfg + tprev_cfg->cfgnext = cfg; + cfg->cfgnext = temp_cfg->cfgnext; + free_cfgframe_object(temp_cfg); + } + + } else { // No match and not first cfg + + tprev_cfg->cfgnext = cfg; + } + } //Main if ends + + pthread_mutex_unlock(&mutex_cfg); + pthread_mutex_unlock(&mutex_file); + + write_cfg_to_file(); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION write_cfg_to_file(): */ +/* This function will perform the writing of iPDC Setup File. It will simply */ +/* delete the put the information in it by the all available objects. */ +/* ---------------------------------------------------------------------------- */ + +void write_cfg_to_file() +{ + int tmpi, indx, i, j; + unsigned int num_pmu,phn,ann,dgn; + unsigned char cline[MAX_STRING_SIZE]; + char tLine[50]; + char fileName[200]; + FILE *fp, *fp1; + + struct Lower_Layer_Details *temp_pmu; + struct Upper_Layer_Details *temp_pdc; + struct cfg_frame *cfg; + + pthread_mutex_lock(&mutex_file); + + if(cfgfirst != NULL) + { + fp = fopen(ipdcFilePath,"rb"); + + strcpy(fileName, ipdcFolderPath); + strcat(fileName, "/tempFile.bin"); + + fp1 = fopen(fileName, "wb"); + + for(tmpi=5; tmpi>0; tmpi--) + { + memset(tLine,'\0',sizeof(tLine)); + fgets (tLine, 50, fp); + + fputs(tLine, fp1); + } + + temp_pmu = malloc(sizeof(struct Lower_Layer_Details)); + + if(LLfirst != NULL) + { + temp_pmu = LLfirst; + tmpi = 0; + + while (temp_pmu != NULL) + { + tmpi++; + temp_pmu = temp_pmu->next; + } + + sprintf(tLine, "LowerDevices %d\n", tmpi); + fputs(tLine, fp1); + temp_pmu = LLfirst; + + while (temp_pmu != NULL) + { + fprintf(fp1,"%d",temp_pmu->pmuid); + fputc(',',fp1); + fprintf(fp1,"%s",temp_pmu->ip); + fputc(',',fp1); + fprintf(fp1,"%d",temp_pmu->port); + fputc(',',fp1); + fprintf(fp1,"%s",temp_pmu->protocol); + fputc('\n',fp1); + + temp_pmu = temp_pmu->next; + } + } + else + { + fputs("LowerDevices 0\n", fp1); + } + + + temp_pdc = malloc(sizeof(struct Upper_Layer_Details)); + + if(ULfirst != NULL) + { + temp_pdc = ULfirst; + tmpi = 0; + + while (temp_pdc != NULL) + { + tmpi++; + temp_pdc = temp_pdc->next; + } + sprintf(tLine, "UpperDevices %d\n", tmpi); + fputs(tLine, fp1); + temp_pdc = ULfirst; + + while (temp_pdc != NULL) + { + fprintf(fp1,"%s",temp_pdc->ip); + fputc(',',fp1); + fprintf(fp1,"%d",temp_pdc->port); + fputc(',',fp1); + fprintf(fp1,"%s",temp_pdc->protocol); + fputc('\n',fp1); + + temp_pdc = temp_pdc->next; + } + } + else + { + fputs("UpperDevices 0\n", fp1); + } + + cfg = malloc(sizeof(struct cfg_frame)); + + if(cfgfirst != NULL) + { + cfg = cfgfirst; + tmpi = 0; + + while (cfg != NULL) + { + tmpi++; + cfg = cfg->cfgnext; + } + sprintf(tLine, "SourcesCFG %d\n", tmpi); + fputs(tLine, fp1); + cfg = cfgfirst; + + while (cfg != NULL) + { + indx = 0; + + //Copy sync word to file + byte_by_byte_copy(cline,CFGSYNC,indx, 2); + indx = indx + 2; + + // Separate the FRAME SIZE + byte_by_byte_copy(cline, cfg->framesize, indx, 2); + indx = indx + 2; + + unsigned int framesize; + framesize = to_intconvertor(cfg->framesize); + printf("CFG-framesize %d\n",framesize); + + //SEPARATE IDCODE + byte_by_byte_copy(cline, cfg->idcode, indx, 2); + indx = indx + 2; + + int id = to_intconvertor(cfg->idcode); + printf("CFG-ID Code %d\n",id); + + //SEPARATE SOC + byte_by_byte_copy(cline, cfg->soc, indx, 4); + indx = indx + 4; + + //SEPARATE FRACSEC + byte_by_byte_copy(cline, cfg->fracsec, indx, 4); + indx = indx + 4; + + //SEPARATE TIMEBASE + byte_by_byte_copy(cline, cfg->time_base, indx, 4); + indx = indx + 4; + + //SEPARATE PMU NUM + byte_by_byte_copy(cline, cfg->num_pmu, indx, 2); + cfg->num_pmu[2] = '\0'; + indx = indx + 2; + + num_pmu = to_intconvertor(cfg->num_pmu); + printf("CFG-Number of PMU's %d\n",num_pmu); + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jpmu[j]->stn, indx, 16); + indx = indx + 16; + + // Memory Allocation for idcode + byte_by_byte_copy(cline, cfg->pmu[j]->idcode, indx, 2); + indx = indx + 2; + + // Memory Allocation for format + byte_by_byte_copy(cline, cfg->pmu[j]->data_format, indx, 2); + indx = indx + 2; + + // Memory Allocation for phnmr + byte_by_byte_copy(cline, cfg->pmu[j]->phnmr, indx, 2); + indx = indx + 2; + + phn = to_intconvertor(cfg->pmu[j]->phnmr); + + // Memory Allocation for annmr + byte_by_byte_copy(cline, cfg->pmu[j]->annmr, indx, 2); + indx = indx + 2; + + ann = to_intconvertor(cfg->pmu[j]->annmr); + + // Memory Allocation for dgnmr + byte_by_byte_copy(cline, cfg->pmu[j]->dgnmr, indx, 2); + indx = indx + 2; + + dgn = to_intconvertor(cfg->pmu[j]->dgnmr); + + printf("CGF consist Phasor %d Analogs %d Digitals %d\n",phn,ann,dgn); + + // Copy Phasor Names + i = 0; + while(i < phn) + { + byte_by_byte_copy(cline, cfg->pmu[j]->cnext->phnames[i], indx, 16); + indx = indx + 16; + i++; + } + + // Copy Analog Names + i = 0; + while(i < ann) + { + byte_by_byte_copy(cline, cfg->pmu[j]->cnext->angnames[i], indx, 16); + indx = indx + 16; + i++; + } + + // Copy Digital Names + i = 0; + while(i < dgn) + { + struct dgnames *temp_dgname = cfg->pmu[j]->cnext->first; + while (temp_dgname != NULL) { + + for(i = 0;i<16;i++) { + + byte_by_byte_copy(cline, temp_dgname->dgn[i], indx, 16); + indx = indx + 16; + } // Copy 16 channel names of digital word + + temp_dgname = temp_dgname->dg_next; + } // Go to next Digital word + i++; + } + + //Copy Phasor Units + i = 0; + while(i < phn) + { + byte_by_byte_copy(cline, cfg->pmu[j]->phunit[i], indx, 4); + indx = indx + 4; + i++; + } + + //Copy Analog Units + i = 0; + while(i < ann) + { + byte_by_byte_copy(cline, cfg->pmu[j]->anunit[i], indx, 4); + indx = indx + 4; + i++; + } + + //Copy Digital Units + i = 0; + while(i < dgn) + { + byte_by_byte_copy(cline, cfg->pmu[j]->dgunit[i], indx, 4); + indx = indx + 4; + i++; + } + + // Memory Allocation for fnom + byte_by_byte_copy(cline, cfg->pmu[j]->fnom, indx, 2); + indx = indx + 2; + + // Memory Allocation for cfg_cnt + byte_by_byte_copy(cline, cfg->pmu[j]->cfg_cnt, indx, 2); + indx = indx + 2; + + j++; + }//While for PMU number ends + + byte_by_byte_copy(cline, cfg->data_rate, indx, 2); + indx = indx + 2; + + uint16_t chk = compute_CRC(cline,indx); + cline[indx++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cline[indx++] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + + char buff[15]; + + sprintf(buff, "%d", framesize); + fputs(buff,fp1); + fputc('\n',fp1); + + fwrite(cline, sizeof(unsigned char),framesize,fp1); + fputc('\n',fp1); + + cfg = cfg->cfgnext; + } + } + else + { + fputs("SourcesCFG 0\n", fp1); + } + + free(temp_pmu); + free(temp_pdc); + free(cfg); + + fclose(fp); + fclose(fp1); + + if (remove(ipdcFilePath) == -1) + perror("Error in deleting a file"); + else + rename(fileName, ipdcFilePath); + } + + pthread_mutex_unlock(&mutex_file); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION dataparser(): */ +/* Parses the data frames and creates data objects. It searches for config- */ +/* uration objects that matches with the IDCODE and then creates data objects. */ +/* ---------------------------------------------------------------------------- */ + +int dataparser(unsigned char data[]) { + + int match=0,i,j=0; + int stat_status,config_change = 0; + unsigned int num_pmu,phnmr,annmr,dgnmr; + unsigned char framesize[3],idcode[3],stat[3],outer_stat[3],*d; + struct cfg_frame *temp_cfg; + struct data_frame *df; + + d = data; + d += 2; // Skip SYN + + //SEPARATE FRAMESIZE + copy_cbyc (framesize,d,2); + framesize[2]='\0'; + d += 2; + + //SEPARATE IDCODE + copy_cbyc (idcode,d,2); + idcode[2]='\0'; + + unsigned int id = to_intconvertor(idcode); + + pthread_mutex_lock(&mutex_cfg); + + temp_cfg = cfgfirst; + + // Check for the IDCODE in Configuration Frame + while(temp_cfg != NULL){ + + if(!ncmp_cbyc(idcode,temp_cfg->idcode,2)) { + + match = 1; + break; + + } else { + + temp_cfg = temp_cfg->cfgnext; + } + } + pthread_mutex_unlock(&mutex_cfg); + + // If idcode matches with cfg idcode + if(match){ + + //Allocate memory for data frame + df = malloc(sizeof(struct data_frame)); + + if(!df) { + + printf("Not enough memory df\n"); + exit(1); + } + df->dnext = NULL; + + // Allocate memory for df->framesize + df->framesize = malloc(3*sizeof(unsigned char)); + + if(!df->framesize) { + + printf("Not enough memory df->idcode\n"); + exit(1); + } + + // Allocate memory for df->idcode + df->idcode = malloc(3*sizeof(unsigned char)); + + if(!df->idcode) { + + printf("Not enough memory df->idcode\n"); + exit(1); + } + + // Allocate memory for df->soc + df->soc = malloc(5*sizeof(unsigned char)); + + if(!df->soc) { + + printf("Not enough memory df->soc\n"); + exit(1); + } + + // Allocate memory for df->fracsec + df->fracsec = malloc(5*sizeof(unsigned char)); + + if(!df->fracsec) { + + printf("Not enough memory df->fracsec\n"); + exit(1); + } + + // Allocate Memeory For Each PMU + num_pmu = to_intconvertor(temp_cfg->num_pmu); + d += 12; + + if(num_pmu > 1 ) { + + copy_cbyc (outer_stat,d,2); + + if((outer_stat[0] & 0x04) == 0x04) { + + add_id_to_status_change_list(idcode); //idcode = PMU/PDC + return 14; + } + } + + df->dpmu = malloc(num_pmu* sizeof(struct data_for_each_pmu *)); + + if(!df->dpmu) { + + printf("Not enough memory df->dpmu[][]\n"); + exit(1); + } + + for (i = 0; i < num_pmu; i++) { + + df->dpmu[i] = malloc(sizeof(struct data_for_each_pmu)); + } + + /* Now start separating the data from data frame - Copy Framesize */ + d -= 14; + copy_cbyc (df->framesize,d,2); + df->framesize[2] = '\0'; + d += 2; + + //Copy IDCODE + copy_cbyc (df->idcode,idcode,2); + df->idcode[2] = '\0'; + d += 2; + + //Copy SOC + copy_cbyc (df->soc,d,4); + df->soc[4] = '\0'; + d += 4; + + //Copy FRACSEC + copy_cbyc (df->fracsec,d,4); + df->fracsec[4] = '\0'; + d += 4; + + //Copy NUM PMU + df->num_pmu = num_pmu; + + if(num_pmu > 1 ) + d += 2; + + // Separate the data for each PMU + while(jdpmu[j]->stat = malloc(3*sizeof(unsigned char)); + + if(!df->dpmu[j]->stat) { + + printf("Not enough memory for df->dpmu[j]->stat\n"); + } + + copy_cbyc(df->dpmu[j]->stat,stat,2); + df->dpmu[j]->stat[2] = '\0'; + memset(stat,'\0',3); + j++; + continue; + + } else if((stat_status == 14)||(stat_status == 10)) { + + //Status for configuration bits have been changed. Add the pmu id to the 'status_change_pmupdcid linked list'. + add_id_to_status_change_list(idcode); //idcode = PMU/PDC + + // Allocate memory for stat + df->dpmu[j]->stat = malloc(3*sizeof(unsigned char)); + + if(!df->dpmu[j]->stat) { + + printf("Not enough memory for df->dpmu[j]->stat\n"); + } + + copy_cbyc(df->dpmu[j]->stat,stat,2); + df->dpmu[j]->stat[2] = '\0'; + memset(stat,'\0',3); + + config_change = stat_status; + j++; + continue; + } + + // Extract PHNMR, DGNMR, ANNMR + phnmr = to_intconvertor(temp_cfg->pmu[j]->phnmr); + annmr = to_intconvertor(temp_cfg->pmu[j]->annmr); + dgnmr = to_intconvertor(temp_cfg->pmu[j]->dgnmr); + + //Allocate memory for stat, Phasors, Analogs,Digitals and Phasors and Frequencies + /* Memory Allocation Begins */ + + // Allocate memory for stat + df->dpmu[j]->stat = malloc(3*sizeof(unsigned char)); + + if(!df->dpmu[j]->stat) { + + printf("Not enough memory for df->dpmu[j]->stat\n"); + } + + df->dpmu[j]->phasors = malloc(phnmr*sizeof(unsigned char *)); + + if(!df->dpmu[j]->phasors) { + + printf("Not enough memory df->dpmu[j]->phasors[][]\n"); + exit(1); + } + + if(temp_cfg->pmu[j]->fmt->phasor == '1') { + + for (i = 0; i < phnmr; i++) + + df->dpmu[j]->phasors[i] = malloc(9*sizeof(unsigned char)); + } else { + + for (i = 0; i < phnmr; i++) + + df->dpmu[j]->phasors[i] = malloc(5*sizeof(unsigned char)); + } + + + /* For Analogs */ + + df->dpmu[j]->analog = malloc(annmr*sizeof(unsigned char *)); + + if(!df->dpmu[j]->analog) { + + printf("Not enough memory df->dpmu[j]->analog[][]\n"); + exit(1); + } + + if(temp_cfg->pmu[j]->fmt->analog == '1') { + + for (i = 0; i < annmr; i++) + + df->dpmu[j]->analog[i] = malloc(9*sizeof(unsigned char)); + } else { + + for (i = 0; i < annmr; i++) + + df->dpmu[j]->analog[i] = malloc(5*sizeof(unsigned char)); + } + + /* For Frequency */ + if(temp_cfg->pmu[j]->fmt->freq == '1') { + + df->dpmu[j]->freq = malloc(5*sizeof(unsigned char)); + df->dpmu[j]->dfreq = malloc(5*sizeof(unsigned char)); + + } else { + + df->dpmu[j]->freq = malloc(3*sizeof(unsigned char)); + df->dpmu[j]->dfreq = malloc(3*sizeof(unsigned char)); + } + + /* For Digital */ + df->dpmu[j]->digital = malloc(dgnmr* sizeof(unsigned char*)); + + if(!df->dpmu[j]->digital) { + + printf("Not enough memory df->dpmu[j]->digital[][]\n"); + exit(1); + } + + for (i = 0; i < dgnmr; i++) { + + df->dpmu[j]->digital[i] = malloc(3*sizeof(unsigned char)); + } + /* Memory Allocation Ends */ + + //Check stat word of each PMU data block + copy_cbyc (df->dpmu[j]->stat,stat,2); + df->dpmu[j]->stat[2] = '\0'; + memset(stat,'\0',3); + + // Copy FMT + df->dpmu[j]->fmt = malloc(sizeof(struct format)); + df->dpmu[j]->fmt->freq = temp_cfg->pmu[j]->fmt->freq; + df->dpmu[j]->fmt->analog = temp_cfg->pmu[j]->fmt->analog; + df->dpmu[j]->fmt->phasor = temp_cfg->pmu[j]->fmt->phasor; + df->dpmu[j]->fmt->polar = temp_cfg->pmu[j]->fmt->polar; + + // Copy num of phasors analogs and digitals + df->dpmu[j]->phnmr = phnmr; + df->dpmu[j]->annmr = annmr; + df->dpmu[j]->dgnmr = dgnmr; + + //Phasors + if(temp_cfg->pmu[j]->fmt->phasor == '1') { + + for(i=0;idpmu[j]->phasors[i],d,8); + df->dpmu[j]->phasors[i][8] = '\0'; + d += 8; + } + } else { + + for(i=0;idpmu[j]->phasors[i],d,4); + df->dpmu[j]->phasors[i][4] = '\0'; + d += 4; + } + } + + /* For Freq */ + if(temp_cfg->pmu[j]->fmt->freq == '1') { + + copy_cbyc (df->dpmu[j]->freq,d,4); + df->dpmu[j]->freq[4] = '\0'; + d += 4; + + copy_cbyc (df->dpmu[j]->dfreq,d,4); + df->dpmu[j]->dfreq[4] = '\0'; + d += 4; + + } else { + + copy_cbyc (df->dpmu[j]->freq,d,2); + df->dpmu[j]->freq[2] = '\0'; + d += 2; + + copy_cbyc (df->dpmu[j]->dfreq,d,2); + df->dpmu[j]->dfreq[2] = '\0'; + d += 2; + } + + /* For Analogs */ + if(temp_cfg->pmu[j]->fmt->analog == '1') { + + for(i = 0; idpmu[j]->analog[i],d,4); + df->dpmu[j]->analog[i][4] = '\0'; + d += 4; + } + } else { + for(i = 0; idpmu[j]->analog[i],d,2); + df->dpmu[j]->analog[i][2] = '\0'; + d += 2; + } + } + + /* For Digital */ + for(i = 0; idpmu[j]->digital[i],d,2); + df->dpmu[j]->digital[i][2] = '\0'; + d += 2; + } + + j++; + } //While ends + + // Now start Time aligning and Sorting Operation for data_frame df + time_align(df); + + } else { + + //No match for configuration frame + printf("Configuration is not fresent for received data frame!\n"); + } + + if((config_change == 14) ||(config_change == 10)) + return config_change; + else + return stat_status; +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION check_statword(): */ +/* Check the STAT word of the data frames for any change in the data block. */ +/* Some of the prime errors are handled. */ +/* ---------------------------------------------------------------------------- */ + +int check_statword(unsigned char stat[]) { + + int ret = 0; + + /* Programmer has used these bits as an indication for PMU data that has not arrived */ + if(stat[1] == 0x0f) { + + ret = 16; + return ret; + + } else if ((stat[0] & 0x04) == 0x04) { + + printf("Configuration Change error\n"); + ret = 10; + return ret; + + } else if ((stat[0] & 0x40) == 0x40) { + + printf("PMU error may includ configuration error\n"); + ret = 14; + return ret; + + } else if((stat[0] & 0x80) == 0x80) { + + printf("Data invalid\n"); + ret = 15; + return ret; + + } else if ((stat[0] & 0x20) == 0x20) { + + printf("PMU Sync error\n"); + ret = 13; + return ret; + + } else if ((stat[0] & 0x10) == 0x10) { + + printf("Data sorting error\n"); + ret = 12; + return ret; + + } else if ((stat[0] & 0x08) == 0x08) { + + printf("PMU Trigger error\n"); + ret = 11; + return ret; + + } + + return ret; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_id_to_status_change_list(): */ +/* Status of data block has been changed. It adds the IDCODE of the PMU/PDC */ +/* from which the data block is received to the status_change_pmupdcid' LL */ +/* ---------------------------------------------------------------------------- */ + +void add_id_to_status_change_list(unsigned char idcode[]) { + + struct status_change_pmupdcid *t; + + t = malloc(sizeof(struct status_change_pmupdcid)); + + if(!t) { + + printf("No enough memory for struct (status_change_pmupdcid) t\n"); + } + + copy_cbyc(t->idcode,idcode,2); + t->idcode[2] = '\0'; + t->pmuid_next = NULL; + + pthread_mutex_lock(&mutex_status_change); + + if(root_pmuid == NULL) { + + t = root_pmuid; + + } else { + + struct status_change_pmupdcid *temp = root_pmuid; + while(temp->pmuid_next!=NULL) { + temp = temp->pmuid_next; + } + + temp->pmuid_next = t; + } + + pthread_mutex_unlock(&mutex_status_change); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_id_from_status_change_list(): */ +/* It removes the IDCODE of PMU/PDC from status_change_pmupdcid' LL */ +/* on receipt of configuration frame of corresponding PMU/PDC */ +/* ---------------------------------------------------------------------------- */ + +void remove_id_from_status_change_list(unsigned char idcode[]) { + + struct status_change_pmupdcid *tprev; + + pthread_mutex_lock(&mutex_status_change); + + if(root_pmuid == NULL) { + + printf("***No Stat change***\n"); + + } else { + + struct status_change_pmupdcid *temp = root_pmuid; + + while(temp != NULL) { + + if(!ncmp_cbyc(temp->idcode,idcode,2)) { + + break; + + } else { + + tprev = temp; + temp = temp->pmuid_next; + } + } + + // If It is the first element(root) in the list + if(!ncmp_cbyc(temp->idcode,root_pmuid->idcode,2)) { + + root_pmuid = root_pmuid->pmuid_next; + free(temp); + // If it is any element other than first(root) in the list + } else { + + tprev->pmuid_next = temp->pmuid_next; + free(temp); + } + } + pthread_mutex_unlock(&mutex_status_change); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_intconvertor(): */ +/* ---------------------------------------------------------------------------- */ + +unsigned int to_intconvertor(unsigned char array[]) { + + unsigned int n; + n = array[0]; + n <<= 8; + n |= array[1]; + return n; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION long_int_to_ascii_convertor(): */ +/* ---------------------------------------------------------------------------- */ + +void long_int_to_ascii_convertor(unsigned long int n,unsigned char hex[]) { + + hex[0] = n >> 24; + hex[1] = n >> 16; + hex[2] = n >> 8; + hex[3] = n ; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION int_to_ascii_convertor(): */ +/* ---------------------------------------------------------------------------- */ + +void int_to_ascii_convertor(unsigned int n,unsigned char hex[]) { + + hex[0] = n >> 8; + hex[1] = n ; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION copy_cbyc(): */ +/* ---------------------------------------------------------------------------- */ + +void copy_cbyc(unsigned char dst[],unsigned char *s,int size) { + + int i; + for(i = 0; i< size; i++) + dst[i] = *(s + i); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ncmp_cbyc(): */ +/* ---------------------------------------------------------------------------- */ + +int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size) { + + int i,flag = 0; + for(i = 0; i< size; i++) { + + if(dst[i] != src[i]) { + + flag = 1; + break; + } + } + return flag; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION byte_by_byte_copy(): */ +/* ---------------------------------------------------------------------------- */ + +void byte_by_byte_copy(unsigned char dst[],unsigned char src[],int index,int n) { + + int i; + for(i = 0;i>8)^message[i]; + crc<<=8; + quick=temp ^ ( temp >>4); + crc ^=quick; + quick<<=5; + crc ^=quick; + quick <<=7; + crc ^= quick; + } + return crc; +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/parser.h b/iPDC/parser.h new file mode 100755 index 0000000..d4ce901 --- /dev/null +++ b/iPDC/parser.h @@ -0,0 +1,169 @@ +/* ----------------------------------------------------------------------------- + * parser.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#define MAXBUFLEN 2000 + + +/* ---------------------------------------------------------------- */ +/* Data Structure prototypes */ +/* ---------------------------------------------------------------- */ + +/* ---------------------------------------------------------------- */ +/* Configuartion Frame Data Structure */ +/* ---------------------------------------------------------------- */ + +struct cfg_frame { + + unsigned char *framesize; + unsigned char *idcode; + unsigned char *soc; + unsigned char *fracsec; + unsigned char *time_base; + unsigned char *num_pmu; + struct for_each_pmu **pmu; + unsigned char *data_rate; + struct cfg_frame *cfgnext; + +}*cfgfirst; + + +struct for_each_pmu{ + + unsigned char *stn; + unsigned char *idcode; + unsigned char *data_format; + struct format *fmt; + unsigned char *phnmr; + unsigned char *annmr; + unsigned char *dgnmr; + struct channel_names *cnext; + unsigned char **phunit; + unsigned char **anunit; + unsigned char **dgunit; + unsigned char *fnom; + unsigned char *cfg_cnt; +}; + +struct channel_names { + + unsigned char **phnames; + unsigned char **angnames; + struct dgnames *first; +}; + +struct dgnames { + + unsigned char **dgn; // Stores 16 digital names for each word + struct dgnames *dg_next; +}; + +struct format{ + + unsigned char freq; + unsigned char analog; + unsigned char phasor; + unsigned char polar; +}; + + +/* ---------------------------------------------------------------- */ +/* Data Frame Data Structure */ +/* ---------------------------------------------------------------- */ + +struct data_frame { + + unsigned char *framesize; + unsigned char *idcode; + unsigned char *soc; + unsigned char *fracsec; + int num_pmu; + struct data_for_each_pmu **dpmu; + struct data_frame *dnext; +}; + +struct data_for_each_pmu { + + unsigned char *stat; + int phnmr; + int annmr; + int dgnmr; + struct format *fmt; + unsigned char **phasors; + unsigned char **analog; + unsigned char *freq; + unsigned char *dfreq; + unsigned char **digital; +}; + +/* ---------------------------------------------------------------- */ +/* Status change Data Structure */ +/* ---------------------------------------------------------------- */ + +struct status_change_pmupdcid { + + unsigned char idcode[3]; + struct status_change_pmupdcid *pmuid_next; + +}*root_pmuid; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void cfgparser(unsigned char []); + +void write_cfg_to_file(); + +int dataparser(unsigned char data[]); + +int check_statword(unsigned char stat[]); + +void add_id_to_status_change_list(unsigned char idcode[]); + +void remove_id_from_status_change_list(unsigned char idcode[]); + +unsigned int to_intconvertor(unsigned char []); + +void long_int_to_ascii_convertor(unsigned long int n,unsigned char hex[]); + +void int_to_ascii_convertor(unsigned int n,unsigned char hex[]); + +void copy_cbyc(unsigned char dst[],unsigned char *s,int size); + +int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size); + +void byte_by_byte_copy(unsigned char dst[],unsigned char src[],int index,int n); + +unsigned long int to_long_int_convertor(unsigned char array[]); + +uint16_t compute_CRC(unsigned char *message,int length); + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/recreate.c b/iPDC/recreate.c new file mode 100755 index 0000000..4b6c27b --- /dev/null +++ b/iPDC/recreate.c @@ -0,0 +1,879 @@ +/* ----------------------------------------------------------------------------- + * recreate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "connections.h" +#include "recreate.h" +#include "new_pmu_or_pdc.h" + +/* ------------------------------------------------------------------------------------ */ +/* Functions defined in recreate.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. recreate_cfg_objects() */ +/* 2. void init_cfgparser() */ +/* 3. void recreate_Connection_Table() */ +/* 4. void recreate_udp_connections(struct Lower_Layer_Details *t11) */ +/* 5. void recreate_tcp_connections(struct Lower_Layer_Details *t12) */ + +/* ------------------------------------------------------------------------------------ */ + + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_cfg_objects(): */ +/* It re-creates Configuration Objects from file cfg.bin if the ./server */ +/* program is stopped abruptly. It internally calls init_cfgparser() */ +/* ---------------------------------------------------------------------------- */ + + +void recreate_cfg_objects(){ + + /* ---------------------------------------------------------------- */ + /* Initialize Global Mutex Variable from global.h */ + /* ---------------------------------------------------------------- */ + + pthread_mutex_init(&mutex_file, NULL); + pthread_mutex_init(&mutex_cfg, NULL); + pthread_mutex_init(&mutex_status_change, NULL); + pthread_mutex_init(&mutex_Lower_Layer_Details, NULL); + pthread_mutex_init(&mutex_Upper_Layer_Details, NULL); + + CMDSYNC[0] = 0xaa; + CMDSYNC[1] = 0x41; + CMDSYNC[2] = '\0'; + + CMDCFGSEND[0] = 0x00; + CMDCFGSEND[1] = 0x05; + CMDCFGSEND[2] = '\0'; + + CMDDATASEND[0] = 0x00; + CMDDATASEND[1] = 0x02; + CMDDATASEND[2] = '\0'; + + CMDDATAOFF[0] = 0x00; + CMDDATAOFF[1] = 0x01; + CMDDATAOFF[2] = '\0'; + + DATASYNC[0] = 0xaa; + DATASYNC[1] = 0x01; + DATASYNC[2] = '\0'; + + CFGSYNC[0] = 0xaa; + CFGSYNC[1] = 0x31; + CFGSYNC[2] = '\0'; + + int yes =1; + + /* Create UDP socket for DB Server and bind to DBPORT */ + if ((DB_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + + perror("socket"); + exit(1); + + } else { + + printf("DB Socket:Sucessfully created\n"); + + } + if (setsockopt(DB_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + bzero(&DB_Server_addr,sizeof(DB_Server_addr)); + DB_Server_addr.sin_family = AF_INET; // host byte order + DB_Server_addr.sin_port = htons(DBPORT); // short, network byte order + DB_Server_addr.sin_addr.s_addr = inet_addr(dbserver_ip); // automatically fill with my IP + memset(&(DB_Server_addr.sin_zero),'\0', 8); // zero the rest of the struct + + unsigned char *line; + unsigned int framesize; + + int tempi; + char *rline = NULL, *d1; + ssize_t read; + size_t len = 0; + + /* Create CFG Objects from cfg.bin*/ + FILE *file = fopen (ipdcFilePath,"rb"); + + if(file != NULL) + { + tempi = 1; + + while(tempi < 7) //iPDCServer + { + read = getline(&rline, &len, file); + tempi++; + } + + if(read > 0) //LowerDevices + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + while (tempi > 0) + { + read = getline(&rline, &len, file); + tempi--; + } + } + + read = getline(&rline, &len, file); //UpperDevices + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + while (tempi > 0) + { + read = getline(&rline, &len, file); + tempi--; + } + } + + read = getline(&rline, &len, file); //SourcesCFG + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + if (tempi > 0) + { + getline(&rline, &len, file); + framesize = atoi(rline); + + line = malloc(framesize*sizeof(unsigned char)); + + fread(line, sizeof(unsigned char), framesize, file); + + init_cfgparser(line); + free(line); + + tempi--; + } + } + fclose (file); + } + else + { + printf("iPDC Setup File is missing, iPDC exit.\n"); + exit(1); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION init_cfgparser(): */ +/* It is called by recreate_cfg_object() to read the file `cfg.bin` */ +/* and create cfg objects in the memory */ +/* ---------------------------------------------------------------------------- */ + +void init_cfgparser(unsigned char st[]){ + + unsigned char *s; + unsigned int phn,ann,dgn,num_pmu; + int i,j,dgchannels; + struct cfg_frame *cfg; + struct channel_names *cn; + + + /******************** PARSING BEGINGS *******************/ + + cfg = malloc(sizeof(struct cfg_frame)); + + if(!cfg) { + + printf("Not enough memory for cfg\n"); + } + + s = st; + + /* Memory Allocation Begins - Allocate memory to framesize */ + cfg->framesize = malloc(3*sizeof(unsigned char)); + if(!cfg->framesize) { + printf("Not enough memory for cfg->framesize\n"); + } + + // Allocate memory to idcode + cfg->idcode = malloc(3*sizeof(unsigned char)); + if(!cfg->idcode) { + printf("Not enough memory for cfg->framesize\n"); + } + + // Allocate memory to soc + cfg->soc = malloc(5*sizeof(unsigned char)); + if(!cfg->soc) { + printf("Not enough memory for cfg->soc\n"); + } + + // Allocate memory to fracsec + cfg->fracsec = malloc(5*sizeof(unsigned char)); + if(!cfg->fracsec) { + printf("Not enough memory for cfg->fracsec\n"); + } + + // Allocate memory to time_base + cfg->time_base = malloc(5*sizeof(unsigned char)); + if(!cfg->time_base) { + printf("Not enough memory for cfg->time_base\n"); + } + + // Allocate memory to num_pmu + cfg->num_pmu = malloc(3*sizeof(unsigned char)); + if(!cfg->num_pmu) { + printf("Not enough memory for cfg->num_pmu\n"); + } + + // Allocate memory to data_rate + cfg->data_rate = malloc(3*sizeof(unsigned char)); + if(!cfg->data_rate) { + printf("Not enough memory for cfg->data_rate\n"); + } + + // Skip the sync word + s = s + 2; + + // Separate the FRAME SIZE + copy_cbyc (cfg->framesize,(unsigned char *)s,2); + cfg->framesize[2]='\0'; + s = s + 2; + + //SEPARATE IDCODE + copy_cbyc (cfg->idcode,(unsigned char *)s,2); + cfg->idcode[2]='\0'; + int id = to_intconvertor(cfg->idcode); + printf("ID Code %d\n",id); + s = s + 2; + + //SEPARATE SOC + copy_cbyc (cfg->soc,(unsigned char *)s,4); + cfg->soc[4]='\0'; + s = s + 4; + + //SEPARATE FRACSEC + copy_cbyc (cfg->fracsec,(unsigned char *)s,4); + cfg->fracsec[4]='\0'; + s = s + 4; + + //SEPARATE TIMEBASE + copy_cbyc (cfg->time_base,(unsigned char *)s,4); + cfg->time_base[4]='\0'; + s = s + 4; + + //SEPARATE PMU NUM + copy_cbyc (cfg->num_pmu,(unsigned char *)s,2); + cfg->num_pmu[2]='\0'; + s = s + 2; + + num_pmu = to_intconvertor(cfg->num_pmu); + printf("Number of PMU's = %d.\n",num_pmu); + + // Allocate Memeory For Each PMU + cfg->pmu = malloc(num_pmu* sizeof(struct for_each_pmu *)); + if(!cfg->pmu) { + printf("Not enough memory pmu[][]\n"); + exit(1); + } + + for (i = 0; i < num_pmu; i++) { + + cfg->pmu[i] = malloc(sizeof(struct for_each_pmu)); + } + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jpmu[j]->stn = malloc(17*sizeof(unsigned char)); + if(!cfg->pmu[j]->stn) { + printf("Not enough memory cfg->pmu[j]->stn\n"); + exit(1); + } + + // Memory Allocation for idcode + cfg->pmu[j]->idcode = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->idcode) { + printf("Not enough memory cfg->pmu[j]->idcode\n"); + exit(1); + } + + // Memory Allocation for format + cfg->pmu[j]->data_format = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->data_format) { + printf("Not enough memory cfg->pmu[j]->data_format\n"); + exit(1); + } + + // Memory Allocation for phnmr + cfg->pmu[j]->phnmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->phnmr) { + printf("Not enough memory cfg->pmu[j]->phnmr\n"); + exit(1); + } + + // Memory Allocation for annmr + cfg->pmu[j]->annmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->annmr) { + printf("Not enough memory cfg->pmu[j]->annmr\n"); + exit(1); + } + + // Memory Allocation for dgnmr + cfg->pmu[j]->dgnmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->dgnmr) { + printf("Not enough memory cfg->pmu[j]->dgnmr\n"); + exit(1); + } + + // Memory Allocation for fnom + cfg->pmu[j]->fnom = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->fnom) { + printf("Not enough memory cfg->pmu[j]->fnom\n"); + exit(1); + } + + // Memory Allocation for cfg_cnt + cfg->pmu[j]->cfg_cnt = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->cfg_cnt) { + printf("Not enough memory cfg->pmu[j]->cfg_cnt\n"); + exit(1); + } + + //SEPARATE STATION NAME + copy_cbyc (cfg->pmu[j]->stn,(unsigned char *)s,16); + cfg->pmu[j]->stn[16]='\0'; + s = s + 16; + + //SEPARATE IDCODE + copy_cbyc (cfg->pmu[j]->idcode,(unsigned char *)s,2); + cfg->pmu[j]->idcode[2]='\0'; + s = s + 2; + + //SEPARATE DATA FORMAT + copy_cbyc (cfg->pmu[j]->data_format,(unsigned char *)s,2); + cfg->pmu[j]->data_format[2]='\0'; + s = s + 2; + + // USE fmt + unsigned char hex = cfg->pmu[j]->data_format[1]; + hex <<= 4; + + // Extra field has been added to identify polar,rectangular,floating/fixed point + cfg->pmu[j]->fmt = malloc(sizeof(struct format)); + if((hex & 0x80) == 0x80) cfg->pmu[j]->fmt->freq = '1'; else cfg->pmu[j]->fmt->freq = '0'; + if((hex & 0x40) == 0x40 ) cfg->pmu[j]->fmt->analog = '1'; else cfg->pmu[j]->fmt->analog = '0'; + if((hex & 0x20) == 0x20) cfg->pmu[j]->fmt->phasor = '1'; else cfg->pmu[j]->fmt->phasor = '0'; + if((hex & 0x10) == 0x10) cfg->pmu[j]->fmt->polar = '1'; else cfg->pmu[j]->fmt->polar = '0'; + + //SEPARATE PHASORS + copy_cbyc (cfg->pmu[j]->phnmr,(unsigned char *)s,2); + cfg->pmu[j]->phnmr[2]='\0'; + s = s + 2; + phn = to_intconvertor(cfg->pmu[j]->phnmr); + + //SEPARATE ANALOGS + copy_cbyc (cfg->pmu[j]->annmr,(unsigned char *)s,2); + cfg->pmu[j]->annmr[2]='\0'; + s = s + 2; + ann = to_intconvertor(cfg->pmu[j]->annmr); + + //SEPARATE DIGITALS + copy_cbyc (cfg->pmu[j]->dgnmr,(unsigned char *)s,2); + cfg->pmu[j]->dgnmr[2] = '\0'; + s = s + 2; + dgn = to_intconvertor(cfg->pmu[j]->dgnmr); + printf("CFG consist Phasor = %d, Analogs = %d, and Digitals = %d.\n",phn,ann,dgn); + + cn = malloc(sizeof(struct channel_names)); + if(!cn) { + printf("Not enough memory cn\n"); + exit(1); + } + cn->first = NULL; + + ////SEPARATE PHASOR NAMES + if(phn != 0){ + + cn->phnames = malloc(phn*sizeof(unsigned char*)); + if(!cn->phnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < phn; i++) { + + cn->phnames[i] = malloc(17*sizeof(unsigned char)); + } + + i = 0;//Index for PHNAMES + + while(iphnames[i],(unsigned char *)s,16); + cn->phnames[i][16] = '\0'; + printf("Phnames %s\n",cn->phnames[i]); + s = s + 16; + i++; + } + } + + //SEPARATE ANALOG NAMES + if(ann!=0){ + cn->angnames = malloc(ann*sizeof(unsigned char*)); + if(!cn->angnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < ann; i++) { + + cn->angnames[i] = malloc(17*sizeof(unsigned char)); + } + + i=0;//Index for ANGNAMES + + while(iangnames[i],(unsigned char *)s,16); + cn->angnames[i][16]='\0'; + printf("ANGNAMES %s\n",cn->angnames[i]); + s =s + 16; + i++; + } + } + + i = 0; //Index for number of dgwords + struct dgnames *q; + + while(idgn = malloc(16*sizeof(unsigned char *)); + if(!temp1->dgn) { + printf("Not enough memory temp1->dgn\n"); + exit(1); + } + + for (i = 0; i < 16; i++) { + + temp1->dgn[i] = malloc(17*sizeof(unsigned char)); + } + + temp1->dg_next = NULL; + + for(dgchannels=0;dgchannels<16;dgchannels++){ + + copy_cbyc (temp1->dgn[dgchannels],(unsigned char *)s,16); + temp1->dgn[dgchannels][16]='\0'; + s += 16; + printf("%s\n",temp1->dgn[dgchannels]); + } + + if(cn->first == NULL){ + cn->first = q = temp1; + } else { + while(q->dg_next!=NULL){ + q = q->dg_next; + } + q->dg_next = temp1; + } + i++; + } //DGWORD WHILE ENDS + + cfg->pmu[j]->cnext = cn;//Assign to pointers + + ///PHASOR FACTORS + if(phn != 0){ + + cfg->pmu[j]->phunit = malloc(phn*sizeof(unsigned char*)); + if(!cfg->pmu[j]->phunit) { + printf("Not enough memory cfg->pmu[j]->phunit[][]\n"); + exit(1); + } + + for (i = 0; i < phn; i++) { + + cfg->pmu[j]->phunit[i] = malloc(5*sizeof(unsigned char)); + } + + i = 0; + + while(ipmu[j]->phunit[i],(unsigned char *)s,4); + cfg->pmu[j]->phunit[i][4] = '\0'; + s = s + 4; + i++; + } + }//if for PHASOR Factors ends + + //ANALOG FACTORS + if(ann != 0){ + + cfg->pmu[j]->anunit = malloc(ann*sizeof(unsigned char*)); + if(!cfg->pmu[j]->anunit) { + printf("Not enough memory cfg->pmu[j]->anunit[][]\n"); + exit(1); + } + + for (i = 0; i < ann; i++) { + + cfg->pmu[j]->anunit[i] = malloc(5*sizeof(unsigned char)); + + } + + i = 0; + + while(ipmu[j]->anunit[i],(unsigned char *)s,4); + cfg->pmu[j]->anunit[i][4] = '\0'; + s = s + 4; + i++; + } + + } // if for ANALOG Factors ends + + if(dgn != 0){ + + cfg->pmu[j]->dgunit = malloc(dgn*sizeof(unsigned char*)); + if(!cfg->pmu[j]->dgunit) { + printf("Not enough memory cfg->pmu[j]->dgunit[][]\n"); + exit(1); + } + + for (i = 0; i < dgn; i++) { + cfg->pmu[j]->dgunit[i] = malloc(5*sizeof(unsigned char)); + } + + i = 0; + + while(ipmu[j]->dgunit[i],(unsigned char *)s,4); + cfg->pmu[j]->dgunit[i][4] = '\0'; + s = s + 4; + i++; + } + } //if for Digital Words Factors ends + + copy_cbyc (cfg->pmu[j]->fnom,(unsigned char *)s,2); + cfg->pmu[j]->fnom[2]='\0'; + s = s + 2; + + copy_cbyc (cfg->pmu[j]->cfg_cnt,(unsigned char *)s,2); + cfg->pmu[j]->cfg_cnt[2] = '\0'; + s = s + 2; + j++; + }//While for PMU number ends + + copy_cbyc (cfg->data_rate,(unsigned char *)s,2); + cfg->data_rate[2] = '\0'; + cfg->cfgnext = NULL; + + if (cfgfirst == NULL) { + cfgfirst = cfg; + } else { + + struct cfg_frame *t=cfgfirst; + while(t->cfgnext != NULL){ + t = t->cfgnext; + } + t->cfgnext = cfg; + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_Connection_Table(): */ +/* It re-creates objects by reading the file ipdcINFO.bin.*/ +/* ---------------------------------------------------------------------------- */ + +void recreate_Connection_Table() { + + char line[40],*ip,*port,*protocol,*id; + char *rline = NULL, *d1; + int err, tempi; + FILE *f; + ssize_t read; + size_t len = 0; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + f = fopen(ipdcFilePath,"rb"); + tempi = 1; + + while(tempi < 7) + { + read = getline(&rline, &len, f); + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + if (tempi > 0) //1 if + { + printf("#### CONNECTION TABLE OF SOURCE DEVICES ####\n"); + printf("-----------------------------------------------------------------\n"); + printf("| PMU ID | Lower IP | Port | Protocol |\n"); + printf("-----------------------------------------------------------------\n"); + + while (tempi > 0) //2 while + { + read = getline(&rline, &len, f); + + /* Extract the ip and protocol */ + id = strtok (rline,","); + ip = strtok (NULL,","); + port = strtok (NULL,","); + protocol = strtok (NULL,"\n"); + protocol[3] = '\0'; + printf("|\t%d\t|%s\t|\t%d\t|\t%s\t|\n",atoi(id),ip,atoi(port),protocol); + + struct Lower_Layer_Details *temp_pmu; + + temp_pmu = malloc(sizeof(struct Lower_Layer_Details)); + if(!temp_pmu) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + + temp_pmu->pmuid = atoi(id); + strcpy(temp_pmu->ip,ip); + temp_pmu->port = atoi(port); + strcpy(temp_pmu->protocol,protocol); + temp_pmu->data_transmission_off = 0; + temp_pmu->pmu_remove = 0; + temp_pmu->request_cfg_frame = 0; + temp_pmu->next = NULL; + temp_pmu->prev = NULL; + + if(!strncasecmp(temp_pmu->protocol,"UDP",3)) { + + recreate_udp_connections(temp_pmu); + } + + if(!strncasecmp(temp_pmu->protocol,"TCP",3)) { + + recreate_tcp_connections(temp_pmu); + } + + memset(line,'\0',40); + tempi--; + } + printf("-----------------------------------------------------------------\n"); + + } else { + + printf("Source Devices Not Found.\n"); + } + } + + read = getline(&rline, &len, f); + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + if (tempi > 0) //1 if + { + printf("#### CONNECTION TABLE OF DESTINATION DEVICES ####\n"); + printf("-------------------------------------------------\n"); + printf("| Upper IP | Port | Protocol |\n"); + printf("-------------------------------------------------\n"); + + while (tempi > 0) //2 while + { + read = getline(&rline, &len, f); + + /* Extract the ip and protocol */ + ip = strtok (rline,","); + port = strtok (NULL,","); + protocol = strtok (NULL,"\n"); + protocol[3] = '\0'; + printf("|%s\t|\t%d\t|\t%s\t|\n",ip,atoi(port),protocol); + + struct Upper_Layer_Details *temp_pdc; + temp_pdc = malloc(sizeof(struct Upper_Layer_Details)); + if(!temp_pdc) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + + strcpy(temp_pdc->ip,ip); + temp_pdc->port = atoi(port); + strcpy(temp_pdc->protocol,protocol); + + bzero(&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)); + temp_pdc->pdc_addr.sin_family = AF_INET; + temp_pdc->pdc_addr.sin_addr.s_addr = inet_addr(temp_pdc->ip); + temp_pdc->pdc_addr.sin_port = htons(temp_pdc->port); + + memset(&(temp_pdc->pdc_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pdc->config_change = 0; + temp_pdc->UL_upper_pdc_cfgsent = 0; + temp_pdc->UL_data_transmission_off = 1; + temp_pdc->address_set = 0; + temp_pdc->tcpup = 1; + + if(ULfirst == NULL) { + + ULfirst = temp_pdc; + temp_pdc->prev = NULL; + + } else { + + ULlast->next = temp_pdc; + temp_pdc->prev = ULlast; + } + + ULlast = temp_pdc; + temp_pdc->next = NULL; + memset(line,'\0',40); + + tempi--; + } + printf("-------------------------------------------------\n"); + } else { + + printf("Destination Devices Not Found.\n"); + } + } + fclose(f); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_udp_connections(struct Lower_Layer_Details *t11): */ +/* ---------------------------------------------------------------------------- */ + +void recreate_udp_connections(struct Lower_Layer_Details *t11) { + + int err; + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_t t; + + if(pthread_create(&t,&attr,connect_pmu_udp,(void *)t11)) { + + perror(strerror(err)); + exit(1); + } +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_tcp_connections(struct Lower_Layer_Details *t12): */ +/* ---------------------------------------------------------------------------- */ + +void recreate_tcp_connections(struct Lower_Layer_Details *t12) { + + int err; + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_t t; + + if(pthread_create(&t,&attr,connect_pmu_tcp,(void *)t12)) { + perror(strerror(err)); + exit(1); + } +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/recreate.h b/iPDC/recreate.h new file mode 100755 index 0000000..e0c0be7 --- /dev/null +++ b/iPDC/recreate.h @@ -0,0 +1,44 @@ +/* ----------------------------------------------------------------------------- + * recreate.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * 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. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +void recreate_cfg_objects(); + +void init_cfgparser(unsigned char []); + +void recreate_Connection_Table(); + +void recreate_udp_connections(struct Lower_Layer_Details *t11); + +void recreate_tcp_connections(struct Lower_Layer_Details *t12); + +/**************************************** End of File *******************************************************/