diff options
author | Akira TAGOH <akira@tagoh.org> | 2010-01-26 00:09:33 +0900 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2010-01-26 00:09:33 +0900 |
commit | 07bdcd240d1261efb3bee68de3c0e755b4cc99b4 (patch) | |
tree | 1d82238e0137f5480705757df313986482e1cccf | |
parent | 4541f93d5a8fc66d9a129151571dd4dda9eaacf8 (diff) |
clean up
165 files changed, 0 insertions, 31216 deletions
diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 096cebf..0000000 --- a/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Akira TAGOH <at@gclab.org> diff --git a/COPYING b/COPYING deleted file mode 100644 index 2d2d780..0000000 --- a/COPYING +++ /dev/null @@ -1,510 +0,0 @@ - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations -below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it -becomes a de-facto standard. To achieve this, non-free programs must -be allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control -compilation and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at least - three years, to give the same user the materials specified in - Subsection 6a, above, for a charge no more than the cost of - performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply, and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License -may add an explicit geographical distribution limitation excluding those -countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser 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 Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms -of the ordinary General Public License). - - To apply these terms, attach the following notices to the library. -It is safest to attach them to the start of each source file to most -effectively convey the exclusion of warranty; and each file should -have at least the "copyright" line and a pointer to where the full -notice is found. - - - <one line to give the library's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or -your school, if any, to sign a "copyright disclaimer" for the library, -if necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James - Random Hacker. - - <signature of Ty Coon>, 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index fa1aba4..0000000 --- a/ChangeLog +++ /dev/null @@ -1,4345 +0,0 @@ -2009-05-11 Akira TAGOH <akira@tagoh.org> - - * hieroglyph/hgobject.c (_hg_object_new): Fix the alignment issue. - - * hieroglyph/hgstack.c (hg_stack_dump): Fix a warning on 64bit arch. - - * tests/hgobject.c (test_hg_object_sized_new): update the aligned size. - -2007-12-31 Akira TAGOH <akira@tagoh.org> - - * tests/Makefile.am (test_hgstack_SOURCES): use check library. - - * tests/hgstack.c: Add more testcases. - -2007-12-22 Akira TAGOH <akira@tagoh.org> - - * tests/hgstring.c: Add more testcases. - -2007-12-06 Akira TAGOH <akira@tagoh.org> - - * tests/hgdict.c: Add more testcases. - -2007-12-03 Akira TAGOH <akira@tagoh.org> - - * hieroglyph/hgobject.h (HG_OBJECT_REAL_IS_EQUAL_TO): new macro. - - * hieroglyph/hgobject.c (hg_object_name_compare_with_raw): new function. - (hg_object_name_n_compare_with_raw): new function. - - * hieroglyph/vm.c (hg_vm_new): have a flag to check if - the initialization is done. - (hg_vm_initialize): do nothing if the initialization is already done. - (hg_vm_finalize): finalize the VM. - - * hieroglyph/hgoperator.c (hg_object_operator_initialize): have a flag - to check if the initialization is done. - - * hieroglyph/hgdictprime.h (__hg_dict_primes): correct primes table. - - * tests/hgobject.c: Add more test cases. - -2007-12-02 Akira TAGOH <akira@tagoh.org> - - * hieroglyph/utils.c (hg_quiet_warning_messages): new function. - (hg_allow_warning_messages): new function. - - * tests/hgobject.c (test_hgobject_new): disable the warning messages - for some things that is intentional not to confuse. - (test_hg_object_dup): likewise. - - * tests/hgarray.c (test_hg_object_array_subarray_new): likewise. - -2007-11-27 Akira TAGOH <akira@tagoh.org> - - * update-version: trivial update. - - * hieroglyph/hgobject.c (_hg_object_new): Initialize the object type. - (hg_object_name_new): Initialize the unused value too. - - * hieroglyph/vm.c (hg_vm_get_current_allocation_mode): new function. - (hg_vm_set_current_allocation_mode): likewise. - (hg_vm_get_attributes): Follow the value for the allocation mode. - - * hieroglyph/hgdict.c (_hg_object_dict_insert): Fix a typo. - (hg_object_dict_new): Initialize the array area. - - * configure.ac (AC_INIT): Update the bug report address. - - * tests/hgdict.c: Add more test cases. - -2007-10-22 Akira TAGOH <akira@tagoh.org> - - * hieroglyph/hgarray.c (hg_object_array_new): initialize the array. - (hg_object_array_compare): consider the objects as the same if the same - address is given. - - * hieroglyph/hgobject.c (hg_object_compare): consider the objects as - the same if the same address is given. - - * tests/hgarray.c: add more test cases. - -2007-10-18 Akira TAGOH <akira@tagoh.org> - - * tests/Makefile.am: add more test cases. - - * hieroglyph/hgobject.c (hg_object_dup): initialize the return value with NULL. - -2007-09-18 Akira TAGOH <akira@tagoh.org> - - * hieroglyph/vm.c (hg_vm_stepi): new function to step one instruction exactly. - -2006-12-20 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgfile.c (hg_file_object_ungetc): fix a duplicate of - pushing back. - -2006-12-19 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgstring.c (hg_string_erase): new function. - - * hieroglyph/scanner.c (_hg_scanner_parse_number): fix a parser to - recognize a special character after numeric. - - * tests/ps/test-0base.ps: fix a typo. - - * plugins/test/test-main.c (_test_op_validateunittest): fix a typo. - -2006-12-03 Akira TAGOH <at@gclab.org> - - * hieroglyph/scanner.c (_hg_scanner_parse_number): remove - an unnecessary push back. - - * hieroglyph/hgstack.c (_hg_stack_real_set_flags): modify due to using - HgList instead of GList. - (_hg_stack_real_relocate): likewise. - (_hg_stack_real_dup): likewise. - (hg_stack_new): likewise. - (_hg_stack_push): likewise. - (hg_stack_pop): likewise. - (hg_stack_clear): likewise. - (hg_stack_index): likewise. - (hg_stack_roll): likewise. - (hg_stack_dump): likewise. - - * hieroglyph/hglist.c (hg_list_iter_get_index): new function. - (hg_list_iter_roll): new function. - -2006-11-21 Akira TAGOH <at@gclab.org> - - * hieroglyph/hglist.c (hg_list_get_iter_previous): new function. - (hg_list_get_iter_last): new function. - -2006-11-13 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_arc): fix a typo. - - * hieroglyph/hgfile.c (hg_file_object_ungetc): improve dealing with - ungetc. - - * hieroglyph/vm.c (hg_vm_get_save_level): just ask HgMemPool instead of - managing snapshot in VM. - - * hieroglyph/hgmem.c (hg_mem_pool_get_n_snapshots): new function. - (hg_mem_pool_get_snapshot): new function. - (hg_mem_pool_clear_snapshot): new function. - (hg_mem_pool_add_root_node): renamed. - (hg_mem_pool_remove_root_node): likewise. - (hg_mem_pool_add_pool_reference): likewise. - (hg_mem_pool_remove_pool_reference): likewise. - - * hieroglyph/ilist.c (_hg_list_iter_delete_link): fix a memory leak. - - * hieroglyph/scanner.c (_hg_scanner_parse_number): push back a space - to deal with it later. - -2006-11-12 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_init): remove GAllocator initialization - code. - (hg_mem_finalize): remove GAllocator finalization code. - (hg_mem_pool_destroy): use HgList instead of GList. - (hg_mem_pool_is_own_object): likewise. - (hg_mem_pool_save_snapshot): save an snapshot image to the list in pool. - (hg_mem_pool_get_age_of_snapshot): new function. - (_hg_mem_set_flags): new function. - (hg_mem_add_root_node): use HgList instead of GList. - (hg_mem_remove_root_node): likewise. - (hg_mem_add_pool_reference): likewise. - (hg_mem_remove_pool_reference): likewise. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_relocate): - use HgList instead of GList. - (_hg_allocator_bfit_real_set_flags): new function to avoid a fail of - restoring a snapshot when the unused complex objects are freed after - snapping shot, because snapshot image doesn't take care of mere - complex objects. - - (_hg_allocator_bfit_real_garbage_collection): - use HgList instead of GList. - (_hg_allocator_bfit_real_restore_snapshot): take an argument to adjust - the amount of objects for the fudge factor. - - * hieroglyph/hgmacros.h (HG_MEMOBJ_GET_SNAPSHOT_AGE): add a new macro. - (HG_MEMOBJ_SET_SNAPSHOT_AGE): add a new macro. - - * hieroglyph/hglist.c (hg_list_length): fixed an infinite loop issue. - (hg_list_remove): reimplement with iterator to be simplified. - - * hieroglyph/ilist.c (_hg_list_length): fixed an infinite loop issue. - (_hg_list_remove): reimplement with iterator to be simplified. - -2006-11-04 Akira TAGOH <at@gclab.org> - - * hieroglyph/vm.c (hg_vm_finalize): change the order of fnalization. - - * hieroglyph/hglog.c (hg_logv): don't use HgString to get it working - even when memory allocation error happens. - - * hieroglyph/vm.c (hg_vm_lookup): ues logger facility. - (hg_vm_lookup_with_string): likewise. - (hg_vm_set_error): likewise. - - * hieroglyph/hgplugins.c (_hg_plugin_load): use logger facility. - - * hieroglyph/hgmem.c (_hg_mem_init_stack_start): use logger facility. - (hg_mem_pool_new): likewise. - (hg_mem_gc_mark_array_region): likewise. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_garbage_collection): - use logger facility. - (_hg_allocator_bfit_real_gc_mark): likewise. - - * src/hgs.c (main): set flags from HIEROGLYPH_DEBUG environment - variable. - - * devices/cairo/hgdevice-cairo.c (_hg_cairo_device_print_path): - use logger facility. - (_hg_cairo_device_real_eofill): likewise. - (_hg_cairo_device_real_fill): likewise. - (_hg_cairo_device_real_stroke): likewise. - (_hg_cairo_device_set_matrix): likewise. - - * hieroglyph/vm.c (hg_vm_init): initialize logger facility. - (hg_vm_finalize): finalize logger. - - * hieroglyph/hglog.c (hg_log_set_flag): new function. - (hg_logv): allow to output a message without initialization. - -2006-10-22 Akira TAGOH <at@gclab.org> - - * hieroglyph/Makefile.am (libhieroglyph_la_SOURCES): added hglog.c. - - * hieroglyph/hglog.[ch]: new files for logger. - -2006-10-21 Akira TAGOH <at@gclab.org> - - * hieroglyph/vm.c (_hg_vm_op_rollbacksecuritylevel): ignore the errors. - -2006-10-18 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_exec): save the current - security level and rollback it after finished the object's execution. - - * hieroglyph/vm.c (_hg_vm_op_rollbacksecuritylevel): new function. - (hg_vm_set_security_level): implemented. - (hg_vm_get_security_level): implemented. - - * hieroglyph/operator.c (_hg_operator_op_countdictstack): - check VMerror. - (_hg_operator_op_countexecstack): likewise. - (_hg_operator_op_currentdict): likewise. - (_hg_operator_op_currentfile): likewise. - (_hg_operator_op_dup): likewise. - (_hg_operator_op_private_hg_getsecuritylevel): new function. - (_hg_operator_op_private_hg_setsecuritylevel): new function. - -2006-10-16 Akira TAGOH <at@gclab.org> - - * plugins/test/hg_unittest.ps (initunittest): erase a prompt. - (.updateunittestprogress): show a pinwheel. - -2006-10-15 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_restore): drop the save object - out of ostack if restore successfully complete. - - * hieroglyph/vm.c (hg_vm_startjob): allow an empty initializer to - just makes VM initialization. - - * src/hgs.c (main): add --sync option. - - * hieroglyph/hgfile.c (hg_file_io_synchronous): new function. - (hg_file_object_write): call fsync after writing according to - the current state of I/O synchronous. - - * hieroglyph/hgstring.c (hg_string_append_printf): new function. - (hg_string_append_vprintf): new function. - - * hieroglyph/hgdict.c (_hg_dict_traverse_set_flags): removed - the unnecessary debugging code. - -2006-10-12 Akira TAGOH <at@gclab.org> - - * tests/ps/test-exp.ps: new testcase. - - * tests/ps/test-ps.sh (run_test): new function. - - * hieroglyph/scanner.c (_hg_scanner_parse_number): fixed a typo. - - * hieroglyph/operator.c (_hg_operator_op_exit): throw /invalidexit - if it's going to jump stopped context. - (_hg_operator_op_private_hg_exit): new function to not check - /invalidexit for stopped. - - * lib/hg_init.ps (executive): use .exit instead of exit. - - * tests/ps/test-exec.ps: - * tests/ps/test-executeonly.ps: - * tests/ps/test-execstack.ps: - * tests/ps/test-eq.ps: - * tests/ps/test-exch.ps: - * tests/ps/test-exit.ps: - * tests/ps/testtest-exit.ps: new testcases. - -2006-10-11 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_eq): check /invalidaccess for - only name/string objects. - - * tests/ps/test-dup.ps: - * tests/ps/test-end.ps: - * tests/ps/test-dictstack.ps: - * tests/ps/test-div.ps: - * tests/ps/test-errordict.ps: - * tests/ps/test-eq.ps: new testcases. - - * tests/ps/test-dict.ps: new testcase. - - * hieroglyph/operator.c (_hg_operator_op_put): check /dictfull. - - * hieroglyph/scanner.c (_hg_scanner_get_object): exclude dict object - to make a readonly object. - - * hieroglyph/operator.c (_hg_operator_op_dict): detect /dictfull - if it's running on PS1 VM. - - * hieroglyph/hgdict.c (hg_dict_new): allow to create an empty dict. - - * plugins/test/hg_unittest.ps (.dotypecheck): fixed /dictfull error. - - * tests/ps/test-cvx.ps: - * tests/ps/test-def.ps: new testcases. - -2006-10-10 Akira TAGOH <at@gclab.org> - - * lib/hg_init.ps (cvs): better error handling. - - * tests/ps/test-cvs.ps: - * tests/ps/test-cvrs.ps: new testcases. - -2006-10-09 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_cvi): fixed not catching - an exception in some cases. - (_hg_operator_op_cvr): likewise. - - * tests/ps/test-cvr.ps: new testcase. - - * hieroglyph/scanner.c (_hg_scanner_get_object): shut up the warning. - - * hieroglyph/hgvaluenode.c (hg_value_node_compare_content): - extend to be able to compare the permissions as well. - - * hieroglyph/hgdict.c (_hg_dict_compare_on_traverse): likewise. - (hg_dict_compare): likewise. - - * hieroglyph/hgarray.c (hg_array_compare): likewise. - - * tests/ps/currentfile.ps: clean up. - - * tests/ps/test-cvn.ps: - * tests/ps/test-cvlit.ps: new testcases. - - * tests/ps/test-concatmatrix.ps: - * tests/ps/test-astore.ps: - * tests/ps/test-copy.ps: - * tests/ps/test-anchorsearch.ps: - * tests/ps/test-aload.ps: - * tests/ps/test-cvi.ps: add more testcases. - - * tests/ps/test-ps.sh: run with the quiet mode. - - * plugins/test/hg_unittest.ps (setunittestmask): new proc. - - * plugins/test/test-main.c (_test_op_validateunittest): compare - the permissions too. - - * tests/ps/test-0base.ps: new testcase. - - * hieroglyph/operator.c (_hg_operator_op_cvi): check the overflow. - - * hieroglyph/scanner.c (_hg_scanner_get_object): split up the numeral - parser. - (_hg_scanner_parse_number): new function. - - * hieroglyph/Makefile.am (libhieroglyph_private_SOURCES): - add iarray.[ch]. - - * hieroglyph/iarray.[ch]: new files. - -2006-10-08 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_add): correct the overflow - checking. - - * tests/ps/test-add.ps: add more testcases. - -2006-10-05 Akira TAGOH <at@gclab.org> - - * tests/ps/test-ps.sh: change the current dir during testing to ensure - the expected behavior. - - * tests/ps/test-count.ps: - * tests/ps/test-countdictstack.ps: - * tests/ps/test-counttomark.ps: - * tests/ps/test-currentdict.ps: - * tests/ps/test-currentfile.ps: - * tests/ps/testtest-currentfile.ps: new testcases. - - * hieroglyph/hgvaluenode.h (HG_VALUE_REAL_SIMILAR): need to decrease - the precision to ensure "90 cos" is 0. - - * hieroglyph/hgvaluenode.c (hg_value_node_compare_content): use macro. - - * plugins/test/hg_unittest.ps (.dotypecheck): reflect the result to - dict. - -2006-09-24 Akira TAGOH <at@gclab.org> - - * tests/ps/test-copy.ps: new testcase. - - * hieroglyph/operator.c (_hg_operator_op_concatmatrix): - create new node to store the result. array may has the same instance - for node. - (_hg_operator_op_copy): fixed a typo. and check /typecheck first. - - * plugins/test/hg_unittest.ps (.dotypecheck): create another file - object to avoid any breakages. - - * tests/ps/test-ceiling.ps: - * tests/ps/test-clear.ps: - * tests/ps/test-cleartomark.ps: - * tests/ps/test-closefile.ps: - * tests/ps/test-concatmatrix.ps: new testcases. - - * hieroglyph/hgplugins.c (_hg_plugin_load): silence the debug output. - - * tests/ps/test-and.ps: - * tests/ps/test-array.ps: - * tests/ps/test-astore.ps: - * tests/ps/test-atan.ps: - * tests/ps/test-begin.ps: - * tests/ps/test-bind.ps: - * tests/ps/test-bitshift.ps: new testcases. - - * hieroglyph/hgarray.c (hg_array_set_name): don't free array->name - here. it may be likely that older objects in snapshot may still refers - to it. - - * hieroglyph/hgstring.c (hg_string_new): fixed the uninitialized value. - - * plugins/debug/debug-main.c (_debug_op_breakpoint): new function. - - * lib/hg_init.ps (anchorsearch): fixed wrong return value. - treat /rangecheck as /stackunderflow when it happens in index or roll. - - * tests/ps/test-aload.ps: new testcase. - - * tests/ps/test-anchorsearch.ps: new testcase. - - * plugins/test/hg_unittest.ps (typecheck): new procedure to test - if /typecheck happens. - (.dotypecheck): new. - -2006-09-23 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_add): fixed a overflow. - - * hieroglyph/hgvaluenode.c (hg_value_node_compare): use macro. - - * tests/ps/test-add.ps: new test case. - - * src/hgs.c (main): returns an error code. - - * plugins/test/hg_unittest.ps (unittestresult): stop with an error code - when unit test failed. - -2006-09-20 Akira TAGOH <at@gclab.org> - - * tests/ps/test-ps.sh: depends on hgs instead of pse. - - * tests/ps/Makefile.am (check): run test-ps.sh. - - * plugins/test/hg_unittest.ps (initunittest): new proc. - (unittest): updated the result in dict. - (unittestresult): new proc. - - * hieroglyph/hgmem.h (hg_mem_set_dead): new macro. - (hg_mem_unset_dead): likewise. - (hg_mem_is_dead): likewise. - - * hieroglyph/hgallocator-bfit.c (_hg_bfit_snapshot_chunk_new): - new function. - (_hg_bfit_snapshot_chunk_free): new function. - (_hg_allocator_bfit_real_save_snapshot): implemented. - (_hg_allocator_bfit_real_restore_snapshot): implemented. - (_hg_allocator_bfit_real_resize): set a HG_FL_DEAD flag instead of - hg_mem_free(). - (_hg_allocator_bfit_snapshot_real_free): implemented. - (_hg_allocator_bfit_snapshot_real_set_flags): implemented. - -2006-09-18 Akira TAGOH <at@gclab.org> - - * hieroglyph/vm.c (_hg_vm_set_error): replace *POINTER to *OPERATOR. - (_hg_vm_set_error_from_file): likewise. - (hg_vm_init): makes a VM memory pool to be a local pool. - - * hieroglyph/scanner.c (_hg_scanner_set_error): likewise. - - * plugins/test/test-main.c (REMOVE_OP): replace *POINTER to *OPERATOR. - - * plugins/debug/debug-main.c (REMOVE_OP): likewise. - - * plugins/libedit/libedit-main.c (REMOVE_OP): likewise. - - * hieroglyph/operator.[ch]: likewise. - - * hieroglyph/hgvaluenode.[ch]: use separate structure instead of union. - (_hg_value_node_register_type): new function. - (hg_value_node_init): new function. - (hg_value_node_finalize): new function. - (hg_value_node_register_type): new function. - (hg_value_node_get_type_name): new function. - - * src/hgspy.c (_hgspy_vm_thread): likewise. - - * src/hgs.c (_hgs_arg_load_plugin_cb): reflect a return value from - hg_vm_load_plugin(). - -2006-09-09 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgallocator-private.h (HG_MEM_POOL_FLAGS_GET_FLAGS): - new macro. - (HG_MEM_POOL_GET_FLAGS): likewise. - (HG_MEM_POOL_SET_FLAGS): likewise. - (HG_MEM_POOL_FLAGS_HAS_FLAGS): likewise. - (HG_MEM_POOL_HAS_FLAGS): likewise. - - * hieroglyph/hgmem.c (hg_mem_pool_new): take bitwise flags. - (hg_mem_pool_use_global_mode): removed. - -2006-09-06 Akira TAGOH <at@gclab.org> - - * src/hgs.c (_hgs_arg_define_cb): implemented. - (_hgs_arg_load_plugin_cb): simplified. - (main): added --device option. - -2006-09-05 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.h (hg_mem_is_flags__inline): use - hg_mem_is_gc_mark__inline if it goes to be marked for GC. - (hg_mem_set_flags__inline): don't inherit the age of gc mark to - the children. - - * hieroglyph/hgmem.c (hg_mem_pool_get_age_of_mark): new function. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_garbage_collection): - show the age of gc mark for debugging purpose. - - * hieroglyph/hgvaluenode.c (hg_value_node_debug_print): show the age of - gc mark for debugging purpose. - - * hieroglyph/hgfile.c (hg_file_object_read): trivial warning message fix. - (hg_file_object_write): likewise. - (hg_file_object_getc): likewise. - - * hieroglyph/hgarray.c (hg_array_make_subarray): make an empty array - if end_index is out of range. - - * hieroglyph/operator.c (_hg_operator_op_search): just call - hg_string_make_substring. - - * hieroglyph/hgstring.c (hg_string_make_substring): make an empty - string if end_index is out of range. - - * hieroglyph/operator-private.h: moved macros from operator.c - - * hieroglyph/vm.c (_hg_vm_eval_file): reflect an error result from - $error dict. - - * hieroglyph/hgplugins.c (hg_plugin_load): output an warning - if load failed. - - * plugins/test/test-main.c (plugin_load): load will be failed - if any errors happened during loading hg_unittest.ps. - - * hieroglyph/vm.c (hg_vm_startjob): no need to enter in the loop - if the file is given. - (_hg_vm_eval_file): set FALSE if no errors happened. - -2006-09-04 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgdict.c: use HgList instead of GList. - (_hg_dict_node_free): removed. - (_hg_dict_real_free): removed. - (_hg_dict_traverse_relocate): removed. - - * hieroglyph/hgallocator-libc.[ch]: removed. - - * hieroglyph/hgallocator-bfit.c: use HgList instead of GSList. - (_hg_allocator_bfit_btree_traverse_in_destroy): removed. - (_hg_allocator_bfit_real_initialize): libc pool is no longer needed. - (_hg_allocator_bfit_real_free_block_traverse): new function. - - * hieroglyph/ilist.c (_hg_list_free): check NULL. - (_hg_list_iter_delete_link): fixed a memory leak. - - * hieroglyph/hggraphics.c (hg_graphics_new): fixed uninitialized value. - - * hieroglyph/ilist.h (hg_list_free): new macro. - - * hieroglyph/ilist.[ch]: new files. - - * hieroglyph/ibtree.[ch]: new files. - - * hieroglyph/hglist.c (_hg_list_iter_real_set_data): new function. - (hg_list_init): new function. - (hg_list_finalize): new function. - (hg_list_first): new function. - (hg_list_last): new function. - (hg_list_iter_new): use own memory pool to avoid an allocation failure, - because it's quite likely so that it's used under set_flags where could - be invoked during GC. - (hg_list_iter_get_data): renamed. - (hg_list_iter_set_data): new function. - (hg_list_iter_set_object): new function. - (hg_list_iter_delete_link): new function. - (hg_list_find_iter): new function. - (hg_list_find_iter_custom): new function. - - * hieroglyph/vm.c (_hg_vm_eval_file): allow NULL to not want to get - an error result. - - * src/hgspy.c (_hgspy_quit_cb): try to shutdown VM. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_remove_block): - - * hieroglyph/operator.c (_hg_operator_real_set_flags): fixed outdated - function call. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_initialize): - disable the unsuported features. - (_hg_allocator_bfit_real_garbage_collection): output more debugging - info. - - * src/hgspy_helper.c (hg_mem_alloc_with_flags): fixed a segfault issue. - -2006-09-03 Akira TAGOH <at@gclab.org> - - * hieroglyph/hglist.[ch]: new files. - - * hieroglyph/hgbtree.c (_hg_btree_page_real_set_flags): stop marking - if marking is disabled by request. - (_hg_btree_page_real_relocate): likewise. - (hg_btree_allow_marking): new function. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_initialize): - disallow marking to avoid warnings so that the stored values aren't - any hieroglyph objects. - - * hieroglyph/hgarray.c (_hg_array_real_set_flags): stop marking - if the object is already marked. - -2006-08-28 Akira TAGOH <at@gclab.org> - - * hieroglyph/Makefile.am (hginclude_HEADERS): added hgallocator-libc.h - (libhieroglyph_la_SOURCES): added hgallocator-libc.c - - * hieroglyph/hgbtree.c (_hg_btree_page_real_free): new function. - (_hg_btree_page_real_set_flags): new function. - (_hg_btree_page_real_relocate): new function. - (_hg_btree_real_free): new function. - (_hg_btree_real_set_flags): new function. - (_hg_btree_real_relocate): new function. - - * hieroglyph/hgallocator-libc.[ch]: new files. - - * hieroglyph/hgdict.c (_hg_dict_real_free): modified to use new HgBTree - that is now managed under the hieroglyph mm. - (_hg_dict_real_set_flags): likewise. - (_hg_dict_real_relocate): likewise. - (hg_dict_new): likewise. - - * hieroglyph/hgmem.c (hg_mem_init): use GHashTable instead of HgBTree. - it can't be used before hg_mem_init finished. - (hg_mem_finalize): modified to use GHashTable. - (hg_object_set_vtable): likewise. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_initialize): - modified to use HgBTree that is now managed under the hieroglyph mm. - (_hg_allocator_bfit_real_destroy): likewise. - -2006-08-27 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_private_hg_filelibfile): - push a filename into the stack even if no files found. - - * hieroglyph/vm.c (hg_vm_startjob): add an error handler - when the external file is being invoked. - (hg_vm_set_error_from_file): just ignore an error code 0. - - * hieroglyph/hglineedit.c (_hg_line_edit__default_get_line): - return NULL if EBADF happens. - - * lib/hg_init.ps (runlibfile): trivial fix. - - * README: updated. - -2006-08-25 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgstack.c (hg_stack_roll): trivial fix. - -2006-08-23 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgstack.c (hg_stack_roll): fixed a segfault issue. - - * configure.ac: disable -Werror when not specifying - --enable-maintainer-mode. - -2006-08-22 Akira TAGOH <at@gclab.org> - - * lib/hg_init.ps (StandardEncoding): implemented. - - * hieroglyph/operator.c (_hg_operator_op_bind): ignore the writable check - during initialization. - - * hieroglyph/vm.c (hg_vm_set_io): reflect the IO changes to HgLineEdit. - (hg_vm_startjob): just changes the IO with an initializer. - - * hieroglyph/hglineedit.c (_hg_line_edit_real_set_flags): new function. - (_hg_line_edit_real_relocate): new function. - (_hg_line_edit__default_get_line): use HgFileObject instead of using low APIs. - (hg_line_edit_set_stdin): new function. - (hg_line_edit_set_stdout): new function. - - * lib/hg_init.ps (start): implemented. - not entered into the loop here. - -2006-08-20 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgplugins.c (hg_plugin_unload): fixed a typo. - (hg_plugin_open): trivial improvement. - - * hieroglyph/vm.c (hg_vm_main): make sure that VM isn't going to shut - down. - - * hieroglyph/operator.c (_hg_operator_op_private_hg_quit): - new function. - - * hieroglyph/vm.c (hg_vm_get_error_code): new function. - (hg_vm_set_error_code): likewise. - (hg_vm_shutdown): likewise. - - * lib/hg_init.ps (quit): implemented in PostScript. - -2006-08-19 Akira TAGOH <at@gclab.org> - - * lib/hg_init.ps (load): implemented in PostScript. - - * hieroglyph/operator.c (hg_operator_level1_init): removed anchorsearch - implementation. - (_hg_operator_op_load): removed. - - * lib/hg_init.ps (anchorsearch): implemented in PostScript. - - * hieroglyph/operator.c (_hg_operator_op_private_hg_undef): - implemented. - - * lib/hg_init_lv2.ps (undef): defined. - - * lib/hg_init.ps: undef .forceput and .odef. - - * hieroglyph/hgarray.c (hg_array_set_name): new function. - (hg_array_get_name): new function. - - * hieroglyph/operator.c (_hg_operator_op_private_hg_odef): - new function. - (_hg_operator_op_private_hg_forceput): ignore even readonly flag. - - * hieroglyph/scanner.c (_hg_scanner_get_object): disabled making - an readonly object during initialization. - - * hieroglyph/vm.c (hg_vm_set_error): dumps stacks if no handler - available. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_to_string): return - the array name instead of -array- if it has. - (hg_value_node_debug_print): fixed a segfault issue. - - * lib/hg_init.ps (odef): improved to deal with the error recovery. - -2006-08-18 Akira TAGOH <at@gclab.org> - - * tests/ps/test-abs.ps: new file. - - * tests/ps/test-ps.sh: try to test the PostScript file on the same - directory to the test runner. - - * plugins/test/hg_unittest.ps: fixed a typo. - - * hieroglyph/hgarray.c (hg_array_compare): new function. - - * hieroglyph/hgbtree.c (hg_btree_page_foreach): breaks the loop - if the function returns false. - - * hieroglyph/hgdict.c (_hg_dict_compare_on_traverse): new function. - (hg_dict_compare): new function. - - * hieroglyph/hgvaluenode.c (hg_value_node_compare_content): - new function. - - * tests/ps/Makefile.am: new file. - - * tests/ps/test-ps.sh: new file. - - * plugins/test/test-main.c (_test_op_validateunittest): use - hg_value_node_compare_content instead of hg_value_node_compare. - - * hieroglyph/operator.c (_hg_operator_op_private_hg_findlibfile): - new function. - - * hieroglyph/vm.c (hg_vm_find_libfile): new function. - - * lib/hg_init.ps (runlibfile): implemented. - - * tests/run.sh: inherit HIEROGLYPH_LIB_PATH. - - * plugins/test/hg_unittest.ps: new file. - - * plugins/test/Makefile.am (hgpslib_DATA): add hg_unittest.ps. - - * plugins/test/test-main.c (_test_op_validateunittest): new function. - (plugin_init): implemented. - (plugin_load): implemented. - (plugin_unload): implemented. - - * hieroglyph/operator.c (_hg_operator_op_for): check the executeonly - flag. - (_hg_operator_op_forall): likewise. - (_hg_operator_op_if): likewise. - (_hg_operator_op_ifelse): likewise. - (_hg_operator_op_loop): likewise. - (_hg_operator_op_repeat): likewise. - (_hg_operator_op_stopped): likewise. - -2006-08-16 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_search): implemented. - - * hieroglyph/hgstring.c (hg_string_compare_offset_later): new function. - (hg_string_ncompare_offset_later): new function. - (hg_string_ncompare): just return false if length is greater than - the source length. - (hg_string_compare_with_raw): likewise. - - * src/hgspy.c (_hgspy_file_close_cb): new function. - - * hieroglyph/hgfile.c (hg_file_object_is_closed): new function. - - * hieroglyph/operator.c (_hg_operator_op_status): implemented. - -2006-08-15 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_token): implemented. - - * hieroglyph/hgfile.c (hg_file_object_seek): reflect ungetc. - - * hieroglyph/scanner.h (_hg_scanner_isspace): new macro. - - * hieroglyph/hgstring.c (hg_string_copy_as_substring): refer to current - substring offset to not break a substring when making from substring. - - * hieroglyph/hgarray.c (hg_array_copy_as_subarray): refer to current - subarray offset to not break a subarray when making from subarray. - - * hieroglyph/operator.c (_hg_operator_op_put): improved to detect - /invalidaccess. - - * hieroglyph/vm.c (hg_vm_is_global_object): new function. - - * hieroglyph/hgvaluenode.h (HG_VALUE_SET_ARRAY): inherited a complex - mark to find it easily. - (HG_VALUE_SET_STRING): likewise. - (HG_VALUE_SET_DICT): likewise. - (HG_VALUE_SET_POINTER): likewise. - (HG_VALUE_SET_FILE): likewise. - (HG_VALUE_SET_SNAPSHOT): likewise. - (HG_VALUE_MAKE_ARRAY): likewise. - (HG_VALUE_MAKE_STRING): likewise. - (HG_VALUE_MAKE_DICT): likewise. - (HG_VALUE_MAKE_POINTER): likewise. - (HG_VALUE_MAKE_FILE): likewise. - (HG_VALUE_MAKE_SNAPSHOT): likewise. - (hg_value_node_inherit_complex): new macro. - (hg_value_node_has_complex_object): likewise. - - * lib/hg_init.ps (store): implemented. - - * hieroglyph/hgfile.c (hg_file_object_new): marked as complex object. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_save_snapshot): - likewise. - - * hieroglyph/operator.c (_hg_operator_op_writehexstring): implemented. - (_hg_operator_op_write): implemented. - -2006-08-14 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_readline): have to check EOF - after reading a character. - (_hg_operator_op_readstring): implemented. - (_hg_operator_op_round): implemented. - (_hg_operator_or_xor): implemented. - - * src/hgspy.c (_hgspy_update_vm_status): use macro. - - * hieroglyph/hgvaluenode.c (hg_value_node_debug_print): use macro - instead of casting directly. - - * configure.ac: don't stop configure process even if libedit isn't - installed. - - * plugins/Makefile.am (SUBDIRS): built without libedit plugin - if it's not available. - - * hieroglyph/vm.c (_hg_vm_eval_file): new function. - (hg_vm_set_ostack): new function. - (hg_vm_set_estack): make it as a private function. - (hg_vm_set_dstack): new function. - (hg_vm_eval): new function. - - * lib/hg_init.ps: don't invoke if .loadhistory and .savehistory isn't - available. - - * plugins/libedit/libedit-main.c (_libedit_op_loadhistory): moved from - operator.c. - (_libedit_op_statementedit): likewise. - (_libedit_op_savehistory): likewise. - -2006-08-13 Akira TAGOH <at@gclab.org> - - * hieroglyph/scanner.c (_hg_scanner_get_object): '\r', '\n' and '\r\n' - has to be escaped by '\'. - - * hieroglyph/operator.c (_hg_operator_op_readhexstring): - check the access attributes. - - * hieroglyph/hglineedit.c (_hg_line_edit__default_get_line): - implemented. - -2006-08-10 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_file): give a HgLineEdit - for %lineedit. - (_hg_operator_op_readhexstring): implemented. - - * hieroglyph/hgstring.c (_hg_string_real_to_string): mask a character - to get a char exactly. - -2006-08-03 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_cvn): inherited - the executeonly. - - * hieroglyph/hgmem.h (hg_object_is_accessible): new macro. - - * hieroglyph/hgmem.c (hg_mem_pool_new): changed the default access - mode. - - * hieroglyph/operator.c (_hg_operator_op_exec): check executeonly flag. - (_hg_operator_op_executeonly): implemented. - (_hg_operator_op_noaccess): use hg_object_inaccessible. - - * hieroglyph/vm.c (hg_vm_main): set the same flags from string to file. - - * hieroglyph/hgmem.h (hg_object_inexecutable): renamed from - hg_object_unexecutable. - (hg_object_executeonly): new macro. - (hg_object_is_executeonly): new macro. - (hg_object_inaccessible): new macro. - -2006-08-02 Akira TAGOH <at@gclab.org> - - * plugins/debug/Makefile.am (LIBS): removed the unnecessary dependency. - - * hieroglyph/operator.c (hg_operator_hieroglyph_init): removed - .startgc definition. - (_hg_operator_op_private_hg_startgc): removed. - - * plugins/Makefile.am (SUBDIRS): added debug subdir. - - * plugins/debug/debug-main.c: new file. - - * plugins/debug/Makefile.am: new file. - - * hieroglyph/operator.h (_hg_operator_build_operator): moved from - operator.c. - (BUILD_OP): likewise. - (BUILD_OP_): likewise. - (hg_operator_build_operator__inline): new macro. - -2006-07-26 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_ln): implemented. - (_hg_operator_op_log): implemented. - (_hg_operator_op_readonly): implemented. - -2006-07-24 Akira TAGOH <at@gclab.org> - - * lib/hg_init.ps (matrix): use identmatrix instead of - the own C function. - - * hieroglyph/operator.c (_hg_operator_op_identmatrix): implemented. - (_hg_operator_op_matrix): moved into lib/hg_init.ps. - - * hieroglyph/hgfile.c (hg_file_object_flush): changed the behavior for - read mode. - - * hieroglyph/operator.c (_hg_operator_op_flushfile): implemented. - -2006-07-23 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_cvrs): implemented. - - * hieroglyph/hgstring.c (hg_string_convert_from_integer): new function. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_to_string): suppressed - the unnecessary zeros. - -2006-07-18 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_cvr): implemented. - (_hg_operator_op_copy): fixed to not include a invalid character in - a substring. - - * tests/ps/currentfile.ps: new file. - - * hieroglyph/operator.c (_hg_operator_op_closefile): implemented. - (_hg_operator_op_currentfile): implemented. - (_hg_operator_op_readline): implemented. - - * hieroglyph/hgfile.c (_hg_file_object_real_free): use - hg_file_object_close instead of handling a close process directly. - (hg_file_object_close): new function. - - * src/hgspy.c (_hgspy_file_close_cb): new function. - - * hieroglyph/operator.c (_hg_operator_op_bytesavailable): implemented. - (_hg_operator_op_ceiling): implemented. - - * hieroglyph/hgfile.c (hg_file_object_seek): new function. - (hg_file_object_is_readable): new function. - (hg_file_object_is_writable): new function. - - * src/hgspy.c (_hgspy_file_seek_cb): new function. - -2006-07-17 Akira TAGOH <at@gclab.org> - - * hieroglyph/operator.c (_hg_operator_op_anchorsearch): implemented. - (_hg_operator_op_bitshift): implemented. - - * hieroglyph/hgstring.c (hg_string_ncompare): new function. - (hg_string_copy_as_substring): fixed an index bug. - - * README: described a bit. - - * hieroglyph/Makefile.am (EXTRA_DIST): added version.h.in.in. - - * Makefile.am (EXTRA_DIST): added update-version. - - * hieroglyph.pc.in: trivial fix. - - * Makefile.am (pkgconfig_DATA): removed hg-libretto.pc. - - * examples/pse.c (_pse_plugin_arg_cb): new function. - - * hieroglyph/operator.c (_hg_operator_op_file): support new HgLineEdit. - (_hg_operator_op_private_hg_initplugins): new function. - - * hieroglyph/vm.c (hg_vm_load_plugin): new function. - (hg_vm_load_plugins_all): new function. - (hg_vm_unload_plugin): new function. - - * hieroglyph/hgdevice.c (hg_device_new): support the multiple paths. - - * lib/hg_init.ps: initialize the plugins. - - * tests/run.sh: support the multiple paths. - -2006-07-16 Akira TAGOH <at@gclab.org> - - * hieroglyph/vm.c (hg_vm_new): create an instance of HgLineEdit. - - * hieroglyph/hglineedit.[ch]: made a lot of changes to get rid of - the libedit dependency directly. - - * hieroglyph/hgplugins.[ch]: new files. - - * hieroglyph/hgfile.c (hg_file_object_new): handle an argument - as HgLineEdit. - - * .gdbinit: modified for current object structures. - (hgstringprint): implemented. - - * plugins/libedit/libedit-main.c (plugin_load): implemented. - (plugin_unload): implemented. - - * hg-libretto.pc.in: removed. - - * configure.ac: check for exp10 function. - - * plugins/Makefile.am: new file. - - * plugins/test/Makefile.am: new file. - - * plugins/test/test-main.c: new file. - - * plugins/libedit/Makefile.am: new file. - - * plugins/libedit/libedit-main.c: new file. - - * src/hgspy.c: use hieroglyph/* instead of libretto/*. - - * src/Makefile.am: removed the libretto.la dependency. - - * examples/pse.c: use hieroglyph/* instead of libretto/*. - - * examples/cairo-xlib.c: likewise. - - * examples/Makefile.am: removed the libretto.la dependency. - - * hieroglyph/operator.[ch]: moved from libretto/. - - * hieroglyph/scanner.[ch]: moved from libretto/. - - * hieroglyph/vm.[ch]: moved from libretto/. - - * hieroglyph/hggraphics.[ch]: moved from libretto/lbgraphics.[ch]. - -2006-07-04 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvaluenode.c (hg_value_node_new): validate if pool is - non-null. - - * src/hgspy.c (_hgspy_ask_dialog): new function. - (_hgspy_run_vm): ask if VM is already running. - - * hieroglyph/hgstack.[ch]: new files. - - * libretto/Makefile.am: removed lbstack.[ch]. - - * libretto/lbtypes.h: removed LibrettoStack definition. - - * libretto/vm.[ch]: modified for LibrettoStack->HgStack transition. - - * libretto/scanner.c: likewise. - - * libretto/operator.c: likewise. - - * libretto/lbstack.[ch]: moved as hieroglyph/hgstack.[ch]. - - * devices/cairo/cairo-xlib-main.c (device_close): fixed a memory leak. - -2006-07-01 Akira TAGOH <at@gclab.org> - - * TODO: add an item. - - * hieroglyph/hgdict.c (hg_dict_new): add a limitation of the amount of - Hash items. - - * libretto/vm.c (libretto_vm_new): allocate more spaces for the name - dict. - - * hieroglyph/hgfile.h (HG_FILE_GET_FILE_TYPE): new macro. - (HG_FILE_SET_FILE_TYPE): new macro. - - * hieroglyph/hgfile.c (_hg_file_object_real_free): use macro instead of - a direct access. - (_hg_file_object_real_set_flags): likewise. - (_hg_file_object_real_relocate): likewise. - (_hg_file_object_real_to_string): likewise. - (hg_file_object_new): likewise. - (hg_file_object_has_error): likewise. - (hg_file_object_read): likewise. - (hg_file_object_write): likewise. - (hg_file_object_getc): likewise. - (hg_file_object_flush): likewise. - - * hieroglyph/hgstring.c (hg_string_new): add a limitation of the amount - of strings. - - * hieroglyph/hgarray.c (hg_array_new): add a limitation of the amount - of arrays. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_dup): don't duplicate - a null object and a mark object. - (_hg_value_node_real_copy): don't copy a null object and a mark object. - - * libretto/operator.c (_libretto_operator_op_array): use the existing - null object in systemdict. - - * libretto/scanner.c (_libretto_scanner_get_object): free a special - null object that used for a terminator of proc. - (_libretto_scanner_get_object): use the existing mark object - in systemdict. - -2006-06-20 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvaluenode.c (hg_value_node_debug_print): show the name - to be dumped. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_alloc): - exactly set HG_FL_HGOBJECT. - -2006-06-19 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.h (HG_OBJECT_INIT_OBJECT): new macro. - - * hieroglyph/hgmacros.h (HG_MEMOBJ_GET_HGOBJECT_ID): new macro. - (HG_MEMOBJ_SET_HGOBJECT_ID): new macro. - (HG_MEMOBJ_IS_HGOBJECT): new macro. - (HG_OBJECT_GET_USER_DATA): new macro. - (HG_OBJECT_SET_USER_DATA): new macro. - - * hieroglyph/hgvaluenode.h (HG_VALUE_GET_VALUE_TYPE): new macro. - (HG_VALUE_SET_VALUE_TYPE): new macro. - - * hieroglyph/hgmem.h (HG_MEMOBJ_GET_MARK_AGE): new macro. - (HG_MEMOBJ_SET_MARK_AGE): new macro. - (hg_mem_set_flags__inline): use HG_MEMOBJ_SET_MARK_AGE for marking. - (hg_mem_add_flags__inline): modified for marking. - (hg_mem_gc_mark): removed. - (hg_mem_gc_unmark): removed. - (hg_mem_is_gc_mark): removed. - (hg_mem_gc_mark__inline): new macro. - (hg_mem_is_gc_mark__inline): new macro. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_garbage_collection): - increase an age of mark. - (_hg_allocator_bfit_real_garbage_collection): removed unmarking code. - (_hg_allocator_bfit_real_gc_unmark): removed. - - * hieroglyph/hgarray.c (_hg_array_real_set_flags): modified to not use - HG_FL_MARK which is obsolete. - (hg_array_append_forcibly): removed pre-marking code. - (hg_array_replace_forcibly): likewise. - - * hieroglyph/hgfile.c (_hg_file_object_real_set_flags): modified to not - use HG_FL_MARK which is obsolete. - - * hieroglyph/hgstring.c (_hg_string_real_set_flags): likewise. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_set_flags): likewise. - - * hieroglyph/hgdict.c (_hg_dict_node_real_set_flags): likewise. - (hg_dict_insert_forcibly): removed pre-marking code. - -2006-06-18 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.c (hg_array_new): use macro. - - * hieroglyph/hgdict.c (hg_dict_node_new): use macro. - (hg_dict_new): likewise. - - * hieroglyph/hgmem.h (hg_mem_get_object__inline): use macro. - (hg_mem_set_flags__inline): likewise. - - * hieroglyph/hgmem.c (hg_mem_free): use macro. - (hg_object_dup): likewise. - (hg_object_copy): likewise. - (hg_object_get_vtable): likewise. - - * hieroglyph/hgstring.c (hg_string_new): use macro. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_relocate): - use macro. - (_hg_allocator_bfit_real_alloc): likewise. - (_hg_allocator_bfit_real_resize): likewise. - (_hg_allocator_bfit_real_save_snapshot): likewise. - - * hieroglyph/hgpath.c (hg_path_node_new): use macro. - (hg_path_new): likewise. - - * hieroglyph/hgmacros.h (HG_CHECK_MAGIC_CODE): new macro. - (HG_SET_MAGIC_CODE): new macro. - - * hieroglyph/hgvaluenode.c (hg_value_node_new): use macro. - - * hieroglyph/hgfile.c (hg_file_object_new): use macro. - - * hieroglyph/hgrender.c (hg_render_eofill_new): use macro. - (hg_render_fill_new): likewise. - (hg_render_stroke_new): likewise. - (hg_render_debug_new): likewise. - - * libretto/operator.c (libretto_operator_new): use macro. - - * libretto/lbstack.c (libretto_stack_new): use macro. - - * libretto/vm.c (libretto_vm_new): use macro. - - * libretto/lbgraphics.c (libretto_graphic_state_new): use macro. - (libretto_graphics_new): likewise. - - * src/hgspy.c (_hgspy_entry_activate_cb): don't send anything - if VM isn't running. - (main): added visualizer widget into VPaned. - - * src/visualizer.c (hg_memory_visualizer_real_size_request): - new function. - - * src/hgspy.c (_hgspy_file_read_cb): update a prompt. - (_hgspy_entry_activate_cb): echo back the input to the textview. - (_hgspy_insert_text_into_textview): new function. - (main): added a prompt label. - - * src/visualizer.c (hg_memory_visualizer_class_init): added gc-started - and gc-finished signals. - (hg_memory_visualizer_notify_gc_state): new function. - - * src/hgspy.c (_hgspy_gc_started_cb): new function. - (_hgspy_gc_finished_cb): new function. - (main): added a statusbar. - - * src/hgspy_helper.c (helper_init): watch hg_mem_garbage_collection too. - (hg_mem_garbage_collection): new function. - - * examples/cairo-xlib.c (main): invoke HG_MEM_INIT before doing anything. - - * hieroglyph/hgarray.c (hg_array_new): improved a footprint. - - * hieroglyph/hgmem.h (hg_mem_set_flags__inline): don't access vtable - directly. - (HG_OBJECT_GET_VTABLE_ID): new macro. - (HG_OBJECT_SET_VTABLE_ID): likewise. - (HG_OBJECT_GET_STATE): likewise. - (HG_OBJECT_SET_STATE): likewise. - - * hieroglyph/hgdict.c (hg_dict_node_new): improved a footprint. - (hg_dict_new): likewise. - - * hieroglyph/hgmem.c (hg_mem_init): initialize vtable tree for - HgObject. - (hg_mem_finalize): destroy vtable tree for HgObject. - (hg_mem_free): don't access vtable directly. - (hg_object_get_state): use macro instead of direct access. - (hg_object_set_state): likewise. - (hg_object_is_state): likewise. - (hg_object_dup): don't access vtable directly. - (hg_object_copy): likewise. - (hg_object_get_vtable): new function. - (hg_object_set_vtable): new function. - - * hieroglyph/hgstring.c (hg_string_new): improved a footprint. - (hg_object_to_string): use macro instead of direct access. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_relocate): - don't access vtable directly. - (_hg_allocator_bfit_real_resize): likewise. - (_hg_allocator_bfit_real_save_snapshot): improved a footprint. - - * hieroglyph/hgpath.c (hg_path_node_new): improved a footprint. - (hg_path_new): likewise. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_dup): use macro - instead of direct access. - (_hg_value_node_real_copy): likewise. - (hg_value_node_new): improved a footprint. - - * hieroglyph/hgfile.c (hg_file_object_new): improved a footprint. - - * hieroglyph/hgrender.c (hg_render_eofill_new): improved a footprint. - (hg_render_fill_new): likewise. - (hg_render_stroke_new): likewise. - (hg_render_debug_new): likewise. - - * libretto/operator.c (libretto_operator_new): improved a footprint. - - * libretto/lbgraphics.c (libretto_graphic_state_new): improved - a footprint. - (libretto_graphics_new): likewise. - - * libretto/vm.c (libretto_vm_new): likewise. - - * libretto/lbstack.c (libretto_stack_new): likewise. - (libretto_stack_dump): don't reply on hieroglyph memory management - system to dump a stack. it may be failed. - -2006-06-16 Akira TAGOH <at@gclab.org> - - * src/hgspy.c (_hgspy_quit_cb): new function. - (_hgspy_file_write_cb): scroll up to the latest output. - (main): only wait for finalize process when VM is running. - - * src/visualizer.c (_hg_memory_visualizer_idle_handler_cb): update - a pixmap in lock. - - * src/hgspy.c (main): changed the default window size. - - * hieroglyph/hgfile.c (_hg_file_object_real_free): add - HG_FILE_TYPE_BUFFER_WITH_CALLBACK support. - (hg_file_object_new): likewise. - (hg_file_object_has_error): likewise. - (hg_file_object_read): likewise. - (hg_file_object_write): likewise. - (hg_file_object_getc): likewise. - (hg_file_object_flush): new function. - - * src/visualizer.c (hg_memory_visualizer_set_max_size): fixed memory - corruption. - (hg_memory_visualizer_set_heap_state): don't add a pool name when it's - already in pool_name_list. - - * src/hgspy.c (_hgspy_op_private_statementedit): new function to take - over the statementedit. - (_hgspy_file_read_cb): new function. - (_hgspy_file_write_cb): new function. - (_hgspy_file_is_eof_cb): new function. - (_hgspy_file_get_error_code_cb): new function. - (_hgspy_vm_thread): override stdin/stdout in VM, and ..statementedit - operator. - (_hgspy_entry_activate_cb): new function. - (main): invoke gdk_threads_init first. - (main): add input/output widget. - -2006-06-15 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_garbage_collection): - use a flag instead of mutex lock. - - * src/visualizer.c (hg_memory_visualizer_real_destroy): free a node in - pool_name_list. - (_hg_memory_visualizer_compare_pool_name_list): new function. - (hg_memory_visualizer_remove_pool): new function. - - * src/hgspy.c (_hgspy_vm_thread): finalize vm instance. - (_hgspy_pool_updated_cb): allow NULL for name and add None item to menu - when no menuitem is added. - (_hgspy_update_vm_status): clear text when name is NULL. - - * src/hgspy_helper.c (helper_init): watch hg_mem_pool_destroy as well. - (hg_mem_pool_destroy): new function. - - * src/visualizer.c (hg_memory_visualizer_real_size_allocate): - implemented. - (hg_memory_visualizer_real_realize): implemented. - (hg_memory_visualizer_real_expose): implemented. - (hg_memory_visualizer_class_init): added draw-updated signal. - (hg_memory_visualizer_real_unrealize): implemented. - (_hg_memory_visualizer_idle_handler_cb): update a pixmap. - (_hg_memory_visualizer_create_gc): new function. - (_hg_memory_visualizer_redraw_in_pixmap): new function. - (hg_memory_visualizer_get_used_size): new function. - (hg_memory_visualizer_get_current_pool_name): new function. - (hg_memory_visualizer_set_chunk_state): update a pixmap only when - changes happened on current pool. - - * src/hgspy.c (_hgspy_draw_updated_cb): new function. - (_hgspy_update_vm_status): new function. - (main): add widgets for memory informations. - - * src/hgspy_helper.c (helper_init): get an original function pointer - for hg_mem_resize. - (hg_mem_alloc_with_flags): check null. - (hg_mem_free): fixed a typo. - (hg_mem_resize): new function. need to watch this function too. - - * examples/pse.c (main): invoke HG_MEM_INIT before doing anything. - - * hieroglyph/hgvaluenode.h (HG_VALUE_SET_VALUE_NODE): check null. - - * libretto/operator.c (_libretto_operator_op_array): set /VMError when - creating a null object is failed. - -2006-06-12 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgfile.c (hg_file_object_new): use strncpy instead of - strcpy. - - * libretto/operator.c (_libretto_operator_op_private_hg_abort): - dump a vm status as well. - (libretto_operator_new): use strncpy instead of strpy. - - * devices/cairo/cairo-ps-main.c (device_open): use g_file_open_tmp - instead. - -2006-06-05 Akira TAGOH <at@gclab.org> - - * src/visualizer.c (hg_memory_visualizer_real_destroy): remove idle - timer. - (hg_memory_visualizer_real_size_allocate): implemented a bit. - (hg_memory_visualizer_real_unrealize): remove idle timer. - (hg_memory_visualizer_real_map): add idle timer. - (hg_memory_visualizer_real_unmap): remove idle timer. - (hg_memory_visualizer_class_init): add a signal, pool-updated. - (_hg_memory_visualizer_idle_handler_cb): new function. - (_hg_memory_visualizer_add_idle): new function. - (_hg_memory_visualizer_remove_idle): new function. - (hg_memory_visualizer_set_heap_state): set current pool and info. - (hg_memory_visualizer_set_chunk_state): set a flag to be updated. - (hg_memory_visualizer_change_pool): new function. - - * src/hgspy.c (_hgspy_radio_menu_pool_activate_cb): new function. - (_hgspy_pool_updated_cb): new function. - - * hieroglyph/version.h.in.in: surround with G_*_DECLS. - - * src/visualizer.c (hg_memory_visualizer_real_destroy): set a null to - avoid a double-free. - - * src/hgspy.c (_hgspy_action_menubar_open_cb): set a filter name. - (main): set a window title and added a view menu. - - * Makefile.am (SUBDIRS): added po. - - * configure.ac (ALL_LINGUAS): added ja. - - * hieroglyph/hgmem.c (hg_mem_init_stack_start): new function. - (hg_mem_pool_add_heap): new function. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_initialize): - use hg_mem_pool_add_heap instead of direct access. - (_hg_allocator_bfit_real_resize_pool): likewise. - - * hieroglyph/hgmacros.h (HG_STACK_INIT): new macro. - (HG_MEM_INIT): new macro. - - * src/visualizer.c (_heap2offset_new): new function. - (_heap2offset_free): new function. - (hg_memory_visualizer_set_max_size): store the max size for each pools. - (hg_memory_visualizer_get_max_size): similar change. - (hg_memory_visualizer_set_heap_state): new function. - (hg_memory_visualizer_set_chunk_state): implemented. - - * src/hgspy.c (_hgspy_vm_thread): call HG_MEM_INIT here. - - * src/hgspy_helper.c (hg_mem_pool_add_heap): new function. - -2006-06-04 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_gc_mark_array_region): new function. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_garbage_collection): - lock with mutex during GC. - (_hg_allocator_bfit_real_gc_mark): use hg_mem_gc_mark_array_region. - (_hg_allocator_bfit_real_is_safe_object): new function. - -2006-06-03 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_get_object_size): new function. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_get_object_size__inline): - new macro. - (_hg_allocator_bfit_real_get_size): new function. - - * src/hgspy_helper.c (hg_mem_alloc_with_flags): don't access block_size - directly. - (hg_mem_free): likewise. - - * hieroglyph/hgbtree.c (hg_btree_find_near): fixed to get correct near block. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_get_minimum_aligned_size__inline): - new macro. - (_hg_allocator_get_aligned_size__inline): likewise. - (_hg_allocator_compute_minimum_block_size_index__inline): removed. - (_hg_allocator_grow_index_size__inline): removed. - (_hg_allocator_compute_block_size_index__inline): removed. - (_hg_allocator_compute_block_size__inline): removed. - - * hieroglyph/hgvaluenode.h (HG_VALUE_SET_NAME_STATIC): allocate more - memory for null-terminated. - - * .gdbinit (_hgmeminfo): support compat structure. - -2006-06-02 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgtypes.h: improved a footprint a bit. - - * hieroglyph/hgmem.h (HG_MEMOBJ_GET_HEAP_ID): new macro. - (HG_MEMOBJ_SET_HEAP_ID): new macro. - (HG_MEMOBJ_GET_FLAGS): new macro. - (HG_MEMOBJ_SET_FLAGS): new macro. - (HG_MEMOBJ_INIT_FLAGS): new macro. - (hg_mem_is_flags__inline): use macro instead of direct access. - (hg_mem_get_flags__inline): likewise. - (hg_mem_set_flags__inline): likewise. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_alloc): - use macro instead of direct access. - (_hg_allocator_bfit_real_resize): likewise. - - * hieroglyph/hgvaluenode.c (hg_value_node_new): removed unnecessary - value. - - * src/hgspy_helper.c (hg_mem_alloc_with_flags): use macro instead of - direct access. - (hg_mem_free): likewise. - -2006-05-29 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_garbage_collection): trivial fix. - - * libretto/vm.c (libretto_vm_new): just disable a global pool so far. - - * commit.sh: ask once when going to commit without log. - - * src/hgspy_helper.[ch]: new files. - - * src/hgspy.c: new file. - - * src/visualizer.[ch]: new files. - - * src/Makefile.am: new file. - - * po/POTFILES.in: new file. - -2006-05-25 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_resize): - update a block size in HgMemObject as well. - (_hg_allocator_bfit_snapshot_real_to_string): implemented. - - * hieroglyph/hgfile.c (hg_file_object_new): fixed a memory corruption. - -2006-05-19 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_pool_new): enable periodical GC by default. - - * hieroglyph/hgarray.c (_hg_array_real_copy): update the amount of - objects in array when an object is copied once. it caused not marking - when GC happened during copying. - - * hieroglyph/hgmem.h (hg_mem_set_flags__inline): don't recursively - set flags that isn't expected. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_add_free_block): - exactly clear headers. - (_hg_allocator_bfit_real_alloc): likewise. - - * hieroglyph/hgvaluenode.c (hg_value_node_debug_print): renamed. - - * .gdbinit: added. - - * hieroglyph/hgstring.c (hg_string_new): ensure a memory for termination. - (hg_string_append_c): likewise. - (hg_string_append): likewise. - (hg_string_fix_string_size): likewise. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_garbage_collection): - unmark objects in other pools after GC. - (_hg_allocator_bfit_real_gc_unmark): new function. - - * libretto/operator.c (_libretto_operator_op_copy): clean up. - -2006-05-12 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.c (_hg_array_real_copy): unset copying flag - if fails happens. - (hg_array_append_forcibly): add pool if node is from different pool. - (hg_array_replace_forcibly): likewise. - - * hieroglyph/hgdict.c (hg_dict_insert_forcibly): check if object - is sane. - (hg_dict_insert_forcibly): add pool if node is from different pool. - - * hieroglyph/hgmem.c (_hg_mem_pool_is_own_memobject): new function. - (hg_mem_add_pool_reference): don't add the duplicate pool. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_add_free_block): - clear data to avoid incomplete header detection. - (_hg_allocator_bfit_relocate): avoid the infinite loop. - (_hg_allocator_bfit_real_gc_mark): likewise. - - * libretto/operator.c (_libretto_operator_op_private_hg_forceput): - reverted a previous change. - (libretto_operator_init): likewise. - -2006-05-07 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_alloc): - clear data to avoid incomplete header detection. - (_hg_allocator_bfit_real_resize): fixed possibly causing wrong block - chain. - - * libretto/operator.c (_libretto_operator_op_floor): removed. - (_libretto_operator_op_run): removed. - (_libretto_operator_op_private_hg_forceput): added objects to the pool - reference. - (_libretto_operator_real_set_flags): use hg_debug_print_gc_state. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_add_free_block): - check if block chain is sane. - (_hg_allocator_bfit_get_free_block): fixed causing wrong block chain. - (_hg_allocator_bfit_real_gc_mark): trace the pool reference and - the registers. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_set_flags): set flags - for HG_TYPE_VALUE_POINTER as well. - (hg_debug_print_gc_state): support HgValueNode dump. - - * hieroglyph/hgarray.c (hg_array_new): clear data to avoid segfaults. - it may causes staying a incomplete header in the aligned memory. - -2006-05-06 Akira TAGOH <at@gclab.org> - - * commit.sh: implemented a testrun mode and -m option to give the own - commit message. - also check if the required command is available. - - * hieroglyph/hgmem.c (hg_pool_ref_new): new function. - (hg_pool_ref_free): new function. - (hg_pool_ref_last): new function. - (hg_pool_ref_add): new function. - (hg_pool_ref_remove): new function. - (hg_mem_add_pool_reference): new function. - (hg_mem_remove_pool_reference): new function. - - * libretto/vm.c (libretto_vm_new): correct adding object to root node. - -2006-05-05 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgdict.c (hg_dict_insert_forcibly): clean up. - - * hieroglyph/hgarray.c (hg_array_replace_forcibly): clean up. - - * hieroglyph/hgmem.c (hg_mem_pool_is_own_object): always return true - if current allocation mode is local. - - * lib/hg_init.ps (.defaulterrorhandler): enter the local allocation - mode in advance to avoid /invalidaccess again. - - * libretto/operator.c (_libretto_operator_op_astore): check - the allocation mode before an warning is output. - (_libretto_operator_op_put): likewise. - (_libretto_operator_op_private_dicttomark): likewise. - (_libretto_operator_op_def): likewise. - (_libretto_operator_op_private_hg_abort): possibly avoid /VMerror twice. - - * hieroglyph/hgmem.c (hg_mem_pool_new): enable GC by default. - - * libretto/vm.c (libretto_vm_init): use the best fit memory allocator - by default. - (libretto_vm_new): likewise. - - * hieroglyph/hgfile.c (hg_file_init): likewise. - - * hieroglyph/hgarray.c (hg_array_append_forcibly): new function. - - * hieroglyph/hgdict.c (hg_dict_insert_forcibly): new function. - - * hieroglyph/hgvaluenode.c (hg_debug_print_gc_state): new function. - - * lib/hg_init.ps (userdict): trick to add /userdict into systemdict. - (odef): likewise for $error. - (floor): implemented. - (.seterror): don't use end here. - (.printerror): show more information. - - * libretto/operator.c (_libretto_operator_op_private_hg_forceput): - new function. - (libretto_operator_init): add objects to the root node to allow - including them to the global objects. - - * hieroglyph/hgmem.c (hg_mem_pool_is_own_object): check if it's in - the root node and give a privilege to the object. - - * libretto/vm.c (libretto_vm_new): set a pool mode. - - * hieroglyph/hgmem.c (hg_mem_pool_is_own_object): new function. - (hg_mem_pool_get_name): new function. - -2006-05-04 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_pool_is_global_mode): new function. - (hg_mem_pool_use_global_mode): new function. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_garbage_collection): - added the debugging messages. - - * libretto/operator.c (_libretto_operator_op_private_arraytomark): - go along with the steps like PS. - (_libretto_operator_op_private_hg_startgc): do GC for only local pool. - - * libretto/vm.c (libretto_vm_set_error): dump the stacks - when the multiple errors happened. - -2006-05-03 Akira TAGOH <at@gclab.org> - - * configure.ac: configurable allocator for testing purpose. - - * libretto/vm.c: likewise. - - * hieroglyph/hgfile.c: likewise. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_real_garbage_collection): - return TRUE if GC is succeeded. - - * hieroglyph/hgfile.c (hg_file_object_new): fixed a typo. - (hg_file_object_clear_error): new function. - - * libretto/operator.c (_libretto_operator_op_private_hg_startgc): - new private operator to start GC manually. - - * libretto/vm.c (libretto_vm_set_error_from_file): clear an error in - a file object after set it to vm. - -2006-05-02 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_free): fixed causing the double-free - issue. - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_remove_block): - fixed broken deletion from the linked list. - (_hg_allocator_bfit_real_free): sanity check to get the block. - (_hg_allocator_bfit_real_resize): set NULL to vtable before free'ing. - (_hg_allocator_bfit_real_resize): exactly separate off the block. - -2006-04-24 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgallocator-bfit.c (_hg_bfit_block_new): store a heap id. - (_hg_allocator_bfit_get_free_block): update the amount of the used - heap in pool. - (_hg_allocator_bfit_relocate): new function. - (_hg_allocator_bfit_real_free): update the amount of the used heap - in pool. - (_hg_allocator_bfit_real_resize): implemented. - -2006-04-18 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_add_free_block): - fixed invalid memory block reference. - -2006-04-17 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_remove_block): - remove node if there are no list for chunks. - (_hg_allocator_bfit_get_free_block): likewise. - (_hg_allocator_bfit_add_free_block): replace node with updated list - if there are already list in btree. - (_hg_allocator_bfit_real_garbage_collection): implemented. - -2006-04-16 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgallocator-bfit.c (_hg_allocator_bfit_remove_block): - changes to use btree instead of list to manage the free block. - (_hg_allocator_bfit_add_free_block): likewise. - (_hg_allocator_bfit_get_free_block): likewise. - (_hg_allocator_bfit_btree_traverse_in_destroy): new function. - (_hg_allocator_bfit_real_destroy): destroying blocks through block chain. - (_hg_allocator_bfit_real_gc_mark): implemented. - (_hg_allocator_bfit_add_user_block): removed. - (_hg_allocator_bfit_get_used_block_list): removed. - (_hg_allocator_bfit_has_used_block_with_list): removed. - (_hg_allocator_bfit_remove_used_block): removed. - -2006-04-13 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgallocator-bfit.[ch]: added the best fit algorithm - memory allocator. - -2006-04-12 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (_hg_mem_pool_free): also use hg_heap_free. - - * hieroglyph/hgallocator-ffit.c: use hg_heap_new/free. - - * hieroglyph/hgmem.c (hg_heap_new): new function. - (hg_heap_free): new function. - -2006-04-05 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_allocator_new): new again. - (hg_allocator_destroy): likewise. - - * hieroglyph/hgallocator-ffit.c (hg_allocator_ffit_get_vtable): - new function. - (hg_allocator_ffit_new): removed. - (hg_allocator_ffit_destroy): removed. - - * hieroglyph/hgfile.c (hg_file_init): trivial thing to support - optional allocator. - - * libretto/scanner.c: use own error function to not push self into - the estack. - - * libretto/vm.c: trivial thing to support optional allocator. - -2006-04-04 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (_hg_mem_init_stack_start): comment out - the incomplete code. - - * hieroglyph/hgbtree.c (hg_btree_find): use proper variable type. - (hg_btree_find_near): likewise. - (hg_btree_find_near): fixed uninitialized variable warning. [Toshiya Suzuki] - -2006-04-03 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (_libretto_operator_op_counttomark): fixed - a bulid error on older gcc. [Toshiya Suzuki] - -2006-03-31 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (_libretto_operator_op_exp): implemented. - - * hieroglyph/hgvaluenode.h (HG_VALUE_GET_REAL_FROM_INTEGER): - add a macro. - -2006-03-30 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (_libretto_operator_op_cvlit): implemented. - (_libretto_operator_op_cvn): implemented. - (_libretto_operator_op_getinterval): check if it's readable. - - * lib/hg_init.ps (.printerror): show the details of dict. - - * hieroglyph/hgmem.c: split up the allocator part to another files. - - * hieroglyph/hgallocator-private.h: new file. - - * hieroglyph/hgallocator-ffit.[ch]: new files. - -2006-03-28 Akira TAGOH <at@gclab.org> - - * libretto/operator.c: makes a node with the same pool where the value - was created. - - * libretto/vm.c: likewise. - - * libretto/scanner.c: likewise. - - * hieroglyph/hgvaluenode.h: get a memory pool from the given value for - complex objects. - -2006-03-27 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_pool_new): initialize use_gc. - (hg_mem_pool_get_used_heap_size): new function. - (hg_mem_pool_get_free_heap_size): new function. - - * libretto/operator.c (_libretto_operator_op_vmstatus): implemented. - - * libretto/scanner.c (_libretto_scanner_get_object): fixed a null - exception. - - * libretto/vm.c (libretto_vm_get_save_level): new function. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_to_string): - fix an allocated size at the end. - - * commit.sh: don't commit if there are no changes. - - * lib/hg_init.ps (.seterror): modify /estack in $error to indicate - a correct stack where an error actually happened. - - * libretto/operator.c (_libretto_operator_op_getinterval): implemented. - -2006-03-26 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgfile.c (_hg_file_object_real_to_string): makes - a difference to not confuse for string. - - * lib/hg_init.ps (.seterror): save ostack, estack and dstack into $error. - (.printerror): show the stack in $error instead. - - * libretto/operator.c (_libretto_operator_op_dictstack): implemented. - (_libretto_operator_op_execstack): fixed a typo. - (_libretto_operator_op_stop): invoke /.abort instead of /quit. - (_libretto_operator_op_private_hg_abort): implemented. - - * libretto/lbstack.c (libretto_stack_dump): new function. - -2006-03-24 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (_libretto_operator_op_copy): always set TRUE to - retval when the amount of copy object is 0. - -2006-03-23 Akira TAGOH <at@gclab.org> - - * lib/hg_init.ps (run): defined. - - * libretto/operator.c (_libretto_operator_op_exit): makes /invalidexit - when file object appears on the estack. - -2006-03-21 Akira TAGOH <at@gclab.org> - - * hieroglyph/hglineedit.c (hg_line_edit_get_statement): - show a prompt at only first. - - * lib/hg_init.ps (executive): take care of the real /undefinedfilename - from interactive shell. - load/save history. - (..statementedit): defined. - - * libretto/operator.c (_libretto_operator_op_private_hg_loadhistory): - implemented. - (_libretto_operator_op_private_hg_savehistory): implemented. - (_libretto_operator_op_private_hg_statementedit): fixed a memory leak - and detect EOL. - - * hieroglyph/hglineedit.c (hg_line_edit_load_history): new function. - (hg_line_edit_save_history): new function. - - * lib/hg_init.ps (prompt): use .promptmsg to get a prompt string. - - * hieroglyph/hglineedit.c (hg_line_edit_get_line): - support the use of own prompt. - (hg_line_edit_get_statement): don't add an empty line to the history. - - * hieroglyph/hgmem.c (hg_mem_pool_use_garbage_collection): - new function. - - * hieroglyph/hgstring.c (hg_string_maxlength): new function. - (hg_string_insert_c): update length. - - * lib/hg_init.ps (.promptmsg): defined. - (cvs): defined. - (executive): use .statementedit to avoid the prompt deletion. - (putinterval): defined. - - * libretto/operator.c (_libretto_operator_op_string): implemented. - (_libretto_operator_op_private_hg_execn): implemented. - (_libretto_operator_op_private_hg_statementedit): implemented. - - * libretto/scanner.c (_libretto_scanner_get_object): don't set - an executable bit to string. - - * libretto/lbstack.c (libretto_stack_roll): fixed the wrong chain. - -2006-03-17 Akira TAGOH <at@gclab.org> - - * libretto/vm.c (libretto_vm_reset_error): reenable stack validator. - (libretto_vm_set_error): makes a copy for an error handler. - - * libretto/operator.c (_libretto_operator_op_private_hg_clearerror): - implemented. - - * hieroglyph/hgfile.c (hg_file_object_has_error): set ENOENT if there - are no buffer. - - * lib/hg_init.ps (executive): defined. - - * hieroglyph/hglineedit.[ch]: new files. - - * hieroglyph/hgfile.c (_hg_file_object_real_free): support - HG_FILE_TYPE_STATEMENT_EDIT and HG_FILE_TYPE_LINE_EDIT. - (_hg_file_object_real_set_flags): likewise. - (_hg_file_object_real_relocate): likewise. - (hg_file_object_new): likewise. - (hg_file_object_has_error): likewise. - (hg_file_object_read): likewise. - (hg_file_object_getc): likewise. - - * lib/hg_init.ps (prompt): show the depth of current stack. - support an interactive mode. - - * configure.ac: add a library check for libedit. - - * libretto/operator.c (_libretto_operator_op_file): makes an error - when %statementedit and %lineedit is going to be opened as - write/append mode. it must be read-only. - (_libretto_operator_op_private_hg_startjobserver): don't stack a file - object onto the exec stack. - -2006-03-16 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (_libretto_operator_op_private_stringcvs): - makes a string as is when given node is string. - - * lib/hg_init_lv2.ps (currentglobal): defined. - (setglobal): defined. - - * lib/hg_init.ps (odef): defined. - (.defaulterrorhandler): change an allocation mode to local. - - * libretto/operator.c (_libretto_operator_op_private_stopped_continue): - don't always return true after error happened. it has to be false after - stopped invoked once and no stop nor error happens. - - * libretto/vm.c (_libretto_vm_run): use libretto_vm_reset_error - instead of libretto_vm_clear_error. - (libretto_vm_reset_error): new function. - - * lib/hg_init_lv2.ps (globaldict): defined. - - * lib/hg_init.ps (userdict): defined. - trivial fix to get PS initialization working. - - * libretto/operator.c (_libretto_operator_op_file): support - (%statementedit) and (%lineedit). - (_libretto_operator_op_private_hg_currentglobal): implemented. - (_libretto_operator_op_private_hg_setglobal): implemented. - (_libretto_operator_op_private_hg_startjobserver): set an read-only - attribute to systemdict. - (libretto_operator_init): removed /userdict and /globaldict definition. - (libretto_operator_init): don't set an read-only attribute to - systemdict here. - - * libretto/vm.c (libretto_vm_new): removed initialization of userdict - and globaldict here. - (libretto_vm_get_dict_userdict): removed. - (libretto_vm_get_dict_globaldict): removed. - (libretto_vm_startjob): removed initialization of dictstack here. - (libretto_vm_startjob): set an read-only attribute to systemdict. - - * configure.ac: output more build info. - - * hieroglyph/hgfile.c (hg_file_object_new): set O_NONBLOCK flag to - stdin. - (hg_file_object_has_error): return true if error is only 0. - - * libretto/vm.c (libretto_vm_set_error_from_file): just ignore EAGAIN - if it was from stdin. - (libretto_vm_run): try to load a file from current path too when - HIEROGLYPH_LIB_PATH isn't defined. - - * lib/hg_init.ps (stack): defined. - (version): defined. - -2006-03-15 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (libretto_operator_init): added /serverdict. - - * libretto/vm.c (libretto_vm_new): added serverdict. - (libretto_vm_get_dict_serverdict): new function. - - * lib/hg_init.ps (prompt): defined. - - * libretto/operator.c (_libretto_operator_op_astore): implemented. - (_libretto_operator_op_ne): implemented. - (_libretto_operator_op_flush): implemented. - (_libretto_operator_op_ge): implemented. - (_libretto_operator_op_le): implemented. - (_libretto_operator_op_load): implemented. - (_libretto_operator_op_read): implemented. - - * hieroglyph/hgdict.c (_hg_dict_traverse_dup): new function. - (_hg_dict_real_dup): new function. - (hg_dict_remove): replace a value with a node being. - (hg_dict_first): new function. - - * libretto/operator.c (_libretto_operator_op_private_forall_array_continue): - implemented. - (_libretto_operator_op_private_forall_string_continue): implemented. - (_libretto_operator_op_and): return integer when it's called with integer. - (_libretto_operator_op_forall): implemented. - (_libretto_operator_op_or): implemented. - (_libretto_operator_op_rcheck): implemented. - (_libretto_operator_op_type): implemented. - (_libretto_operator_op_wcheck): implemented. - (_libretto_operator_op_where): implemented. - (_libretto_operator_op_xcheck): implemented. - (_libretto_operator_op_private_forall_dict_continue): implemented. - (_libretto_operator_op_private_stringcvs): check NULL. - - * libretto/scanner.c (_libretto_scanner_get_object): - use __lb_operator_list instead of __lb_operator_scanner. - -2006-03-13 Akira TAGOH <at@gclab.org> - - * lib/hg_init_lv2.ps (product): defined. - (revision): defined. - - * lib/hg_init.ps (.printversion): new procedure. - show version. - - * libretto/operator.c (_libretto_operator_op_file): - use file objects in VM instead of using the external variables - directly. - (_libretto_operator_op_private_hg_hgrevision): implemented. - (_libretto_operator_op_private_hg_product): implemented. - (_libretto_operator_op_private_hg_revision): implemented. - -2006-03-12 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgdict.c (_hg_dict_traverse_real_traverse): - new function. - (hg_dict_lookup): return a duplicate node. - (hg_dict_lookup_with_string): likewise. - (hg_dict_maxlength): new function. - (hg_dict_traverse): new function. - - * libretto/operator.c (_libretto_operator_copy__traverse_dict): - new function. - (_libretto_operator_op_currentdict): implemented. - (_libretto_operator_op_maxlength): implemented. - (_libretto_operator_op_private_hg_startjobserver): implemented. - - * libretto/vm.c (libretto_vm_startjob): don't set a initialized flag - here. - - * hieroglyph/hgarray.c (hg_array_append): remove the real node and - reset removed_arrays before adding any node. - (hg_array_make_subarray): new function. - (hg_array_copy_as_subarray): new function. - - * hieroglyph/hgdict.c (hg_dict_maxlength): new function. - - * hieroglyph/hgstring.c (_hg_string_real_to_string): use current - instead of strings. - (hg_string_make_substring): new function. - (hg_string_copy_as_substring): new function. - - * hieroglyph/hgfile.c (_hg_file_object_real_to_string): convert file - object like string if it's from buffer. - - * lib/hg_init_lv2.ps: initialize error handlers. - - * lib/hg_init.ps (.seterror): new procedure to set an error. - (.defaulterrorhandler): default handler for errors. - (handleerror): new procedure. - - * libretto/operator.c (_libretto_operator_op_private_stopped_continue): - implemented. - (_libretto_operator_op_cleartomark): implemented. - (_libretto_operator_op_copy): implemented. - (_libretto_operator_op_counttomark): implemented. - (_libretto_operator_op_execstack): implemented. - (_libretto_operator_op_idiv): implemented. - (_libretto_operator_op_not): implemented. - (_libretto_operator_op_stop): implemented. - (_libretto_operator_op_stopped): implemented. - - * libretto/scanner.c (_libretto_scanner_get_object): makes an object - to the read-only if it's under the initialization. - - * libretto/vm.c (libretto_vm_set_error): report the multiple error. - (libretto_vm_set_error): invoke an procedure for the error. - (libretto_vm_main): parse a token from string. - -2006-03-08 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgfile.c (hg_file_init): add objects to the root node. - - * libretto/lbtypes.h: new file. - - * hieroglyph/hgarray.c (_hg_array_real_copy): - detect the circular reference. - (_hg_array_real_to_string): likewise. - - * hieroglyph/hgmem.h (hg_mem_set_copying): new macro. - (hg_mem_unset_copying): likewise. - (hg_mem_is_copying): likewise. - - * hieroglyph/hgstring.c (_hg_string_real_to_string): check NULL. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_to_string): - free an unnecessary object. - - * libretto/operator.c (_libretto_operator_op_private_write_eqeq_only): - check NULL. - (libretto_operator_init): add /statusdict into systemdict. - - * libretto/lbstack.c (_libretto_stack_use_stack_validator): - new function. - (libretto_stack_push): don't validate the stack if use_validator is - false. - - * libretto/vm.c (libretto_vm_set_error): stop to use the stack - validator when the error happened. - (libretto_vm_main): check NULL. - (libretto_vm_get_current_pool): return a special memory pool if it's - in error handler. - (libretto_vm_startjob): enable a executable bit for name object. - (libretto_vm_main): now depends on the external PS file for - the error handler. - -2006-03-07 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (_libretto_operator_op_private_dicttomark): - implemented. - (_libretto_operator_op_countdictstack): implemented. - (_libretto_operator_op_countexecstack): implemented. - (_libretto_operator_op_cvx): implemented. - (_libretto_operator_op_known): implemented. - (_libretto_operator_load_file): removed. - (libretto_operator_load_file): removed. - (libretto_operator_init): set an readonly attribute to systemdict. - - * libretto/scanner.c (_libretto_scanner_get_object): implemented - a parser for dict. - - * libretto/lbstack.c (_libretto_stack_push): new function. - - * libretto/vm.c (_libretto_vm_run): new function. - (libretto_vm_startjob): allow to initialize VM with - the specific PS file. - (libretto_vm_clear_error): new function. - (_libretto_vm_set_error): new function. - (_libretto_vm_set_error_from_file): new function. - (libretto_vm_run): new function. - -2006-03-05 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmatrix.c (hg_matrix_scale): new function. - - * libretto/operator.c (_libretto_operator_op_concatmatrix): - implemented. - (_libretto_operator_op_matrix): implemented. - (_libretto_operator_op_scale): implemented. - - * libretto/lbgraphics.c (libretto_graphics_matrix_scale): new function. - -2006-03-03 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgpath.c (hg_path_compute_current_point): check if - currentpoint is there for lineto. - (hg_path_get_bbox): likewise. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_dup): don't make a new object. - - * libretto/operator.c (_libretto_operator_op_private_for_pos_int_continue): - take care of the minus value of the increment. - (_libretto_operator_op_private_for_pos_real_continue): implemented. - (_libretto_operator_op_lineto): check /nocurrentpoint. - (_libretto_operator_op_rlineto): likewise. - - * lib/Makefile.am (EXTRA_DIST): added $(hgpslib_DATA) - - * hieroglyph/hgarray.c (_hg_array_real_to_string): check access mode. - (hg_array_append): likewise. - (hg_array_replace): likewise. - (hg_array_remove): likewise. - (hg_array_index): likewise. - (hg_array_fix_array_size): likewise. - (hg_array_new): set a default access mode. - - * hieroglyph/hgdict.c (hg_dict_node_new): set a default access mode. - (hg_dict_new): likewise. - (hg_dict_insert): check access mode. - (hg_dict_remove): likewise. - (hg_dict_lookup): likewise. - (hg_dict_lookup_with_string): likewise. - (hg_dict_length): likewise. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_save_snapshot): - set a default access mode. - (hg_mem_pool_get_default_access_mode): new function. - (hg_mem_pool_set_default_access_mode): new function. - - * hieroglyph/hgstring.c (_hg_string_real_to_string): check access mode. - (hg_string_length): likewise. - (hg_string_clear): likewise. - (hg_string_append_c): likewise. - (hg_string_append): likewise. - (hg_string_insert_c): likewise. - (hg_string_concat): likewise. - (hg_string_index): likewise. - (hg_string_get_string): likewise. - (hg_string_compare): likewise. - (hg_string_compare_with_raw): likewise. - (hg_string_new): set a default access mode. - (hg_string_fix_string_size): new function. - - * hieroglyph/hgpath.c (hg_path_node_new): set a default access mode. - (hg_path_new): likewise. - (hg_path_compute_current_point): fixed a typo. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_to_string): - check access mode. - (hg_value_node_new): set a default access mode. - - * hieroglyph/hgrender.c (hg_render_eofill_new): set a default - access mode. - (hg_render_fill_new): likewise. - (hg_render_stroke_new): likewise. - (hg_render_debug_new): likewise. - - * hieroglyph/hgfile.c (hg_file_object_new): set a default access mode. - (hg_file_object_read): check access mode. - (hg_file_object_write): likewise. - (hg_file_object_getc): likewise. - (hg_file_object_ungetc): likewise. - (hg_file_object_vprintf): likewise. - - * libretto/operator.c (_libretto_operator_op_private_stringcvs): - fixed a behavior to match the exact one. - (_libretto_operator_op_aload): check the access attribute. - (_libretto_operator_op_begin): likewise. - (_libretto_operator_op_bind): likewise. - (_libretto_operator_op_concat): likewise. - (_libretto_operator_op_currentmatrix): likewise. - (_libretto_operator_op_cvi): likewise. - (_libretto_operator_op_def): likewise. - (_libretto_operator_op_eq): likewise. - (_libretto_operator_op_exec): likewise. - (_libretto_operator_op_file): likewise. - (_libretto_operator_op_for): likewise. - (_libretto_operator_op_get): likewise. - (_libretto_operator_op_gt): likewise. - (_libretto_operator_op_if): likewise. - (_libretto_operator_op_ifelse): likewise. - (_libretto_operator_op_length): likewise. - (_libretto_operator_op_loop): likewise. - (_libretto_operator_op_lt): likewise. - (_libretto_operator_op_print): likewise. - (_libretto_operator_op_put): likewise. - (_libretto_operator_op_repeat): likewise. - (_libretto_operator_op_rotate): likewise. - (_libretto_operator_op_setmatrix): likewise. - (_libretto_operator_op_translate): likewise. - (_libretto_operator_op_writestring): likewise. - (_libretto_operator_op_noaccess): implemented. - (libretto_operator_load_file): fixed a typo. - (libretto_operator_new): set a default access mode. - (libretto_operator_init): set systemdict in dict. - - * libretto/lbgraphics.c (libretto_graphic_state_new): set a default - access mode. - (libretto_graphics_new): likewise. - - * libretto/vm.c (libretto_vm_new): likewise. - -2006-03-02 Akira TAGOH <at@gclab.org> - - * lib/hg_init.ps: new file. - - * lib/hg_init_lv2.ps: new file. - - * lib/hg_init_lv3.ps: new file. - - * libretto/operator.c (_libretto_operator_load_file): new function. - (libretto_operator_load_file): new function. - (libretto_operator_init): initialize from PS file. - - * libretto/vm.c (libretto_vm_main): don't break current node in - the estack. it causes segfault when scanner fails to get an object. - (libretto_vm_startjob): check an return value of libretto_operator_init - and if it fails, quit here immediately. - - * hieroglyph/hgarray.c (hg_array_fix_array_size): new function. - - * hieroglyph/hgpath.c (hg_path_compute_current_point): new function. - - * libretto/operator.c (_libretto_operator_op_concat): - implemented. - (_libretto_operator_op_currentpoint): implemented. - (_libretto_operator_op_curveto): check /nocurrentpoint error. - (_libretto_operator_op_initclip): implemented. - (_libretto_operator_op_length): implemented. - (_libretto_operator_op_lt): implemented. - (_libretto_operator_op_setmatrix): set a path to update current matrix. - - * libretto/scanner.c (_libretto_scanner_get_object): check NULL. - (_libretto_scanner_get_object): resize Array to fix the array size. - - * libretto/vm.c (libretto_vm_main): use another pool instead of - local/global pool to avoid the allocation error when /VMerror happened. - - * libretto/lbgraphics.c (libretto_graphics_initclip): new function. - -2006-03-01 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_remove_root_node): fixed not to store a result. - - * configure.ac: add --with{,out}-x11 option. - - * devices/cairo/cairo-xlib-main.c (device_close): implemented. - - * libretto/lbgraphics.c (_libretto_graphics_real_free): - destroy the pages. - - * hieroglyph/hgarray.c (hg_array_new): fixed the uninitialized value. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_initialize): - support the multiple heaps. - (_hg_allocator_ffit_real_alloc): likewise. - (_hg_allocator_ffit_real_free): likewise. - (_hg_allocator_ffit_real_resize): likewise. - (_hg_allocator_ffit_real_resize_pool): likewise. - (_hg_allocator_ffit_compare): likewise. - (_hg_allocator_ffit_real_garbage_collection): likewise. - (_hg_allocator_ffit_snapshot_real_free): likewise. - (_hg_allocator_ffit_snapshot_real_relocate): likewise. - (_hg_allocator_ffit_real_save_snapshot): likewise. - (_hg_allocator_ffit_real_restore_snapshot): likewise. - (_hg_mem_pool_free): likewise. - - * libretto/operator.c (_libretto_operator_op_atan): implemented. - (_libretto_operator_op_cos): implemented. - (_libretto_operator_op_setmatrix): trivial fix. - (_libretto_operator_op_sin): implemented. - -2006-02-28 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmatrix.[ch]: new files. - - * hieroglyph/hgpath.c (_hg_path_node_real_path_last): new function. - (_hg_path_node_find): new function. - (hg_path_find): new function. - (hg_path_close): don't make a duplicate node for closepath. - (hg_path_matrix): new function. - - * hieroglyph/hgdebug.[ch]: new files. - - * hieroglyph/hgrender.c (_hg_render_debug_real_set_flags): - new function. - (_hg_render_debug_real_relocate): new function. - (hg_render_eofill_new): keep CTM in the structure. - (hg_render_fill_new): likewise. - (hg_render_stroke_new): likewise. - (hg_render_debug_new): new function. - - * libretto/operator.c (_libretto_operator_op_array): - allocate a node for each object. - (_libretto_operator_op_currentmatrix): implemented. - (_libretto_operator_op_initgraphics): implemented. - (_libretto_operator_op_rotate): trivial fix. - (_libretto_operator_op_setmatrix): implemented. - (_libretto_operator_op_translate): trivial fix. - (_libretto_operator_op_private_hg_sleep): new function. - (libretto_operator_hieroglyph_init): new function. - - * libretto/lbgraphics.c (libretto_graphics_init): new function. - (libretto_graphics_show_page): support the multiple pages. - (libretto_graphics_matrix_rotate): transform the matrix to fit into - cairo's device space. - (libretto_graphics_matrix_translate): likewise. - (libretto_graphic_state_path_new): update a snapshot matrix. - (libretto_graphics_render_eofill): likewise. - (libretto_graphics_render_fill): likewise. - (libretto_graphics_render_stroke): likewise. - (libretto_graphics_debug): new function. - - * devices/cairo/hgdevice-cairo.c (_hg_cairo_device_print_path): - new function for debugging. - (_hg_cairo_device_real_initialize): keep the page size. - (_hg_cairo_device_real_initialize): use cairo_set_matrix instead of - cairo_transform to manage CTM in hieroglyph. - (_hg_cairo_device_real_finalize): call cairo_show_page here. - (_hg_cairo_device_real_eofill): update CTM before doing anything. - (_hg_cairo_device_real_fill): likewise. - (_hg_cairo_device_real_stroke): likewise. - (_hg_cairo_device_set_matrix): new function. - (_hg_cairo_device_set_path): initialize path. - (_hg_cairo_device_set_path): add HG_PATH_MATRIX support. - -2006-02-26 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (libretto_operator_define_macro): check NULL. - (_libretto_operator_op_and): implemented. - (_libretto_operator_op_exit): implemented. - (_libretto_operator_op_if): implemented. - (_libretto_operator_op_sqrt): implemented. - (BUILD_OP): check NULL. - (libretto_operator_new): allocate one more byte memory. - - * libretto/lbgraphics.h (libretto_graphics_get_state): new macro. - - * libretto/vm.c (libretto_vm_main): revert a change to duplicate - an object that isn't executable. it caused not updating an object - in the dictionary say. - (libretto_vm_main): shows the context of the objects in the stack. - - * libretto/lbgraphics.c (_libretto_graphic_state_real_set_flags): - new function. - (_libretto_graphic_state_real_relocate): new function. - (_libretto_graphic_state_real_copy): new function. - (libretto_graphic_state_new): new function. - (libretto_graphics_save): implemented. - (libretto_graphics_restore): implemented. - -2006-02-25 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgpath.c (hg_path_get_bbox): add HG_PATH_ARC. - (hg_path_arc): new function. - - * libretto/operator.c (_libretto_operator_op_arc): implemented. - - * libretto/lbgraphics.c (libretto_graphics_path_arc): new function. - - * devices/cairo/hgdevice-cairo.c (_hg_cairo_device_real_stroke): - implemented the color conversion for HSV. - (_hg_cairo_device_set_path): implemented for HG_PATH_ARC. - -2006-02-21 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgpage.c (hg_page_get_size): convert mm size to unit - size. - - * hieroglyph/hgdevice.c (hg_device_draw): added HG_RENDER_EOFILL. - (hg_device_draw): call finalizer. - - * hieroglyph/hgpath.c (_hg_path_node_real_copy): new function. - (_hg_path_real_copy): new function. - (hg_path_copy): new function. - (hg_path_get_bbox): new function. - (hg_path_rlineto): new function. - (hg_path_curveto): new function. - - * hieroglyph/hgrender.c (hg_render_eofill_new): new function. - - * libretto/operator.c (_libretto_operator_op_private_loop_continue): - implemented. - (_libretto_operator_op_private_repeat_continue): implemented. - (_libretto_operator_op_abs): implemented. - (_libretto_operator_op_aload): implemented. - (_libretto_operator_op_clippath): implemented. - (_libretto_operator_op_closepath): set VMerror - if libretto_graphics_path_close failed. - (_libretto_operator_op_curveto): implemented. - (_libretto_operator_op_cvi): implemented. - (_libretto_operator_op_div): implemented. - (_libretto_operator_op_eofill): implemented. - (_libretto_operator_op_fill): set VMerror - if libretto_graphics_render_fill failed. - (_libretto_operator_op_grestore): set VMerror - if libretto_graphics_state_restore failed. - (_libretto_operator_op_gsave): set VMerror - if libretto_graphics_state_save failed. - (_libretto_operator_op_gt): implemented. - (_libretto_operator_op_lineto): set VMerror - if libretto_graphics_path_lineto failed. - (_libretto_operator_op_loop): implemented. - (_libretto_operator_op_mod): implemented. - (_libretto_operator_op_moveto): set VMerror - if libretto_graphics_path_moveto failed. - (_libretto_operator_op_mul): make an real object when it's bigger than - G_MAXINT. - (_libretto_operator_op_neg): implemented. - (_libretto_operator_op_newpath): set VMerror - if libretto_graphics_path_new failed. - (_libretto_operator_op_pathbbox): implemented. - (_libretto_operator_op_pop): implemented. - (_libretto_operator_op_rand): implemented. - (_libretto_operator_op_repeat): implemented. - (_libretto_operator_op_rlineto): implemented. - (_libretto_operator_op_rotate): set VMerror - if libretto_graphics_matrix_rotate failed. - (_libretto_operator_op_sethsbcolor): implemented. - (_libretto_operator_op_srand): implemented. - (_libretto_operator_op_stroke): set VMerror - if libretto_graphics_render_stroke failed. - (_libretto_operator_op_translate): set VMerror - if libretto_graphics_matrix_translate failed. - (_libretto_operator_op_truncate): implemented. - (_libretto_operator_op_usertime): implemented. - (libretto_operator_init): make a mark object. - - * libretto/vm.c (libretto_vm_new): initialize an random number - generator. - (libretto_vm_get_current_time): new function. - (libretto_vm_get_random_generator): new function. - (libretto_vm_main): drop an object if an empty array was pushed into - exec stack. - - * libretto/lbgraphics.c (libretto_graphics_new): create an instance - of clip_path. - (libretto_graphics_set_page_size): new function. - (libretto_graphics_set_graphic_size): new function. - (libretto_graphics_path_from_clip): new function. - (libretto_graphics_get_bbox_from_path): new function. - (libretto_graphics_path_rlineto): new function. - (libretto_graphics_path_curveto): new function. - (libretto_graphics_color_set_hsv): new function. - (libretto_graphics_render_eofill): new function. - - * devices/cairo/cairo-xlib-main.c (_cairo_xlib_real_set_page_size): - removed an ad hoc code. - - * devices/cairo/hgdevice-cairo.c (hsv_to_rgb): new function. - (_hg_cairo_device_real_initialize): removed an ad hoc code. - (_hg_cairo_device_real_eofill): new function. - (_hg_cairo_device_real_fill): implemented for hsv color. - (_hg_cairo_device_set_path): added HG_PATH_RLINETO. - -2006-02-17 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgdevice.c (hg_device_draw): add HG_RENDER_ROTATE - and HG_RENDER_TRANSLATE. - - * hieroglyph/hgrender.c (hg_render_rotate_new): new function. - (hg_render_translate_new): new function. - - * libretto/operator.c (_libretto_operator_op_private_arraytomark): - implemented. - (_libretto_operator_op_array): implemented. - (_libretto_operator_op_eq): implemented. - (_libretto_operator_op_get): implemented. - (_libretto_opreator_op_grestore): implemented. - (_libretto_operator_op_gsave): implemented. - (_libretto_operator_op_ifelse): implemented. - (_libretto_operator_op_mul): implemented. - (_libretto_operator_op_newpath): implemented. - (_libretto_operator_op_put): implemented. - (_libretto_operator_op_rotate): implemented. - (_libretto_operator_op_translate): implemented. - - * libretto/vm.c (libretto_vm_main): copy an object even if it's not - an executable object. - - * libretto/lbgraphics.c (libretto_graphics_matrix_rotate): - new function. - (libretto_graphics_matrix_translate): new function. - - * devices/cairo/hgdevice-cairo.c (_hg_cairo_device_real_rotate): - new function. - (_hg_cairo_device_real_translate): new function. - - * hieroglyph/hgarray.c (_hg_array_real_to_string): - return NULL if failed. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_restore_snapshot): - collect the unnecessary objects first because it prevents to success - restoring snapshot. - (hg_mem_pool_use_periodical_gc): new function. - (hg_mem_alloc_with_flags): if it's under the periodical GC mode and - the memory usage is over the threshold, try GC before allocating - a memory. - (hg_mem_free): this is now going to free an object immediately. - be careful to use this. - - * hieroglyph/hgstring.c (hg_string_append): return FALSE if failed. - (hg_string_concat): likewise. - - * hieroglyph/hgvaluenode.h (HG_VALUE_SET_SNAPSHOT): new macro. - (HG_VALUE_MAKE_NAME_STATIC): terminate with NULL. - (HG_VALUE_MAKE_SNAPSHOT): new macro. - (HG_VALUE_GET_SNAPSHOT): new macro. - (HG_IS_VALUE_SNAPSHOT): likewise. - - * hieroglyph/hgdict.c (_hg_dict_node_free): don't call hg_mem_free - here. - (hg_dict_insert): likewise. - (hg_dict_remove): likewise. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_set_flags): - support a snapshot object. - (_hg_value_node_real_relocate): likewise. - (_hg_value_node_real_dup): likewise. - (_hg_value_node_real_copy): likewise. - (_hg_value_node_real_to_string): likewise. - (_hg_value_node_real_to_string): check NULL. - (hg_value_node_get_hash): support all object types. - (hg_value_node_compare): likewise. - - * libretto/operator.c (_libretto_operator_op_restore): - implemented. - (_libretto_operator_op_save): implemented. - - * libretto/scanner.c (_libretto_scanner_get_object): - destroy an unnecessary object immediately. - - * libretto/lbgraphics.c (_libretto_graphics_real_free): - destroy the pages. - (libretto_graphics_new): take care of the multiple pages. - - * examples/cairo-xlib.c: new file. - - * hieroglyph/hgarray.c (hg_array_new): allow an empty array. - - * hieroglyph/hgdevice.c (hg_device_draw): support HG_RENDER_STROKE. - - * hieroglyph/hgrender.c (_hg_render_stroke_real_set_flags): - new function. - (_hg_render_stroke_real_relocate): new function. - (hg_render_fill_new): fixed a typo. - (hg_render_stroke_new): new function. - - * libretto/lbgraphics.c (libretto_graphics_new): check if an error - happened. - (libretto_graphics_render_stroke): implemented. - - * devices/cairo/cairo-xlib-main.c: reimplemented. - - * devices/cairo/hgdevice-cairo.[ch]: reimplemented. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_traverse_for_gc): - don't collect an object if it's locked. - - * hieroglyph/hgpage.c (hg_page_append_node): new function. - - * hieroglyph/hgdevice.[ch]: new files. - - * hieroglyph/hgpath.[ch]: new files. - - * hieroglyph/hgmem.h (hg_mem_set_lock): new macro. - (hg_mem_set_unlock): likewise. - (hg_mem_is_locked): likewise. - - * hieroglyph/hgrender.[ch]: new files. - - * libretto/vm.c (libretto_vm_new): make a memory pool for graphics. - - * libretto/lbgraphics.[ch]: new files, which was moved from hggraphics.[ch]. - -2006-02-16 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.c (_hg_array_real_set_flags): refers current. - (_hg_array_real_relocate): relocate a current array pointer. - (_hg_array_real_dup): duplicate an array from current array pointer. - (_hg_array_real_copy): likewise. - (_hg_array_real_to_string): refers current array pointer. - (hg_array_append): if there are any removed array, then failed. - (hg_array_remove): if index is 0, just increase a pointer to speed up. - - * hieroglyph/hggraphics.[ch]: new files. - - * libretto/operator.c (_libretto_operator_op_clear): implemented. - (_libretto_operator_op_cleardictstack): implemented. - (_libretto_operator_op_closepath): implemented. - (_libretto_operator_op_dup): implemented. - (_libretto_operator_op_end): implemented. - (_libretto_operator_op_fill): implemented. - (_libretto_operator_op_lineto): implemented. - (_libretto_operator_op_moveto): implemented. - (_libretto_operator_op_roll): implemented. - (_libretto_operator_op_setgray): implemented. - (_libretto_operator_op_setlinewidth): implemented. - (_libretto_operator_op_setrgbcolor): implemented. - (_libretto_operator_op_showpage): implemented. - (_libretto_operator_op_stroke): implemented. - - * libretto/lbstack.c (libretto_stack_roll): new function. - - * libretto/vm.c (libretto_vm_get_graphics): new function. - -2006-02-15 Akira TAGOH <at@gclab.org> - - * libretto/scanner.c (_libretto_scanner_get_object): escape from - the loop after an array is terminated. - - * hieroglyph/hgpage.[ch]: new files. - - * Makefile.am: modified to install .pc files. - - * configure.ac: modified to generate .pc files. - - * tests/hgpage.c: new testcase. - - * hieroglyph.pc.in: new file. - - * hg-libretto.pc.in: new file. - -2006-02-14 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgstring.c (_hg_string_real_to_string): convert - the unvisible characters to the visible characters. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_to_string): - quote a string with (). - - * libretto/operator.c (_libretto_operator_op_private_stringcvs): - implemented. - (_libretto_operator_op_writestring): implemented. - - * libretto/scanner.c (_libretto_scanner_get_object): convert \\ stuff. - - * hieroglyph/hgarray.c (_hg_array_real_copy): new function. - - * hieroglyph/hgmem.c (hg_object_dup): check HgObject ID. - (hg_object_copy): new function. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_copy): new function. - - * libretto/operator.c (_libretto_operator_op_private_for_pos_int_continue): - copy a node to avoid an array object breakage. - (_libretto_operator_op_exec): likewise. - - * libretto/vm.c (libretto_vm_main): copy a node to avoid an object - breakage in dict. - - * hieroglyph/hgarray.c (_hg_array_real_dup): new function. - (_hg_array_real_to_string): new function. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_resize): - set the stack end again. it may breaks after the memory allocation. - (_hg_allocator_ffit_snapshot_real_to_string): new function. - (hg_object_dup): new function. - - * hieroglyph/hgstring.c (_hg_string_real_to_string): new function. - (hg_string_concat): new function. - (hg_object_to_string): new function. - - * hieroglyph/hgmacros.h (HG_SET_STACK_END_AGAIN): new macro. - - * hieroglyph/hgdict.c (_hg_dict_real_to_string): new function. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_set_flags): check NULL. - (_hg_value_node_real_dup): new function. - (_hg_value_node_real_to_string): new function. - - * hieroglyph/hgfile.c (_hg_file_object_real_to_string): new function. - (hg_file_object_new): fixed a typo. - - * libretto/operator.c (_libretto_operator_op_private_for_pos_int_continue): - reimplemented. - (_libretto_operator_op_private_write_eqeq_only): reimplemented. - (_libretto_operator_op_begin): reimplemented. - (_libretto_operator_op_count): reimplemented. - (_libretto_operator_op_def): reimplemented. - (_libretto_operator_op_dict): reimplemented. - (_libretto_operator_op_exch): reimplemented. - (_libretto_operator_op_exec): reimplemented. - (_libretto_operator_get_file_type): new function. - (_libretto_operator_get_file_mode): new function. - (_libretto_operator_op_file): reimplemented. - (_libretto_operator_op_for): reimplemented. - (_libretto_operator_op_index): reimplemented. - (_libretto_operator_op_print): reimplemented. - (_libretto_operator_op_sub): reimplemented. - (_libretto_operator_real_to_string): new function. - (BUILD_OP): set an executable bit. - - * libretto/lbstack.c (_libretto_stack_real_dup): new function. - - * libretto/vm.c (libretto_vm_get_io): new function. - (libretto_vm_set_io): likewise. - (libretto_vm_main): implemented the handler of proc. - -2006-02-12 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_free): trivial fix. - (_hg_allocator_ffit_real_resize): likewise. - (_hg_allocator_ffit_real_resize_pool): likewise. - (_hg_allocator_ffit_snapshot_real_set_flags): mark a snapshot itself. - (_hg_allocator_ffit_snapshot_real_relocate): resize a private object. - - * hieroglyph/hgstring.c (hg_string_append_c): return FALSE if resize - failed. - (hg_string_get_string): terminate with 0 here. - - * hieroglyph/hgbtree.c (hg_btree_page_insert): avoid an unnecessary - loop. - (hg_btree_page_remove): likewise. - (hg_btree_find): likewise. - (hg_btree_find_near): new function. - - * hieroglyph/hgfile.c (_hg_file_object_real_set_flags): - check if is.buf.buffer is NULL. - (_hg_file_object_real_relocate): likewise. - - * libretto/scanner.c (_libretto_scanner_get_object): initialize - with NULL. - -2006-02-08 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_resize): don't resize - if the unnecessary memory is less than sizeof (HgMemObject). - -2006-02-07 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_save_snapshot): - allocate a memory from system for snapshot of heap. - - * libretto/vm.[ch]: reimplemented. - - * libretto/operator.[ch]: reimplemented. - - * libretto/scanner.[ch]: reimplemented. - -2006-02-06 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.c (_hg_array_real_set_flags): use inline. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_snapshot_real_set_flags): - use inline. - (hg_mem_set_flags): removed. - (hg_mem_get_flags): removed. - (hg_mem_add_flags): removed. - (hg_mem_is_flags): removed. - (hg_mem_get_object): removed. - - * hieroglyph/hgstring.c (_hg_string_real_set_flags): use inline. - - * hieroglyph/hgdict.c (_hg_dict_traverse_set_flags): use inline. - (_hg_dict_node_real_set_flags): use inline. - - * hieroglyph/hgmem.h (hg_mem_get_object__inline_nocheck): new macro. - (hg_mem_get_object__inline): new macro. - (hg_mem_is_flags__inline): new macro. - (hg_mem_get_flags__inline): new macro. - (hg_mem_set_flags__inline): new macro. - (hg_mem_add_flags__inline): new macro. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_set_flags): use inline. - - * hieroglyph/hgfile.c (_hg_file_object_real_set_flags): use inline. - - * libretto/lbstack.c (_libretto_stack_real_set_flags): use inline. - - * hieroglyph/hgarray.c (_hg_array_real_free): removed. - - * hieroglyph/hgmem.c (hg_mem_get_object__inline): new macro. - (_hg_allocator_ffit_traverse_for_destroy): new function. - (_hg_allocator_ffit_real_destroy): use hg_btree_foreach instead of - iter. - (_hg_allocator_ffit_traverse_for_relocation): new function. - (_hg_allocator_ffit_relocate): relocate the variables which is located - on the object that isn't allocated with the targetted pool. - (_hg_allocator_ffit_relocate): use hg_btree_foreach instead of iter. - (_hg_allocator_ffit_traverse_for_gc): new function. - (_hg_allocator_ffit_traverse_for_gc_destroyed): new function. - (_hg_allocator_ffit_real_garbage_collection): use hg_btree_foreach - instead of iter. - - * hieroglyph/hgstring.c (_hg_string_real_free): removed. - - * hieroglyph/hgbtree.c (hg_btree_page_remove): fixed a typo. - - * hieroglyph/hgdict.c (_hg_dict_node_real_free): removed. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_free): removed. - -2006-02-05 Akira TAGOH <at@gclab.org> - - * examples/pse.c: reimplemented. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_garbage_collection): - join much more free spaces. - (hg_mem_add_root_node): save the root node list. - - * hieroglyph/hgvaluenode.h (HG_VALUE_REAL_SIMILAR): new macro. - - * hieroglyph/hgfile.c (hg_stdout_printf): fixed a typo. - (hg_stderr_printf): fixed a typo. - -2006-02-04 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.c (hg_array_new): support the variable sized - array. - (hg_array_append): resize an array when allocated array is full. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_resize_pool): - allocate much more memory if block_size is bigger than the initial - allocated size. - (_hg_allocator_ffit_real_garbage_collection): copy the object to - new tree to avoid non-marking accidentally. - - * hieroglyph/hgvaluenode.h (HG_VALUE_SET_FILE): new macro. - (HG_VALUE_MAKE_FILE): likewise. - (HG_VALUE_GET_FILE): likewise. - (HG_IS_VALUE_FILE): likewise. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_free): add file object - support. - (_hg_value_node_real_set_flags): likewise. - (_hg_value_node_real_relocate): likewise. - (hg_value_node_get_hash): likewise. - (hg_value_node_compare): likewise. - - * hieroglyph/hgfile.c (hg_file_object_has_error): renamed. - - * libretto/lbstack.c (libretto_stack_pop): fixed a crash when - the stack has just one item after pop. - -2006-02-02 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (_hg_allocator_ffit_relocate): new function. - (_hg_allocator_ffit_real_resize): new function. - (hg_mem_resize): new function. - - * hieroglyph/hgstring.c (hg_string_new): support a variable sized - string. - (hg_string_append_c): resize a string when the allocated size is full. - (hg_string_append): likewise. - -2006-02-01 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_object_get_state): new function. - (hg_object_set_state): likewise. - (hg_object_add_state): likewise. - (hg_object_is_state): likewise. - - * hieroglyph/hgbtree.c (hg_btree_page_blance): check null. - (hg_btree_page_blance): fixed a typo that causes a memory corruption. - - * hieroglyph/hgmem.h (hg_object_readable): new macro. - (hg_object_unreadable): new macro. - (hg_object_is_readable): new macro. - (hg_object_writable): new macro. - (hg_object_is_writable): new macro. - (hg_object_unwritable): new macro. - (hg_object_executable): new macro. - (hg_object_unexecutable): new macro. - (hg_object_is_executable): new macro. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_free): added null and - mark object support. - (_hg_value_node_real_set_flags): likewise. - (_hg_value_node_real_relocate): likewise. - - * hieroglyph/hgarray.c (_hg_array_real_relocate): - use HgMemRelocateInfo. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_resize_pool): - use HgMemRelocateInfo. - (_hg_allocator_ffit_snapshot_real_relocate): likewise. - - * hieroglyph/hgstring.c (_hg_string_real_relocate): - use HgMemRelocateInfo. - - * hieroglyph/hgdict.c (_hg_dict_traverse_relocate): - use HgMemRelocateInfo. - (_hg_dict_real_relocate): likewise. - (_hg_dict_node_real_relocate): likewise. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_relocate): - use HgMemRelocateInfo. - - * hieroglyph/hgfile.c (_hg_file_object_real_relocate): - use HgMemRelocateInfo. - (hg_file_object_new): get a buffer size as gint32 instead of gsize. - - * libretto/lbstack.c (_libretto_stack_real_relocate): - use HgMemRelocateInfo. - -2006-01-31 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvaluenode.h (HG_VALUE_SET_MARK): new macro. - (HG_VALUE_MAKE_MARK): new macro. - (HG_VALUE_GET_MARK): new macro. - (HG_IS_VALUE_MARK): new macro. - - * hieroglyph/hgdict.c (_hg_dict_node_compare_with_string): - new function. - (hg_dict_lookup_with_string): new function. - - * hieroglyph/hgfile.c (hg_file_object_new): resize the buffer size - if the given is less than zero. - - * libretto/lbstack.c (libretto_stack_index): fixed a typo. - - * hieroglyph/hgvaluenode.h (HG_VALUE_SET_NULL): new macro. - (HG_VALUE_SET_POINTER): likewise. - (HG_VALUE_MAKE_NULL): likewise. - (HG_VALUE_MAKE_POINTER): likewise. - (HG_VALUE_GET_NULL): likewise. - (HG_VALUE_GET_POINTER): likewise. - (HG_IS_VALUE_NULL): likewise. - (HG_IS_VALUE_POINTER): likewise. - - * hieroglyph/hgfile.c (hg_file_object_ungetc): new function. - -2006-01-29 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_pool_allow_resize): new function. - - * hieroglyph/hgarray.c (_hg_array_real_set_flags): use hg_mem_add_flags - instead of hg_mem_use_flags. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_snapshot_real_free): - new function. - (_hg_allocator_ffit_snapshot_real_set_flags): likewise. - (_hg_allocator_ffit_snapshot_real_relocate): likewise. - (_hg_allocator_ffit_snapshot_traverse_save): likewise. - (_hg_allocator_ffit_snapshot_traverse_complex_object): likewise. - (_hg_allocator_ffit_real_restore_snapshot): implemented. - (hg_mem_garbage_collection): new function. - (hg_mem_alloc_with_flags): likewise. - (hg_mem_add_flags): likewise. - - * hieroglyph/hgstring.c (_hg_string_real_set_flags): new function. - (_hg_string_real_relocate): new function. - - * hieroglyph/hgvaluenode.h (HG_VALUE_MAKE_NAME_STATIC): new macro. - (HG_VALUE_SET_NAME_STATIC): new macro. - - * hieroglyph/hgdict.c (_hg_dict_traverse_set_flags): fixed to not set - flags properly. - (_hg_dict_traverse_relocate): new function. - (_hg_dict_real_relocate): new function. - (_hg_dict_node_real_set_flags): use hg_mem_add_flags instead of - hg_mem_set_flags. - - * hieroglyph/hgfile.c (_hg_file_object_real_set_flags): use - hg_mem_add_flags instead of hg_mem_set_flags. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_set_flags): likewise. - -2006-01-25 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgbtree.c (_hg_btree_count_traverse): new function. - (hg_btree_length): likewise. - - * hieroglyph/hgmem.h (hg_mem_complex_mark): new macro. - (hg_mem_complex_unmark): likewise. - (hg_mem_is_complex_mark): likewise. - - * libretto/lbstack.c (libretto_stack_new): check if allocation was - failed. - - * hieroglyph/hgstring.c (hg_string_new): likewise. - - * hieroglyph/hgdict.c (hg_dict_new): likewise. - - * hieroglyph/hgvaluenode.c (hg_value_node_new): likewise. - - * hieroglyph/hgfile.c (hg_file_object_new): likewise. - - * hieroglyph/hgmem.c (hg_mem_pool_save_snapshot): new function. - (hg_mem_pool_restore_snapshot): new function. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_free): add Array - support. - (_hg_value_node_real_set_flags): likewise. - (_hg_value_node_real_relocate): likewise. - (hg_value_node_get_hash): likewise. - (hg_value_node_compare): likewise. - - * hieroglyph/hgvaluenode.h (hg_value_node_restorable): new macro. - (hg_value_node_is_restorable): likewise. - - * hieroglyph/hgmem.h (hg_mem_restorable): new macro. - (hg_mem_is_restorable): likewise. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_gc_mark): try to mark - the object from the root node. - (hg_mem_add_root_node): new function. - (hg_mem_remove_root_node): new function. - (hg_mem_pool_destroy): free the root node. - (_hg_allocator_ffit_real_resize_pool): try to relocate the addresses - in the root node. - (hg_mem_pool_save_snapshot): new function. - (hg_mem_pool_restore_snapshot): new function. - -2006-01-24 Akira TAGOH <at@gclab.org> - - * libretto/lbstack.c (_libretto_stack_real_set_flags): implemented. - (_libretto_stack_real_relocate): implemented. - - * libretto/lbstack.[ch]: reimplemented. - - * hieroglyph/hgfile.[ch]: reimplemented. - -2006-01-23 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgdict.c (_hg_dict_traverse_set_flags): new function. - (_hg_dict_real_set_flags): likewise. - (_hg_dict_node_real_set_flags): likewise. - (_hg_dict_node_real_relocate): likewise. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_relocate): new function. - - * hieroglyph/hgarray.c (_hg_array_real_set_flags): new function. - (_hg_array_real_relocate): likewise. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_resize_pool): recompute - all the addresses. - (hg_mem_set_flags): notify to all the children objects. - (hg_mem_get_object): new function. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_free): added name and - dict object. - (_hg_value_node_real_set_flags): new function. - (hg_value_node_get_hash): added name and dict object. - (hg_value_node_compare): likewise. - -2006-01-21 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_garbage_collection): - implemented GC. - (_hg_allocator_ffit_real_gc_mark): new function. - (_hg_mem_free): moved out from hg_mem_free. - (hg_mem_set_stack_end): new function. - (hg_mem_free): do nothing if allocator supports GC. - (hg_mem_set_flags): new function. - (hg_mem_get_flags): likewise. - (hg_mem_is_flags): likewise. - - * hieroglyph/hgbtree.c (hg_btree_page_foreach): fixed not to pick up - some nodes. - (hg_btree_page_get_iter): new function. - (hg_btree_iter_new): likewise. - (hg_btree_iter_free): likewise. - (hg_btree_get_iter_first): likewise. - (hg_btree_get_iter_next): likewise. - (hg_btree_is_iter_valid): likewise. - (hg_btree_update_iter): likewise. - (hg_btree_first): removed. - - * hieroglyph/hgmem.h (hg_mem_gc_mark): new macro. - (hg_mem_gc_unmark): likewise. - (hg_mem_is_gc_mark): likewise. - -2006-01-20 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvaluenode.c (hg_value_node_get_hash): support - HG_TYPE_VALUE_STRING. - - * hieroglyph/hgstring.[ch]: reimplemented. - - * hieroglyph/hgmem.c (_hg_mem_init_stack_start): use __libc_stack_end - instead of the value where from /proc/self/stat. - (_hg_allocator_ffit_real_destroy): destroy all the node. - (_hg_allocator_ffit_real_alloc): fixed a memory leak. - (_hg_allocator_ffit_compare): fixed not to sort out properly. - - * hieroglyph/hgbtree.c (hg_btree_page_foreach): fixed a typo. - (hg_btree_page_first): new function. - (hg_btree_first): new function. - - * hieroglyph/hgdict.c (_hg_dict_node_free): new function. - (_hg_dict_destroy): destroy the node instance as well. - (hg_dict_new): don't set a destroyer function where called at - destroying, to avoid the loop between the allocator destroyer. - (hg_dict_remove): remove the hash key when there are no items for that - anymore. - - * hieroglyph/hgmem.c (_hg_allocator_ffit_real_resize_pool): - align to the block size. - - * hieroglyph/hgdict.[ch]: reimplemented. - - * hieroglyph/hgvaluenode.c (hg_value_node_get_hash): new function. - (hg_value_node_compare): likewise. - -2006-01-19 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.[ch]: reimplemented. - - * hieroglyph/hgmem.c (_hg_mem_init_stack_start): new function to - determine the stack location. - (_hg_allocator_get_block_id): fixed a problem that the return value - could be less than the given size. - (_hg_allocator_ffit_real_alloc): put an identity to recognize an - object. - (_hg_allocator_ffit_real_free): forgot to add a free block to the list. - (hg_mem_init): implemented. - (hg_mem_finalize): new function. - (hg_mem_free): free an object without a memory pool because the given - pool could be the different thing. so tell the object which one was - your mother. - - * hieroglyph/hgbtree.c (hg_btree_page_foreach): make it possible to - give an extra data. - (hg_btree_foreach): likewise. - - * hieroglyph/hgvaluenode.[ch]: reimplemented. - -2006-01-18 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.[ch]: reimplemented a lot. - - * hieroglyph/hgmacros.h: new file. - -2006-01-17 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgbtree.c (hg_btree_page_destroy): fixed a memory leak. - (hg_btree_page_insert): fixed a typo. - (hg_btree_page_insert): free a val when it's called as replaced. - (hg_btree_replace): new function. - -2006-01-16 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgbtree.[ch]: new files. - -2006-01-13 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (hg_mem_save_object_new): make it speeding up - a bit. - - * hieroglyph/hgfile.c (_hg_file_object_free__internal): mmap support. - (hg_file_object_new): likewise. - (hg_file_object_is_error): likewise. - (hg_file_object_read): likewise. - (hg_file_object_read_line): likewise. - (hg_file_object_write): likewise. - (hg_file_object_seek): likewise. - (hg_file_object_getchar): new function. - - * libretto/scanner.c (libretto_scanner_get_token): make it speeding - up a bit. - -2006-01-11 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.c (hg_array_new): try GC when the memory - allocation was failed. - (hg_array_length__internal): removed. - - * hieroglyph/hgmem.c (_gg_list_reverse_find): new function. - (hg_mem_save_object_new): try GC when the memory allocation was - failed. - (hg_mem_object_new): likewise. - (hg_mem_object_gc_append_root): new function. - (hg_mem_object_gc_remove_root): new function. - (hg_mem_gc_mark_from_root_node__internal): new function. - (hg_mem_gc_mark_from_root_node): new function. - - * hieroglyph/hgstring.c (hg_string_new): try GC when the memory - allocation was failed. - - * hieroglyph/hgdict.c (_hg_dict_real_dup): new function. - (hg_dict_new): try GC when the memory allocation was failed. - - * hieroglyph/hgvaluenode.c (hg_value_node_new): return NULL when - hg_mem_object_new was failed. - - * hieroglyph/hgfile.c (_hg_file_object_real_to_string): new function. - (hg_file_object_read_line): don't try to copy the buffer more than - the buffer size. - (hg_file_object_seek): new function. - - * configure.ac: check if fseeko is available. - - * libretto/operator.c (_libretto_operator_op_begin): implemented. - (_libretto_operator_op_def): implemented. - (_libretto_operator_op_dict): implemented. - (_libretto_operator_op_exec): implemented. - - * libretto/scanner.c (_libretto_scanner_get_next_token): parse a token - from the file object instead of String. - (libretto_scanner_get_object): return NULL when there are no token. - - * libretto/vm.c (libretto_vm_new): enable the statement edit scanning - by default. - (libretto_vm_new): add the stacks, the dictionaries to the root node - to get GC working. - (libretto_vm_init): wrap up the dictionaries with HgValueNode before - pushing them into the stack. - (libretto_vm_exec): don't set an executable flag to the name object - since Array has the proper flag. - (libretto_vm_exec): get a token from the file object directly. - -2006-01-06 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.c (_hg_array_real_gc_marker): call - hg_value_node_node_gc_mark__internal instead of its own codes for - the nodes. - (_hg_array_real_gc_lock): likewise. - (_hg_array_real_to_string): likewise. - - * hieroglyph/hgdict.c (_hg_dict_real_gc_marker): call - hg_value_node_node_gc_mark__internal instead of its own codes for - the nodes. - (_hg_dict_real_gc_lock): likewise. - (_hg_dict_node_gc_marker): removed. - (_hg_dict_node_gc_lock): removed. - - * hieroglyph/hgvaluenode.c (_hg_value_node_real_gc_lock): new function. - (_hg_value_node_real_to_string): new function. - (_hg_value_node_real_dup): new function. - (hg_value_node_node_gc_mark__internal): new function. - (hg_value_node_node_gc_lock__internal): new function. - (hg_value_node_node_to_string__internal): new function. - (hg_value_node_node_dup__internal): new function. - (hg_value_node_compare): new function. - - * libretto/scanner.c (_libretto_scanner_get_next_token): clean - the buffer up when a line is only a comment. - - * libretto/lbstack.c (_libretto_stack_real_gc_marker): call - hg_value_node_node_gc_mark__internal instead of having its own code for - the nodes. - (_libretto_stack_real_gc_lock): likewise. - - * libretto/vm.c (libretto_vm_set_emulation_level): new function. - (libretto_vm_exec): fixed a fail when comment appears in the string. - - * hieroglyph/hgarray.c (_hg_array_real_to_string): output a string - without / if the name object has an executable flag. - (_hg_array_real_dup): new function. - (hg_array_length__internal): new function. - (hg_array_append__internal): likewise. - (hg_array_replace_with_index__internal): likewise. - - * hieroglyph/hgstring.c (hg_string_real_length__internal): - new function. - (hg_string_get_character__internal): new function. - - * hieroglyph/hgvaluenode.[ch]: new files. - - * hieroglyph/hgfile.c (hg_file_object_is_error): renamed from - hg_file_is_accessible. - (hg_file_object_get_error): new function. - - * libretto/operator.c (_libretto_operator_op_private_for_pos_int_continue): - implemented. - (_libretto_operator_op_private_write_eqeq_only): implemented. - (_libretto_operator_op_bind): implemented. - (_libretto_operator_op_count): implemented. - (_libretto_operator_op_exch): implemented. - (_libretto_operator_get_open_type): new function. - (_libretto_operator_get_access_type): new function. - (_libretto_operator_op_file): implemented. - (_libretto_operator_op_for): implemented. - (_libretto_operator_op_index): implemented. - (_libretto_operator_op_print): implemented. - (_libretto_operator_op_sub): implemented. - (_libretto_operator_op_writestring): implemented. - (libretto_operator_init): defined /write==only, /==only, /== and - /pstack operator. - - * libretto/scanner.c (_libretto_scanner_parse_string): convert \n, \r, - \t, \b and \f to the actual control characters. - (_libretto_scanner_get_next_token): fixed a typo. - (libretto_scanner_get_object): use hg_value_node_new instead of - hg_mem_object_new. - - * libretto/vm.c (_libretto_vm_examine_object): make a duplicate object - to avoid an array breakage. - (libretto_vm_destroy): destroy a scanner object. - (libretto_vm_file_set_error): new function. - (libretto_vm_exec): implemented a procedure for array. - (libretto_vm_exec): make a duplicate object to avoid an array breakage. - (libretto_vm_exec): implemented a trivial code to dump current ostack - and estack. (FIXME: it should be done by PS code) - -2006-01-05 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.c (_hg_array_real_gc_marker): support HG_TYPE_FILE - object. - (_hg_array_real_to_string): new function. - - * hieroglyph/hgmem.c (hg_mem_object_dup): new function. - (hg_mem_object_to_string_internal): new function. - (hg_mem_object_to_string): new function. - - * hieroglyph/hgstring.c (_hg_string_real_to_string): new function. - (hg_string_real_length): new function. - - * hieroglyph/hgtypes.c (hg_value_compare): support HG_TYPE_FILE object. - - * hieroglyph/hgdict.c (_hg_dict_node_gc_marker): support - HG_TYPE_FILE object. - (_hg_dict_node_gc_lock): likewise. - (_hg_dict_hash): likewise. - (_hg_dict_real_to_string): new function. - - * hieroglyph/hgmem.h (hg_mem_object_set_node_internal): new macro. - (hg_mem_object_set_node): likewise. - (hg_mem_object_copy_node_internal): likewise. - (hg_mem_object_copy_node): likewise. - - * hieroglyph/hgfile.c (_hg_file_get_access_mode): new function. - (hg_file_object_is_accessible): likewise. - - * libretto/operator.c (libretto_operator_define_macro): a macro to - define the couple of PS object. - (libretto_operator_op_private_gstringcvs): implemented. - (libretto_operator_op_add): implemented. - (_libretto_operator_real_to_string): new function. - (libretto_operator_init): define /write=only, /=only and /= operator. - (libretto_operator_get_name): new function. - - * libretto/scanner.c: reimplemented. - - * libretto/lbstack.c (_libretto_stack_real_gc_marker): support - HG_TYPE_FILE object. - - * libretto/vm.c (_libretto_vm_examine_object): new function. - (libretto_vm_new): initialize a scanner. - (libretto_vm_set_estack): new function. - (libretto_vm_is_error): likewise. - (libretto_vm_set_error): likewise. - (libretto_vm_exec): implemented. - -2005-12-30 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgfile.[ch]: new files. - - * hieroglyph/hgmem.c (hg_mem_chunk_new): new function. - (hg_mem_chunk_ref): likewise. - (hg_mem_chunk_unref): likewise. - (hg_mem_chunk_alloc): likewise. - (hg_mem_chunk_alloc0): likewise. - (hg_mem_chunk_free): likewise. - (hg_mem_is_internal): likewise. - (hg_mem_object_is_internal): likewise. - (hg_mem_object_is): likewise. - - * hieroglyph/hgtypes.h (HG_VALUE_SET_NAME): fixed a typo. - - * hieroglyph/hgdict.c (hg_dict_lookup_internal): new function. - - * hieroglyph/hgmem.h (hg_mem_chunk_create): new macro. - (hg_chunk_new): likewise. - (hg_chunk_new0): likewise. - (hg_chunk_free): likewise. - (hg_mem_object_is_executable_internal): likewise. - (hg_mem_object_is_executable): likewise. - - * libretto/operator.c (libretto_operator_call): new function. - - * libretto/lbstack.c (libretto_stack_index): new function. - - * libretto/vm.c (libretto_vm_get_userdict): new function. - (libretto_vm_get_errordict): likewise. - (libretto_vm_get_errorhandlerdict): likewise. - (libretto_vm_get_io): likewise. - (libretto_vm_set_io): likewise. - (libretto_vm_init): initialize operators here. - (libretto_vm_lookup_operator): new function. - (libretto_vm_exec): likewise. - -2005-12-29 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgarray.c (_hg_array_real_gc_marker): added null/pointer - object support. - (_hg_array_real_gc_lock): new function. - - * hieroglyph/hgmem.c (_hg_mem_gc_compute_relocatable): don't swap - a start pointer and an end pointer when end is null. - (hg_mem_gc_lock_internal): new function. - (hg_mem_object_gc_lock_internal): new function. - (hg_mem_object_gc_lock): new function. - (hg_mem_object_gc_mark_internal): don't mark HG_FL_MARK when it has - already been marked. - - * hieroglyph/hgtypes.c (hg_value_compare): added null/pointer - object support. - - * hieroglyph/hgdict.c (_hg_dict_node_gc_marker): added null/pointer - object support. - (_hg_dict_node_gc_lock): new function. - (_hg_dict_real_gc_lock): likewise. - (_hg_dict_hash): added null/pointer object support. - (hg_dict_insert_internal): new function. - - * hieroglyph/hgmem.h: added gc_lock function pointer. - - * libretto/lbstack.c (_libretto_stack_real_gc_marker): added - null/pointer object support. - (_libretto_stack_real_gc_lock): new function. - - * libretto/vm.c (libretto_vm_new): validate an allocated memory. - (libretto_vm_get_emulation_level): new function. - (libretto_vm_get_systemdict): likewise. - (libretto_vm_get_current_pool): likewise. - (libretto_vm_is_global_pool_used): likewise. - (libretto_vm_use_global_pool): likewise. - (libretto_vm_get_ostack): likewise. - (libretto_vm_get_estack): likewise. - (libretto_vm_get_dstack): likewise. - (libretto_vm_init): use a local pool by default. - (libretto_vm_startjob): new function. - - * libretto/operator.[ch]: new files. - -2005-12-27 Akira TAGOH <at@gclab.org> - - * configure.ac: added -Werror to CFLAGS to be sane. - - * libretto/inputdevice.[ch]: new files. - - * hieroglyph/hgmem.c (_hg_mem_save_object_free_internal): fixed - an wrong free. - (hg_mem_save_object_new): increase an reference count for the allocated - object. - (hg_mem_save_object_free): validate the heap memory before restoring. - - * hieroglyph/hgtypes.h: added mark value. - - * hieroglyph/hgstring.c (hg_string_set_string): reset error status. - (hg_string_put_character): set an error if it's out of range. - (hg_string_get_character): likewise. - - * hieroglyph/hgdict.c (hg_dict_new): initialize nodes. - - * hieroglyph/hgmem.h (hg_mem_mark_complex_object_internal): new macro. - (hg_mem_object_mark_complex_object_internal): likewise. - (hg_mem_object_mark_complex_object): likewise. - (hg_mem_executable_internal): likewise. - (hg_mem_object_executable_internal): likewise. - (hg_mem_object_executable): likewise. - - * libretto/scanner.[ch]: modified to sit down on the current memory - management system. - - * libretto/lbstack.[ch]: new files. - - * libretto/vm.[ch]: new files. - -2005-12-26 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.c (_hg_mem_save_object_free_internal): new function. - (hg_mem_init): set GAllocator here. - (hg_mem_is_initialized): new function. - (hg_mem_save_object_new): new function. - (hg_mem_save_object_free): new function. - (hg_mem_alloc): don't fail allocation even if atom_size <= 0. - -2005-12-25 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgdict.c (_hg_dict_hash_node_lookup): new function. - (hg_dict_insert): replace the value when the key was already registered. - - * hieroglyph/hgmem.c (hg_mem_pool_new): initialize all member variables - in structure. - (hg_mem_pool_allow_heap_expansion): removed. - (hg_mem_pool_set_emulation_level): new function. - (hg_mem_pool_get_emulation_level): new function. - (hg_mem_object_gc_mark_internal): new function. - (hg_mem_gc_start): check why the lock failed and retry to lock if GC - isn't still running. - (hg_mem_gc_suspend): new function. - - * hieroglyph/hgstring.c (hg_string_compare): new function. - - * hieroglyph/hgtypes.c: new file. - - * hieroglyph/hgdict.[ch]: new files. - - * hieroglyph/hgmem.h (hg_mem_object_restorable_internal): new macro. - (hg_mem_object_restorable): likewise. - (hg_mem_object_relocatable_internal): likewise. - (hg_mem_object_relocatable): likewise. - -2005-12-21 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgtypes.h: new file. - - * hieroglyph/hgmem.c: added the reverse map to object and function - pointer to free it. - (_hg_mem_object_free_internal): new function to do it without lock. - (hg_mem_pool_allow_heap_expansion): do lock. - (hg_mem_pool_lookup): new function to lookup the list which contains - HgMem. - (hg_mem_alloc): removed lock stuff. - (hg_mem_free): likewise. - (hg_mem_set_destroyer): new function. - (hg_mem_object_new): trivial fix. - (hg_mem_object_get_status): new function. - (hg_mem_object_set_status): new function. - (hg_mem_gc_mark_internal): new function. - (hg_mem_gc_mark): new function. - - * hieroglyph/hgstring.[ch]: new files for handling string. - - * hieroglyph/hgerror.h: error definition file. - - * hieroglyph/hgarray.[ch]: new files for the array. - -2005-12-19 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgmem.[ch]: new file for the memory management. - -2005-12-03 Akira TAGOH <at@gclab.org> - - * tests/doretree.ps: added a testcase. - * tests/snowflak.ps: added a testcase. - * tests/run.sh: added. - - * devices/cairo/hgdevice-cairo.c, libretto/lvstring.c, - libretto/lvarray.c, libretto/lvarray.h, libretto/lvdict.c, - libretto/operator.c, libretto/lvmark.c, hieroglyph/hgvalue-string.c, - hieroglyph/hgfilter.c, hieroglyph/hgvalue-boolean.c, - hieroglyph/hgvalue-name.c, hieroglyph/hgvalue-real.c, - hieroglyph/hgvalue-hash.c, hieroglyph/hgvalue-integer.c, - hieroglyph/hgvalue.c, hieroglyph/hgvalue-array.c, - hieroglyph/hgvalue-pointer.c, hieroglyph/hgstream.c, - hieroglyph/hgvalue-array.h, hieroglyph/hgdevice.c: removed the unused - variable. - - * hieroglyph/hgdevice.c (hieroglyph_device_class_init): added rmove_to - signal. - (hieroglyph_device_rmove_to): new function. - - * libretto/operator.c (libretto_operator_op_atan): implemented atan - operator. - (libretto_operator_op_concatmatrix): implemented concatmatrix operator. - (libretto_operator_op_cos): implemented cos operator. - (libretto_operator_op_lt): implemented lt operator. - (libretto_operator_op_matrix): implemented matrix operator. - (libretto_operator_op_rmoveto): implemented rmoveto operator. - (libretto_operator_op_sin): implemented sin operator. - (libretto_operator_op_sqrt): implemented sqrt operator. - - * devices/cairo/hgdevice-cairo.c (hieroglyph_cairo_device_real_rmove_to): - new callback function. - - * hieroglyph/hgdevice.c (hieroglyph_device_class_init): removed - the unnecessary callback functions. - (hieroglyph_device_class_init): added a clip signal and removed - path_bbox and path_bbox2 signals. - (_hieroglyph_device_open): set the initial clippath. - (hieroglyph_path_new): new function. - (hieroglyph_path_free): likewise. - (hieroglyph_path_copy): likewise. - (_hieroglyph_device_path_bbox): likewise. - (hieroglyph_device_clip): likewise. - (hieroglyph_device_clip_path): set a path. - (hieroglyph_device_close_path): likewise. - (hieroglyph_device_curve_to): likewise. - (hieroglyph_device_eofill): likewise. - (hieroglyph_device_fill): likewise. - (hieroglyph_device_line_to): likewise. - (hieroglyph_device_move_to): likewise. - (hieroglyph_device_new_path): clear the paths. - (hieroglyph_device_rline_to): set a path. - - * libretto/operator.c (libretto_operator_op_clip): implemented clip - operator. - (libretto_operator_op_rotate): convert a degree to a radian. - - * libretto/scanner.c (_libretto_scanner_find_skip_characters): - trival fix. - (_libretto_scanner_skip_characters): likewise. - (_libretto_scanner_get_next_token): skip the comment without the large - loop. - - * libretto/lvdict.c (libretto_value_dict_hash_key_equal): trival fix. - - * libretto/operator.h: include the stacks in the structure. - - * devices/cairo/hgdevice-cairo.c (hieroglyph_cairo_device_real_clip): - new callback function. - (hieroglyph_cairo_device_real_clip_path): fixed the wrong implementation. - (hieroglyph_cairo_device_real_path_bbox): removed. - (hieroglyph_cairo_device_real_path_bbox2): removed. - (_hieroglyph_cairo_device_show_path): new function for the path debug. - -2005-11-30 Akira TAGOH <at@gclab.org> - - * tests/Makefile.am (noinst_PROGRAMS): clean up. - - * libretto/Makefile.am (lrinclude_HEADERS): clean up. - - * requires (GLIB_REQUIRED): require glib >= 2.8.0. - - * hieroglyph/hgdevice.c (hieroglyph_device_class_init): - added more signals. - (hieroglyph_device_curve_to): new function. - (hieroglyph_device_eofill): likewise. - (hieroglyph_device_rline_to): likewise. - (hieroglyph_device_rotate): likewise. - (hieroglyph_device_translate): likewise. - - * hieroglyph/hgvalue-array.c (hieroglyph_value_array_pop): - access to GPtrArray directly. - - * configure.ac: added --enable-profile option. - - * libretto/operator.c (libretto_operator_op_abs): implemented abs - operator. - (libretto_operator_op_aload): implemented aload operator. - (libretto_operator_op_curveto): implemented curveto operator. - (libretto_operator_op_eofill): implemented eofill operator. - (libretto_operator_op_mod): implemented mod operator. - (libretto_operator_op_rand): implemented rand operator. - (libretto_operator_op_rlineto): implemented rlineto operator. - (libretto_operator_op_rotate): implemented rotate operator. - (libretto_operator_op_setgray): implemented setgray operator. - (libretto_operator_op_sethsbcolor): implemented sethsbcolor operator. - (libretto_operator_op_srand): implemented srand operator. - (libretto_operator_op_translate): implemented translate operator. - (rgb_to_hsv): borrowed from GTK+. - (hsv_to_rgb): likewise. - (libretto_operator_new): add true, false and null into the systemdict. - - * devices/cairo/hgdevice-cairo.c (hieroglyph_cairo_device_real_curve_to): - new callback function. - (hieroglyph_cairo_device_real_eofill): likewise. - (hieroglyph_cairo_device_real_rline_to): likewise. - (hieroglyph_cairo_device_real_rotate): likewise. - (hieroglyph_cairo_device_real_translate): likewise. - -2005-11-25 Akira TAGOH <at@gclab.org> - - * examples/ps2x.c: new file. - - * examples/Makefile.am (noinst_PROGRAMS): added ps2x. - - * examples/ps2ps.c (main): use hieroglyph_init instead of the macros - for debug. - - * hieroglyph/hgdevice.c (hieroglyph_device_class_init): - added more callbacks and signals. - (hieroglyph_device_clip_path): new function. - (hieroglyph_device_close_path): likewise. - (hieroglyph_device_fill): likewise. - (hieroglyph_device_line_to): likewise. - (hieroglyph_device_new_path): likewise. - (hieroglyph_device_path_bbox): likewise. - (hieroglyph_device_path_bbox2): likewise. - (hieroglyph_device_restore): likewise. - (hieroglyph_device_save): likewise. - (hieroglyph_device_set_line_width): likewise. - (hieroglyph_device_set_rgb_color): likewise. - (hieroglyph_device_stroke): likewise. - - * hieroglyph/hgvalue-array.c (hieroglyph_value_array_clear): - fixed an removal from the wrong place. - - * hieroglyph/hgobject.c (hieroglyph_init): new function. - - * hieroglyph/hgdefs.h: added HgBBox structure. - - * hieroglyph/hgfilter.c (hieroglyph_filter_real_set_device): - new callback function. - - * filters/ps/ps-filter.c (ps_filter_private_init): call - libretto_operator_init. - (ps_filter_real_set_device): new callback function. - (filter_open): connect to set_device signal. - - * libretto/operator.c (libretto_operator_op_begin): implemented begin - operator. - (libretto_operator_op_clear): implemented clear operator. - (libretto_operator_op_cleardictstack): implemented cleardictstack - operator. - (libretto_operator_op_clippath): implemented clippath operator. - (libretto_operator_op_closepath): implemented closepath operator. - (libretto_operator_op_cvi): implemented cvi operator. - (libretto_operator_op_dict): implemented dict operator. - (libretto_operator_op_div): implemented div operator. - (libretto_operator_op_end): implemented end operator. - (libretto_operator_op_fill): implemented fill operator. - (libretto_operator_op_get): implemented get operator. - (libretto_operator_op_grestore): implemented grestore operator. - (libretto_operator_op_gsave): implemented gsave operator. - (libretto_operator_op_lineto): implemented lineto operator. - (libretto_operator_op_moveto): implemented moveto operator. - (libretto_operator_op_newpath): implemented newpath operator. - (libretto_operator_op_pathbbox): implemented pathbbox operator. - (libretto_operator_op_repeat): implemented repeat operator. - (libretto_operator_op_roll): implemented roll operator. - (libretto_operator_op_setlinewidth): implemented setlinewidth operator. - (libretto_operator_op_setrgbcolor): implemented setrgbcolor operator. - (libretto_operator_op_stroke): implemented stroke operator. - (libretto_operator_op_truncate): implemented truncate operator. - (libretto_operator_op_usertime): implemented usertime operator. - - * libretto/scanner.c (_libretto_scanner_parse_string): - ignore only \r at the end of line. - (_libretto_scanner_parse_hexadecimal_string): new function. - (_libretto_scanner_get_next_token): implemented <hex> scanner. - (libretto_scanner_parse_numbers): new function. - - * devices/cairo/cairo-xlib-main.c: new file for x11 module. - - * devices/cairo/hgdevice-cairo.c (hieroglyph_cairo_device_real_clip_path): - new callback function. - (hieroglyph_cairo_device_real_close_path): likewise. - (hieroglyph_cairo_device_real_fill): likewise. - (hieroglyph_cairo_device_real_line_to): likewise. - (hieroglyph_cairo_device_real_new_path): likewise. - (hieroglyph_cairo_device_real_path_bbox): likewise. - (hieroglyph_cairo_device_real_path_bbox2): likewise. - (hieroglyph_cairo_device_real_restore): likewise. - (hieroglyph_cairo_device_real_save): likewise. - (hieroglyph_cairo_device_real_set_line_width): likewise. - (hieroglyph_cairo_device_real_set_rgb_color): likewise. - (hieroglyph_cairo_device_real_stroke): likewise. - - * devices/cairo/Makefile.am (device_LTLIBRARIES): added x11 module. - - * devices/cairo/hgdevice-cairo.h: added Xlib support. - -2005-11-23 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (libretto_operator_op_and): implemented and - operator. - (libretto_operator_op_eq): implemented eq operator. - (libretto_operator_op_gt): implemented gt operator. - (libretto_operator_op_mul): implemented mul operator. - (libretto_operator_op_neg): implemented neg operator. - - * libretto/scanner.c (_libretto_scanner_get_next_token): - moved from libretto_scanner_get_next_token to parse the multiple { } - recursively. - - * libretto/operator.c (_libretto_operator_object2string): - check the array size. - (libretto_operator_op_array): implemented array operator. - (libretto_operator_op_for): implemented for operator. - (libretto_operator_op_put): implemented put operator. - - * libretto/operator.c (_libretto_operator_object2string): - display an operator object. - (libretto_operator_op_bind): implemented bind operator. - (libretto_operator_build_closure): take an operator name in - the argument and set it as quark. - (libretto_operator_process_object): call libretto_operator_call when - it was HgValuePointer. - - * libretto/lvdict.c (libretto_value_dict_real_lookup): - new function for lookup signal on HgValueHash. - (libretto_value_dict_new): connect to lookup signal. - (libretto_value_dict_lookup): emit a lookup signal instead of - calling hieroglyph_value_hash_lookup. - -2005-11-22 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (libretto_operator_real_destroy): - use LibrettoValueDict instead of HgValueHash. - (_libretto_operator_object2string): display the object type - for the debugging purpose. - (libretto_operator_op_currentdict): fixed a typo. - (libretto_operator_op_def): use LibrettoValueDict instead - of HgValueHash. - (libretto_operator_op_exec): call libretto_operator_exec_procedure - for LibrettoValueArray. - (libretto_operator_op_known): use LibrettoValueDict instead of - HgValueHash. - (libretto_operator_instance_init): likewise. - (DEFUNC_CLOSURE): likewise. - (libretto_operator_op_sub): implemented sub operator. - (libretto_operator_is_operator): removed. - (libretto_operator_lookup): new function. - (libretto_operator_process_object): look up the object from - the dictionary stack. - (libretto_operator_exec_procedure): new function. - - * libretto/lvdict.[ch]: new class. - - * libretto/operator.c (libretto_operator_op_s_bracketright): - use LibrettoValueArray instead of HgValueArray. - (_libretto_operator_object2string): likewise. - (libretto_operator_op_if): likewise. - (libretto_operator_op_ifelse): likewise. - (libretto_operator_op_currentdict): pick up the dictionary from the stack. - (libretto_operator_init): new function to initialize the PS engine. - - * libretto/scanner.c (_libretto_scanner_parse_numbers): - implemented a parser for { }. - - * libretto/lvmark.h (LIBRETTO_IS_VALUE_MARK_TYPE): fixed a typo. - - * libretto/scanner.h: added LIBRETTO_SCANNER_NO_MEMORY. - - * libretto/lvarray.[ch]: new class. - -2005-11-21 Akira TAGOH <at@gclab.org> - - * po/POTFILES.in: added libretto/attribute.c - - * hieroglyph/_marshal.list: added UINT:VOID marshaler. - - * hieroglyph/hgvalue.c (hieroglyph_value_real_get_node_size): - a empty function for get_node_size signal. - (hieroglyph_value_class_init): added a get_node_size signal. - (hieroglyph_value_dup): don't use g_object_ref. - (hieroglyph_value_get_node_size): new function. - - * hieroglyph/hgvalue-boolean.c (hieroglyph_value_boolean_real_get_node_size): - implemented a get_node_size signal callback. - - * hieroglyph/hgvalue-name.c (hieroglyph_value_name_real_get_node_size): - likewise. - - * hieroglyph/hgvalue-real.c (hieroglyph_value_real_real_get_node_size): - likewise. - - * hieroglyph/hgvalue-hash.c (hieroglyph_value_hash_real_get_node_size): - likewise. - - * hieroglyph/hgvalue-integer.c (hieroglyph_value_integer_real_get_node_size): - likewise. - - * hieroglyph/hgvalue-array.c (hieroglyph_value_array_real_get_node_size): - likewise. - - * hieroglyph/hgvalue-pointer.c (hieroglyph_value_pointer_real_get_node_size): - likewise. - - * hieroglyph/hgvalue-string.c (hieroglyph_value_string_real_dup_node): - implemented a dup_node signal callback. - (hieroglyph_value_string_real_get_node_size): likewise. - - * libretto/operator.c (_libretto_operator_object2string): - use LibrettoValueString instead of HgValueString. - (libretto_operator_op_dup): use hieroglyph_value_dup and set attributes. - (libretto_operator_op_if): unref the object. - (libretto_operator_op_ifelse): implemented ifelse operator. - (libretto_operator_op_xcheck): implemented xcheck operator. - (libretto_operator_is_operator): use LibrettoValueString - instead of HgValueString. - - * libretto/scanner.c (_libretto_scanner_parse_string): - use LibrettoValueString instead of HgValueString. - - * libretto/lvstring.[ch]: new class. - - * libretto/attribute.c: trivial changes. - - * libretto/Makefile.am: added lvstring.[ch]. - -2005-11-19 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (_libretto_operator_object2string): - display { } as well. - (libretto_operator_op_cvx): implemented cvx operator. - (libretto_operator_op_exec): implemented exec operator. - (libretto_operator_op_if): implemented if operator. - (libretto_operator_process_object): new function to process the object. - - * libretto/scanner.c (_libretto_scanner_parse_string): - ignore \n and \r\n with \. - (libretto_scanner_get_next_token): use HgValueName instead of HgValueKey. - give the exec attribute to the operators. - - * hieroglyph/hgvalue-key.[ch]: removed. - - * libretto/attribute.[ch]: new file. - - * tests/attribute.c: new testcase for LibrettoAttribute. - -2005-11-18 Akira TAGOH <at@gclab.org> - - * libretto/operator.c (libretto_operator_op_s_bracketright): - implemented ] operator. - (_libretto_operator_object2string): fixed a typo. - (libretto_operator_op_pop): implemented pop operator. - - * libretto/scanner.c (_libretto_scanner_is_skip_character): - new function which was seprated from _libretto_scanner_find_skip_characters. - (libretto_scanner_get_next_token): return the name object of ]. - - * libretto/lvmark.h: added null type. - -2005-11-17 Akira TAGOH <at@gclab.org> - - * examples/ps2ps.c: added an example file for converting PS to the embedded PS. - - * filters/ps/ps-filter.c (ps_filter_private_init): - new function to initialize the private structure. - (ps_filter_private_destroy): new function to destroy the private structure. - (ps_filter_get_private): new function. - (ps_filter_real_parse): new function for parse signal. - - * libretto/operator.c (libretto_operator_op_s_eqeq): implemented ==. - (_libretto_operator_object2string): new function to convert the object to the string. - (libretto_operator_op_add): implemented add operator. - (libretto_operator_op_currentdict): implemented currentdict operator. - (libretto_operator_op_def): implemented def operator. - (libretto_operator_op_dup): implemented dup operator. - (libretto_operator_op_exch): implemented exch operator. - (libretto_operator_op_known): implemented known operator. - (libretto_operator_op_pstack): implemented pstack operator. - (libretto_operator_is_operator): implemented. - (libretto_operator_call): implemented. - - * libretto/scanner.c (libretto_scanner_reset): new function to reset the scanner. - - * hieroglyph/hgvalue-array.c (hieroglyph_value_array_real_dup_node): - new callback for dup_node signal. - - * hieroglyph/hgvalue.c (hieroglyph_value_real_dup_node): - new callback for dup_node signal. - (hieroglyph_value_class_init): added dup_node signal. - (hieroglyph_value_dup): new function to duplicate HgValue. - - * hieroglyph/hgvalue-hash.c (hieroglyph_value_hash_real_hash_foreach): - new function to duplicate the hash value. - (hieroglyph_value_hash_real_dup_node): new callback for dup_node signal. - -2005-11-16 Akira TAGOH <at@gclab.org> - - * libretto/operator.[ch]: new class. - - * hieroglyph/hgfilter.c (hieroglyph_filter_class_init): - added a parse signal. - (hieroglyph_filter_set_device): increase an reference count for device. - (hieroglyph_filter_parse): new function. - - * tests/hgvalue-pointer.c: new testcase for HgValuePointer. - - * hieroglyph/hgvalue-pointer.[ch]: new class. - - * hieroglyph/hgvalue-array.c (hieroglyph_value_array_real_destroy): - ensure to destroy the objects in the array. - - * tests/hgvalue-array.c: new testcase for HgValueArray. - - * hieroglyph/hgvalue-array.[ch]: new class. - -2005-11-15 Akira TAGOH <at@gclab.org> - - * libretto/lvmark.[ch]: new class. - - * filters/ps/ps-filter.c: new file for ps filter module. - - * hieroglyph/hgdevice.[ch]: added the modular support. - - * hieroglyph/hgdefs.h: new file. - - * hieroglyph/hgfilter.[ch]: new class. - - * filters/Makefile.am: new file. - - * filters/ps/Makefile.am: new file. - - * tests/hgfilter-ps.c: new testcase for ps filter. - - * tests/hgdevice-cairo.c: new testcase for cairo device. - - * tests/Makefile.am (TESTS): added a testcase for HgFilter and HgCairoDevice. - - * devices/cairo/cairo-ps-main.c: new file for cairo device module. - - * devices/cairo/hgdevice-cairo.[ch]: new class to handle cairo device. - -2005-11-14 Akira TAGOH <at@gclab.org> - - * libretto/scanner.c (libretto_scanner_read_from_stream): - new function to read from the stream. - (libretto_scanner_get_error): new function to get the error code. - -2005-11-11 Akira TAGOH <at@gclab.org> - - * libretto/scanner.c (libretto_scanner_get_cur_line): new function. - (libretto_scanner_get_next_token): added string support. - (_libretto_scanner_parse_string): new function. - - * hieroglyph/hgvalue-string.c (hieroglyph_value_string_new): - allow NULL for the initial value. - - * libretto/scanner.c (_libretto_scanner_parse_numbers): - support the value with the radix. - - * hieroglyph/hgvalue-real.h: added a macro to compare the floating variable. - - * configure.ac: added a rule for LFS support. - - * tests/scanner.c: new testcase for scanner. - - * tests/Makefile.am (noinst_PROGRAMS): added a new testcase for scanner. - - * libretto/Makefile.am: added. - - * libretto/scanner.[ch]: new class to parse PostScript. - -2005-11-10 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvalue-key.[ch]: new class. - -2005-11-01 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgstream.[ch]: new class. - - * hieroglyph/debug.c.in (debug_assist_new_with_masks): - fixed a gcc warning. - - * hieroglyph/hgfont.[ch]: new class. - -2005-10-31 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvalue-hash.c (hieroglyph_value_hash_real_lookup): - moved from hieroglyph_value_hash_lookup. - (hieroglyph_value_hash_class_init): made a lookup signal. - - * tests/hgvalue-font.c: new testcase for HgValueFont. - - * hieroglyph/hgvalue-font.[ch]: new class. - -2005-10-29 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvalue.c (hieroglyph_value_real_destroy): - call the parent's destroy method. - - * hieroglyph/hgvalue-hash.c (hieroglyph_value_hash_real_create_node): - use the virtualized functions. - (hieroglyph_value_hash_instance_init): set the real functions for - GHashTable here. - -2005-10-28 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvalue-hash.[ch]: new class. - - * tests/hgvalue-hash.c: new testcase for HgValueHash. - - * tests/hgvalue-name.c: new testcase for HgValueName. - - * hieroglyph/hgvalue-name.[ch]: new class. - -2005-10-27 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvalue-real.h: added a macro to convert the integer value - to an real. - - * hieroglyph/hgvalue-integer.h: added a macro to convert the real value - to a integer. - - * hieroglyph/debug.c (debug_assist_new_with_masks): - fixed a memory leak. - - * devices/cairo/Makefile.am: added. - - * devices/Makefile.am: added. - - * configure.ac: added cairo checking. - -2005-10-25 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvalue.c (hieroglyph_value_real_create_node): - added warning message. - (hieroglyph_value_real_destroy_node): likewise. - - * hieroglyph/hgdevice.[ch]: new class to handle the devices. - - * hieroglyph/hgvalue-string.[ch]: new class. - - * tests/hgvalue-string.c: new testcase for HgValueString. - - * hieroglyph/hgvalue-float.[ch]: new class. - - * tests/hgvalue-float.c: new testcase for HgValueFloat. - - * hieroglyph/hgvalue-integer.c: new class. - - * hieroglyph/hgvalue-integer.h: new header file. - - * hieroglyph/Makefile.am (libhieroglyph_la_SOURCES): added hgvalue-integer.c - - * tests/Makefile.am (noinst_PROGRAMS): added test-hgvalue-integer. - - * tests/hgvalue-integer.c: new testcase for HgValueInteger. - - * hieroglyph/hgvalue-boolean.c (hieroglyph_value_set_boolean): - new function. - - * hieroglyph/hgvalue.c (hieroglyph_value_get_node): new function. - -2005-10-24 Akira TAGOH <at@gclab.org> - - * hieroglyph/hgvalue.c: added a create_node and a destroy_node signal. - - * hieroglyph/hgobject.c: added a destroy signal. - (hieroglyph_object_unref): new function. - - * hieroglyph/hgvalue.list: removed. - - * hieroglyph/hg-mkvalue.rb: removed. - - * hieroglyph/_marshal.list: added some marshaler. - - * hieroglyph/hgvalue-boolean.[ch]: new class. - - * tests/Makefile.am: added a new testcase for HgValueBoolean. - - * tests/hgvalue-boolean.c: added a new testcase for HgValueBoolean. - -2005-10-22 Akira TAGOH <at@gclab.org> - - * hieroglyph/Makefile.am: modified to generate the HgValue classes. - - * hieroglyph/hgvalue.list: added a list to generate the HgValue classes. - - * hieroglyph/hg-mkvalue.rb: added a helper program. - - * Makefile.am (EXTRA_DIST): added intltool stuff. - -2005-10-20 Akira TAGOH <at@gclab.org> - - * hieroglyph/common.h: added hgobject.h and hgvalue.h - - * hieroglyph/Makefile.am: added hgobject.[ch] and hgvalue.[ch]. - - * hieroglyph/hgobject.[ch]: base class for hieroglyph. - - * hieroglyph/hgvalue.[ch]: new class to handle the value. - - * tests/Makefile.am: added a testcase for HgValue. - diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 23e5f25..0000000 --- a/INSTALL +++ /dev/null @@ -1,236 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free -Software Foundation, Inc. - -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - -These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is -disabled by default to prevent problems with accidental use of stale -cache files.) - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - -You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. - -Installation Names -================== - -By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - -Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). Here is a another example: - - /bin/bash ./configure CONFIG_SHELL=/bin/bash - -Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent -configuration-related scripts to be executed by `/bin/bash'. - -`configure' Invocation -====================== - -`configure' recognizes the following options to control how it operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 72137ca..0000000 --- a/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -NULL = -SUBDIRS = hieroglyph tests #src devices plugins lib tests examples po - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = hieroglyph.pc -$(pkgconfig_DATA): config.status - -EXTRA_DIST = \ - hieroglyph.pc.in \ - intltool-extract.in \ - intltool-merge.in \ - intltool-update.in \ - requires \ - update-version \ - $(NULL) @@ -1,27 +0,0 @@ -Hieroglyph -============= -Hieroglyph is a PostScript rendering library with having an -own PostScript interpreter engine and support for pluggable -output devices and the extensions. - -Why did you start this project now? -====================================== -Because I am very interested in making a PostScript Virtual -Machine. However this is not a trigger of starting this -project actually. I was/am sometimes working on around the -printing stuff, because it was necessary to get them working -on any languages. they had problems on dealing with the -fonts, and they were sometimes easily broken on it. it -finally became my frustration. I could help them out every -time after the breakage, but I stoped to think about. - -There are a lot of similar softwares in the FOSS world. but -are not in the PostScript interpreter/rendering library. you -know that there are the forked project, such as ESP -Ghostscript say, I would see that it is one software in the -general meaning. Right now PostScript specification is very -stable and being perishing. and it may be unlikely to extend -something like other softwares does since that specification -may restricts it. but I believe that making another software -will be helpful to improve/add momentum to the printing -software area. @@ -1,20 +0,0 @@ - -* need work before the initial release. - - * [MUST] support asynchronous rendering - - * integrate the device modules into the plugin mechanism. - - * [MUST] complete to implement operators for PostScript Level 1 compliant. - - * [MUST] support the security restriction feature. - -* need work for future release. - - * complete to implement operators for PostScript Level 2 compliant. - - * complete to implement operators for PostScript Level 3 compliant. - - * improve a memory footprint. - - * much better GC. diff --git a/autogen.sh b/autogen.sh deleted file mode 100755 index 23fdbcb..0000000 --- a/autogen.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -# Run this to generate all the initial makefiles, etc. - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -PKG_NAME="hieroglyph" - -(test -f $srcdir/configure.ac \ - && test -f $srcdir/README \ - && test -d $srcdir/hieroglyph) || { - echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" - echo " top-level $PKG_NAME directory" - exit 1 -} - -which gnome-autogen.sh || { - echo "You need to install gnome-common from the GNOME CVS" - exit 1 -} -REQUIRED_AUTOMAKE_VERSION=1.9 . gnome-autogen.sh diff --git a/commit.sh b/commit.sh deleted file mode 100755 index 3166572..0000000 --- a/commit.sh +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -DO="" -TOPDIR=`dirname $0` -VERSIONIN=$TOPDIR/hieroglyph/version.h.in.in -VERSION_H=${VERSIONIN//.in.in}.in - -which svn > /dev/null 2>&1 -if [ $? -ne 0 ]; then - echo "Cannot find svn command. stopped." - exit -fi -which awk > /dev/null 2>&1 -if [ $? -ne 0 ]; then - echo "Cannot find awk command. stopped." - exit -fi -which sed > /dev/null 2>&1 -if [ $? -ne 0 ]; then - echo "Cannot find sed command. stopped." - exit -fi - - -if [ "x`svn stat`" = "x" ]; then - echo "No changes has been made. any changes has never committed." - exit -fi -LOG='' -if test "$1" = "--message" || test "$1" = "-m"; then - shift - LOG="$1" - shift -fi -FILES='' -while [ $# -ne 0 ]; do - FILES="$FILES $1" - shift -done -if [ "x$FILES" != "x" ]; then - FILES="$FILES ChangeLog $VERSION_H" -fi -if [ "x$LOG" = "x" ]; then - LOG="`svn diff | awk 'BEGIN{P=0;F=0}$0 ~ /^+++ ChangeLog/{F=1}F == 1 && $0 ~ /^@@/{P=1}P == 1 && $0 ~ /^+/{print $0}P == 1 && /^Index/{P=0;F=0}' | sed -e 's/^+//'`" -fi -if [ "x$LOG" = "x" ]; then - while [ 1 ]; do - echo -n "Are you sure that you want to commit file(s) without commit log? [y/N]: " - read DOCOMMIT - if [ "x$DOCOMMIT" = "x" -o "x$DOCOMMIT" = "xn" -o "x$DOCOMMIT" = "xN" ]; then - echo "Abort." - exit - elif [ "x$DOCOMMIT" = "xy" -o "x$DOCOMMIT" = "xY" ]; then - break - else - echo "Answer must be y or n." - fi - done -fi - -if [ "x$DO" = "x" ]; then - $TOPDIR/update-version -fi - -LANG=C $DO svn ci -m "$LOG" $FILES diff --git a/configure.ac b/configure.ac deleted file mode 100644 index f7dadd3..0000000 --- a/configure.ac +++ /dev/null @@ -1,320 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT([hieroglyph], 0.0.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=Hieroglyph]) - -. ./requires - -AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) -AM_MAINTAINER_MODE -AM_CONFIG_HEADER(config.h) - -AC_PROG_LIBTOOL -AC_PROG_INTLTOOL - -AC_PROG_CC - -AC_SYS_LARGEFILE - -dnl ====================================================================== -dnl initialize values -dnl ====================================================================== -pluginslist="debug test" - -dnl ====================================================================== -dnl set CFLAGS -dnl ====================================================================== -changequote(,)dnl -if test "x$GCC" = "xyes"; then - case " $CFLAGS " in - *[\ \ ]-Wall[\ \ ]*) ;; - *) CFLAGS="$CFLAGS -Wall" ;; - esac - - if test "x$enable_maintainer_mode" = "xyes"; then - case " $CFLAGS " in - *[\ \ ]-Werror[\ \ ]*) ;; - *) CFLAGS="$CFLAGS -Werror" ;; - esac - CFLAGS="`echo $CFLAGS | sed -e 's/-O./-O0/'`" - fi - - if test "x$enable_ansi" = "xyes"; then - case " $CFLAGS " in - *[\ \ ]-ansi[\ \ ]*) ;; - *) CFLAGS="$CFLAGS -ansi" ;; - esac - - case " $CFLAGS " in - *[\ \ ]-pedantic[\ \ ]*) ;; - *) CFLAGS="$CFLAGS -pedantic" ;; - esac - fi -fi -changequote([,])dnl - -dnl ====================================================================== -dnl testing functionalities -dnl ====================================================================== -dnl alignment -AC_CHECK_ALIGNOF(char) -AC_CHECK_ALIGNOF(short) -AC_CHECK_ALIGNOF(int) -AC_CHECK_ALIGNOF(long) -AC_CHECK_ALIGNOF(void *) -AC_CHECK_ALIGNOF(long long) - -dnl ====================================================================== -dnl functions testing -dnl ====================================================================== -AC_CHECK_FUNC(exp10,,[ - AC_MSG_CHECKING([for exp10 whether _GNU_SOURCE needs to be defined.]) - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -D_GNU_SOURCE" - AC_COMPILE_IFELSE([ -#include <math.h> -void *foo = exp10; - ], [ - AC_MSG_RESULT([-D_GNU_SOURCE]) - ] ,[ - AC_MSG_ERROR([FIXME: need exp10 function anyway.]) - ]) -]) - -dnl ====================================================================== -dnl gettext stuff -dnl ====================================================================== -GETTEXT_PACKAGE=$PACKAGE -AC_SUBST(GETTEXT_PACKAGE) -AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package]) - -ALL_LINGUAS="ja" -AM_GLIB_GNU_GETTEXT -AM_GLIB_DEFINE_LOCALEDIR(HGSPY_LOCALEDIR) - -dnl ====================================================================== -dnl check pkg-config stuff -dnl ====================================================================== -PKG_CHECK_MODULES(HG, glib-2.0) -PKG_CHECK_MODULES(HG_MODULE, gmodule-2.0) -PKG_CHECK_MODULES(GTK2, gtk+-2.0) -PKG_CHECK_MODULES(GTHREAD, gthread-2.0) -PKG_CHECK_MODULES(CHECK, check >= 0.9.4) -AC_SUBST(HG_CFLAGS) -AC_SUBST(HG_LIBS) -AC_SUBST(HG_MODULE_CFLAGS) -AC_SUBST(HG_MODULE_LIBS) -AC_SUBST(GTK2_CFLAGS) -AC_SUBST(GTK2_LIBS) -AC_SUBST(GTHREAD_CFLAGS) -AC_SUBST(GTHREAD_LIBS) -AC_SUBST(CHECK_CFLAGS) -AC_SUBST(CHECK_LIBS) - -dnl ====================================================================== -dnl check glib-2.0 stuff -dnl ====================================================================== -AM_PATH_GLIB_2_0($GLIB_REQUIRED, :, - AC_MSG_ERROR([ -*** GLIB $GLIB_REQUIRED_VERSION or better is required. The latest version of -*** GLIB is always available from ftp://ftp.gtk.org/.]), - gobject gmodule gthread) - -dnl ====================================================================== -dnl check another libraries -dnl ====================================================================== -AC_CHECK_LIB(edit, readline, [ - LIBEDIT_LIBS="-ledit" - AC_DEFINE(USE_LIBEDIT,1,[build with readline]) - pluginslist="$pluginslist libedit" - ],[ - LIBEDIT_LIBS="" - ]) -AC_SUBST(LIBEDIT_LIBS) -AM_CONDITIONAL(ENABLE_LIBEDIT, test x$LIBEDIT_LIBS != x) - -dnl ====================================================================== -dnl options -dnl ====================================================================== -AC_ARG_ENABLE(debug, - AC_HELP_STRING([--enable-debug], [build with the debug code.]) - ,, - enable_debug=no) -AC_ARG_ENABLE(profile, - AC_HELP_STRING([--enable-profile], [build with the profiler option.]) - ,, - enable_profile=no) -AC_ARG_ENABLE(rebuilds, - AC_HELP_STRING([--disable-rebuilds], [disable all source autogeneration rules]) - ,, - enable_rebuilds=yes) -AC_ARG_WITH(cairo, - AC_HELP_STRING([--without-cairo], [build without the cairo support.]) - ,, - with_cairo=yes) -AC_ARG_WITH(x11, - AC_HELP_STRING([--without-x11], [build without the x11 embedded support.]) - ,, - with_x11=yes) -AC_ARG_WITH(cmap, - AC_HELP_STRING([--with-cmap=DIR], [build with the CMap support.]) - ,, - with_cmap=no) - -dnl ====================================================================== -dnl options - debug -dnl ====================================================================== -AC_MSG_CHECKING(whether to enable the debuggin build) -if test "x$USE_MAINTAINER_MODE" = xyes; then - AC_MSG_RESULT(force) - enable_debug=force - AC_DEFINE(DEBUG,,[enable the debuggin build]) -elif test "x$enable_debug" = xno; then - AC_MSG_RESULT(no) -else - AC_MSG_RESULT(yes) - AC_DEFINE(DEBUG,,[enable the debuggin build]) -fi -AM_CONDITIONAL(ENABLE_DEBUG, test x$enable_debug != xno) - -dnl ====================================================================== -dnl options - profile -dnl ====================================================================== -AC_MSG_CHECKING(whether to enable the profiler) -if test "x$enable_profile" = xno; then - AC_MSG_RESULT(no) -else - AC_MSG_RESULT(yes) - changequote(,) dnl - CFLAGS="`echo $CFLAGS | sed -e 's/[ \t]-O[0-9][ \t]/ /'` -pg" - changequote([,]) dnl -fi - -dnl ====================================================================== -dnl options - rebuilds -dnl ====================================================================== -REBUILD=\# -if test "x$enable_rebuilds" = xyes; then - REBUILD= -fi -AC_SUBST(REBUILD) - -dnl ====================================================================== -dnl options - with cairo -dnl ====================================================================== -if test "x$with_cairo" = xyes; then - PKG_CHECK_MODULES(CAIRO, cairo >= $CAIRO_REQUIRED) - AC_SUBST(CAIRO_CFLAGS) - AC_SUBST(CAIRO_LIBS) - devices="${devices}cairo " -fi -AM_CONDITIONAL(ENABLE_CAIRO, test x$with_cairo != xno) - -dnl ====================================================================== -dnl options - with x11 -dnl ====================================================================== -if test "x$with_x11" = xyes; then - AC_PATH_XTRA - if test "x$no_x" = xyes; then - AC_MSG_ERROR([X development libraries not found]) - fi - X11_CFLAGS="$X_CFLAGS" - X11_LIBS="$X_LIBS $X_EXTRA_LIBS" - AC_SUBST(X11_CFLAGS) - AC_SUBST(X11_LIBS) - devices="${devices}x11-embedded " -fi -AM_CONDITIONAL(ENABLE_X11_EMBEDDED, test x$with_x11 != xno) - -dnl ====================================================================== -dnl options - with CMap -dnl ====================================================================== -if test "x$with_cmap" = xyes; then - HIEROGLYPH_CMAPDIR=${datadir}/ghostscript/CMap - AC_DEFINE(USE_CMAP,1,[enable the CMap support.]) -elif test "x$with_cmap" = xno; then - HIEROGLYPH_CMAPDIR= -else - HIEROGLYPH_CMAPDIR=$with_cmap - AC_DEFINE(USE_CMAP,1,[enable the CMap support.]) - with_cmap=yes -fi -AC_SUBST(HIEROGLYPH_CMAPDIR) - -dnl ====================================================================== -dnl variables -dnl ====================================================================== -changequote(,) dnl -HIEROGLYPH_MAJOR_VERSION=`echo $PACKAGE_VERSION | sed -e 's/\(^[0-9]*\)\.[0-9]*\.[0-9]*$/\1/'` -HIEROGLYPH_MINOR_VERSION=`echo $PACKAGE_VERSION | sed -e 's/^[0-9]*\.\([0-9]*\)\.[0-9]*$/\1/'` -HIEROGLYPH_RELEASE_VERSION=`echo $PACKAGE_VERSION | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$/\1/'` -changequote([,]) dnl -HIEROGLYPH_BINARY_VERSION=$HIEROGLYPH_MAJOR_VERSION.0 -HIEROGLYPH_DEVICEDIR="${libdir}/hieroglyph/${HIEROGLYPH_BINARY_VERSION}/devices" -HIEROGLYPH_PLUGINDIR="${libdir}/hieroglyph/${HIEROGLYPH_BINARY_VERSION}/plugins" -HIEROGLYPH_LIBDIR="${datadir}/hieroglyph/${HIEROGLYPH_BINARY_VERSION}/lib" -AC_SUBST(HIEROGLYPH_MAJOR_VERSION) -AC_SUBST(HIEROGLYPH_MINOR_VERSION) -AC_SUBST(HIEROGLYPH_RELEASE_VERSION) -AC_SUBST(HIEROGLYPH_BINARY_VERSION) -AC_SUBST(HIEROGLYPH_DEVICEDIR) -AC_SUBST(HIEROGLYPH_PLUGINDIR) -AC_SUBST(HIEROGLYPH_LIBDIR) - -dnl ====================================================================== -dnl output -dnl ====================================================================== -AC_CONFIG_FILES([ -Makefile -devices/Makefile -devices/cairo/Makefile -devices/x11-embedded/Makefile -examples/Makefile -hieroglyph/Makefile -hieroglyph/version.h -lib/Makefile -plugins/Makefile -plugins/debug/Makefile -plugins/libedit/Makefile -plugins/test/Makefile -po/Makefile.in -src/Makefile -tests/Makefile -tests/ps/Makefile -hieroglyph.pc -]) -AC_OUTPUT - -dnl ====================================================================== -dnl result -dnl ====================================================================== -echo "" -echo "========== Build Information ==========" -echo " Enable the debugging build: $enable_debug" -echo " Enable autogeneration: $enable_rebuilds" -echo " Binary version: $HIEROGLYPH_BINARY_VERSION" -echo " Device support: $devices" -echo " Device install path: $HIEROGLYPH_DEVICEDIR" -echo " Plugin install path: $HIEROGLYPH_PLUGINDIR" -echo -n " Use CMap: $with_cmap " -if test "x$with_cmap" = xyes; then - echo "($HIEROGLYPH_CMAPDIR)" -else - echo -fi -echo " Plugins list: $pluginslist" -echo " CFLAGS: $HG_CFLAGS" -echo " for modules: $HG_MODULE_CFLAGS" -if test "x$with_cairo" = xyes; then -echo " for cairo device: $CAIRO_CFLAGS" -fi -if test "x$with_x11" = xyes; then -echo " for x11 embedded device: $X11_CFLAGS" -fi -echo " LIBS: $HG_LIBS" -echo " for modules: $HG_MODULE_LIBS" -if test "x$with_cairo" = xyes; then -echo " for cairo device: $CAIRO_LIBS" -fi -if test "x$with_x11" = xyes; then -echo " for x11 embedded device: $X11_LIBS" -fi -echo "" diff --git a/devices/Makefile.am b/devices/Makefile.am deleted file mode 100644 index dd4fc8b..0000000 --- a/devices/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -NULL = -SUBDIRS = - -if ENABLE_CAIRO -SUBDIRS += cairo -endif -if ENABLE_X11_EMBEDDED -SUBDIRS += x11-embedded -endif - -EXTRA_DIST = \ - $(NULL) diff --git a/devices/cairo/Makefile.am b/devices/cairo/Makefile.am deleted file mode 100644 index a662063..0000000 --- a/devices/cairo/Makefile.am +++ /dev/null @@ -1,53 +0,0 @@ -NULL = - -INCLUDES = \ - $(HG_CFLAGS) \ - $(CAIRO_CFLAGS) \ - $(NULL) -LIBS = \ - @LDFLAGS@ \ - -export-dynamic \ - $(HG_LIBS) \ - $(CAIRO_LIBS) \ - $(NULL) -LDADDS = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) - -lib_LTLIBRARIES = \ - libhieroglyph-cairo.la \ - $(NULL) - -libhieroglyph_cairo_la_SOURCES = \ - hgdevice-cairo.c \ - hgdevice-cairo.h \ - $(NULL) -libhieroglyph_cairo_la_CFLAGS = \ - -DHG_LOG_DOMAIN="\"Hieroglyph-Cairo\"" \ - $(CFLAGS) \ - $(NULL) -libhieroglyph_cairo_la_LIBADD = \ - $(LDADDS) \ - $(NULL) - -devicedir = $(HIEROGLYPH_DEVICEDIR) -device_LTLIBRARIES = \ - libx11-device.la \ - $(NULL) - -libx11_device_la_SOURCES = \ - cairo-xlib-main.c \ - $(NULL) -libx11_device_la_CFLAGS = \ - -DHG_LOG_DOMAIN="\"X11-Device\"" \ - $(CFLAGS) \ - $(NULL) -libx11_device_la_LDFLAGS = \ - -avoid-version \ - -module \ - $(LDFLAGS) \ - $(NULL) -libx11_device_la_LIBADD = \ - libhieroglyph-cairo.la \ - $(LDADDS) \ - $(NULL) diff --git a/devices/cairo/cairo-ps-main.c b/devices/cairo/cairo-ps-main.c deleted file mode 100644 index 32412d2..0000000 --- a/devices/cairo/cairo-ps-main.c +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * cairo-ps-main.c - * Copyright (C) 2005,2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * 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. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <unistd.h> -#include <cairo/cairo-ps.h> -#include <glib.h> -#include <hieroglyph/debug.h> -#include <hieroglyph/hglog.h> -#include "hgdevice-cairo.h" - - -/* Private Functions */ -static cairo_status_t -_cairo_ps_embedded_write_stream(void *closure, - const unsigned char *data, - unsigned int length) -{ - HgCairoDevice *device = HG_CAIRO_DEVICE (closure); - size_t written; - - written = write(device->u.ps.fd, data, length); - - if (written == length) - return CAIRO_STATUS_SUCCESS; - else - return CAIRO_STATUS_WRITE_ERROR; -} - -/* Public Functions */ -HgDevice * -device_open(HgPageInfo *info) -{ - HgDevice *device; - HgCairoDevice *cdev; - gchar *filename = NULL; - gint fd; - - TRACE_ENTER; - - fd = g_file_open_tmp("ps-embedded-XXXXXX", &filename, NULL); - if (fd == -1) { - hg_log_warning("Failed to open a file descriptor."); - if (filename) - g_free(filename); - - return NULL; - } - device = hieroglyph_cairo_device_new(); - cdev = HG_CAIRO_DEVICE (device); - cdev->surface = cairo_ps_surface_create_for_stream(_cairo_ps_embedded_write_stream, - device, - info->width, - info->height); - cdev->reference = cairo_create(cdev->surface); - cdev->u.type = HG_DEVICE_CAIRO_PS_SURFACE; - cdev->u.ps.output_filename = filename; - cdev->u.ps.fd = fd; - - if (cairo_status(cdev->reference) != CAIRO_STATUS_SUCCESS) { - hg_log_warning("Failed to create an reference of cairo."); - } - - TRACE_LEAVE; - - return device; -} - -void -device_close(HgDevice *device) -{ - HgCairoDevice *cdev; - - g_return_if_fail (HG_IS_CAIRO_DEVICE (device)); - - TRACE_ENTER; - - hieroglyph_stream_write(device->ostream); - - cdev = HG_CAIRO_DEVICE (device); - if (cdev->u.ps.fd >= 0) - close(cdev->u.ps.fd); - if (cdev->u.ps.output_filename != NULL) - g_free(cdev->u.ps.output_filename); - - cairo_destroy(cdev->reference); - cairo_surface_destroy(cdev->surface); - - TRACE_LEAVE; -} diff --git a/devices/cairo/cairo-xlib-main.c b/devices/cairo/cairo-xlib-main.c deleted file mode 100644 index c08e4a4..0000000 --- a/devices/cairo/cairo-xlib-main.c +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * cairo-xlib-main.c - * Copyright (C) 2005-2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <cairo/cairo-xlib.h> -#include <hieroglyph/hglog.h> -#include "hgdevice-cairo.h" - - -/* - * Private Functions - */ -static gboolean -_cairo_xlib_real_set_page_size(HgCairoDevice *device, - gdouble width, - gdouble height) -{ - /* resize Window */ - g_print("%fx%f\n", width, height); - XResizeWindow(device->u.xlib.dpy, - device->u.xlib.drawable, - width, height); - cairo_xlib_surface_set_size(device->surface, width, height); - XFlush(device->u.xlib.dpy); - hg_log_warning("%s: FIXME: implement me", __FUNCTION__); - - return TRUE; -} - -/* - * Public Functions - */ -HgDevice * -device_open(void) -{ - HgCairoDevice *cdev; - HgDevice *dev; - unsigned long black, white; - int screen; - - dev = hg_cairo_device_new(); - cdev = (HgCairoDevice *)dev; - - cdev->vtable.set_page_size = _cairo_xlib_real_set_page_size; - - cdev->u.type = HG_DEVICE_CAIRO_XLIB_SURFACE; - cdev->u.xlib.dpy = XOpenDisplay(NULL); - if (cdev->u.xlib.dpy == NULL) { - hg_log_warning("Failed to open a display."); - hg_device_destroy(dev); - return NULL; - } - screen = DefaultScreen(cdev->u.xlib.dpy); - black = BlackPixel(cdev->u.xlib.dpy, screen); - white = WhitePixel(cdev->u.xlib.dpy, screen); - cdev->u.xlib.drawable = XCreateSimpleWindow(cdev->u.xlib.dpy, - DefaultRootWindow(cdev->u.xlib.dpy), - 400, - 400, - 400, 400, 0, - black, white); - XMapWindow(cdev->u.xlib.dpy, cdev->u.xlib.drawable); - - cdev->surface = cairo_xlib_surface_create(cdev->u.xlib.dpy, - cdev->u.xlib.drawable, - XDefaultVisual(cdev->u.xlib.dpy, screen), - 400, 400); - cdev->reference = cairo_create(cdev->surface); - if (cairo_status(cdev->reference) != CAIRO_STATUS_SUCCESS) { - hg_log_warning("Failed to create an reference of cairo."); - hg_device_destroy(dev); - return NULL; - } - - return dev; -} - -void -device_close(HgDevice *device) -{ - HgCairoDevice *cdev; - - g_return_if_fail (device != NULL); - - cdev = (HgCairoDevice *)device; - cairo_destroy(cdev->reference); - cairo_surface_destroy(cdev->surface); - XDestroyWindow(cdev->u.xlib.dpy, cdev->u.xlib.drawable); - XCloseDisplay(cdev->u.xlib.dpy); - - g_free(device); -} diff --git a/devices/cairo/hgdevice-cairo.c b/devices/cairo/hgdevice-cairo.c deleted file mode 100644 index 46f74e6..0000000 --- a/devices/cairo/hgdevice-cairo.c +++ /dev/null @@ -1,522 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgdevice-cairo.c - * Copyright (C) 2005-2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <hieroglyph/hgarray.h> -#include <hieroglyph/hglog.h> -#include <hieroglyph/hgvaluenode.h> -#include "hgdevice-cairo.h" - - -static gboolean _hg_cairo_device_real_initialize(HgDevice *device, - HgPage *page); -static gboolean _hg_cairo_device_real_finalize (HgDevice *device); -static gboolean _hg_cairo_device_real_eofill (HgDevice *device, - HgRenderFill *render); -static gboolean _hg_cairo_device_real_fill (HgDevice *device, - HgRenderFill *render); -static gboolean _hg_cairo_device_real_stroke (HgDevice *device, - HgRenderStroke *render); - -static void _hg_cairo_device_set_matrix (HgCairoDevice *device, - HgMatrix *mtx); -static gboolean _hg_cairo_device_set_path (HgCairoDevice *device, - HgPathNode *node); -static void _hg_cairo_device_set_line_cap (HgCairoDevice *device, - gint line_cap); -static void _hg_cairo_device_set_line_join (HgCairoDevice *device, - gint line_join); - - -static HgDeviceVTable __hg_cairo_device_vtable = { - .initialize = _hg_cairo_device_real_initialize, - .finalize = _hg_cairo_device_real_finalize, - .eofill = _hg_cairo_device_real_eofill, - .fill = _hg_cairo_device_real_fill, - .stroke = _hg_cairo_device_real_stroke, -}; - -/* - * Private Functions - */ -#ifdef DEBUG -static void -_hg_cairo_device_print_path(HgPathNode *node) -{ - hg_log_debug(DEBUG_PATH, ""); - while (node) { - switch (node->type) { - case HG_PATH_CLOSE: - hg_log_debug(DEBUG_PATH, "closepath"); - break; - case HG_PATH_MOVETO: - hg_log_debug(DEBUG_PATH, "%f %f moveto", node->x, node->y); - break; - case HG_PATH_LINETO: - hg_log_debug(DEBUG_PATH, "%f %f lineto", node->x, node->y); - break; - case HG_PATH_RLINETO: - hg_log_debug(DEBUG_PATH, "%f %f rlineto", node->x, node->y); - break; - case HG_PATH_CURVETO: - if (node->next && node->next->next) { - hg_log_debug(DEBUG_PATH, "%f %f %f %f %f %f curveto", node->x, node->y, node->next->x, node->next->y, node->next->next->x, node->next->next->y); - node = node->next->next; - } else { - hg_log_warning("[BUG] Invalid path for curve."); - } - break; - case HG_PATH_ARC: - if (node->next && node->next->next) { - hg_log_debug(DEBUG_PATH, "%f %f %f %f %f arc", node->x, node->y, node->next->x, node->next->next->x, node->next->next->y); - node = node->next->next; - } else { - hg_log_warning("[BUG] Invalid path for arc."); - } - break; - case HG_PATH_MATRIX: - if (node->next && node->next->next) { - hg_log_debug(DEBUG_PATH, "[%f %f %f %f %f %f] matrix", node->x, node->y, node->next->x, node->next->y, node->next->next->x, node->next->next->y); - node = node->next->next; - } else { - hg_log_warning("[BUG] Invalid matrix was given."); - } - break; - default: - hg_log_warning("[BUG] Unknown path type %d was given.", node->type); - break; - } - node = node->next; - } - hg_log_debug(DEBUG_PATH, "%% end\n"); -} -#else -#define _hg_cairo_device_print_path(_node_) -#endif /* DEBUG */ - -/* - * hsv_to_rgb() is borrowed from GTK+ - */ -/* HSV color selector for GTK+ - * - * Copyright (C) 1999 The Free Software Foundation - * - * Authors: Simon Budig <Simon.Budig@unix-ag.org> (original code) - * Federico Mena-Quintero <federico@gimp.org> (cleanup for GTK+) - * Jonathan Blandford <jrb@redhat.com> (cleanup for GTK+) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* Converts from HSV to RGB */ -static void -hsv_to_rgb (gdouble *h, - gdouble *s, - gdouble *v) -{ - gdouble hue, saturation, value; - gdouble f, p, q, t; - - if (*s == 0.0) - { - *h = *v; - *s = *v; - *v = *v; /* heh */ - } - else - { - hue = *h * 6.0; - saturation = *s; - value = *v; - - if (hue == 6.0) - hue = 0.0; - - f = hue - (int) hue; - p = value * (1.0 - saturation); - q = value * (1.0 - saturation * f); - t = value * (1.0 - saturation * (1.0 - f)); - - switch ((int) hue) - { - case 0: - *h = value; - *s = t; - *v = p; - break; - - case 1: - *h = q; - *s = value; - *v = p; - break; - - case 2: - *h = p; - *s = value; - *v = t; - break; - - case 3: - *h = p; - *s = q; - *v = value; - break; - - case 4: - *h = t; - *s = p; - *v = value; - break; - - case 5: - *h = value; - *s = p; - *v = q; - break; - - default: - g_assert_not_reached (); - } - } -} - -static gboolean -_hg_cairo_device_real_initialize(HgDevice *device, - HgPage *page) -{ - HgCairoDevice *cdev = (HgCairoDevice *)device; - cairo_matrix_t mtx; - - device->width = page->width; - device->height = page->height; - /* initialize the device specific things */ - if (cdev->vtable.set_page_size) { - if (!cdev->vtable.set_page_size(cdev, page->width, page->height)) - return FALSE; - } - - /* it needs to be transformed so that cairo's coordination - * system is reversed for PostScript - */ - cairo_matrix_init(&mtx, 1.0, 0.0, 0.0, -1.0, 0.0, page->height); - cairo_set_matrix(cdev->reference, &mtx); - - /* FIXME */ - - return TRUE; -} - -static gboolean -_hg_cairo_device_real_finalize(HgDevice *device) -{ - HgCairoDevice *cdev = (HgCairoDevice *)device; - - hg_log_warning("%s: FIXME: implement me.", __FUNCTION__); - cairo_show_page(cdev->reference); - XFlush(cdev->u.xlib.dpy); - - return TRUE; -} - -static gboolean -_hg_cairo_device_real_eofill(HgDevice *device, - HgRenderFill *render) -{ - HgCairoDevice *cdev = (HgCairoDevice *)device; - - hg_log_debug(DEBUG_PATH, "%% eofill"); - _hg_cairo_device_print_path(render->path); - _hg_cairo_device_set_matrix(cdev, &render->mtx); - if (!_hg_cairo_device_set_path(cdev, render->path)) - return FALSE; - if (render->color.is_rgb) { - cairo_set_source_rgb(cdev->reference, - render->color.is.rgb.r, - render->color.is.rgb.g, - render->color.is.rgb.b); - } else { - gdouble r, g, b; - - r = render->color.is.hsv.h; - g = render->color.is.hsv.s; - b = render->color.is.hsv.v; - hsv_to_rgb(&r, &g, &b); - cairo_set_source_rgb(cdev->reference, r, g, b); - } - cairo_set_fill_rule(cdev->reference, CAIRO_FILL_RULE_EVEN_ODD); - cairo_fill(cdev->reference); - - return TRUE; -} - -static gboolean -_hg_cairo_device_real_fill(HgDevice *device, - HgRenderFill *render) -{ - HgCairoDevice *cdev = (HgCairoDevice *)device; - - hg_log_debug(DEBUG_PATH, "%% fill"); - _hg_cairo_device_print_path(render->path); - _hg_cairo_device_set_matrix(cdev, &render->mtx); - if (!_hg_cairo_device_set_path(cdev, render->path)) - return FALSE; - if (render->color.is_rgb) { - cairo_set_source_rgb(cdev->reference, - render->color.is.rgb.r, - render->color.is.rgb.g, - render->color.is.rgb.b); - } else { - gdouble r, g, b; - - r = render->color.is.hsv.h; - g = render->color.is.hsv.s; - b = render->color.is.hsv.v; - hsv_to_rgb(&r, &g, &b); - cairo_set_source_rgb(cdev->reference, r, g, b); - } - cairo_set_fill_rule(cdev->reference, CAIRO_FILL_RULE_WINDING); - cairo_fill(cdev->reference); - - return TRUE; -} - -static gboolean -_hg_cairo_device_real_stroke(HgDevice *device, - HgRenderStroke *render) -{ - HgCairoDevice *cdev = (HgCairoDevice *)device; - gdouble *dashes, d; - guint len, i; - HgValueNode *node; - - hg_log_debug(DEBUG_PATH, "%% stroke"); - _hg_cairo_device_print_path(render->path); - _hg_cairo_device_set_matrix(cdev, &render->mtx); - if (!_hg_cairo_device_set_path(cdev, render->path)) - return FALSE; - if (render->color.is_rgb) { - cairo_set_source_rgb(cdev->reference, - render->color.is.rgb.r, - render->color.is.rgb.g, - render->color.is.rgb.b); - } else { - gdouble r, g, b; - - r = render->color.is.hsv.h; - g = render->color.is.hsv.s; - b = render->color.is.hsv.v; - hsv_to_rgb(&r, &g, &b); - cairo_set_source_rgb(cdev->reference, r, g, b); - } - cairo_set_line_width(cdev->reference, render->line_width); - _hg_cairo_device_set_line_cap(cdev, render->line_cap); - cairo_set_miter_limit(cdev->reference, render->miter_limit); - _hg_cairo_device_set_line_join(cdev, render->line_join); - - len = hg_array_length(render->dashline_pattern); - dashes = g_new(gdouble, len); - for (i = 0; i < len; i++) { - node = hg_array_index(render->dashline_pattern, i); - if (HG_IS_VALUE_INTEGER (node)) { - d = HG_VALUE_GET_REAL_FROM_INTEGER (node); - } else if (HG_IS_VALUE_REAL (node)) { - d = HG_VALUE_GET_REAL (node); - } else { - hg_log_warning("[BUG] Invalid object type %d was given for dashline pattern.", - HG_VALUE_GET_VALUE_TYPE (node)); - d = 0.0; - } - dashes[i] = d; - } - cairo_set_dash(cdev->reference, dashes, len, render->dashline_offset); - cairo_stroke(cdev->reference); - g_free(dashes); - - return TRUE; -} - -static void -_hg_cairo_device_set_matrix(HgCairoDevice *device, - HgMatrix *mtx) -{ - cairo_matrix_t mtx_, trans; - - cairo_matrix_init(&mtx_, mtx->xx, mtx->yx, - mtx->xy, mtx->yy, - mtx->x0, mtx->y0); - cairo_matrix_init(&trans, 1.0, 0.0, 0.0, - -1.0, 0.0, device->device.height); - cairo_matrix_multiply(&trans, &mtx_, &trans); - hg_log_debug(DEBUG_PATH, "[%f %f %f %f %f %f] setmatrix\n", trans.xx, trans.yx, trans.xy, trans.yy, trans.x0, trans.y0); - cairo_set_matrix(device->reference, &trans); -} - -static gboolean -_hg_cairo_device_set_path(HgCairoDevice *device, - HgPathNode *node) -{ - gboolean retval = TRUE; - - cairo_new_path(device->reference); - while (node) { - switch (node->type) { - case HG_PATH_CLOSE: - cairo_close_path(device->reference); - break; - case HG_PATH_MOVETO: - cairo_move_to(device->reference, node->x, node->y); - break; - case HG_PATH_LINETO: - cairo_line_to(device->reference, node->x, node->y); - break; - case HG_PATH_RLINETO: - cairo_rel_line_to(device->reference, node->x, node->y); - break; - case HG_PATH_CURVETO: - if (node->next && node->next->next) { - cairo_curve_to(device->reference, - node->x, node->y, - node->next->x, node->next->y, - node->next->next->x, node->next->next->y); - node = node->next->next; - } else { - hg_log_warning("[BUG] Invalid path for curve."); - retval = FALSE; - } - break; - case HG_PATH_ARC: - if (node->next && node->next->next) { - cairo_arc(device->reference, - node->x, node->y, node->next->x, - node->next->next->x, node->next->next->y); - node = node->next->next; - } else { - hg_log_warning("[BUG] Invalid path for arc."); - retval = FALSE; - } - break; - case HG_PATH_MATRIX: - if (node->next && node->next->next) { - cairo_matrix_t mtx_, trans; - - cairo_matrix_init(&mtx_, node->x, node->y, - node->next->x, node->next->y, - node->next->next->x, node->next->next->y); - cairo_matrix_init(&trans, 1.0, 0.0, 0.0, - -1.0, 0.0, device->device.height); - cairo_matrix_multiply(&trans, &mtx_, &trans); - cairo_set_matrix(device->reference, &trans); - node = node->next->next; - } else { - hg_log_warning("[BUG] Invalid matrix was given."); - retval = FALSE; - } - break; - default: - hg_log_warning("[BUG] Unknown path type %d was given.", node->type); - retval = FALSE; - break; - } - node = node->next; - } - - return retval; -} - -static void -_hg_cairo_device_set_line_cap(HgCairoDevice *device, - gint line_cap) -{ - cairo_line_cap_t cap; - - switch (line_cap) { - case 0: - cap = CAIRO_LINE_CAP_BUTT; - break; - case 1: - cap = CAIRO_LINE_CAP_ROUND; - break; - case 2: - cap = CAIRO_LINE_CAP_SQUARE; - break; - default: - hg_log_warning("[BUG] Invalid linecap type %d", line_cap); - cap = CAIRO_LINE_CAP_BUTT; - break; - } - cairo_set_line_cap(device->reference, cap); -} - -static void -_hg_cairo_device_set_line_join(HgCairoDevice *device, - gint line_join) -{ - cairo_line_join_t join; - - switch (line_join) { - case 0: - join = CAIRO_LINE_JOIN_MITER; - break; - case 1: - join = CAIRO_LINE_JOIN_ROUND; - break; - case 2: - join = CAIRO_LINE_JOIN_BEVEL; - break; - default: - hg_log_warning("[BUG] Invalid linejoin type %d", line_join); - join = CAIRO_LINE_JOIN_MITER; - break; - } - cairo_set_line_join(device->reference, join); -} - -/* - * Public Functions - */ -HgDevice * -hg_cairo_device_new(void) -{ - HgCairoDevice *retval; - - retval = g_new0(HgCairoDevice, 1); - retval->device.vtable = &__hg_cairo_device_vtable; - - return (HgDevice *)retval; -} diff --git a/devices/cairo/hgdevice-cairo.h b/devices/cairo/hgdevice-cairo.h deleted file mode 100644 index 559019e..0000000 --- a/devices/cairo/hgdevice-cairo.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgdevice-cairo.h - * Copyright (C) 2005-2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HG_DEVICE_CAIRO_H__ -#define __HG_DEVICE_CAIRO_H__ - -#include <X11/Xlib.h> -#include <cairo/cairo.h> -#include <hieroglyph/hgtypes.h> -#include <hieroglyph/hgdevice.h> - -G_BEGIN_DECLS - -typedef enum { - HG_DEVICE_CAIRO_XLIB_SURFACE = 1, -} HgCairoDeviceType; - -typedef struct _HieroGlyphCairoXlibDevice HgCairoXlibDevice; -typedef struct _HieroGlyphCairoDevice HgCairoDevice; - -struct _HieroGlyphCairoXlibDevice { - HgCairoDeviceType type; - Display *dpy; - Drawable drawable; -}; - -struct _HieroGlyphCairoDevice { - HgDevice device; - struct { - gboolean (* set_page_size) (HgCairoDevice *device, - gdouble width, - gdouble height); - } vtable; - union { - HgCairoDeviceType type; - HgCairoXlibDevice xlib; - } u; - cairo_surface_t *surface; - cairo_t *reference; -}; - -HgDevice *hg_cairo_device_new(void); - -G_END_DECLS - -#endif /* __HG_DEVICE_CAIRO_H__ */ diff --git a/devices/x11-embedded/Makefile.am b/devices/x11-embedded/Makefile.am deleted file mode 100644 index c1af426..0000000 --- a/devices/x11-embedded/Makefile.am +++ /dev/null @@ -1,47 +0,0 @@ -NULL = - -INCLUDES = \ - $(HG_CFLAGS) \ - $(NULL) -LIBS = \ - @LDFLAGS@ \ - -export-dynamic \ - $(HG_LIBS) \ - $(NULL) -LDADDS = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) - -lib_LTLIBRARIES = \ - libhieroglyph-x11.la \ - $(NULL) - -libhieroglyph_x11_la_SOURCES = \ - hgdevice-x11.c \ - hgdevice-x11.h \ - $(NULL) -libhieroglyph_x11_la_LIBADD = \ - $(LDADDS) \ - $(NULL) - -devicedir = $(HIEROGLYPH_DEVICEDIR) -device_LTLIBRARIES = \ - libx11-embedded-device.la \ - $(NULL) - -libx11_embedded_device_la_SOURCES = \ - x11-embedded-main.c \ - $(NULL) -libx11_embedded_device_la_CFLAGS = \ - -DHG_LOG_DOMAIN="\"X11-Embedded-Device\"" \ - $(CFLAGS) \ - $(NULL) -libx11_embedded_device_la_LDFLAGS = \ - -avoid-version \ - -module \ - $(LDFLAGS) \ - $(NULL) -libx11_embedded_device_la_LIBADD = \ - libhieroglyph-x11.la \ - $(LDADDS) \ - $(NULL) diff --git a/devices/x11-embedded/hgdevice-x11.c b/devices/x11-embedded/hgdevice-x11.c deleted file mode 100644 index c3feba8..0000000 --- a/devices/x11-embedded/hgdevice-x11.c +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgdevice-x11.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "hgdevice-x11.h" - - -/* - * Private Functions - */ - -/* - * Public Functions - */ - diff --git a/devices/x11-embedded/hgdevice-x11.h b/devices/x11-embedded/hgdevice-x11.h deleted file mode 100644 index 77ca3a5..0000000 --- a/devices/x11-embedded/hgdevice-x11.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgdevice-x11.h - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HG_DEVICE_X11_H__ -#define __HG_DEVICE_X11_H__ - -#include <hieroglyph/hgtypes.h> -#include <hieroglyph/hgdevice.h> - -G_BEGIN_DECLS - -G_END_DECLS - -#endif /* __HG_DEVICE_X11_H__ */ diff --git a/devices/x11-embedded/x11-embedded-main.c b/devices/x11-embedded/x11-embedded-main.c deleted file mode 100644 index dcb81a1..0000000 --- a/devices/x11-embedded/x11-embedded-main.c +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * x11-embedded-main.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "hgdevice-x11.h" - - -/* - * Private Functions - */ - -/* - * Public Functions - */ diff --git a/examples/Makefile.am b/examples/Makefile.am deleted file mode 100644 index 2a5d305..0000000 --- a/examples/Makefile.am +++ /dev/null @@ -1,31 +0,0 @@ -NULL = - -INCLUDES = \ - $(HG_CFLAGS) \ - $(NULL) -LIBS = \ - @LDFLAGS@ \ - $(HG_LIBS) \ - $(NULL) -LDADDS = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) - -noinst_PROGRAMS = \ - pse \ - cairo-xlib \ - $(NULL) - -pse_SOURCES = \ - pse.c \ - $(NULL) -pse_LDADD = \ - $(LDADDS) \ - $(NULL) - -cairo_xlib_SOURCES = \ - cairo-xlib.c \ - $(NULL) -cairo_xlib_LDADD = \ - $(LDADDS) \ - $(NULL) diff --git a/examples/cairo-xlib.c b/examples/cairo-xlib.c deleted file mode 100644 index 0613930..0000000 --- a/examples/cairo-xlib.c +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * cairo-xlib.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#include <hieroglyph/hgmem.h> -#include <hieroglyph/hgfile.h> -#include <hieroglyph/hgvaluenode.h> -#include <hieroglyph/hgdevice.h> -#include <hieroglyph/vm.h> -#include <hieroglyph/hggraphics.h> - - -int -main(int argc, char **argv) -{ - HG_MEM_INIT; - - HgVM *vm; - HgGraphics *graphics; - HgDevice *device; - GList *l, *prev = NULL; - gint i; - GOptionContext *ctxt = g_option_context_new("PostScriptFile.ps"); - GError *error = NULL; - const gchar *psfile = NULL; - - if (!g_option_context_parse(ctxt, &argc, &argv, &error)) { - g_print("Option parse error.\n"); - return 1; - } - - device = hg_device_new("x11"); - if (device == NULL) { - g_print("Failed to open a x11 device\n"); - return 1; - } - - hg_vm_init(); - - vm = hg_vm_new(VM_EMULATION_LEVEL_1); - - if (argc > 1) - psfile = argv[1]; - - if (!hg_vm_startjob(vm, psfile, TRUE)) { - g_print("Failed to start a job.\n"); - return 1; - } - - if (!hg_vm_has_error(vm)) { - graphics = hg_vm_get_graphics(vm); - for (l = graphics->pages, i = 1; l != NULL; l = g_list_next(l), i++) { - hg_device_draw(device, l->data); - g_print("%d page\n", i); - sleep(1); - } - prev = g_list_last(graphics->pages); - if (prev != NULL && - graphics->current_page != prev->data && - graphics->current_page->node) - hg_device_draw(device, graphics->current_page); - sleep(5); - } - - hg_vm_finalize(); - g_option_context_free(ctxt); - - return 0; -} diff --git a/examples/pse.c b/examples/pse.c deleted file mode 100644 index a7d4537..0000000 --- a/examples/pse.c +++ /dev/null @@ -1,89 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * pse.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#include <hieroglyph/hgmem.h> -#include <hieroglyph/hgfile.h> -#include <hieroglyph/hgvaluenode.h> -#include <hieroglyph/vm.h> - -GList *plugin_list = NULL; - -static gboolean -_pse_arg_plugin_cb(const char *option_name, - const char *value, - gpointer data) -{ - gboolean retval = TRUE; - - if (value && *value) { - plugin_list = g_list_append(plugin_list, g_strdup(value)); - } else { - retval = FALSE; - } - - return retval; -} - -int -main(int argc, char **argv) -{ - HgVM *vm; - GOptionContext *ctxt = g_option_context_new("PostScriptFile.ps"); - GOptionEntry entries[] = { - {"plugin", 'l', 0, G_OPTION_ARG_CALLBACK, _pse_arg_plugin_cb, "A plugin to be loaded.", "NAME"}, - {NULL} - }; - GError *error = NULL; - const gchar *psfile = NULL; - GList *l; - - g_option_context_add_main_entries(ctxt, entries, NULL); - if (!g_option_context_parse(ctxt, &argc, &argv, &error)) { - g_print("Option parse error.\n"); - return 1; - } - - HG_MEM_INIT; - hg_vm_init(); - - vm = hg_vm_new(VM_EMULATION_LEVEL_1); - for (l = plugin_list; l != NULL; l = g_list_next(l)) { - hg_vm_load_plugin(vm, l->data); - g_free(l->data); - } - g_list_free(plugin_list); - plugin_list = NULL; - - if (argc > 1) - psfile = argv[1]; - - if (!hg_vm_startjob(vm, psfile, TRUE)) { - g_print("Failed to start a job.\n"); - return 1; - } - - hg_vm_finalize(); - g_option_context_free(ctxt); - - return 0; -} diff --git a/hieroglyph.pc.in b/hieroglyph.pc.in deleted file mode 100644 index 821ab98..0000000 --- a/hieroglyph.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: Hieroglyph -Description: PostScript rendering library -Version: @VERSION@ -Requires: glib-2.0 gmodule-2.0 -Libs: -L${libdir} -lhieroglyph diff --git a/hieroglyph/Makefile.am b/hieroglyph/Makefile.am deleted file mode 100644 index 2f3852d..0000000 --- a/hieroglyph/Makefile.am +++ /dev/null @@ -1,86 +0,0 @@ -NULL = - -INCLUDES = \ - -DG_LOG_DOMAIN="\"Hieroglyph\"" \ - $(HG_CFLAGS) \ - $(NULL) -LIBS = \ - @LDFLAGS@ \ - $(HG_LIBS) \ - $(NULL) - -function_prefix = hieroglyph -type_prefix = HIEROGLYPH - -################################################################################ -# Generated files -################################################################################ -built_headers = \ - version.h \ - $(NULL) - -################################################################################ -# Publisher -################################################################################ - -# -# Header files -# -hgincludedir = $(includedir)/hieroglyph -hginclude_HEADERS = \ - $(built_headers) \ - hgarray.h \ - hgdict.h \ - hgfile.h \ - hgmacros.h \ - hgobject.h \ - hgoperator.h \ - hgstack.h \ - hgstring.h \ - hgtypes.h \ - utils.h \ - vm.h \ - $(NULL) - -noinst_HEADERS = \ - hgdictprime.h \ - hgoperator-private.h \ - $(NULL) - -# -# Libraries -# -lib_LTLIBRARIES = \ - libhieroglyph.la \ - $(NULL) - -libhieroglyph_la_SOURCES = \ - hgarray.c \ - hgdict.c \ - hgfile.c \ - hgobject.c \ - hgoperator.c \ - hgstack.c \ - hgstring.c \ - utils.c \ - vm.c \ - $(NULL) - -libhieroglyph_la_LDFLAGS = \ - $(LDFLAGS) \ - $(NULL) - -libhieroglyph_la_LIBADD = \ - $(NULL) - -$(libhieroglyph_la_OBJECTS): $(built_headers) -version.h.in: version.h.in.in $(top_srcdir)/update-version - $(top_srcdir)/update-version - -# -# Etc -# -EXTRA_DIST = \ - version.h.in \ - version.h.in.in \ - $(NULL) diff --git a/hieroglyph/hgarray.c b/hieroglyph/hgarray.c deleted file mode 100644 index fabcbd3..0000000 --- a/hieroglyph/hgarray.c +++ /dev/null @@ -1,213 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgarray.c - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <string.h> -#include <glib/gstrfuncs.h> -#include <glib/gthread.h> -#include <hieroglyph/hgobject.h> -#include <hieroglyph/vm.h> -#include "hgarray.h" - - -G_LOCK_DEFINE_STATIC (hgarray); - -/* - * private functions - */ - -/* - * public functions - */ -hg_object_t * -hg_object_array_new(hg_vm_t *vm, - guint16 length) -{ - hg_object_t *retval; - hg_arraydata_t *data; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_object_sized_new(vm, hg_n_alignof (sizeof (hg_arraydata_t) + sizeof (hg_object_t) * length)); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_ARRAY; - HG_OBJECT_ARRAY (retval)->length = length; - HG_OBJECT_ARRAY (retval)->real_length = length; - data = HG_OBJECT_ARRAY_DATA (retval); - data->name[0] = 0; - if (length > 0) { - data->array = (hg_object_t *)data->data; - memset(data->array, 0, sizeof (hg_object_t) * length); - } else { - data->array = NULL; - } - } - - return retval; -} - -hg_object_t * -hg_object_array_subarray_new(hg_vm_t *vm, - hg_object_t *object, - guint16 start_index, - guint16 length) -{ - hg_object_t *retval, **p; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (object != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_ARRAY (object), NULL); - hg_return_val_if_fail (HG_OBJECT_ARRAY (object)->real_length > start_index, NULL); - hg_return_val_if_fail (HG_OBJECT_ARRAY (object)->real_length >= (start_index + length), NULL); - - retval = hg_object_array_new(vm, 0); - if (retval != NULL) { - p = HG_OBJECT_ARRAY_DATA (object)->array; - HG_OBJECT_ARRAY_DATA (retval)->array = &p[start_index]; - HG_OBJECT_ARRAY (retval)->real_length = length; - } - - return retval; -} - -gboolean -hg_object_array_put(hg_vm_t *vm, - hg_object_t *object, - hg_object_t *data, - guint16 index) -{ - hg_object_t **array; - - hg_return_val_if_fail (vm != NULL, FALSE); - hg_return_val_if_fail (object != NULL, FALSE); - hg_return_val_if_fail (data != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_ARRAY (object), FALSE); - hg_return_val_if_fail (HG_OBJECT_ARRAY (object)->real_length > index, FALSE); - /* XXX: need to check the memory spool type */ - - array = HG_OBJECT_ARRAY_DATA (object)->array; - array[index] = data; - - return TRUE; -} - -hg_object_t * -hg_object_array_get(hg_vm_t *vm, - const hg_object_t *object, - guint16 index) -{ - hg_object_t **array, *retval, *p; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (object != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_ARRAY (object), NULL); - hg_return_val_if_fail (HG_OBJECT_ARRAY (object)->real_length > index, NULL); - - array = HG_OBJECT_ARRAY_DATA (object)->array; - p = array[index]; - - if (!HG_OBJECT_IS_COMPLEX (p)) { - /* create a copy to prevent destructive modifications */ - retval = hg_object_copy(vm, p); - } else { - /* complex objects are allowed to be modified */ - retval = p; - } - - return retval; -} - -hg_object_t * -hg_object_array_get_const(const hg_object_t *object, - guint16 index) -{ - hg_object_t **array; - - hg_return_val_if_fail (object != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_ARRAY (object), NULL); - hg_return_val_if_fail (HG_OBJECT_ARRAY (object)->real_length > index, NULL); - - array = HG_OBJECT_ARRAY_DATA (object)->array; - return array[index]; -} - -gboolean -hg_object_array_compare(hg_object_t *object1, - hg_object_t *object2) -{ - guint16 i; - hg_object_t *a, *b; - gboolean retval = TRUE; - - hg_return_val_if_fail (object1 != NULL, FALSE); - hg_return_val_if_fail (object2 != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_ARRAY (object1), FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_ARRAY (object2), FALSE); - - if (object1 == object2) - return TRUE; - if (HG_OBJECT_ARRAY (object1)->real_length != HG_OBJECT_ARRAY (object2)->real_length) - return FALSE; - - G_LOCK (hgarray); - if (HG_OBJECT_OBJECT (object1)->attr.bit.is_checked) { - retval = (HG_OBJECT_OBJECT (object1)->attr.bit.is_checked == HG_OBJECT_OBJECT (object2)->attr.bit.is_checked); - G_UNLOCK (hgarray); - - return retval; - } - /* for checking the circular reference */ - HG_OBJECT_OBJECT (object1)->attr.bit.is_checked = TRUE; - HG_OBJECT_OBJECT (object2)->attr.bit.is_checked = TRUE; - G_UNLOCK (hgarray); - - for (i = 0; i < HG_OBJECT_ARRAY (object1)->real_length; i++) { - a = hg_object_array_get_const(object1, i); - b = hg_object_array_get_const(object2, i); - if (!hg_object_compare(a, b)) { - retval = FALSE; - break; - } - } - - /* cleaning up */ - G_LOCK (hgarray); - HG_OBJECT_OBJECT (object1)->attr.bit.is_checked = FALSE; - HG_OBJECT_OBJECT (object2)->attr.bit.is_checked = FALSE; - G_UNLOCK (hgarray); - - return retval; -} - -gchar * -hg_object_array_dump(hg_object_t *object, - gboolean verbose) -{ - hg_return_val_if_fail (object != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_ARRAY (object), NULL); - - return g_strdup("--array--"); -} diff --git a/hieroglyph/hgarray.h b/hieroglyph/hgarray.h deleted file mode 100644 index 63f0092..0000000 --- a/hieroglyph/hgarray.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgarray.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH_HGARRAY_H__ -#define __HIEROGLYPH_HGARRAY_H__ - -#include <hieroglyph/hgtypes.h> - - -G_BEGIN_DECLS - - -hg_object_t *hg_object_array_new (hg_vm_t *vm, - guint16 length) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_array_subarray_new(hg_vm_t *vm, - hg_object_t *object, - guint16 start_index, - guint16 length) G_GNUC_WARN_UNUSED_RESULT; -gboolean hg_object_array_put (hg_vm_t *vm, - hg_object_t *object, - hg_object_t *item, - guint16 index); -hg_object_t *hg_object_array_get (hg_vm_t *vm, - const hg_object_t *object, - guint16 index); -hg_object_t *hg_object_array_get_const (const hg_object_t *object, - guint16 index); -gboolean hg_object_array_compare (hg_object_t *object1, - hg_object_t *object2); -gchar *hg_object_array_dump (hg_object_t *object, - gboolean verbose) G_GNUC_MALLOC; - - -G_END_DECLS - -#endif /* __HIEROGLYPH_HGARRAY_H__ */ diff --git a/hieroglyph/hgdict.c b/hieroglyph/hgdict.c deleted file mode 100644 index b5c619a..0000000 --- a/hieroglyph/hgdict.c +++ /dev/null @@ -1,274 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgdict.c - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <string.h> -#include <glib/gstrfuncs.h> -#include <hieroglyph/hgobject.h> -#include "hgdict.h" -#include "hgdictprime.h" - -#define _get_hash(_hg_d_,_hg_o_) ((hg_object_get_hash(_hg_o_) << 8) % __hg_dict_primes[HG_OBJECT_DICT (_hg_d_)->length]) - - -/* - * private functions - */ -static gboolean -_hg_object_dict_lookup(hg_object_t *dict, - hg_object_t *key, - guint16 *retval) -{ - guint16 h, hash; - hg_dictdata_t *data = HG_OBJECT_DICT_DATA (dict); - - hg_return_val_if_fail (retval != NULL, FALSE); - - h = hash = _get_hash(dict, key); - while (1) { - if (data[hash].key != NULL && data[hash].value != NULL) { - if (hg_object_compare(key, data[hash].key)) { - *retval = hash; - - return TRUE; - } - } else { - /* probably no such keys are registered into dict */ - break; - } - /* try to find out next slot */ - if ((hash + 1) == h) { - /* probably no such keys are registered int odict */ - break; - } - hash++; - if (hash > __hg_dict_primes[HG_OBJECT_DICT (dict)->length]) { - /* looking at the first slot */ - hash = 0; - } - } - *retval = 0; - - return FALSE; -} - -static gboolean -_hg_object_dict_insert(hg_object_t *dict, - hg_object_t *key, - hg_object_t *value, - gboolean with_replace) -{ - gboolean retval = FALSE; - guint16 h, hash; - hg_dictdata_t *data = HG_OBJECT_DICT_DATA (dict); - - hg_return_val_if_fail (HG_OBJECT_DICT (dict)->used < HG_OBJECT_DICT (dict)->length, FALSE); - - h = hash = _get_hash(dict, key); - while (1) { - if (data[hash].key == NULL && data[hash].value == NULL) { - data[hash].key = key; - data[hash].value = value; - HG_OBJECT_DICT (dict)->used++; - retval = TRUE; - break; - } else if (hg_object_compare(key, data[hash].key)) { - if (with_replace) { - data[hash].key = key; - data[hash].value = value; - retval = TRUE; - } - break; - } else { - /* try to find out an empty slot */ - if ((hash + 1) == h) { - /* probably no empty slots. - * but guess this won't happen because of checking - */ - g_warning("[BUG] no empty slots in the dict."); - - return FALSE; - } - hash++; - if (hash > __hg_dict_primes[HG_OBJECT_DICT (dict)->length]) { - /* try to find out from first */ - hash = 0; - } - } - } - - return retval; -} - -/* - * public functions - */ -hg_object_t * -hg_object_dict_new(hg_vm_t *vm, - guint16 n_nodes) -{ - hg_object_t *retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_object_sized_new(vm, hg_n_alignof (sizeof (hg_dictdata_t) * __hg_dict_primes[n_nodes])); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_DICT; - HG_OBJECT_DICT (retval)->length = n_nodes; - HG_OBJECT_DICT (retval)->used = 0; - memset(HG_OBJECT_DICT_DATA (retval), 0, sizeof (hg_dictdata_t) * __hg_dict_primes[n_nodes]); - } - - return retval; -} - -gboolean -hg_object_dict_compare(hg_object_t *object1, - hg_object_t *object2) -{ - hg_return_val_if_fail (object1 != NULL, FALSE); - hg_return_val_if_fail (object2 != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_DICT (object1), FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_DICT (object2), FALSE); - - /* XXX: no copy and dup functionalities are available so far. - * so just comparing a pointer should works enough. - */ - return object1 == object2; -} - -gchar * -hg_object_dict_dump(hg_object_t *object, - gboolean verbose) -{ - hg_return_val_if_fail (object != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_DICT (object), NULL); - - return g_strdup("--dict--"); -} - -gboolean -hg_object_dict_insert(hg_object_t *dict, - hg_object_t *key, - hg_object_t *value) -{ - hg_return_val_if_fail (dict != NULL, FALSE); - hg_return_val_if_fail (key != NULL, FALSE); - hg_return_val_if_fail (value != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_DICT (dict), FALSE); - - if (HG_OBJECT_ATTR_IS_GLOBAL (dict) && - !HG_OBJECT_ATTR_IS_GLOBAL (value)) { - return FALSE; - } - - return _hg_object_dict_insert(dict, key, value, FALSE); -} - -gboolean -hg_object_dict_insert_without_consistency(hg_object_t *dict, - hg_object_t *key, - hg_object_t *value) -{ - hg_return_val_if_fail (dict != NULL, FALSE); - hg_return_val_if_fail (key != NULL, FALSE); - hg_return_val_if_fail (value != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_DICT (dict), FALSE); - - return _hg_object_dict_insert(dict, key, value, FALSE); -} - -gboolean -hg_object_dict_replace(hg_object_t *dict, - hg_object_t *key, - hg_object_t *value) -{ - hg_return_val_if_fail (dict != NULL, FALSE); - hg_return_val_if_fail (key != NULL, FALSE); - hg_return_val_if_fail (value != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_DICT (dict), FALSE); - - if (HG_OBJECT_ATTR_IS_GLOBAL (dict) && - !HG_OBJECT_ATTR_IS_GLOBAL (value)) { - return FALSE; - } - - return _hg_object_dict_insert(dict, key, value, TRUE); -} - -gboolean -hg_object_dict_replace_without_consistency(hg_object_t *dict, - hg_object_t *key, - hg_object_t *value) -{ - hg_return_val_if_fail (dict != NULL, FALSE); - hg_return_val_if_fail (key != NULL, FALSE); - hg_return_val_if_fail (value != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_DICT (dict), FALSE); - - return _hg_object_dict_insert(dict, key, value, TRUE); -} - -gboolean -hg_object_dict_remove(hg_object_t *dict, - hg_object_t *key) -{ - guint16 hash; - - hg_return_val_if_fail (dict != NULL, FALSE); - hg_return_val_if_fail (key != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_DICT (dict), FALSE); - - if (_hg_object_dict_lookup(dict, key, &hash)) { - hg_dictdata_t *data = HG_OBJECT_DICT_DATA (dict); - - data[hash].key = NULL; - data[hash].value = NULL; - - return TRUE; - } - - return FALSE; -} - -hg_object_t * -hg_object_dict_lookup(hg_object_t *dict, - hg_object_t *key) -{ - guint16 hash; - - hg_return_val_if_fail (dict != NULL, NULL); - hg_return_val_if_fail (key != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_DICT (dict), NULL); - - if (_hg_object_dict_lookup(dict, key, &hash)) { - hg_dictdata_t *data = HG_OBJECT_DICT_DATA (dict); - - return data[hash].value; - } - - return NULL; -} diff --git a/hieroglyph/hgdict.h b/hieroglyph/hgdict.h deleted file mode 100644 index cb3cd2a..0000000 --- a/hieroglyph/hgdict.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgdict.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH_HGDICT_H__ -#define __HIEROGLYPH_HGDICT_H__ - -#include <hieroglyph/hgtypes.h> - - -G_BEGIN_DECLS - -hg_object_t *hg_object_dict_new (hg_vm_t *vm, - guint16 n_nodes) G_GNUC_WARN_UNUSED_RESULT; -gboolean hg_object_dict_compare (hg_object_t *object1, - hg_object_t *object2); -gchar *hg_object_dict_dump (hg_object_t *object, - gboolean verbose) G_GNUC_MALLOC; -gboolean hg_object_dict_insert (hg_object_t *dict, - hg_object_t *key, - hg_object_t *value); -gboolean hg_object_dict_insert_without_consistency (hg_object_t *dict, - hg_object_t *key, - hg_object_t *value); -gboolean hg_object_dict_replace (hg_object_t *dict, - hg_object_t *key, - hg_object_t *value); -gboolean hg_object_dict_replace_without_consistency(hg_object_t *dict, - hg_object_t *key, - hg_object_t *value); -gboolean hg_object_dict_remove (hg_object_t *dict, - hg_object_t *key); -hg_object_t *hg_object_dict_lookup (hg_object_t *dict, - hg_object_t *key); - -G_END_DECLS - -#endif /* __HIEROGLYPH_HGDICT_H__ */ diff --git a/hieroglyph/hgdictprime.h b/hieroglyph/hgdictprime.h deleted file mode 100644 index 967b6b1..0000000 --- a/hieroglyph/hgdictprime.h +++ /dev/null @@ -1,7953 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgdictprime.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include <glib/gtypes.h> - -static guint32 __hg_dict_primes[65536] = { - 2, 2, 2, 3, 5, 5, 7, 7, 11, 11, 11, 11, 13, 13, 17, 17, 17, - 17, 19, 19, 23, 23, 23, 23, 29, 29, 29, 29, 29, 29, 31, 31, - 37, 37, 37, 37, 37, 37, 41, 41, 41, 41, 43, 43, 47, 47, 47, - 47, 53, 53, 53, 53, 53, 53, 59, 59, 59, 59, 59, 59, 61, 61, - 67, 67, 67, 67, 67, 67, 71, 71, 71, 71, 73, 73, 79, 79, 79, - 79, 79, 79, 83, 83, 83, 83, 89, 89, 89, 89, 89, 89, 97, 97, - 97, 97, 97, 97, 97, 97, 101, 101, 101, 101, 103, 103, 107, - 107, 107, 107, 109, 109, 113, 113, 113, 113, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 131, - 131, 131, 131, 137, 137, 137, 137, 137, 137, 139, 139, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 157, - 157, 157, 157, 157, 157, 163, 163, 163, 163, 163, 163, 167, - 167, 167, 167, 173, 173, 173, 173, 173, 173, 179, 179, 179, - 179, 179, 179, 181, 181, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 193, 193, 197, 197, 197, 197, 199, 199, 211, - 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 227, - 227, 227, 227, 229, 229, 233, 233, 233, 233, 239, 239, 239, - 239, 239, 239, 241, 241, 251, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 257, 257, 257, 257, 257, 257, 263, 263, 263, - 263, 263, 263, 269, 269, 269, 269, 269, 269, 271, 271, 277, - 277, 277, 277, 277, 277, 281, 281, 281, 281, 283, 283, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 311, - 311, 311, 311, 313, 313, 317, 317, 317, 317, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 337, - 337, 337, 337, 337, 337, 347, 347, 347, 347, 347, 347, 347, - 347, 347, 347, 349, 349, 353, 353, 353, 353, 359, 359, 359, - 359, 359, 359, 367, 367, 367, 367, 367, 367, 367, 367, 373, - 373, 373, 373, 373, 373, 379, 379, 379, 379, 379, 379, 383, - 383, 383, 383, 389, 389, 389, 389, 389, 389, 397, 397, 397, - 397, 397, 397, 397, 397, 401, 401, 401, 401, 409, 409, 409, - 409, 409, 409, 409, 409, 419, 419, 419, 419, 419, 419, 419, - 419, 419, 419, 421, 421, 431, 431, 431, 431, 431, 431, 431, - 431, 431, 431, 433, 433, 439, 439, 439, 439, 439, 439, 443, - 443, 443, 443, 449, 449, 449, 449, 449, 449, 457, 457, 457, - 457, 457, 457, 457, 457, 461, 461, 461, 461, 463, 463, 467, - 467, 467, 467, 479, 479, 479, 479, 479, 479, 479, 479, 479, - 479, 479, 479, 487, 487, 487, 487, 487, 487, 487, 487, 491, - 491, 491, 491, 499, 499, 499, 499, 499, 499, 499, 499, 503, - 503, 503, 503, 509, 509, 509, 509, 509, 509, 521, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, 521, 523, 523, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 547, 547, 547, 547, 547, 547, 557, - 557, 557, 557, 557, 557, 557, 557, 557, 557, 563, 563, 563, - 563, 563, 563, 569, 569, 569, 569, 569, 569, 571, 571, 577, - 577, 577, 577, 577, 577, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 593, 593, 593, 593, 593, 593, 599, 599, 599, - 599, 599, 599, 601, 601, 607, 607, 607, 607, 607, 607, 613, - 613, 613, 613, 613, 613, 617, 617, 617, 617, 619, 619, 631, - 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 641, - 641, 641, 641, 641, 641, 641, 641, 641, 641, 643, 643, 647, - 647, 647, 647, 653, 653, 653, 653, 653, 653, 659, 659, 659, - 659, 659, 659, 661, 661, 673, 673, 673, 673, 673, 673, 673, - 673, 673, 673, 673, 673, 677, 677, 677, 677, 683, 683, 683, - 683, 683, 683, 691, 691, 691, 691, 691, 691, 691, 691, 701, - 701, 701, 701, 701, 701, 701, 701, 701, 701, 709, 709, 709, - 709, 709, 709, 709, 709, 719, 719, 719, 719, 719, 719, 719, - 719, 719, 719, 727, 727, 727, 727, 727, 727, 727, 727, 733, - 733, 733, 733, 733, 733, 739, 739, 739, 739, 739, 739, 743, - 743, 743, 743, 751, 751, 751, 751, 751, 751, 751, 751, 757, - 757, 757, 757, 757, 757, 761, 761, 761, 761, 769, 769, 769, - 769, 769, 769, 769, 769, 773, 773, 773, 773, 787, 787, 787, - 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 797, - 797, 797, 797, 797, 797, 797, 797, 797, 797, 809, 809, 809, - 809, 809, 809, 809, 809, 809, 809, 809, 809, 811, 811, 821, - 821, 821, 821, 821, 821, 821, 821, 821, 821, 823, 823, 827, - 827, 827, 827, 829, 829, 839, 839, 839, 839, 839, 839, 839, - 839, 839, 839, 853, 853, 853, 853, 853, 853, 853, 853, 853, - 853, 853, 853, 853, 853, 857, 857, 857, 857, 859, 859, 863, - 863, 863, 863, 877, 877, 877, 877, 877, 877, 877, 877, 877, - 877, 877, 877, 877, 877, 881, 881, 881, 881, 883, 883, 887, - 887, 887, 887, 907, 907, 907, 907, 907, 907, 907, 907, 907, - 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 911, - 911, 911, 911, 919, 919, 919, 919, 919, 919, 919, 919, 929, - 929, 929, 929, 929, 929, 929, 929, 929, 929, 937, 937, 937, - 937, 937, 937, 937, 937, 941, 941, 941, 941, 947, 947, 947, - 947, 947, 947, 953, 953, 953, 953, 953, 953, 967, 967, 967, - 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 971, - 971, 971, 971, 977, 977, 977, 977, 977, 977, 983, 983, 983, - 983, 983, 983, 991, 991, 991, 991, 991, 991, 991, 991, 997, - 997, 997, 997, 997, 997, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1013, 1013, 1013, 1013, - 1019, 1019, 1019, 1019, 1019, 1019, 1021, 1021, 1031, 1031, - 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1033, 1033, - 1039, 1039, 1039, 1039, 1039, 1039, 1049, 1049, 1049, 1049, - 1049, 1049, 1049, 1049, 1049, 1049, 1051, 1051, 1061, 1061, - 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1063, 1063, - 1069, 1069, 1069, 1069, 1069, 1069, 1087, 1087, 1087, 1087, - 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, - 1087, 1087, 1087, 1087, 1091, 1091, 1091, 1091, 1093, 1093, - 1097, 1097, 1097, 1097, 1103, 1103, 1103, 1103, 1103, 1103, - 1109, 1109, 1109, 1109, 1109, 1109, 1117, 1117, 1117, 1117, - 1117, 1117, 1117, 1117, 1123, 1123, 1123, 1123, 1123, 1123, - 1129, 1129, 1129, 1129, 1129, 1129, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1153, 1153, - 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, - 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1187, 1187, - 1187, 1187, 1187, 1187, 1193, 1193, 1193, 1193, 1193, 1193, - 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1213, 1213, - 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, - 1217, 1217, 1217, 1217, 1223, 1223, 1223, 1223, 1223, 1223, - 1229, 1229, 1229, 1229, 1229, 1229, 1231, 1231, 1237, 1237, - 1237, 1237, 1237, 1237, 1249, 1249, 1249, 1249, 1249, 1249, - 1249, 1249, 1249, 1249, 1249, 1249, 1259, 1259, 1259, 1259, - 1259, 1259, 1259, 1259, 1259, 1259, 1277, 1277, 1277, 1277, - 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, - 1277, 1277, 1277, 1277, 1279, 1279, 1283, 1283, 1283, 1283, - 1289, 1289, 1289, 1289, 1289, 1289, 1291, 1291, 1297, 1297, - 1297, 1297, 1297, 1297, 1301, 1301, 1301, 1301, 1303, 1303, - 1307, 1307, 1307, 1307, 1319, 1319, 1319, 1319, 1319, 1319, - 1319, 1319, 1319, 1319, 1319, 1319, 1321, 1321, 1327, 1327, - 1327, 1327, 1327, 1327, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1367, 1367, - 1367, 1367, 1367, 1367, 1373, 1373, 1373, 1373, 1373, 1373, - 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1423, 1423, 1423, 1423, - 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, - 1427, 1427, 1427, 1427, 1429, 1429, 1433, 1433, 1433, 1433, - 1439, 1439, 1439, 1439, 1439, 1439, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1451, 1451, 1451, 1451, 1453, 1453, - 1459, 1459, 1459, 1459, 1459, 1459, 1471, 1471, 1471, 1471, - 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1481, 1481, - 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1483, 1483, - 1487, 1487, 1487, 1487, 1489, 1489, 1493, 1493, 1493, 1493, - 1499, 1499, 1499, 1499, 1499, 1499, 1511, 1511, 1511, 1511, - 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1523, 1523, - 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, - 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1543, 1543, - 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, - 1549, 1549, 1549, 1549, 1549, 1549, 1553, 1553, 1553, 1553, - 1559, 1559, 1559, 1559, 1559, 1559, 1567, 1567, 1567, 1567, - 1567, 1567, 1567, 1567, 1571, 1571, 1571, 1571, 1579, 1579, - 1579, 1579, 1579, 1579, 1579, 1579, 1583, 1583, 1583, 1583, - 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, - 1597, 1597, 1597, 1597, 1601, 1601, 1601, 1601, 1607, 1607, - 1607, 1607, 1607, 1607, 1609, 1609, 1613, 1613, 1613, 1613, - 1619, 1619, 1619, 1619, 1619, 1619, 1621, 1621, 1627, 1627, - 1627, 1627, 1627, 1627, 1637, 1637, 1637, 1637, 1637, 1637, - 1637, 1637, 1637, 1637, 1657, 1657, 1657, 1657, 1657, 1657, - 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, - 1657, 1657, 1657, 1657, 1663, 1663, 1663, 1663, 1663, 1663, - 1667, 1667, 1667, 1667, 1669, 1669, 1693, 1693, 1693, 1693, - 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, - 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, - 1697, 1697, 1697, 1697, 1699, 1699, 1709, 1709, 1709, 1709, - 1709, 1709, 1709, 1709, 1709, 1709, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1723, 1723, - 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, - 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1747, 1747, - 1747, 1747, 1747, 1747, 1753, 1753, 1753, 1753, 1753, 1753, - 1759, 1759, 1759, 1759, 1759, 1759, 1777, 1777, 1777, 1777, - 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, - 1777, 1777, 1777, 1777, 1783, 1783, 1783, 1783, 1783, 1783, - 1787, 1787, 1787, 1787, 1789, 1789, 1801, 1801, 1801, 1801, - 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1811, 1811, - 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1823, 1823, - 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, - 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1861, 1861, 1861, 1861, 1861, 1861, - 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1867, 1867, - 1867, 1867, 1867, 1867, 1871, 1871, 1871, 1871, 1873, 1873, - 1877, 1877, 1877, 1877, 1879, 1879, 1889, 1889, 1889, 1889, - 1889, 1889, 1889, 1889, 1889, 1889, 1901, 1901, 1901, 1901, - 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1907, 1907, - 1907, 1907, 1907, 1907, 1913, 1913, 1913, 1913, 1913, 1913, - 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, - 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1933, 1933, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1951, 1951, 1973, 1973, - 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, - 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, - 1979, 1979, 1979, 1979, 1979, 1979, 1987, 1987, 1987, 1987, - 1987, 1987, 1987, 1987, 1993, 1993, 1993, 1993, 1993, 1993, - 1997, 1997, 1997, 1997, 1999, 1999, 2003, 2003, 2003, 2003, - 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2017, 2017, - 2017, 2017, 2017, 2017, 2027, 2027, 2027, 2027, 2027, 2027, - 2027, 2027, 2027, 2027, 2029, 2029, 2039, 2039, 2039, 2039, - 2039, 2039, 2039, 2039, 2039, 2039, 2053, 2053, 2053, 2053, - 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, - 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, - 2069, 2069, 2069, 2069, 2069, 2069, 2081, 2081, 2081, 2081, - 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2083, 2083, - 2087, 2087, 2087, 2087, 2089, 2089, 2099, 2099, 2099, 2099, - 2099, 2099, 2099, 2099, 2099, 2099, 2111, 2111, 2111, 2111, - 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2113, 2113, - 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, - 2129, 2129, 2129, 2129, 2129, 2129, 2131, 2131, 2137, 2137, - 2137, 2137, 2137, 2137, 2141, 2141, 2141, 2141, 2143, 2143, - 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, - 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2179, 2179, - 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, - 2179, 2179, 2179, 2179, 2179, 2179, 2203, 2203, 2203, 2203, - 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, - 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, - 2207, 2207, 2207, 2207, 2213, 2213, 2213, 2213, 2213, 2213, - 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2239, 2239, 2243, 2243, 2243, 2243, - 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2267, 2267, - 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, - 2267, 2267, 2267, 2267, 2269, 2269, 2273, 2273, 2273, 2273, - 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2287, 2287, - 2287, 2287, 2287, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2297, 2297, 2297, 2297, 2309, 2309, 2309, 2309, 2309, 2309, - 2309, 2309, 2309, 2309, 2309, 2309, 2311, 2311, 2333, 2333, - 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, - 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, - 2339, 2339, 2339, 2339, 2339, 2339, 2341, 2341, 2347, 2347, - 2347, 2347, 2347, 2347, 2351, 2351, 2351, 2351, 2357, 2357, - 2357, 2357, 2357, 2357, 2371, 2371, 2371, 2371, 2371, 2371, - 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2377, 2377, - 2377, 2377, 2377, 2377, 2381, 2381, 2381, 2381, 2383, 2383, - 2389, 2389, 2389, 2389, 2389, 2389, 2393, 2393, 2393, 2393, - 2399, 2399, 2399, 2399, 2399, 2399, 2411, 2411, 2411, 2411, - 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2417, 2417, - 2417, 2417, 2417, 2417, 2423, 2423, 2423, 2423, 2423, 2423, - 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, - 2437, 2437, 2437, 2437, 2441, 2441, 2441, 2441, 2447, 2447, - 2447, 2447, 2447, 2447, 2459, 2459, 2459, 2459, 2459, 2459, - 2459, 2459, 2459, 2459, 2459, 2459, 2467, 2467, 2467, 2467, - 2467, 2467, 2467, 2467, 2473, 2473, 2473, 2473, 2473, 2473, - 2477, 2477, 2477, 2477, 2503, 2503, 2503, 2503, 2503, 2503, - 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, - 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, - 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, - 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2531, 2531, - 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2539, 2539, - 2539, 2539, 2539, 2539, 2539, 2539, 2543, 2543, 2543, 2543, - 2549, 2549, 2549, 2549, 2549, 2549, 2551, 2551, 2557, 2557, - 2557, 2557, 2557, 2557, 2579, 2579, 2579, 2579, 2579, 2579, - 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, - 2579, 2579, 2579, 2579, 2579, 2579, 2591, 2591, 2591, 2591, - 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2593, 2593, - 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, - 2609, 2609, 2609, 2609, 2609, 2609, 2617, 2617, 2617, 2617, - 2617, 2617, 2617, 2617, 2621, 2621, 2621, 2621, 2633, 2633, - 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, - 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, - 2647, 2647, 2647, 2647, 2657, 2657, 2657, 2657, 2657, 2657, - 2657, 2657, 2657, 2657, 2659, 2659, 2663, 2663, 2663, 2663, - 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2677, 2677, - 2677, 2677, 2677, 2677, 2683, 2683, 2683, 2683, 2683, 2683, - 2687, 2687, 2687, 2687, 2689, 2689, 2693, 2693, 2693, 2693, - 2699, 2699, 2699, 2699, 2699, 2699, 2707, 2707, 2707, 2707, - 2707, 2707, 2707, 2707, 2711, 2711, 2711, 2711, 2713, 2713, - 2719, 2719, 2719, 2719, 2719, 2719, 2729, 2729, 2729, 2729, - 2729, 2729, 2729, 2729, 2729, 2729, 2731, 2731, 2741, 2741, - 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2749, 2749, - 2749, 2749, 2749, 2749, 2749, 2749, 2753, 2753, 2753, 2753, - 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, - 2767, 2767, 2767, 2767, 2777, 2777, 2777, 2777, 2777, 2777, - 2777, 2777, 2777, 2777, 2789, 2789, 2789, 2789, 2789, 2789, - 2789, 2789, 2789, 2789, 2789, 2789, 2791, 2791, 2797, 2797, - 2797, 2797, 2797, 2797, 2801, 2801, 2801, 2801, 2803, 2803, - 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, - 2819, 2819, 2819, 2819, 2819, 2819, 2833, 2833, 2833, 2833, - 2833, 2833, 2833, 2833, 2833, 2833, 2833, 2833, 2833, 2833, - 2837, 2837, 2837, 2837, 2843, 2843, 2843, 2843, 2843, 2843, - 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2857, 2857, - 2857, 2857, 2857, 2857, 2861, 2861, 2861, 2861, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2887, 2887, 2887, 2887, - 2887, 2887, 2887, 2887, 2897, 2897, 2897, 2897, 2897, 2897, - 2897, 2897, 2897, 2897, 2903, 2903, 2903, 2903, 2903, 2903, - 2909, 2909, 2909, 2909, 2909, 2909, 2917, 2917, 2917, 2917, - 2917, 2917, 2917, 2917, 2927, 2927, 2927, 2927, 2927, 2927, - 2927, 2927, 2927, 2927, 2939, 2939, 2939, 2939, 2939, 2939, - 2939, 2939, 2939, 2939, 2939, 2939, 2953, 2953, 2953, 2953, - 2953, 2953, 2953, 2953, 2953, 2953, 2953, 2953, 2953, 2953, - 2957, 2957, 2957, 2957, 2963, 2963, 2963, 2963, 2963, 2963, - 2969, 2969, 2969, 2969, 2969, 2969, 2971, 2971, 2999, 2999, - 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999, - 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999, - 2999, 2999, 2999, 2999, 2999, 2999, 3001, 3001, 3011, 3011, - 3011, 3011, 3011, 3011, 3011, 3011, 3011, 3011, 3019, 3019, - 3019, 3019, 3019, 3019, 3019, 3019, 3023, 3023, 3023, 3023, - 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, - 3037, 3037, 3037, 3037, 3041, 3041, 3041, 3041, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3061, 3061, 3061, 3061, - 3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061, 3067, 3067, - 3067, 3067, 3067, 3067, 3079, 3079, 3079, 3079, 3079, 3079, - 3079, 3079, 3079, 3079, 3079, 3079, 3083, 3083, 3083, 3083, - 3089, 3089, 3089, 3089, 3089, 3089, 3109, 3109, 3109, 3109, - 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109, - 3109, 3109, 3109, 3109, 3109, 3109, 3119, 3119, 3119, 3119, - 3119, 3119, 3119, 3119, 3119, 3119, 3121, 3121, 3137, 3137, - 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, - 3137, 3137, 3137, 3137, 3163, 3163, 3163, 3163, 3163, 3163, - 3163, 3163, 3163, 3163, 3163, 3163, 3163, 3163, 3163, 3163, - 3163, 3163, 3163, 3163, 3163, 3163, 3163, 3163, 3163, 3163, - 3167, 3167, 3167, 3167, 3169, 3169, 3181, 3181, 3181, 3181, - 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3187, 3187, - 3187, 3187, 3187, 3187, 3191, 3191, 3191, 3191, 3203, 3203, - 3203, 3203, 3203, 3203, 3203, 3203, 3203, 3203, 3203, 3203, - 3209, 3209, 3209, 3209, 3209, 3209, 3217, 3217, 3217, 3217, - 3217, 3217, 3217, 3217, 3221, 3221, 3221, 3221, 3229, 3229, - 3229, 3229, 3229, 3229, 3229, 3229, 3251, 3251, 3251, 3251, - 3251, 3251, 3251, 3251, 3251, 3251, 3251, 3251, 3251, 3251, - 3251, 3251, 3251, 3251, 3251, 3251, 3251, 3251, 3253, 3253, - 3257, 3257, 3257, 3257, 3259, 3259, 3271, 3271, 3271, 3271, - 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3301, 3301, 3307, 3307, - 3307, 3307, 3307, 3307, 3313, 3313, 3313, 3313, 3313, 3313, - 3319, 3319, 3319, 3319, 3319, 3319, 3323, 3323, 3323, 3323, - 3329, 3329, 3329, 3329, 3329, 3329, 3331, 3331, 3343, 3343, - 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, - 3347, 3347, 3347, 3347, 3359, 3359, 3359, 3359, 3359, 3359, - 3359, 3359, 3359, 3359, 3359, 3359, 3361, 3361, 3371, 3371, - 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3373, 3373, - 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389, - 3389, 3389, 3389, 3389, 3389, 3389, 3391, 3391, 3407, 3407, - 3407, 3407, 3407, 3407, 3407, 3407, 3407, 3407, 3407, 3407, - 3407, 3407, 3407, 3407, 3413, 3413, 3413, 3413, 3413, 3413, - 3433, 3433, 3433, 3433, 3433, 3433, 3433, 3433, 3433, 3433, - 3433, 3433, 3433, 3433, 3433, 3433, 3433, 3433, 3433, 3433, - 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, - 3449, 3449, 3449, 3449, 3449, 3449, 3457, 3457, 3457, 3457, - 3457, 3457, 3457, 3457, 3461, 3461, 3461, 3461, 3463, 3463, - 3467, 3467, 3467, 3467, 3469, 3469, 3491, 3491, 3491, 3491, - 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, - 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3499, 3499, - 3499, 3499, 3499, 3499, 3499, 3499, 3511, 3511, 3511, 3511, - 3511, 3511, 3511, 3511, 3511, 3511, 3511, 3511, 3517, 3517, - 3517, 3517, 3517, 3517, 3527, 3527, 3527, 3527, 3527, 3527, - 3527, 3527, 3527, 3527, 3529, 3529, 3533, 3533, 3533, 3533, - 3539, 3539, 3539, 3539, 3539, 3539, 3541, 3541, 3547, 3547, - 3547, 3547, 3547, 3547, 3557, 3557, 3557, 3557, 3557, 3557, - 3557, 3557, 3557, 3557, 3559, 3559, 3571, 3571, 3571, 3571, - 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3581, 3581, - 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3583, 3583, - 3593, 3593, 3593, 3593, 3593, 3593, 3593, 3593, 3593, 3593, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3613, 3613, 3613, 3613, 3613, 3613, - 3617, 3617, 3617, 3617, 3623, 3623, 3623, 3623, 3623, 3623, - 3631, 3631, 3631, 3631, 3631, 3631, 3631, 3631, 3637, 3637, - 3637, 3637, 3637, 3637, 3643, 3643, 3643, 3643, 3643, 3643, - 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, - 3659, 3659, 3659, 3659, 3659, 3659, 3671, 3671, 3671, 3671, - 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3673, 3673, - 3677, 3677, 3677, 3677, 3691, 3691, 3691, 3691, 3691, 3691, - 3691, 3691, 3691, 3691, 3691, 3691, 3691, 3691, 3697, 3697, - 3697, 3697, 3697, 3697, 3701, 3701, 3701, 3701, 3709, 3709, - 3709, 3709, 3709, 3709, 3709, 3709, 3719, 3719, 3719, 3719, - 3719, 3719, 3719, 3719, 3719, 3719, 3727, 3727, 3727, 3727, - 3727, 3727, 3727, 3727, 3733, 3733, 3733, 3733, 3733, 3733, - 3739, 3739, 3739, 3739, 3739, 3739, 3761, 3761, 3761, 3761, - 3761, 3761, 3761, 3761, 3761, 3761, 3761, 3761, 3761, 3761, - 3761, 3761, 3761, 3761, 3761, 3761, 3761, 3761, 3767, 3767, - 3767, 3767, 3767, 3767, 3769, 3769, 3779, 3779, 3779, 3779, - 3779, 3779, 3779, 3779, 3779, 3779, 3793, 3793, 3793, 3793, - 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, - 3797, 3797, 3797, 3797, 3803, 3803, 3803, 3803, 3803, 3803, - 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, - 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3823, 3823, - 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, - 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, - 3847, 3847, 3847, 3847, 3851, 3851, 3851, 3851, 3853, 3853, - 3863, 3863, 3863, 3863, 3863, 3863, 3863, 3863, 3863, 3863, - 3877, 3877, 3877, 3877, 3877, 3877, 3877, 3877, 3877, 3877, - 3877, 3877, 3877, 3877, 3881, 3881, 3881, 3881, 3889, 3889, - 3889, 3889, 3889, 3889, 3889, 3889, 3907, 3907, 3907, 3907, - 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, - 3907, 3907, 3907, 3907, 3911, 3911, 3911, 3911, 3917, 3917, - 3917, 3917, 3917, 3917, 3919, 3919, 3923, 3923, 3923, 3923, - 3929, 3929, 3929, 3929, 3929, 3929, 3931, 3931, 3943, 3943, - 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, - 3947, 3947, 3947, 3947, 3967, 3967, 3967, 3967, 3967, 3967, - 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, - 3967, 3967, 3967, 3967, 3989, 3989, 3989, 3989, 3989, 3989, - 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, - 3989, 3989, 3989, 3989, 3989, 3989, 4001, 4001, 4001, 4001, - 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4003, 4003, - 4007, 4007, 4007, 4007, 4013, 4013, 4013, 4013, 4013, 4013, - 4019, 4019, 4019, 4019, 4019, 4019, 4021, 4021, 4027, 4027, - 4027, 4027, 4027, 4027, 4049, 4049, 4049, 4049, 4049, 4049, - 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, - 4049, 4049, 4049, 4049, 4049, 4049, 4051, 4051, 4057, 4057, - 4057, 4057, 4057, 4057, 4073, 4073, 4073, 4073, 4073, 4073, - 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073, - 4079, 4079, 4079, 4079, 4079, 4079, 4091, 4091, 4091, 4091, - 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4093, 4093, - 4099, 4099, 4099, 4099, 4099, 4099, 4111, 4111, 4111, 4111, - 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4127, 4127, - 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, - 4127, 4127, 4127, 4127, 4129, 4129, 4133, 4133, 4133, 4133, - 4139, 4139, 4139, 4139, 4139, 4139, 4153, 4153, 4153, 4153, - 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, - 4157, 4157, 4157, 4157, 4159, 4159, 4177, 4177, 4177, 4177, - 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, - 4177, 4177, 4177, 4177, 4201, 4201, 4201, 4201, 4201, 4201, - 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4201, - 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4211, 4211, - 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4217, 4217, - 4217, 4217, 4217, 4217, 4219, 4219, 4229, 4229, 4229, 4229, - 4229, 4229, 4229, 4229, 4229, 4229, 4231, 4231, 4241, 4241, - 4241, 4241, 4241, 4241, 4241, 4241, 4241, 4241, 4243, 4243, - 4253, 4253, 4253, 4253, 4253, 4253, 4253, 4253, 4253, 4253, - 4259, 4259, 4259, 4259, 4259, 4259, 4261, 4261, 4271, 4271, - 4271, 4271, 4271, 4271, 4271, 4271, 4271, 4271, 4273, 4273, - 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283, - 4289, 4289, 4289, 4289, 4289, 4289, 4297, 4297, 4297, 4297, - 4297, 4297, 4297, 4297, 4327, 4327, 4327, 4327, 4327, 4327, - 4327, 4327, 4327, 4327, 4327, 4327, 4327, 4327, 4327, 4327, - 4327, 4327, 4327, 4327, 4327, 4327, 4327, 4327, 4327, 4327, - 4327, 4327, 4327, 4327, 4337, 4337, 4337, 4337, 4337, 4337, - 4337, 4337, 4337, 4337, 4339, 4339, 4349, 4349, 4349, 4349, - 4349, 4349, 4349, 4349, 4349, 4349, 4357, 4357, 4357, 4357, - 4357, 4357, 4357, 4357, 4363, 4363, 4363, 4363, 4363, 4363, - 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373, - 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391, - 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4397, 4397, - 4397, 4397, 4397, 4397, 4409, 4409, 4409, 4409, 4409, 4409, - 4409, 4409, 4409, 4409, 4409, 4409, 4421, 4421, 4421, 4421, - 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4423, 4423, - 4441, 4441, 4441, 4441, 4441, 4441, 4441, 4441, 4441, 4441, - 4441, 4441, 4441, 4441, 4441, 4441, 4441, 4441, 4447, 4447, - 4447, 4447, 4447, 4447, 4451, 4451, 4451, 4451, 4457, 4457, - 4457, 4457, 4457, 4457, 4463, 4463, 4463, 4463, 4463, 4463, - 4481, 4481, 4481, 4481, 4481, 4481, 4481, 4481, 4481, 4481, - 4481, 4481, 4481, 4481, 4481, 4481, 4481, 4481, 4483, 4483, - 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, - 4507, 4507, 4507, 4507, 4507, 4507, 4507, 4507, 4507, 4507, - 4507, 4507, 4507, 4507, 4513, 4513, 4513, 4513, 4513, 4513, - 4517, 4517, 4517, 4517, 4519, 4519, 4523, 4523, 4523, 4523, - 4547, 4547, 4547, 4547, 4547, 4547, 4547, 4547, 4547, 4547, - 4547, 4547, 4547, 4547, 4547, 4547, 4547, 4547, 4547, 4547, - 4547, 4547, 4547, 4547, 4549, 4549, 4561, 4561, 4561, 4561, - 4561, 4561, 4561, 4561, 4561, 4561, 4561, 4561, 4567, 4567, - 4567, 4567, 4567, 4567, 4583, 4583, 4583, 4583, 4583, 4583, - 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, - 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4597, 4597, - 4597, 4597, 4597, 4597, 4603, 4603, 4603, 4603, 4603, 4603, - 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, - 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4637, 4637, - 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, - 4637, 4637, 4637, 4637, 4639, 4639, 4643, 4643, 4643, 4643, - 4649, 4649, 4649, 4649, 4649, 4649, 4651, 4651, 4657, 4657, - 4657, 4657, 4657, 4657, 4663, 4663, 4663, 4663, 4663, 4663, - 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, - 4679, 4679, 4679, 4679, 4679, 4679, 4691, 4691, 4691, 4691, - 4691, 4691, 4691, 4691, 4691, 4691, 4691, 4691, 4703, 4703, - 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, - 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, - 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4723, 4723, - 4729, 4729, 4729, 4729, 4729, 4729, 4733, 4733, 4733, 4733, - 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, - 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4759, 4759, - 4759, 4759, 4759, 4759, 4759, 4759, 4783, 4783, 4783, 4783, - 4783, 4783, 4783, 4783, 4783, 4783, 4783, 4783, 4783, 4783, - 4783, 4783, 4783, 4783, 4783, 4783, 4783, 4783, 4783, 4783, - 4787, 4787, 4787, 4787, 4789, 4789, 4793, 4793, 4793, 4793, - 4799, 4799, 4799, 4799, 4799, 4799, 4801, 4801, 4813, 4813, - 4813, 4813, 4813, 4813, 4813, 4813, 4813, 4813, 4813, 4813, - 4817, 4817, 4817, 4817, 4831, 4831, 4831, 4831, 4831, 4831, - 4831, 4831, 4831, 4831, 4831, 4831, 4831, 4831, 4861, 4861, - 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, - 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, - 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4871, 4871, - 4871, 4871, 4871, 4871, 4871, 4871, 4871, 4871, 4877, 4877, - 4877, 4877, 4877, 4877, 4889, 4889, 4889, 4889, 4889, 4889, - 4889, 4889, 4889, 4889, 4889, 4889, 4903, 4903, 4903, 4903, - 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, - 4909, 4909, 4909, 4909, 4909, 4909, 4919, 4919, 4919, 4919, - 4919, 4919, 4919, 4919, 4919, 4919, 4931, 4931, 4931, 4931, - 4931, 4931, 4931, 4931, 4931, 4931, 4931, 4931, 4933, 4933, - 4937, 4937, 4937, 4937, 4943, 4943, 4943, 4943, 4943, 4943, - 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4957, 4957, - 4957, 4957, 4957, 4957, 4967, 4967, 4967, 4967, 4967, 4967, - 4967, 4967, 4967, 4967, 4969, 4969, 4973, 4973, 4973, 4973, - 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, - 4987, 4987, 4987, 4987, 4993, 4993, 4993, 4993, 4993, 4993, - 4999, 4999, 4999, 4999, 4999, 4999, 5003, 5003, 5003, 5003, - 5009, 5009, 5009, 5009, 5009, 5009, 5011, 5011, 5021, 5021, - 5021, 5021, 5021, 5021, 5021, 5021, 5021, 5021, 5023, 5023, - 5039, 5039, 5039, 5039, 5039, 5039, 5039, 5039, 5039, 5039, - 5039, 5039, 5039, 5039, 5039, 5039, 5051, 5051, 5051, 5051, - 5051, 5051, 5051, 5051, 5051, 5051, 5051, 5051, 5059, 5059, - 5059, 5059, 5059, 5059, 5059, 5059, 5077, 5077, 5077, 5077, - 5077, 5077, 5077, 5077, 5077, 5077, 5077, 5077, 5077, 5077, - 5077, 5077, 5077, 5077, 5081, 5081, 5081, 5081, 5087, 5087, - 5087, 5087, 5087, 5087, 5099, 5099, 5099, 5099, 5099, 5099, - 5099, 5099, 5099, 5099, 5099, 5099, 5101, 5101, 5107, 5107, - 5107, 5107, 5107, 5107, 5113, 5113, 5113, 5113, 5113, 5113, - 5119, 5119, 5119, 5119, 5119, 5119, 5147, 5147, 5147, 5147, - 5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147, - 5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147, - 5147, 5147, 5147, 5147, 5153, 5153, 5153, 5153, 5153, 5153, - 5167, 5167, 5167, 5167, 5167, 5167, 5167, 5167, 5167, 5167, - 5167, 5167, 5167, 5167, 5171, 5171, 5171, 5171, 5179, 5179, - 5179, 5179, 5179, 5179, 5179, 5179, 5189, 5189, 5189, 5189, - 5189, 5189, 5189, 5189, 5189, 5189, 5197, 5197, 5197, 5197, - 5197, 5197, 5197, 5197, 5209, 5209, 5209, 5209, 5209, 5209, - 5209, 5209, 5209, 5209, 5209, 5209, 5227, 5227, 5227, 5227, - 5227, 5227, 5227, 5227, 5227, 5227, 5227, 5227, 5227, 5227, - 5227, 5227, 5227, 5227, 5231, 5231, 5231, 5231, 5233, 5233, - 5237, 5237, 5237, 5237, 5261, 5261, 5261, 5261, 5261, 5261, - 5261, 5261, 5261, 5261, 5261, 5261, 5261, 5261, 5261, 5261, - 5261, 5261, 5261, 5261, 5261, 5261, 5261, 5261, 5273, 5273, - 5273, 5273, 5273, 5273, 5273, 5273, 5273, 5273, 5273, 5273, - 5279, 5279, 5279, 5279, 5279, 5279, 5281, 5281, 5297, 5297, - 5297, 5297, 5297, 5297, 5297, 5297, 5297, 5297, 5297, 5297, - 5297, 5297, 5297, 5297, 5303, 5303, 5303, 5303, 5303, 5303, - 5309, 5309, 5309, 5309, 5309, 5309, 5323, 5323, 5323, 5323, - 5323, 5323, 5323, 5323, 5323, 5323, 5323, 5323, 5323, 5323, - 5333, 5333, 5333, 5333, 5333, 5333, 5333, 5333, 5333, 5333, - 5347, 5347, 5347, 5347, 5347, 5347, 5347, 5347, 5347, 5347, - 5347, 5347, 5347, 5347, 5351, 5351, 5351, 5351, 5381, 5381, - 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381, - 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381, - 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5387, 5387, - 5387, 5387, 5387, 5387, 5393, 5393, 5393, 5393, 5393, 5393, - 5399, 5399, 5399, 5399, 5399, 5399, 5407, 5407, 5407, 5407, - 5407, 5407, 5407, 5407, 5413, 5413, 5413, 5413, 5413, 5413, - 5417, 5417, 5417, 5417, 5419, 5419, 5431, 5431, 5431, 5431, - 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5437, 5437, - 5437, 5437, 5437, 5437, 5441, 5441, 5441, 5441, 5443, 5443, - 5449, 5449, 5449, 5449, 5449, 5449, 5471, 5471, 5471, 5471, - 5471, 5471, 5471, 5471, 5471, 5471, 5471, 5471, 5471, 5471, - 5471, 5471, 5471, 5471, 5471, 5471, 5471, 5471, 5477, 5477, - 5477, 5477, 5477, 5477, 5479, 5479, 5483, 5483, 5483, 5483, - 5501, 5501, 5501, 5501, 5501, 5501, 5501, 5501, 5501, 5501, - 5501, 5501, 5501, 5501, 5501, 5501, 5501, 5501, 5503, 5503, - 5507, 5507, 5507, 5507, 5519, 5519, 5519, 5519, 5519, 5519, - 5519, 5519, 5519, 5519, 5519, 5519, 5521, 5521, 5527, 5527, - 5527, 5527, 5527, 5527, 5531, 5531, 5531, 5531, 5557, 5557, - 5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557, - 5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557, - 5557, 5557, 5557, 5557, 5563, 5563, 5563, 5563, 5563, 5563, - 5569, 5569, 5569, 5569, 5569, 5569, 5573, 5573, 5573, 5573, - 5581, 5581, 5581, 5581, 5581, 5581, 5581, 5581, 5591, 5591, - 5591, 5591, 5591, 5591, 5591, 5591, 5591, 5591, 5623, 5623, - 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, - 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, - 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, - 5639, 5639, 5639, 5639, 5639, 5639, 5639, 5639, 5639, 5639, - 5639, 5639, 5639, 5639, 5639, 5639, 5641, 5641, 5647, 5647, - 5647, 5647, 5647, 5647, 5651, 5651, 5651, 5651, 5653, 5653, - 5657, 5657, 5657, 5657, 5659, 5659, 5669, 5669, 5669, 5669, - 5669, 5669, 5669, 5669, 5669, 5669, 5683, 5683, 5683, 5683, - 5683, 5683, 5683, 5683, 5683, 5683, 5683, 5683, 5683, 5683, - 5689, 5689, 5689, 5689, 5689, 5689, 5693, 5693, 5693, 5693, - 5701, 5701, 5701, 5701, 5701, 5701, 5701, 5701, 5711, 5711, - 5711, 5711, 5711, 5711, 5711, 5711, 5711, 5711, 5717, 5717, - 5717, 5717, 5717, 5717, 5737, 5737, 5737, 5737, 5737, 5737, - 5737, 5737, 5737, 5737, 5737, 5737, 5737, 5737, 5737, 5737, - 5737, 5737, 5737, 5737, 5741, 5741, 5741, 5741, 5743, 5743, - 5749, 5749, 5749, 5749, 5749, 5749, 5779, 5779, 5779, 5779, - 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779, - 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779, - 5779, 5779, 5779, 5779, 5779, 5779, 5783, 5783, 5783, 5783, - 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5801, 5801, - 5801, 5801, 5801, 5801, 5801, 5801, 5801, 5801, 5807, 5807, - 5807, 5807, 5807, 5807, 5813, 5813, 5813, 5813, 5813, 5813, - 5821, 5821, 5821, 5821, 5821, 5821, 5821, 5821, 5827, 5827, - 5827, 5827, 5827, 5827, 5839, 5839, 5839, 5839, 5839, 5839, - 5839, 5839, 5839, 5839, 5839, 5839, 5843, 5843, 5843, 5843, - 5849, 5849, 5849, 5849, 5849, 5849, 5851, 5851, 5857, 5857, - 5857, 5857, 5857, 5857, 5861, 5861, 5861, 5861, 5867, 5867, - 5867, 5867, 5867, 5867, 5869, 5869, 5879, 5879, 5879, 5879, - 5879, 5879, 5879, 5879, 5879, 5879, 5881, 5881, 5897, 5897, - 5897, 5897, 5897, 5897, 5897, 5897, 5897, 5897, 5897, 5897, - 5897, 5897, 5897, 5897, 5903, 5903, 5903, 5903, 5903, 5903, - 5923, 5923, 5923, 5923, 5923, 5923, 5923, 5923, 5923, 5923, - 5923, 5923, 5923, 5923, 5923, 5923, 5923, 5923, 5923, 5923, - 5927, 5927, 5927, 5927, 5939, 5939, 5939, 5939, 5939, 5939, - 5939, 5939, 5939, 5939, 5939, 5939, 5953, 5953, 5953, 5953, - 5953, 5953, 5953, 5953, 5953, 5953, 5953, 5953, 5953, 5953, - 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981, - 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981, - 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5987, 5987, - 5987, 5987, 5987, 5987, 6007, 6007, 6007, 6007, 6007, 6007, - 6007, 6007, 6007, 6007, 6007, 6007, 6007, 6007, 6007, 6007, - 6007, 6007, 6007, 6007, 6011, 6011, 6011, 6011, 6029, 6029, - 6029, 6029, 6029, 6029, 6029, 6029, 6029, 6029, 6029, 6029, - 6029, 6029, 6029, 6029, 6029, 6029, 6037, 6037, 6037, 6037, - 6037, 6037, 6037, 6037, 6043, 6043, 6043, 6043, 6043, 6043, - 6047, 6047, 6047, 6047, 6053, 6053, 6053, 6053, 6053, 6053, - 6067, 6067, 6067, 6067, 6067, 6067, 6067, 6067, 6067, 6067, - 6067, 6067, 6067, 6067, 6073, 6073, 6073, 6073, 6073, 6073, - 6079, 6079, 6079, 6079, 6079, 6079, 6089, 6089, 6089, 6089, - 6089, 6089, 6089, 6089, 6089, 6089, 6091, 6091, 6101, 6101, - 6101, 6101, 6101, 6101, 6101, 6101, 6101, 6101, 6113, 6113, - 6113, 6113, 6113, 6113, 6113, 6113, 6113, 6113, 6113, 6113, - 6121, 6121, 6121, 6121, 6121, 6121, 6121, 6121, 6131, 6131, - 6131, 6131, 6131, 6131, 6131, 6131, 6131, 6131, 6133, 6133, - 6143, 6143, 6143, 6143, 6143, 6143, 6143, 6143, 6143, 6143, - 6151, 6151, 6151, 6151, 6151, 6151, 6151, 6151, 6163, 6163, - 6163, 6163, 6163, 6163, 6163, 6163, 6163, 6163, 6163, 6163, - 6173, 6173, 6173, 6173, 6173, 6173, 6173, 6173, 6173, 6173, - 6197, 6197, 6197, 6197, 6197, 6197, 6197, 6197, 6197, 6197, - 6197, 6197, 6197, 6197, 6197, 6197, 6197, 6197, 6197, 6197, - 6197, 6197, 6197, 6197, 6199, 6199, 6203, 6203, 6203, 6203, - 6211, 6211, 6211, 6211, 6211, 6211, 6211, 6211, 6217, 6217, - 6217, 6217, 6217, 6217, 6221, 6221, 6221, 6221, 6229, 6229, - 6229, 6229, 6229, 6229, 6229, 6229, 6247, 6247, 6247, 6247, - 6247, 6247, 6247, 6247, 6247, 6247, 6247, 6247, 6247, 6247, - 6247, 6247, 6247, 6247, 6257, 6257, 6257, 6257, 6257, 6257, - 6257, 6257, 6257, 6257, 6263, 6263, 6263, 6263, 6263, 6263, - 6269, 6269, 6269, 6269, 6269, 6269, 6271, 6271, 6277, 6277, - 6277, 6277, 6277, 6277, 6287, 6287, 6287, 6287, 6287, 6287, - 6287, 6287, 6287, 6287, 6299, 6299, 6299, 6299, 6299, 6299, - 6299, 6299, 6299, 6299, 6299, 6299, 6301, 6301, 6311, 6311, - 6311, 6311, 6311, 6311, 6311, 6311, 6311, 6311, 6317, 6317, - 6317, 6317, 6317, 6317, 6323, 6323, 6323, 6323, 6323, 6323, - 6329, 6329, 6329, 6329, 6329, 6329, 6337, 6337, 6337, 6337, - 6337, 6337, 6337, 6337, 6343, 6343, 6343, 6343, 6343, 6343, - 6353, 6353, 6353, 6353, 6353, 6353, 6353, 6353, 6353, 6353, - 6359, 6359, 6359, 6359, 6359, 6359, 6361, 6361, 6367, 6367, - 6367, 6367, 6367, 6367, 6373, 6373, 6373, 6373, 6373, 6373, - 6379, 6379, 6379, 6379, 6379, 6379, 6389, 6389, 6389, 6389, - 6389, 6389, 6389, 6389, 6389, 6389, 6397, 6397, 6397, 6397, - 6397, 6397, 6397, 6397, 6421, 6421, 6421, 6421, 6421, 6421, - 6421, 6421, 6421, 6421, 6421, 6421, 6421, 6421, 6421, 6421, - 6421, 6421, 6421, 6421, 6421, 6421, 6421, 6421, 6427, 6427, - 6427, 6427, 6427, 6427, 6449, 6449, 6449, 6449, 6449, 6449, - 6449, 6449, 6449, 6449, 6449, 6449, 6449, 6449, 6449, 6449, - 6449, 6449, 6449, 6449, 6449, 6449, 6451, 6451, 6469, 6469, - 6469, 6469, 6469, 6469, 6469, 6469, 6469, 6469, 6469, 6469, - 6469, 6469, 6469, 6469, 6469, 6469, 6473, 6473, 6473, 6473, - 6481, 6481, 6481, 6481, 6481, 6481, 6481, 6481, 6491, 6491, - 6491, 6491, 6491, 6491, 6491, 6491, 6491, 6491, 6521, 6521, - 6521, 6521, 6521, 6521, 6521, 6521, 6521, 6521, 6521, 6521, - 6521, 6521, 6521, 6521, 6521, 6521, 6521, 6521, 6521, 6521, - 6521, 6521, 6521, 6521, 6521, 6521, 6521, 6521, 6529, 6529, - 6529, 6529, 6529, 6529, 6529, 6529, 6547, 6547, 6547, 6547, - 6547, 6547, 6547, 6547, 6547, 6547, 6547, 6547, 6547, 6547, - 6547, 6547, 6547, 6547, 6551, 6551, 6551, 6551, 6553, 6553, - 6563, 6563, 6563, 6563, 6563, 6563, 6563, 6563, 6563, 6563, - 6569, 6569, 6569, 6569, 6569, 6569, 6571, 6571, 6577, 6577, - 6577, 6577, 6577, 6577, 6581, 6581, 6581, 6581, 6599, 6599, - 6599, 6599, 6599, 6599, 6599, 6599, 6599, 6599, 6599, 6599, - 6599, 6599, 6599, 6599, 6599, 6599, 6607, 6607, 6607, 6607, - 6607, 6607, 6607, 6607, 6619, 6619, 6619, 6619, 6619, 6619, - 6619, 6619, 6619, 6619, 6619, 6619, 6637, 6637, 6637, 6637, - 6637, 6637, 6637, 6637, 6637, 6637, 6637, 6637, 6637, 6637, - 6637, 6637, 6637, 6637, 6653, 6653, 6653, 6653, 6653, 6653, - 6653, 6653, 6653, 6653, 6653, 6653, 6653, 6653, 6653, 6653, - 6659, 6659, 6659, 6659, 6659, 6659, 6661, 6661, 6673, 6673, - 6673, 6673, 6673, 6673, 6673, 6673, 6673, 6673, 6673, 6673, - 6679, 6679, 6679, 6679, 6679, 6679, 6689, 6689, 6689, 6689, - 6689, 6689, 6689, 6689, 6689, 6689, 6691, 6691, 6701, 6701, - 6701, 6701, 6701, 6701, 6701, 6701, 6701, 6701, 6703, 6703, - 6709, 6709, 6709, 6709, 6709, 6709, 6719, 6719, 6719, 6719, - 6719, 6719, 6719, 6719, 6719, 6719, 6733, 6733, 6733, 6733, - 6733, 6733, 6733, 6733, 6733, 6733, 6733, 6733, 6733, 6733, - 6737, 6737, 6737, 6737, 6761, 6761, 6761, 6761, 6761, 6761, - 6761, 6761, 6761, 6761, 6761, 6761, 6761, 6761, 6761, 6761, - 6761, 6761, 6761, 6761, 6761, 6761, 6761, 6761, 6763, 6763, - 6779, 6779, 6779, 6779, 6779, 6779, 6779, 6779, 6779, 6779, - 6779, 6779, 6779, 6779, 6779, 6779, 6781, 6781, 6791, 6791, - 6791, 6791, 6791, 6791, 6791, 6791, 6791, 6791, 6793, 6793, - 6803, 6803, 6803, 6803, 6803, 6803, 6803, 6803, 6803, 6803, - 6823, 6823, 6823, 6823, 6823, 6823, 6823, 6823, 6823, 6823, - 6823, 6823, 6823, 6823, 6823, 6823, 6823, 6823, 6823, 6823, - 6827, 6827, 6827, 6827, 6829, 6829, 6833, 6833, 6833, 6833, - 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6857, 6857, - 6857, 6857, 6857, 6857, 6857, 6857, 6857, 6857, 6857, 6857, - 6857, 6857, 6857, 6857, 6863, 6863, 6863, 6863, 6863, 6863, - 6869, 6869, 6869, 6869, 6869, 6869, 6871, 6871, 6883, 6883, - 6883, 6883, 6883, 6883, 6883, 6883, 6883, 6883, 6883, 6883, - 6899, 6899, 6899, 6899, 6899, 6899, 6899, 6899, 6899, 6899, - 6899, 6899, 6899, 6899, 6899, 6899, 6907, 6907, 6907, 6907, - 6907, 6907, 6907, 6907, 6911, 6911, 6911, 6911, 6917, 6917, - 6917, 6917, 6917, 6917, 6947, 6947, 6947, 6947, 6947, 6947, - 6947, 6947, 6947, 6947, 6947, 6947, 6947, 6947, 6947, 6947, - 6947, 6947, 6947, 6947, 6947, 6947, 6947, 6947, 6947, 6947, - 6947, 6947, 6947, 6947, 6949, 6949, 6959, 6959, 6959, 6959, - 6959, 6959, 6959, 6959, 6959, 6959, 6961, 6961, 6967, 6967, - 6967, 6967, 6967, 6967, 6971, 6971, 6971, 6971, 6977, 6977, - 6977, 6977, 6977, 6977, 6983, 6983, 6983, 6983, 6983, 6983, - 6991, 6991, 6991, 6991, 6991, 6991, 6991, 6991, 6997, 6997, - 6997, 6997, 6997, 6997, 7001, 7001, 7001, 7001, 7013, 7013, - 7013, 7013, 7013, 7013, 7013, 7013, 7013, 7013, 7013, 7013, - 7019, 7019, 7019, 7019, 7019, 7019, 7027, 7027, 7027, 7027, - 7027, 7027, 7027, 7027, 7039, 7039, 7039, 7039, 7039, 7039, - 7039, 7039, 7039, 7039, 7039, 7039, 7043, 7043, 7043, 7043, - 7057, 7057, 7057, 7057, 7057, 7057, 7057, 7057, 7057, 7057, - 7057, 7057, 7057, 7057, 7069, 7069, 7069, 7069, 7069, 7069, - 7069, 7069, 7069, 7069, 7069, 7069, 7079, 7079, 7079, 7079, - 7079, 7079, 7079, 7079, 7079, 7079, 7103, 7103, 7103, 7103, - 7103, 7103, 7103, 7103, 7103, 7103, 7103, 7103, 7103, 7103, - 7103, 7103, 7103, 7103, 7103, 7103, 7103, 7103, 7103, 7103, - 7109, 7109, 7109, 7109, 7109, 7109, 7121, 7121, 7121, 7121, - 7121, 7121, 7121, 7121, 7121, 7121, 7121, 7121, 7127, 7127, - 7127, 7127, 7127, 7127, 7129, 7129, 7151, 7151, 7151, 7151, - 7151, 7151, 7151, 7151, 7151, 7151, 7151, 7151, 7151, 7151, - 7151, 7151, 7151, 7151, 7151, 7151, 7151, 7151, 7159, 7159, - 7159, 7159, 7159, 7159, 7159, 7159, 7177, 7177, 7177, 7177, - 7177, 7177, 7177, 7177, 7177, 7177, 7177, 7177, 7177, 7177, - 7177, 7177, 7177, 7177, 7187, 7187, 7187, 7187, 7187, 7187, - 7187, 7187, 7187, 7187, 7193, 7193, 7193, 7193, 7193, 7193, - 7207, 7207, 7207, 7207, 7207, 7207, 7207, 7207, 7207, 7207, - 7207, 7207, 7207, 7207, 7211, 7211, 7211, 7211, 7213, 7213, - 7219, 7219, 7219, 7219, 7219, 7219, 7229, 7229, 7229, 7229, - 7229, 7229, 7229, 7229, 7229, 7229, 7237, 7237, 7237, 7237, - 7237, 7237, 7237, 7237, 7243, 7243, 7243, 7243, 7243, 7243, - 7247, 7247, 7247, 7247, 7253, 7253, 7253, 7253, 7253, 7253, - 7283, 7283, 7283, 7283, 7283, 7283, 7283, 7283, 7283, 7283, - 7283, 7283, 7283, 7283, 7283, 7283, 7283, 7283, 7283, 7283, - 7283, 7283, 7283, 7283, 7283, 7283, 7283, 7283, 7283, 7283, - 7297, 7297, 7297, 7297, 7297, 7297, 7297, 7297, 7297, 7297, - 7297, 7297, 7297, 7297, 7307, 7307, 7307, 7307, 7307, 7307, - 7307, 7307, 7307, 7307, 7309, 7309, 7321, 7321, 7321, 7321, - 7321, 7321, 7321, 7321, 7321, 7321, 7321, 7321, 7331, 7331, - 7331, 7331, 7331, 7331, 7331, 7331, 7331, 7331, 7333, 7333, - 7349, 7349, 7349, 7349, 7349, 7349, 7349, 7349, 7349, 7349, - 7349, 7349, 7349, 7349, 7349, 7349, 7351, 7351, 7369, 7369, - 7369, 7369, 7369, 7369, 7369, 7369, 7369, 7369, 7369, 7369, - 7369, 7369, 7369, 7369, 7369, 7369, 7393, 7393, 7393, 7393, - 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, - 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, - 7411, 7411, 7411, 7411, 7411, 7411, 7411, 7411, 7411, 7411, - 7411, 7411, 7411, 7411, 7411, 7411, 7411, 7411, 7417, 7417, - 7417, 7417, 7417, 7417, 7433, 7433, 7433, 7433, 7433, 7433, - 7433, 7433, 7433, 7433, 7433, 7433, 7433, 7433, 7433, 7433, - 7451, 7451, 7451, 7451, 7451, 7451, 7451, 7451, 7451, 7451, - 7451, 7451, 7451, 7451, 7451, 7451, 7451, 7451, 7457, 7457, - 7457, 7457, 7457, 7457, 7459, 7459, 7477, 7477, 7477, 7477, - 7477, 7477, 7477, 7477, 7477, 7477, 7477, 7477, 7477, 7477, - 7477, 7477, 7477, 7477, 7481, 7481, 7481, 7481, 7487, 7487, - 7487, 7487, 7487, 7487, 7489, 7489, 7499, 7499, 7499, 7499, - 7499, 7499, 7499, 7499, 7499, 7499, 7507, 7507, 7507, 7507, - 7507, 7507, 7507, 7507, 7517, 7517, 7517, 7517, 7517, 7517, - 7517, 7517, 7517, 7517, 7523, 7523, 7523, 7523, 7523, 7523, - 7529, 7529, 7529, 7529, 7529, 7529, 7537, 7537, 7537, 7537, - 7537, 7537, 7537, 7537, 7541, 7541, 7541, 7541, 7547, 7547, - 7547, 7547, 7547, 7547, 7549, 7549, 7559, 7559, 7559, 7559, - 7559, 7559, 7559, 7559, 7559, 7559, 7561, 7561, 7573, 7573, - 7573, 7573, 7573, 7573, 7573, 7573, 7573, 7573, 7573, 7573, - 7577, 7577, 7577, 7577, 7583, 7583, 7583, 7583, 7583, 7583, - 7589, 7589, 7589, 7589, 7589, 7589, 7591, 7591, 7603, 7603, - 7603, 7603, 7603, 7603, 7603, 7603, 7603, 7603, 7603, 7603, - 7607, 7607, 7607, 7607, 7621, 7621, 7621, 7621, 7621, 7621, - 7621, 7621, 7621, 7621, 7621, 7621, 7621, 7621, 7639, 7639, - 7639, 7639, 7639, 7639, 7639, 7639, 7639, 7639, 7639, 7639, - 7639, 7639, 7639, 7639, 7639, 7639, 7643, 7643, 7643, 7643, - 7649, 7649, 7649, 7649, 7649, 7649, 7669, 7669, 7669, 7669, - 7669, 7669, 7669, 7669, 7669, 7669, 7669, 7669, 7669, 7669, - 7669, 7669, 7669, 7669, 7669, 7669, 7673, 7673, 7673, 7673, - 7681, 7681, 7681, 7681, 7681, 7681, 7681, 7681, 7687, 7687, - 7687, 7687, 7687, 7687, 7691, 7691, 7691, 7691, 7699, 7699, - 7699, 7699, 7699, 7699, 7699, 7699, 7703, 7703, 7703, 7703, - 7717, 7717, 7717, 7717, 7717, 7717, 7717, 7717, 7717, 7717, - 7717, 7717, 7717, 7717, 7723, 7723, 7723, 7723, 7723, 7723, - 7727, 7727, 7727, 7727, 7741, 7741, 7741, 7741, 7741, 7741, - 7741, 7741, 7741, 7741, 7741, 7741, 7741, 7741, 7753, 7753, - 7753, 7753, 7753, 7753, 7753, 7753, 7753, 7753, 7753, 7753, - 7757, 7757, 7757, 7757, 7759, 7759, 7789, 7789, 7789, 7789, - 7789, 7789, 7789, 7789, 7789, 7789, 7789, 7789, 7789, 7789, - 7789, 7789, 7789, 7789, 7789, 7789, 7789, 7789, 7789, 7789, - 7789, 7789, 7789, 7789, 7789, 7789, 7793, 7793, 7793, 7793, - 7817, 7817, 7817, 7817, 7817, 7817, 7817, 7817, 7817, 7817, - 7817, 7817, 7817, 7817, 7817, 7817, 7817, 7817, 7817, 7817, - 7817, 7817, 7817, 7817, 7823, 7823, 7823, 7823, 7823, 7823, - 7829, 7829, 7829, 7829, 7829, 7829, 7841, 7841, 7841, 7841, - 7841, 7841, 7841, 7841, 7841, 7841, 7841, 7841, 7853, 7853, - 7853, 7853, 7853, 7853, 7853, 7853, 7853, 7853, 7853, 7853, - 7867, 7867, 7867, 7867, 7867, 7867, 7867, 7867, 7867, 7867, - 7867, 7867, 7867, 7867, 7873, 7873, 7873, 7873, 7873, 7873, - 7877, 7877, 7877, 7877, 7879, 7879, 7883, 7883, 7883, 7883, - 7901, 7901, 7901, 7901, 7901, 7901, 7901, 7901, 7901, 7901, - 7901, 7901, 7901, 7901, 7901, 7901, 7901, 7901, 7907, 7907, - 7907, 7907, 7907, 7907, 7919, 7919, 7919, 7919, 7919, 7919, - 7919, 7919, 7919, 7919, 7919, 7919, 7927, 7927, 7927, 7927, - 7927, 7927, 7927, 7927, 7933, 7933, 7933, 7933, 7933, 7933, - 7937, 7937, 7937, 7937, 7949, 7949, 7949, 7949, 7949, 7949, - 7949, 7949, 7949, 7949, 7949, 7949, 7951, 7951, 7963, 7963, - 7963, 7963, 7963, 7963, 7963, 7963, 7963, 7963, 7963, 7963, - 7993, 7993, 7993, 7993, 7993, 7993, 7993, 7993, 7993, 7993, - 7993, 7993, 7993, 7993, 7993, 7993, 7993, 7993, 7993, 7993, - 7993, 7993, 7993, 7993, 7993, 7993, 7993, 7993, 7993, 7993, - 8009, 8009, 8009, 8009, 8009, 8009, 8009, 8009, 8009, 8009, - 8009, 8009, 8009, 8009, 8009, 8009, 8011, 8011, 8017, 8017, - 8017, 8017, 8017, 8017, 8039, 8039, 8039, 8039, 8039, 8039, - 8039, 8039, 8039, 8039, 8039, 8039, 8039, 8039, 8039, 8039, - 8039, 8039, 8039, 8039, 8039, 8039, 8053, 8053, 8053, 8053, - 8053, 8053, 8053, 8053, 8053, 8053, 8053, 8053, 8053, 8053, - 8059, 8059, 8059, 8059, 8059, 8059, 8069, 8069, 8069, 8069, - 8069, 8069, 8069, 8069, 8069, 8069, 8081, 8081, 8081, 8081, - 8081, 8081, 8081, 8081, 8081, 8081, 8081, 8081, 8087, 8087, - 8087, 8087, 8087, 8087, 8089, 8089, 8093, 8093, 8093, 8093, - 8101, 8101, 8101, 8101, 8101, 8101, 8101, 8101, 8111, 8111, - 8111, 8111, 8111, 8111, 8111, 8111, 8111, 8111, 8117, 8117, - 8117, 8117, 8117, 8117, 8123, 8123, 8123, 8123, 8123, 8123, - 8147, 8147, 8147, 8147, 8147, 8147, 8147, 8147, 8147, 8147, - 8147, 8147, 8147, 8147, 8147, 8147, 8147, 8147, 8147, 8147, - 8147, 8147, 8147, 8147, 8161, 8161, 8161, 8161, 8161, 8161, - 8161, 8161, 8161, 8161, 8161, 8161, 8161, 8161, 8167, 8167, - 8167, 8167, 8167, 8167, 8171, 8171, 8171, 8171, 8179, 8179, - 8179, 8179, 8179, 8179, 8179, 8179, 8191, 8191, 8191, 8191, - 8191, 8191, 8191, 8191, 8191, 8191, 8191, 8191, 8209, 8209, - 8209, 8209, 8209, 8209, 8209, 8209, 8209, 8209, 8209, 8209, - 8209, 8209, 8209, 8209, 8209, 8209, 8219, 8219, 8219, 8219, - 8219, 8219, 8219, 8219, 8219, 8219, 8221, 8221, 8231, 8231, - 8231, 8231, 8231, 8231, 8231, 8231, 8231, 8231, 8233, 8233, - 8237, 8237, 8237, 8237, 8243, 8243, 8243, 8243, 8243, 8243, - 8263, 8263, 8263, 8263, 8263, 8263, 8263, 8263, 8263, 8263, - 8263, 8263, 8263, 8263, 8263, 8263, 8263, 8263, 8263, 8263, - 8269, 8269, 8269, 8269, 8269, 8269, 8273, 8273, 8273, 8273, - 8287, 8287, 8287, 8287, 8287, 8287, 8287, 8287, 8287, 8287, - 8287, 8287, 8287, 8287, 8291, 8291, 8291, 8291, 8293, 8293, - 8297, 8297, 8297, 8297, 8311, 8311, 8311, 8311, 8311, 8311, - 8311, 8311, 8311, 8311, 8311, 8311, 8311, 8311, 8317, 8317, - 8317, 8317, 8317, 8317, 8329, 8329, 8329, 8329, 8329, 8329, - 8329, 8329, 8329, 8329, 8329, 8329, 8353, 8353, 8353, 8353, - 8353, 8353, 8353, 8353, 8353, 8353, 8353, 8353, 8353, 8353, - 8353, 8353, 8353, 8353, 8353, 8353, 8353, 8353, 8353, 8353, - 8363, 8363, 8363, 8363, 8363, 8363, 8363, 8363, 8363, 8363, - 8369, 8369, 8369, 8369, 8369, 8369, 8377, 8377, 8377, 8377, - 8377, 8377, 8377, 8377, 8387, 8387, 8387, 8387, 8387, 8387, - 8387, 8387, 8387, 8387, 8389, 8389, 8419, 8419, 8419, 8419, - 8419, 8419, 8419, 8419, 8419, 8419, 8419, 8419, 8419, 8419, - 8419, 8419, 8419, 8419, 8419, 8419, 8419, 8419, 8419, 8419, - 8419, 8419, 8419, 8419, 8419, 8419, 8423, 8423, 8423, 8423, - 8429, 8429, 8429, 8429, 8429, 8429, 8431, 8431, 8443, 8443, - 8443, 8443, 8443, 8443, 8443, 8443, 8443, 8443, 8443, 8443, - 8447, 8447, 8447, 8447, 8461, 8461, 8461, 8461, 8461, 8461, - 8461, 8461, 8461, 8461, 8461, 8461, 8461, 8461, 8467, 8467, - 8467, 8467, 8467, 8467, 8501, 8501, 8501, 8501, 8501, 8501, - 8501, 8501, 8501, 8501, 8501, 8501, 8501, 8501, 8501, 8501, - 8501, 8501, 8501, 8501, 8501, 8501, 8501, 8501, 8501, 8501, - 8501, 8501, 8501, 8501, 8501, 8501, 8501, 8501, 8513, 8513, - 8513, 8513, 8513, 8513, 8513, 8513, 8513, 8513, 8513, 8513, - 8521, 8521, 8521, 8521, 8521, 8521, 8521, 8521, 8527, 8527, - 8527, 8527, 8527, 8527, 8537, 8537, 8537, 8537, 8537, 8537, - 8537, 8537, 8537, 8537, 8539, 8539, 8543, 8543, 8543, 8543, - 8563, 8563, 8563, 8563, 8563, 8563, 8563, 8563, 8563, 8563, - 8563, 8563, 8563, 8563, 8563, 8563, 8563, 8563, 8563, 8563, - 8573, 8573, 8573, 8573, 8573, 8573, 8573, 8573, 8573, 8573, - 8581, 8581, 8581, 8581, 8581, 8581, 8581, 8581, 8597, 8597, - 8597, 8597, 8597, 8597, 8597, 8597, 8597, 8597, 8597, 8597, - 8597, 8597, 8597, 8597, 8599, 8599, 8609, 8609, 8609, 8609, - 8609, 8609, 8609, 8609, 8609, 8609, 8623, 8623, 8623, 8623, - 8623, 8623, 8623, 8623, 8623, 8623, 8623, 8623, 8623, 8623, - 8627, 8627, 8627, 8627, 8629, 8629, 8641, 8641, 8641, 8641, - 8641, 8641, 8641, 8641, 8641, 8641, 8641, 8641, 8647, 8647, - 8647, 8647, 8647, 8647, 8663, 8663, 8663, 8663, 8663, 8663, - 8663, 8663, 8663, 8663, 8663, 8663, 8663, 8663, 8663, 8663, - 8669, 8669, 8669, 8669, 8669, 8669, 8677, 8677, 8677, 8677, - 8677, 8677, 8677, 8677, 8681, 8681, 8681, 8681, 8689, 8689, - 8689, 8689, 8689, 8689, 8689, 8689, 8693, 8693, 8693, 8693, - 8699, 8699, 8699, 8699, 8699, 8699, 8707, 8707, 8707, 8707, - 8707, 8707, 8707, 8707, 8713, 8713, 8713, 8713, 8713, 8713, - 8719, 8719, 8719, 8719, 8719, 8719, 8731, 8731, 8731, 8731, - 8731, 8731, 8731, 8731, 8731, 8731, 8731, 8731, 8737, 8737, - 8737, 8737, 8737, 8737, 8741, 8741, 8741, 8741, 8747, 8747, - 8747, 8747, 8747, 8747, 8753, 8753, 8753, 8753, 8753, 8753, - 8761, 8761, 8761, 8761, 8761, 8761, 8761, 8761, 8779, 8779, - 8779, 8779, 8779, 8779, 8779, 8779, 8779, 8779, 8779, 8779, - 8779, 8779, 8779, 8779, 8779, 8779, 8783, 8783, 8783, 8783, - 8803, 8803, 8803, 8803, 8803, 8803, 8803, 8803, 8803, 8803, - 8803, 8803, 8803, 8803, 8803, 8803, 8803, 8803, 8803, 8803, - 8807, 8807, 8807, 8807, 8819, 8819, 8819, 8819, 8819, 8819, - 8819, 8819, 8819, 8819, 8819, 8819, 8821, 8821, 8831, 8831, - 8831, 8831, 8831, 8831, 8831, 8831, 8831, 8831, 8837, 8837, - 8837, 8837, 8837, 8837, 8839, 8839, 8849, 8849, 8849, 8849, - 8849, 8849, 8849, 8849, 8849, 8849, 8861, 8861, 8861, 8861, - 8861, 8861, 8861, 8861, 8861, 8861, 8861, 8861, 8863, 8863, - 8867, 8867, 8867, 8867, 8887, 8887, 8887, 8887, 8887, 8887, - 8887, 8887, 8887, 8887, 8887, 8887, 8887, 8887, 8887, 8887, - 8887, 8887, 8887, 8887, 8893, 8893, 8893, 8893, 8893, 8893, - 8923, 8923, 8923, 8923, 8923, 8923, 8923, 8923, 8923, 8923, - 8923, 8923, 8923, 8923, 8923, 8923, 8923, 8923, 8923, 8923, - 8923, 8923, 8923, 8923, 8923, 8923, 8923, 8923, 8923, 8923, - 8929, 8929, 8929, 8929, 8929, 8929, 8933, 8933, 8933, 8933, - 8941, 8941, 8941, 8941, 8941, 8941, 8941, 8941, 8951, 8951, - 8951, 8951, 8951, 8951, 8951, 8951, 8951, 8951, 8963, 8963, - 8963, 8963, 8963, 8963, 8963, 8963, 8963, 8963, 8963, 8963, - 8969, 8969, 8969, 8969, 8969, 8969, 8971, 8971, 8999, 8999, - 8999, 8999, 8999, 8999, 8999, 8999, 8999, 8999, 8999, 8999, - 8999, 8999, 8999, 8999, 8999, 8999, 8999, 8999, 8999, 8999, - 8999, 8999, 8999, 8999, 8999, 8999, 9001, 9001, 9007, 9007, - 9007, 9007, 9007, 9007, 9011, 9011, 9011, 9011, 9013, 9013, - 9029, 9029, 9029, 9029, 9029, 9029, 9029, 9029, 9029, 9029, - 9029, 9029, 9029, 9029, 9029, 9029, 9041, 9041, 9041, 9041, - 9041, 9041, 9041, 9041, 9041, 9041, 9041, 9041, 9043, 9043, - 9049, 9049, 9049, 9049, 9049, 9049, 9059, 9059, 9059, 9059, - 9059, 9059, 9059, 9059, 9059, 9059, 9067, 9067, 9067, 9067, - 9067, 9067, 9067, 9067, 9091, 9091, 9091, 9091, 9091, 9091, - 9091, 9091, 9091, 9091, 9091, 9091, 9091, 9091, 9091, 9091, - 9091, 9091, 9091, 9091, 9091, 9091, 9091, 9091, 9103, 9103, - 9103, 9103, 9103, 9103, 9103, 9103, 9103, 9103, 9103, 9103, - 9109, 9109, 9109, 9109, 9109, 9109, 9127, 9127, 9127, 9127, - 9127, 9127, 9127, 9127, 9127, 9127, 9127, 9127, 9127, 9127, - 9127, 9127, 9127, 9127, 9133, 9133, 9133, 9133, 9133, 9133, - 9137, 9137, 9137, 9137, 9151, 9151, 9151, 9151, 9151, 9151, - 9151, 9151, 9151, 9151, 9151, 9151, 9151, 9151, 9157, 9157, - 9157, 9157, 9157, 9157, 9161, 9161, 9161, 9161, 9173, 9173, - 9173, 9173, 9173, 9173, 9173, 9173, 9173, 9173, 9173, 9173, - 9181, 9181, 9181, 9181, 9181, 9181, 9181, 9181, 9187, 9187, - 9187, 9187, 9187, 9187, 9199, 9199, 9199, 9199, 9199, 9199, - 9199, 9199, 9199, 9199, 9199, 9199, 9203, 9203, 9203, 9203, - 9209, 9209, 9209, 9209, 9209, 9209, 9221, 9221, 9221, 9221, - 9221, 9221, 9221, 9221, 9221, 9221, 9221, 9221, 9227, 9227, - 9227, 9227, 9227, 9227, 9239, 9239, 9239, 9239, 9239, 9239, - 9239, 9239, 9239, 9239, 9239, 9239, 9241, 9241, 9257, 9257, - 9257, 9257, 9257, 9257, 9257, 9257, 9257, 9257, 9257, 9257, - 9257, 9257, 9257, 9257, 9277, 9277, 9277, 9277, 9277, 9277, - 9277, 9277, 9277, 9277, 9277, 9277, 9277, 9277, 9277, 9277, - 9277, 9277, 9277, 9277, 9281, 9281, 9281, 9281, 9283, 9283, - 9293, 9293, 9293, 9293, 9293, 9293, 9293, 9293, 9293, 9293, - 9311, 9311, 9311, 9311, 9311, 9311, 9311, 9311, 9311, 9311, - 9311, 9311, 9311, 9311, 9311, 9311, 9311, 9311, 9319, 9319, - 9319, 9319, 9319, 9319, 9319, 9319, 9323, 9323, 9323, 9323, - 9337, 9337, 9337, 9337, 9337, 9337, 9337, 9337, 9337, 9337, - 9337, 9337, 9337, 9337, 9341, 9341, 9341, 9341, 9343, 9343, - 9349, 9349, 9349, 9349, 9349, 9349, 9371, 9371, 9371, 9371, - 9371, 9371, 9371, 9371, 9371, 9371, 9371, 9371, 9371, 9371, - 9371, 9371, 9371, 9371, 9371, 9371, 9371, 9371, 9377, 9377, - 9377, 9377, 9377, 9377, 9391, 9391, 9391, 9391, 9391, 9391, - 9391, 9391, 9391, 9391, 9391, 9391, 9391, 9391, 9397, 9397, - 9397, 9397, 9397, 9397, 9403, 9403, 9403, 9403, 9403, 9403, - 9413, 9413, 9413, 9413, 9413, 9413, 9413, 9413, 9413, 9413, - 9419, 9419, 9419, 9419, 9419, 9419, 9421, 9421, 9431, 9431, - 9431, 9431, 9431, 9431, 9431, 9431, 9431, 9431, 9433, 9433, - 9437, 9437, 9437, 9437, 9439, 9439, 9461, 9461, 9461, 9461, - 9461, 9461, 9461, 9461, 9461, 9461, 9461, 9461, 9461, 9461, - 9461, 9461, 9461, 9461, 9461, 9461, 9461, 9461, 9463, 9463, - 9467, 9467, 9467, 9467, 9473, 9473, 9473, 9473, 9473, 9473, - 9479, 9479, 9479, 9479, 9479, 9479, 9491, 9491, 9491, 9491, - 9491, 9491, 9491, 9491, 9491, 9491, 9491, 9491, 9497, 9497, - 9497, 9497, 9497, 9497, 9511, 9511, 9511, 9511, 9511, 9511, - 9511, 9511, 9511, 9511, 9511, 9511, 9511, 9511, 9521, 9521, - 9521, 9521, 9521, 9521, 9521, 9521, 9521, 9521, 9533, 9533, - 9533, 9533, 9533, 9533, 9533, 9533, 9533, 9533, 9533, 9533, - 9539, 9539, 9539, 9539, 9539, 9539, 9547, 9547, 9547, 9547, - 9547, 9547, 9547, 9547, 9551, 9551, 9551, 9551, 9587, 9587, - 9587, 9587, 9587, 9587, 9587, 9587, 9587, 9587, 9587, 9587, - 9587, 9587, 9587, 9587, 9587, 9587, 9587, 9587, 9587, 9587, - 9587, 9587, 9587, 9587, 9587, 9587, 9587, 9587, 9587, 9587, - 9587, 9587, 9587, 9587, 9601, 9601, 9601, 9601, 9601, 9601, - 9601, 9601, 9601, 9601, 9601, 9601, 9601, 9601, 9613, 9613, - 9613, 9613, 9613, 9613, 9613, 9613, 9613, 9613, 9613, 9613, - 9619, 9619, 9619, 9619, 9619, 9619, 9623, 9623, 9623, 9623, - 9629, 9629, 9629, 9629, 9629, 9629, 9631, 9631, 9643, 9643, - 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, - 9649, 9649, 9649, 9649, 9649, 9649, 9661, 9661, 9661, 9661, - 9661, 9661, 9661, 9661, 9661, 9661, 9661, 9661, 9677, 9677, - 9677, 9677, 9677, 9677, 9677, 9677, 9677, 9677, 9677, 9677, - 9677, 9677, 9677, 9677, 9679, 9679, 9689, 9689, 9689, 9689, - 9689, 9689, 9689, 9689, 9689, 9689, 9697, 9697, 9697, 9697, - 9697, 9697, 9697, 9697, 9719, 9719, 9719, 9719, 9719, 9719, - 9719, 9719, 9719, 9719, 9719, 9719, 9719, 9719, 9719, 9719, - 9719, 9719, 9719, 9719, 9719, 9719, 9721, 9721, 9733, 9733, - 9733, 9733, 9733, 9733, 9733, 9733, 9733, 9733, 9733, 9733, - 9739, 9739, 9739, 9739, 9739, 9739, 9743, 9743, 9743, 9743, - 9749, 9749, 9749, 9749, 9749, 9749, 9767, 9767, 9767, 9767, - 9767, 9767, 9767, 9767, 9767, 9767, 9767, 9767, 9767, 9767, - 9767, 9767, 9767, 9767, 9769, 9769, 9781, 9781, 9781, 9781, - 9781, 9781, 9781, 9781, 9781, 9781, 9781, 9781, 9787, 9787, - 9787, 9787, 9787, 9787, 9791, 9791, 9791, 9791, 9803, 9803, - 9803, 9803, 9803, 9803, 9803, 9803, 9803, 9803, 9803, 9803, - 9811, 9811, 9811, 9811, 9811, 9811, 9811, 9811, 9817, 9817, - 9817, 9817, 9817, 9817, 9829, 9829, 9829, 9829, 9829, 9829, - 9829, 9829, 9829, 9829, 9829, 9829, 9833, 9833, 9833, 9833, - 9839, 9839, 9839, 9839, 9839, 9839, 9851, 9851, 9851, 9851, - 9851, 9851, 9851, 9851, 9851, 9851, 9851, 9851, 9857, 9857, - 9857, 9857, 9857, 9857, 9859, 9859, 9871, 9871, 9871, 9871, - 9871, 9871, 9871, 9871, 9871, 9871, 9871, 9871, 9883, 9883, - 9883, 9883, 9883, 9883, 9883, 9883, 9883, 9883, 9883, 9883, - 9887, 9887, 9887, 9887, 9901, 9901, 9901, 9901, 9901, 9901, - 9901, 9901, 9901, 9901, 9901, 9901, 9901, 9901, 9907, 9907, - 9907, 9907, 9907, 9907, 9923, 9923, 9923, 9923, 9923, 9923, - 9923, 9923, 9923, 9923, 9923, 9923, 9923, 9923, 9923, 9923, - 9929, 9929, 9929, 9929, 9929, 9929, 9931, 9931, 9941, 9941, - 9941, 9941, 9941, 9941, 9941, 9941, 9941, 9941, 9949, 9949, - 9949, 9949, 9949, 9949, 9949, 9949, 9967, 9967, 9967, 9967, - 9967, 9967, 9967, 9967, 9967, 9967, 9967, 9967, 9967, 9967, - 9967, 9967, 9967, 9967, 9973, 9973, 9973, 9973, 9973, 9973, - 10007, 10007, 10007, 10007, 10007, 10007, 10007, 10007, - 10007, 10007, 10007, 10007, 10007, 10007, 10007, 10007, - 10007, 10007, 10007, 10007, 10007, 10007, 10007, 10007, - 10007, 10007, 10007, 10007, 10007, 10007, 10007, 10007, - 10007, 10007, 10009, 10009, 10037, 10037, 10037, 10037, - 10037, 10037, 10037, 10037, 10037, 10037, 10037, 10037, - 10037, 10037, 10037, 10037, 10037, 10037, 10037, 10037, - 10037, 10037, 10037, 10037, 10037, 10037, 10037, 10037, - 10039, 10039, 10061, 10061, 10061, 10061, 10061, 10061, - 10061, 10061, 10061, 10061, 10061, 10061, 10061, 10061, - 10061, 10061, 10061, 10061, 10061, 10061, 10061, 10061, - 10067, 10067, 10067, 10067, 10067, 10067, 10069, 10069, - 10079, 10079, 10079, 10079, 10079, 10079, 10079, 10079, - 10079, 10079, 10091, 10091, 10091, 10091, 10091, 10091, - 10091, 10091, 10091, 10091, 10091, 10091, 10093, 10093, - 10099, 10099, 10099, 10099, 10099, 10099, 10103, 10103, - 10103, 10103, 10111, 10111, 10111, 10111, 10111, 10111, - 10111, 10111, 10133, 10133, 10133, 10133, 10133, 10133, - 10133, 10133, 10133, 10133, 10133, 10133, 10133, 10133, - 10133, 10133, 10133, 10133, 10133, 10133, 10133, 10133, - 10139, 10139, 10139, 10139, 10139, 10139, 10141, 10141, - 10151, 10151, 10151, 10151, 10151, 10151, 10151, 10151, - 10151, 10151, 10159, 10159, 10159, 10159, 10159, 10159, - 10159, 10159, 10163, 10163, 10163, 10163, 10169, 10169, - 10169, 10169, 10169, 10169, 10177, 10177, 10177, 10177, - 10177, 10177, 10177, 10177, 10181, 10181, 10181, 10181, - 10193, 10193, 10193, 10193, 10193, 10193, 10193, 10193, - 10193, 10193, 10193, 10193, 10211, 10211, 10211, 10211, - 10211, 10211, 10211, 10211, 10211, 10211, 10211, 10211, - 10211, 10211, 10211, 10211, 10211, 10211, 10223, 10223, - 10223, 10223, 10223, 10223, 10223, 10223, 10223, 10223, - 10223, 10223, 10243, 10243, 10243, 10243, 10243, 10243, - 10243, 10243, 10243, 10243, 10243, 10243, 10243, 10243, - 10243, 10243, 10243, 10243, 10243, 10243, 10247, 10247, - 10247, 10247, 10253, 10253, 10253, 10253, 10253, 10253, - 10259, 10259, 10259, 10259, 10259, 10259, 10267, 10267, - 10267, 10267, 10267, 10267, 10267, 10267, 10271, 10271, - 10271, 10271, 10273, 10273, 10289, 10289, 10289, 10289, - 10289, 10289, 10289, 10289, 10289, 10289, 10289, 10289, - 10289, 10289, 10289, 10289, 10301, 10301, 10301, 10301, - 10301, 10301, 10301, 10301, 10301, 10301, 10301, 10301, - 10303, 10303, 10313, 10313, 10313, 10313, 10313, 10313, - 10313, 10313, 10313, 10313, 10321, 10321, 10321, 10321, - 10321, 10321, 10321, 10321, 10331, 10331, 10331, 10331, - 10331, 10331, 10331, 10331, 10331, 10331, 10333, 10333, - 10337, 10337, 10337, 10337, 10343, 10343, 10343, 10343, - 10343, 10343, 10357, 10357, 10357, 10357, 10357, 10357, - 10357, 10357, 10357, 10357, 10357, 10357, 10357, 10357, - 10369, 10369, 10369, 10369, 10369, 10369, 10369, 10369, - 10369, 10369, 10369, 10369, 10391, 10391, 10391, 10391, - 10391, 10391, 10391, 10391, 10391, 10391, 10391, 10391, - 10391, 10391, 10391, 10391, 10391, 10391, 10391, 10391, - 10391, 10391, 10399, 10399, 10399, 10399, 10399, 10399, - 10399, 10399, 10427, 10427, 10427, 10427, 10427, 10427, - 10427, 10427, 10427, 10427, 10427, 10427, 10427, 10427, - 10427, 10427, 10427, 10427, 10427, 10427, 10427, 10427, - 10427, 10427, 10427, 10427, 10427, 10427, 10429, 10429, - 10433, 10433, 10433, 10433, 10453, 10453, 10453, 10453, - 10453, 10453, 10453, 10453, 10453, 10453, 10453, 10453, - 10453, 10453, 10453, 10453, 10453, 10453, 10453, 10453, - 10457, 10457, 10457, 10457, 10459, 10459, 10463, 10463, - 10463, 10463, 10477, 10477, 10477, 10477, 10477, 10477, - 10477, 10477, 10477, 10477, 10477, 10477, 10477, 10477, - 10487, 10487, 10487, 10487, 10487, 10487, 10487, 10487, - 10487, 10487, 10499, 10499, 10499, 10499, 10499, 10499, - 10499, 10499, 10499, 10499, 10499, 10499, 10501, 10501, - 10513, 10513, 10513, 10513, 10513, 10513, 10513, 10513, - 10513, 10513, 10513, 10513, 10529, 10529, 10529, 10529, - 10529, 10529, 10529, 10529, 10529, 10529, 10529, 10529, - 10529, 10529, 10529, 10529, 10531, 10531, 10559, 10559, - 10559, 10559, 10559, 10559, 10559, 10559, 10559, 10559, - 10559, 10559, 10559, 10559, 10559, 10559, 10559, 10559, - 10559, 10559, 10559, 10559, 10559, 10559, 10559, 10559, - 10559, 10559, 10567, 10567, 10567, 10567, 10567, 10567, - 10567, 10567, 10589, 10589, 10589, 10589, 10589, 10589, - 10589, 10589, 10589, 10589, 10589, 10589, 10589, 10589, - 10589, 10589, 10589, 10589, 10589, 10589, 10589, 10589, - 10597, 10597, 10597, 10597, 10597, 10597, 10597, 10597, - 10601, 10601, 10601, 10601, 10607, 10607, 10607, 10607, - 10607, 10607, 10613, 10613, 10613, 10613, 10613, 10613, - 10627, 10627, 10627, 10627, 10627, 10627, 10627, 10627, - 10627, 10627, 10627, 10627, 10627, 10627, 10631, 10631, - 10631, 10631, 10639, 10639, 10639, 10639, 10639, 10639, - 10639, 10639, 10651, 10651, 10651, 10651, 10651, 10651, - 10651, 10651, 10651, 10651, 10651, 10651, 10657, 10657, - 10657, 10657, 10657, 10657, 10663, 10663, 10663, 10663, - 10663, 10663, 10667, 10667, 10667, 10667, 10687, 10687, - 10687, 10687, 10687, 10687, 10687, 10687, 10687, 10687, - 10687, 10687, 10687, 10687, 10687, 10687, 10687, 10687, - 10687, 10687, 10691, 10691, 10691, 10691, 10709, 10709, - 10709, 10709, 10709, 10709, 10709, 10709, 10709, 10709, - 10709, 10709, 10709, 10709, 10709, 10709, 10709, 10709, - 10711, 10711, 10723, 10723, 10723, 10723, 10723, 10723, - 10723, 10723, 10723, 10723, 10723, 10723, 10729, 10729, - 10729, 10729, 10729, 10729, 10733, 10733, 10733, 10733, - 10739, 10739, 10739, 10739, 10739, 10739, 10753, 10753, - 10753, 10753, 10753, 10753, 10753, 10753, 10753, 10753, - 10753, 10753, 10753, 10753, 10771, 10771, 10771, 10771, - 10771, 10771, 10771, 10771, 10771, 10771, 10771, 10771, - 10771, 10771, 10771, 10771, 10771, 10771, 10781, 10781, - 10781, 10781, 10781, 10781, 10781, 10781, 10781, 10781, - 10789, 10789, 10789, 10789, 10789, 10789, 10789, 10789, - 10799, 10799, 10799, 10799, 10799, 10799, 10799, 10799, - 10799, 10799, 10831, 10831, 10831, 10831, 10831, 10831, - 10831, 10831, 10831, 10831, 10831, 10831, 10831, 10831, - 10831, 10831, 10831, 10831, 10831, 10831, 10831, 10831, - 10831, 10831, 10831, 10831, 10831, 10831, 10831, 10831, - 10831, 10831, 10837, 10837, 10837, 10837, 10837, 10837, - 10847, 10847, 10847, 10847, 10847, 10847, 10847, 10847, - 10847, 10847, 10853, 10853, 10853, 10853, 10853, 10853, - 10859, 10859, 10859, 10859, 10859, 10859, 10861, 10861, - 10867, 10867, 10867, 10867, 10867, 10867, 10883, 10883, - 10883, 10883, 10883, 10883, 10883, 10883, 10883, 10883, - 10883, 10883, 10883, 10883, 10883, 10883, 10889, 10889, - 10889, 10889, 10889, 10889, 10891, 10891, 10903, 10903, - 10903, 10903, 10903, 10903, 10903, 10903, 10903, 10903, - 10903, 10903, 10909, 10909, 10909, 10909, 10909, 10909, - 10937, 10937, 10937, 10937, 10937, 10937, 10937, 10937, - 10937, 10937, 10937, 10937, 10937, 10937, 10937, 10937, - 10937, 10937, 10937, 10937, 10937, 10937, 10937, 10937, - 10937, 10937, 10937, 10937, 10939, 10939, 10949, 10949, - 10949, 10949, 10949, 10949, 10949, 10949, 10949, 10949, - 10957, 10957, 10957, 10957, 10957, 10957, 10957, 10957, - 10973, 10973, 10973, 10973, 10973, 10973, 10973, 10973, - 10973, 10973, 10973, 10973, 10973, 10973, 10973, 10973, - 10979, 10979, 10979, 10979, 10979, 10979, 10987, 10987, - 10987, 10987, 10987, 10987, 10987, 10987, 10993, 10993, - 10993, 10993, 10993, 10993, 11003, 11003, 11003, 11003, - 11003, 11003, 11003, 11003, 11003, 11003, 11027, 11027, - 11027, 11027, 11027, 11027, 11027, 11027, 11027, 11027, - 11027, 11027, 11027, 11027, 11027, 11027, 11027, 11027, - 11027, 11027, 11027, 11027, 11027, 11027, 11047, 11047, - 11047, 11047, 11047, 11047, 11047, 11047, 11047, 11047, - 11047, 11047, 11047, 11047, 11047, 11047, 11047, 11047, - 11047, 11047, 11057, 11057, 11057, 11057, 11057, 11057, - 11057, 11057, 11057, 11057, 11059, 11059, 11069, 11069, - 11069, 11069, 11069, 11069, 11069, 11069, 11069, 11069, - 11071, 11071, 11083, 11083, 11083, 11083, 11083, 11083, - 11083, 11083, 11083, 11083, 11083, 11083, 11087, 11087, - 11087, 11087, 11093, 11093, 11093, 11093, 11093, 11093, - 11113, 11113, 11113, 11113, 11113, 11113, 11113, 11113, - 11113, 11113, 11113, 11113, 11113, 11113, 11113, 11113, - 11113, 11113, 11113, 11113, 11117, 11117, 11117, 11117, - 11119, 11119, 11131, 11131, 11131, 11131, 11131, 11131, - 11131, 11131, 11131, 11131, 11131, 11131, 11149, 11149, - 11149, 11149, 11149, 11149, 11149, 11149, 11149, 11149, - 11149, 11149, 11149, 11149, 11149, 11149, 11149, 11149, - 11159, 11159, 11159, 11159, 11159, 11159, 11159, 11159, - 11159, 11159, 11161, 11161, 11171, 11171, 11171, 11171, - 11171, 11171, 11171, 11171, 11171, 11171, 11173, 11173, - 11177, 11177, 11177, 11177, 11197, 11197, 11197, 11197, - 11197, 11197, 11197, 11197, 11197, 11197, 11197, 11197, - 11197, 11197, 11197, 11197, 11197, 11197, 11197, 11197, - 11213, 11213, 11213, 11213, 11213, 11213, 11213, 11213, - 11213, 11213, 11213, 11213, 11213, 11213, 11213, 11213, - 11239, 11239, 11239, 11239, 11239, 11239, 11239, 11239, - 11239, 11239, 11239, 11239, 11239, 11239, 11239, 11239, - 11239, 11239, 11239, 11239, 11239, 11239, 11239, 11239, - 11239, 11239, 11243, 11243, 11243, 11243, 11251, 11251, - 11251, 11251, 11251, 11251, 11251, 11251, 11257, 11257, - 11257, 11257, 11257, 11257, 11261, 11261, 11261, 11261, - 11273, 11273, 11273, 11273, 11273, 11273, 11273, 11273, - 11273, 11273, 11273, 11273, 11279, 11279, 11279, 11279, - 11279, 11279, 11287, 11287, 11287, 11287, 11287, 11287, - 11287, 11287, 11299, 11299, 11299, 11299, 11299, 11299, - 11299, 11299, 11299, 11299, 11299, 11299, 11311, 11311, - 11311, 11311, 11311, 11311, 11311, 11311, 11311, 11311, - 11311, 11311, 11317, 11317, 11317, 11317, 11317, 11317, - 11321, 11321, 11321, 11321, 11329, 11329, 11329, 11329, - 11329, 11329, 11329, 11329, 11351, 11351, 11351, 11351, - 11351, 11351, 11351, 11351, 11351, 11351, 11351, 11351, - 11351, 11351, 11351, 11351, 11351, 11351, 11351, 11351, - 11351, 11351, 11353, 11353, 11369, 11369, 11369, 11369, - 11369, 11369, 11369, 11369, 11369, 11369, 11369, 11369, - 11369, 11369, 11369, 11369, 11383, 11383, 11383, 11383, - 11383, 11383, 11383, 11383, 11383, 11383, 11383, 11383, - 11383, 11383, 11393, 11393, 11393, 11393, 11393, 11393, - 11393, 11393, 11393, 11393, 11399, 11399, 11399, 11399, - 11399, 11399, 11411, 11411, 11411, 11411, 11411, 11411, - 11411, 11411, 11411, 11411, 11411, 11411, 11423, 11423, - 11423, 11423, 11423, 11423, 11423, 11423, 11423, 11423, - 11423, 11423, 11437, 11437, 11437, 11437, 11437, 11437, - 11437, 11437, 11437, 11437, 11437, 11437, 11437, 11437, - 11443, 11443, 11443, 11443, 11443, 11443, 11447, 11447, - 11447, 11447, 11467, 11467, 11467, 11467, 11467, 11467, - 11467, 11467, 11467, 11467, 11467, 11467, 11467, 11467, - 11467, 11467, 11467, 11467, 11467, 11467, 11471, 11471, - 11471, 11471, 11483, 11483, 11483, 11483, 11483, 11483, - 11483, 11483, 11483, 11483, 11483, 11483, 11489, 11489, - 11489, 11489, 11489, 11489, 11491, 11491, 11497, 11497, - 11497, 11497, 11497, 11497, 11503, 11503, 11503, 11503, - 11503, 11503, 11519, 11519, 11519, 11519, 11519, 11519, - 11519, 11519, 11519, 11519, 11519, 11519, 11519, 11519, - 11519, 11519, 11527, 11527, 11527, 11527, 11527, 11527, - 11527, 11527, 11549, 11549, 11549, 11549, 11549, 11549, - 11549, 11549, 11549, 11549, 11549, 11549, 11549, 11549, - 11549, 11549, 11549, 11549, 11549, 11549, 11549, 11549, - 11551, 11551, 11579, 11579, 11579, 11579, 11579, 11579, - 11579, 11579, 11579, 11579, 11579, 11579, 11579, 11579, - 11579, 11579, 11579, 11579, 11579, 11579, 11579, 11579, - 11579, 11579, 11579, 11579, 11579, 11579, 11587, 11587, - 11587, 11587, 11587, 11587, 11587, 11587, 11593, 11593, - 11593, 11593, 11593, 11593, 11597, 11597, 11597, 11597, - 11617, 11617, 11617, 11617, 11617, 11617, 11617, 11617, - 11617, 11617, 11617, 11617, 11617, 11617, 11617, 11617, - 11617, 11617, 11617, 11617, 11621, 11621, 11621, 11621, - 11633, 11633, 11633, 11633, 11633, 11633, 11633, 11633, - 11633, 11633, 11633, 11633, 11657, 11657, 11657, 11657, - 11657, 11657, 11657, 11657, 11657, 11657, 11657, 11657, - 11657, 11657, 11657, 11657, 11657, 11657, 11657, 11657, - 11657, 11657, 11657, 11657, 11677, 11677, 11677, 11677, - 11677, 11677, 11677, 11677, 11677, 11677, 11677, 11677, - 11677, 11677, 11677, 11677, 11677, 11677, 11677, 11677, - 11681, 11681, 11681, 11681, 11689, 11689, 11689, 11689, - 11689, 11689, 11689, 11689, 11699, 11699, 11699, 11699, - 11699, 11699, 11699, 11699, 11699, 11699, 11701, 11701, - 11717, 11717, 11717, 11717, 11717, 11717, 11717, 11717, - 11717, 11717, 11717, 11717, 11717, 11717, 11717, 11717, - 11719, 11719, 11731, 11731, 11731, 11731, 11731, 11731, - 11731, 11731, 11731, 11731, 11731, 11731, 11743, 11743, - 11743, 11743, 11743, 11743, 11743, 11743, 11743, 11743, - 11743, 11743, 11777, 11777, 11777, 11777, 11777, 11777, - 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, - 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, - 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, - 11777, 11777, 11777, 11777, 11779, 11779, 11783, 11783, - 11783, 11783, 11789, 11789, 11789, 11789, 11789, 11789, - 11801, 11801, 11801, 11801, 11801, 11801, 11801, 11801, - 11801, 11801, 11801, 11801, 11807, 11807, 11807, 11807, - 11807, 11807, 11813, 11813, 11813, 11813, 11813, 11813, - 11821, 11821, 11821, 11821, 11821, 11821, 11821, 11821, - 11827, 11827, 11827, 11827, 11827, 11827, 11831, 11831, - 11831, 11831, 11833, 11833, 11839, 11839, 11839, 11839, - 11839, 11839, 11863, 11863, 11863, 11863, 11863, 11863, - 11863, 11863, 11863, 11863, 11863, 11863, 11863, 11863, - 11863, 11863, 11863, 11863, 11863, 11863, 11863, 11863, - 11863, 11863, 11867, 11867, 11867, 11867, 11887, 11887, - 11887, 11887, 11887, 11887, 11887, 11887, 11887, 11887, - 11887, 11887, 11887, 11887, 11887, 11887, 11887, 11887, - 11887, 11887, 11897, 11897, 11897, 11897, 11897, 11897, - 11897, 11897, 11897, 11897, 11903, 11903, 11903, 11903, - 11903, 11903, 11909, 11909, 11909, 11909, 11909, 11909, - 11923, 11923, 11923, 11923, 11923, 11923, 11923, 11923, - 11923, 11923, 11923, 11923, 11923, 11923, 11927, 11927, - 11927, 11927, 11933, 11933, 11933, 11933, 11933, 11933, - 11939, 11939, 11939, 11939, 11939, 11939, 11941, 11941, - 11953, 11953, 11953, 11953, 11953, 11953, 11953, 11953, - 11953, 11953, 11953, 11953, 11959, 11959, 11959, 11959, - 11959, 11959, 11969, 11969, 11969, 11969, 11969, 11969, - 11969, 11969, 11969, 11969, 11971, 11971, 11981, 11981, - 11981, 11981, 11981, 11981, 11981, 11981, 11981, 11981, - 11987, 11987, 11987, 11987, 11987, 11987, 12007, 12007, - 12007, 12007, 12007, 12007, 12007, 12007, 12007, 12007, - 12007, 12007, 12007, 12007, 12007, 12007, 12007, 12007, - 12007, 12007, 12011, 12011, 12011, 12011, 12037, 12037, - 12037, 12037, 12037, 12037, 12037, 12037, 12037, 12037, - 12037, 12037, 12037, 12037, 12037, 12037, 12037, 12037, - 12037, 12037, 12037, 12037, 12037, 12037, 12037, 12037, - 12041, 12041, 12041, 12041, 12043, 12043, 12049, 12049, - 12049, 12049, 12049, 12049, 12071, 12071, 12071, 12071, - 12071, 12071, 12071, 12071, 12071, 12071, 12071, 12071, - 12071, 12071, 12071, 12071, 12071, 12071, 12071, 12071, - 12071, 12071, 12073, 12073, 12097, 12097, 12097, 12097, - 12097, 12097, 12097, 12097, 12097, 12097, 12097, 12097, - 12097, 12097, 12097, 12097, 12097, 12097, 12097, 12097, - 12097, 12097, 12097, 12097, 12101, 12101, 12101, 12101, - 12107, 12107, 12107, 12107, 12107, 12107, 12109, 12109, - 12113, 12113, 12113, 12113, 12119, 12119, 12119, 12119, - 12119, 12119, 12143, 12143, 12143, 12143, 12143, 12143, - 12143, 12143, 12143, 12143, 12143, 12143, 12143, 12143, - 12143, 12143, 12143, 12143, 12143, 12143, 12143, 12143, - 12143, 12143, 12149, 12149, 12149, 12149, 12149, 12149, - 12157, 12157, 12157, 12157, 12157, 12157, 12157, 12157, - 12161, 12161, 12161, 12161, 12163, 12163, 12197, 12197, - 12197, 12197, 12197, 12197, 12197, 12197, 12197, 12197, - 12197, 12197, 12197, 12197, 12197, 12197, 12197, 12197, - 12197, 12197, 12197, 12197, 12197, 12197, 12197, 12197, - 12197, 12197, 12197, 12197, 12197, 12197, 12197, 12197, - 12203, 12203, 12203, 12203, 12203, 12203, 12211, 12211, - 12211, 12211, 12211, 12211, 12211, 12211, 12227, 12227, - 12227, 12227, 12227, 12227, 12227, 12227, 12227, 12227, - 12227, 12227, 12227, 12227, 12227, 12227, 12239, 12239, - 12239, 12239, 12239, 12239, 12239, 12239, 12239, 12239, - 12239, 12239, 12241, 12241, 12251, 12251, 12251, 12251, - 12251, 12251, 12251, 12251, 12251, 12251, 12253, 12253, - 12263, 12263, 12263, 12263, 12263, 12263, 12263, 12263, - 12263, 12263, 12269, 12269, 12269, 12269, 12269, 12269, - 12277, 12277, 12277, 12277, 12277, 12277, 12277, 12277, - 12281, 12281, 12281, 12281, 12289, 12289, 12289, 12289, - 12289, 12289, 12289, 12289, 12301, 12301, 12301, 12301, - 12301, 12301, 12301, 12301, 12301, 12301, 12301, 12301, - 12323, 12323, 12323, 12323, 12323, 12323, 12323, 12323, - 12323, 12323, 12323, 12323, 12323, 12323, 12323, 12323, - 12323, 12323, 12323, 12323, 12323, 12323, 12329, 12329, - 12329, 12329, 12329, 12329, 12343, 12343, 12343, 12343, - 12343, 12343, 12343, 12343, 12343, 12343, 12343, 12343, - 12343, 12343, 12347, 12347, 12347, 12347, 12373, 12373, - 12373, 12373, 12373, 12373, 12373, 12373, 12373, 12373, - 12373, 12373, 12373, 12373, 12373, 12373, 12373, 12373, - 12373, 12373, 12373, 12373, 12373, 12373, 12373, 12373, - 12377, 12377, 12377, 12377, 12379, 12379, 12391, 12391, - 12391, 12391, 12391, 12391, 12391, 12391, 12391, 12391, - 12391, 12391, 12401, 12401, 12401, 12401, 12401, 12401, - 12401, 12401, 12401, 12401, 12409, 12409, 12409, 12409, - 12409, 12409, 12409, 12409, 12413, 12413, 12413, 12413, - 12421, 12421, 12421, 12421, 12421, 12421, 12421, 12421, - 12433, 12433, 12433, 12433, 12433, 12433, 12433, 12433, - 12433, 12433, 12433, 12433, 12437, 12437, 12437, 12437, - 12451, 12451, 12451, 12451, 12451, 12451, 12451, 12451, - 12451, 12451, 12451, 12451, 12451, 12451, 12457, 12457, - 12457, 12457, 12457, 12457, 12473, 12473, 12473, 12473, - 12473, 12473, 12473, 12473, 12473, 12473, 12473, 12473, - 12473, 12473, 12473, 12473, 12479, 12479, 12479, 12479, - 12479, 12479, 12487, 12487, 12487, 12487, 12487, 12487, - 12487, 12487, 12491, 12491, 12491, 12491, 12497, 12497, - 12497, 12497, 12497, 12497, 12503, 12503, 12503, 12503, - 12503, 12503, 12511, 12511, 12511, 12511, 12511, 12511, - 12511, 12511, 12517, 12517, 12517, 12517, 12517, 12517, - 12527, 12527, 12527, 12527, 12527, 12527, 12527, 12527, - 12527, 12527, 12539, 12539, 12539, 12539, 12539, 12539, - 12539, 12539, 12539, 12539, 12539, 12539, 12541, 12541, - 12547, 12547, 12547, 12547, 12547, 12547, 12553, 12553, - 12553, 12553, 12553, 12553, 12569, 12569, 12569, 12569, - 12569, 12569, 12569, 12569, 12569, 12569, 12569, 12569, - 12569, 12569, 12569, 12569, 12577, 12577, 12577, 12577, - 12577, 12577, 12577, 12577, 12583, 12583, 12583, 12583, - 12583, 12583, 12589, 12589, 12589, 12589, 12589, 12589, - 12601, 12601, 12601, 12601, 12601, 12601, 12601, 12601, - 12601, 12601, 12601, 12601, 12611, 12611, 12611, 12611, - 12611, 12611, 12611, 12611, 12611, 12611, 12613, 12613, - 12619, 12619, 12619, 12619, 12619, 12619, 12637, 12637, - 12637, 12637, 12637, 12637, 12637, 12637, 12637, 12637, - 12637, 12637, 12637, 12637, 12637, 12637, 12637, 12637, - 12641, 12641, 12641, 12641, 12647, 12647, 12647, 12647, - 12647, 12647, 12653, 12653, 12653, 12653, 12653, 12653, - 12659, 12659, 12659, 12659, 12659, 12659, 12671, 12671, - 12671, 12671, 12671, 12671, 12671, 12671, 12671, 12671, - 12671, 12671, 12689, 12689, 12689, 12689, 12689, 12689, - 12689, 12689, 12689, 12689, 12689, 12689, 12689, 12689, - 12689, 12689, 12689, 12689, 12697, 12697, 12697, 12697, - 12697, 12697, 12697, 12697, 12703, 12703, 12703, 12703, - 12703, 12703, 12713, 12713, 12713, 12713, 12713, 12713, - 12713, 12713, 12713, 12713, 12721, 12721, 12721, 12721, - 12721, 12721, 12721, 12721, 12739, 12739, 12739, 12739, - 12739, 12739, 12739, 12739, 12739, 12739, 12739, 12739, - 12739, 12739, 12739, 12739, 12739, 12739, 12743, 12743, - 12743, 12743, 12757, 12757, 12757, 12757, 12757, 12757, - 12757, 12757, 12757, 12757, 12757, 12757, 12757, 12757, - 12763, 12763, 12763, 12763, 12763, 12763, 12781, 12781, - 12781, 12781, 12781, 12781, 12781, 12781, 12781, 12781, - 12781, 12781, 12781, 12781, 12781, 12781, 12781, 12781, - 12791, 12791, 12791, 12791, 12791, 12791, 12791, 12791, - 12791, 12791, 12799, 12799, 12799, 12799, 12799, 12799, - 12799, 12799, 12809, 12809, 12809, 12809, 12809, 12809, - 12809, 12809, 12809, 12809, 12821, 12821, 12821, 12821, - 12821, 12821, 12821, 12821, 12821, 12821, 12821, 12821, - 12823, 12823, 12829, 12829, 12829, 12829, 12829, 12829, - 12841, 12841, 12841, 12841, 12841, 12841, 12841, 12841, - 12841, 12841, 12841, 12841, 12853, 12853, 12853, 12853, - 12853, 12853, 12853, 12853, 12853, 12853, 12853, 12853, - 12889, 12889, 12889, 12889, 12889, 12889, 12889, 12889, - 12889, 12889, 12889, 12889, 12889, 12889, 12889, 12889, - 12889, 12889, 12889, 12889, 12889, 12889, 12889, 12889, - 12889, 12889, 12889, 12889, 12889, 12889, 12889, 12889, - 12889, 12889, 12889, 12889, 12893, 12893, 12893, 12893, - 12899, 12899, 12899, 12899, 12899, 12899, 12907, 12907, - 12907, 12907, 12907, 12907, 12907, 12907, 12911, 12911, - 12911, 12911, 12917, 12917, 12917, 12917, 12917, 12917, - 12919, 12919, 12923, 12923, 12923, 12923, 12941, 12941, - 12941, 12941, 12941, 12941, 12941, 12941, 12941, 12941, - 12941, 12941, 12941, 12941, 12941, 12941, 12941, 12941, - 12953, 12953, 12953, 12953, 12953, 12953, 12953, 12953, - 12953, 12953, 12953, 12953, 12959, 12959, 12959, 12959, - 12959, 12959, 12967, 12967, 12967, 12967, 12967, 12967, - 12967, 12967, 12973, 12973, 12973, 12973, 12973, 12973, - 12979, 12979, 12979, 12979, 12979, 12979, 12983, 12983, - 12983, 12983, 13001, 13001, 13001, 13001, 13001, 13001, - 13001, 13001, 13001, 13001, 13001, 13001, 13001, 13001, - 13001, 13001, 13001, 13001, 13003, 13003, 13007, 13007, - 13007, 13007, 13009, 13009, 13033, 13033, 13033, 13033, - 13033, 13033, 13033, 13033, 13033, 13033, 13033, 13033, - 13033, 13033, 13033, 13033, 13033, 13033, 13033, 13033, - 13033, 13033, 13033, 13033, 13037, 13037, 13037, 13037, - 13043, 13043, 13043, 13043, 13043, 13043, 13049, 13049, - 13049, 13049, 13049, 13049, 13063, 13063, 13063, 13063, - 13063, 13063, 13063, 13063, 13063, 13063, 13063, 13063, - 13063, 13063, 13093, 13093, 13093, 13093, 13093, 13093, - 13093, 13093, 13093, 13093, 13093, 13093, 13093, 13093, - 13093, 13093, 13093, 13093, 13093, 13093, 13093, 13093, - 13093, 13093, 13093, 13093, 13093, 13093, 13093, 13093, - 13099, 13099, 13099, 13099, 13099, 13099, 13103, 13103, - 13103, 13103, 13109, 13109, 13109, 13109, 13109, 13109, - 13121, 13121, 13121, 13121, 13121, 13121, 13121, 13121, - 13121, 13121, 13121, 13121, 13127, 13127, 13127, 13127, - 13127, 13127, 13147, 13147, 13147, 13147, 13147, 13147, - 13147, 13147, 13147, 13147, 13147, 13147, 13147, 13147, - 13147, 13147, 13147, 13147, 13147, 13147, 13151, 13151, - 13151, 13151, 13159, 13159, 13159, 13159, 13159, 13159, - 13159, 13159, 13163, 13163, 13163, 13163, 13171, 13171, - 13171, 13171, 13171, 13171, 13171, 13171, 13177, 13177, - 13177, 13177, 13177, 13177, 13183, 13183, 13183, 13183, - 13183, 13183, 13187, 13187, 13187, 13187, 13217, 13217, - 13217, 13217, 13217, 13217, 13217, 13217, 13217, 13217, - 13217, 13217, 13217, 13217, 13217, 13217, 13217, 13217, - 13217, 13217, 13217, 13217, 13217, 13217, 13217, 13217, - 13217, 13217, 13217, 13217, 13219, 13219, 13229, 13229, - 13229, 13229, 13229, 13229, 13229, 13229, 13229, 13229, - 13241, 13241, 13241, 13241, 13241, 13241, 13241, 13241, - 13241, 13241, 13241, 13241, 13249, 13249, 13249, 13249, - 13249, 13249, 13249, 13249, 13259, 13259, 13259, 13259, - 13259, 13259, 13259, 13259, 13259, 13259, 13267, 13267, - 13267, 13267, 13267, 13267, 13267, 13267, 13291, 13291, - 13291, 13291, 13291, 13291, 13291, 13291, 13291, 13291, - 13291, 13291, 13291, 13291, 13291, 13291, 13291, 13291, - 13291, 13291, 13291, 13291, 13291, 13291, 13297, 13297, - 13297, 13297, 13297, 13297, 13309, 13309, 13309, 13309, - 13309, 13309, 13309, 13309, 13309, 13309, 13309, 13309, - 13313, 13313, 13313, 13313, 13327, 13327, 13327, 13327, - 13327, 13327, 13327, 13327, 13327, 13327, 13327, 13327, - 13327, 13327, 13331, 13331, 13331, 13331, 13337, 13337, - 13337, 13337, 13337, 13337, 13339, 13339, 13367, 13367, - 13367, 13367, 13367, 13367, 13367, 13367, 13367, 13367, - 13367, 13367, 13367, 13367, 13367, 13367, 13367, 13367, - 13367, 13367, 13367, 13367, 13367, 13367, 13367, 13367, - 13367, 13367, 13381, 13381, 13381, 13381, 13381, 13381, - 13381, 13381, 13381, 13381, 13381, 13381, 13381, 13381, - 13397, 13397, 13397, 13397, 13397, 13397, 13397, 13397, - 13397, 13397, 13397, 13397, 13397, 13397, 13397, 13397, - 13399, 13399, 13411, 13411, 13411, 13411, 13411, 13411, - 13411, 13411, 13411, 13411, 13411, 13411, 13417, 13417, - 13417, 13417, 13417, 13417, 13421, 13421, 13421, 13421, - 13441, 13441, 13441, 13441, 13441, 13441, 13441, 13441, - 13441, 13441, 13441, 13441, 13441, 13441, 13441, 13441, - 13441, 13441, 13441, 13441, 13451, 13451, 13451, 13451, - 13451, 13451, 13451, 13451, 13451, 13451, 13457, 13457, - 13457, 13457, 13457, 13457, 13463, 13463, 13463, 13463, - 13463, 13463, 13469, 13469, 13469, 13469, 13469, 13469, - 13477, 13477, 13477, 13477, 13477, 13477, 13477, 13477, - 13487, 13487, 13487, 13487, 13487, 13487, 13487, 13487, - 13487, 13487, 13499, 13499, 13499, 13499, 13499, 13499, - 13499, 13499, 13499, 13499, 13499, 13499, 13513, 13513, - 13513, 13513, 13513, 13513, 13513, 13513, 13513, 13513, - 13513, 13513, 13513, 13513, 13523, 13523, 13523, 13523, - 13523, 13523, 13523, 13523, 13523, 13523, 13537, 13537, - 13537, 13537, 13537, 13537, 13537, 13537, 13537, 13537, - 13537, 13537, 13537, 13537, 13553, 13553, 13553, 13553, - 13553, 13553, 13553, 13553, 13553, 13553, 13553, 13553, - 13553, 13553, 13553, 13553, 13567, 13567, 13567, 13567, - 13567, 13567, 13567, 13567, 13567, 13567, 13567, 13567, - 13567, 13567, 13577, 13577, 13577, 13577, 13577, 13577, - 13577, 13577, 13577, 13577, 13591, 13591, 13591, 13591, - 13591, 13591, 13591, 13591, 13591, 13591, 13591, 13591, - 13591, 13591, 13597, 13597, 13597, 13597, 13597, 13597, - 13613, 13613, 13613, 13613, 13613, 13613, 13613, 13613, - 13613, 13613, 13613, 13613, 13613, 13613, 13613, 13613, - 13619, 13619, 13619, 13619, 13619, 13619, 13627, 13627, - 13627, 13627, 13627, 13627, 13627, 13627, 13633, 13633, - 13633, 13633, 13633, 13633, 13649, 13649, 13649, 13649, - 13649, 13649, 13649, 13649, 13649, 13649, 13649, 13649, - 13649, 13649, 13649, 13649, 13669, 13669, 13669, 13669, - 13669, 13669, 13669, 13669, 13669, 13669, 13669, 13669, - 13669, 13669, 13669, 13669, 13669, 13669, 13669, 13669, - 13679, 13679, 13679, 13679, 13679, 13679, 13679, 13679, - 13679, 13679, 13681, 13681, 13687, 13687, 13687, 13687, - 13687, 13687, 13691, 13691, 13691, 13691, 13693, 13693, - 13697, 13697, 13697, 13697, 13709, 13709, 13709, 13709, - 13709, 13709, 13709, 13709, 13709, 13709, 13709, 13709, - 13711, 13711, 13721, 13721, 13721, 13721, 13721, 13721, - 13721, 13721, 13721, 13721, 13723, 13723, 13729, 13729, - 13729, 13729, 13729, 13729, 13751, 13751, 13751, 13751, - 13751, 13751, 13751, 13751, 13751, 13751, 13751, 13751, - 13751, 13751, 13751, 13751, 13751, 13751, 13751, 13751, - 13751, 13751, 13757, 13757, 13757, 13757, 13757, 13757, - 13759, 13759, 13763, 13763, 13763, 13763, 13781, 13781, - 13781, 13781, 13781, 13781, 13781, 13781, 13781, 13781, - 13781, 13781, 13781, 13781, 13781, 13781, 13781, 13781, - 13789, 13789, 13789, 13789, 13789, 13789, 13789, 13789, - 13799, 13799, 13799, 13799, 13799, 13799, 13799, 13799, - 13799, 13799, 13807, 13807, 13807, 13807, 13807, 13807, - 13807, 13807, 13829, 13829, 13829, 13829, 13829, 13829, - 13829, 13829, 13829, 13829, 13829, 13829, 13829, 13829, - 13829, 13829, 13829, 13829, 13829, 13829, 13829, 13829, - 13831, 13831, 13841, 13841, 13841, 13841, 13841, 13841, - 13841, 13841, 13841, 13841, 13859, 13859, 13859, 13859, - 13859, 13859, 13859, 13859, 13859, 13859, 13859, 13859, - 13859, 13859, 13859, 13859, 13859, 13859, 13873, 13873, - 13873, 13873, 13873, 13873, 13873, 13873, 13873, 13873, - 13873, 13873, 13873, 13873, 13877, 13877, 13877, 13877, - 13879, 13879, 13883, 13883, 13883, 13883, 13901, 13901, - 13901, 13901, 13901, 13901, 13901, 13901, 13901, 13901, - 13901, 13901, 13901, 13901, 13901, 13901, 13901, 13901, - 13903, 13903, 13907, 13907, 13907, 13907, 13913, 13913, - 13913, 13913, 13913, 13913, 13921, 13921, 13921, 13921, - 13921, 13921, 13921, 13921, 13931, 13931, 13931, 13931, - 13931, 13931, 13931, 13931, 13931, 13931, 13933, 13933, - 13963, 13963, 13963, 13963, 13963, 13963, 13963, 13963, - 13963, 13963, 13963, 13963, 13963, 13963, 13963, 13963, - 13963, 13963, 13963, 13963, 13963, 13963, 13963, 13963, - 13963, 13963, 13963, 13963, 13963, 13963, 13967, 13967, - 13967, 13967, 13997, 13997, 13997, 13997, 13997, 13997, - 13997, 13997, 13997, 13997, 13997, 13997, 13997, 13997, - 13997, 13997, 13997, 13997, 13997, 13997, 13997, 13997, - 13997, 13997, 13997, 13997, 13997, 13997, 13997, 13997, - 13999, 13999, 14009, 14009, 14009, 14009, 14009, 14009, - 14009, 14009, 14009, 14009, 14011, 14011, 14029, 14029, - 14029, 14029, 14029, 14029, 14029, 14029, 14029, 14029, - 14029, 14029, 14029, 14029, 14029, 14029, 14029, 14029, - 14033, 14033, 14033, 14033, 14051, 14051, 14051, 14051, - 14051, 14051, 14051, 14051, 14051, 14051, 14051, 14051, - 14051, 14051, 14051, 14051, 14051, 14051, 14057, 14057, - 14057, 14057, 14057, 14057, 14071, 14071, 14071, 14071, - 14071, 14071, 14071, 14071, 14071, 14071, 14071, 14071, - 14071, 14071, 14081, 14081, 14081, 14081, 14081, 14081, - 14081, 14081, 14081, 14081, 14083, 14083, 14087, 14087, - 14087, 14087, 14107, 14107, 14107, 14107, 14107, 14107, - 14107, 14107, 14107, 14107, 14107, 14107, 14107, 14107, - 14107, 14107, 14107, 14107, 14107, 14107, 14143, 14143, - 14143, 14143, 14143, 14143, 14143, 14143, 14143, 14143, - 14143, 14143, 14143, 14143, 14143, 14143, 14143, 14143, - 14143, 14143, 14143, 14143, 14143, 14143, 14143, 14143, - 14143, 14143, 14143, 14143, 14143, 14143, 14143, 14143, - 14143, 14143, 14149, 14149, 14149, 14149, 14149, 14149, - 14153, 14153, 14153, 14153, 14159, 14159, 14159, 14159, - 14159, 14159, 14173, 14173, 14173, 14173, 14173, 14173, - 14173, 14173, 14173, 14173, 14173, 14173, 14173, 14173, - 14177, 14177, 14177, 14177, 14197, 14197, 14197, 14197, - 14197, 14197, 14197, 14197, 14197, 14197, 14197, 14197, - 14197, 14197, 14197, 14197, 14197, 14197, 14197, 14197, - 14207, 14207, 14207, 14207, 14207, 14207, 14207, 14207, - 14207, 14207, 14221, 14221, 14221, 14221, 14221, 14221, - 14221, 14221, 14221, 14221, 14221, 14221, 14221, 14221, - 14243, 14243, 14243, 14243, 14243, 14243, 14243, 14243, - 14243, 14243, 14243, 14243, 14243, 14243, 14243, 14243, - 14243, 14243, 14243, 14243, 14243, 14243, 14249, 14249, - 14249, 14249, 14249, 14249, 14251, 14251, 14281, 14281, - 14281, 14281, 14281, 14281, 14281, 14281, 14281, 14281, - 14281, 14281, 14281, 14281, 14281, 14281, 14281, 14281, - 14281, 14281, 14281, 14281, 14281, 14281, 14281, 14281, - 14281, 14281, 14281, 14281, 14293, 14293, 14293, 14293, - 14293, 14293, 14293, 14293, 14293, 14293, 14293, 14293, - 14303, 14303, 14303, 14303, 14303, 14303, 14303, 14303, - 14303, 14303, 14321, 14321, 14321, 14321, 14321, 14321, - 14321, 14321, 14321, 14321, 14321, 14321, 14321, 14321, - 14321, 14321, 14321, 14321, 14323, 14323, 14327, 14327, - 14327, 14327, 14341, 14341, 14341, 14341, 14341, 14341, - 14341, 14341, 14341, 14341, 14341, 14341, 14341, 14341, - 14347, 14347, 14347, 14347, 14347, 14347, 14369, 14369, - 14369, 14369, 14369, 14369, 14369, 14369, 14369, 14369, - 14369, 14369, 14369, 14369, 14369, 14369, 14369, 14369, - 14369, 14369, 14369, 14369, 14387, 14387, 14387, 14387, - 14387, 14387, 14387, 14387, 14387, 14387, 14387, 14387, - 14387, 14387, 14387, 14387, 14387, 14387, 14389, 14389, - 14401, 14401, 14401, 14401, 14401, 14401, 14401, 14401, - 14401, 14401, 14401, 14401, 14407, 14407, 14407, 14407, - 14407, 14407, 14411, 14411, 14411, 14411, 14419, 14419, - 14419, 14419, 14419, 14419, 14419, 14419, 14423, 14423, - 14423, 14423, 14431, 14431, 14431, 14431, 14431, 14431, - 14431, 14431, 14437, 14437, 14437, 14437, 14437, 14437, - 14447, 14447, 14447, 14447, 14447, 14447, 14447, 14447, - 14447, 14447, 14449, 14449, 14461, 14461, 14461, 14461, - 14461, 14461, 14461, 14461, 14461, 14461, 14461, 14461, - 14479, 14479, 14479, 14479, 14479, 14479, 14479, 14479, - 14479, 14479, 14479, 14479, 14479, 14479, 14479, 14479, - 14479, 14479, 14489, 14489, 14489, 14489, 14489, 14489, - 14489, 14489, 14489, 14489, 14503, 14503, 14503, 14503, - 14503, 14503, 14503, 14503, 14503, 14503, 14503, 14503, - 14503, 14503, 14519, 14519, 14519, 14519, 14519, 14519, - 14519, 14519, 14519, 14519, 14519, 14519, 14519, 14519, - 14519, 14519, 14533, 14533, 14533, 14533, 14533, 14533, - 14533, 14533, 14533, 14533, 14533, 14533, 14533, 14533, - 14537, 14537, 14537, 14537, 14543, 14543, 14543, 14543, - 14543, 14543, 14549, 14549, 14549, 14549, 14549, 14549, - 14551, 14551, 14557, 14557, 14557, 14557, 14557, 14557, - 14561, 14561, 14561, 14561, 14563, 14563, 14591, 14591, - 14591, 14591, 14591, 14591, 14591, 14591, 14591, 14591, - 14591, 14591, 14591, 14591, 14591, 14591, 14591, 14591, - 14591, 14591, 14591, 14591, 14591, 14591, 14591, 14591, - 14591, 14591, 14593, 14593, 14621, 14621, 14621, 14621, - 14621, 14621, 14621, 14621, 14621, 14621, 14621, 14621, - 14621, 14621, 14621, 14621, 14621, 14621, 14621, 14621, - 14621, 14621, 14621, 14621, 14621, 14621, 14621, 14621, - 14627, 14627, 14627, 14627, 14627, 14627, 14629, 14629, - 14633, 14633, 14633, 14633, 14639, 14639, 14639, 14639, - 14639, 14639, 14653, 14653, 14653, 14653, 14653, 14653, - 14653, 14653, 14653, 14653, 14653, 14653, 14653, 14653, - 14657, 14657, 14657, 14657, 14669, 14669, 14669, 14669, - 14669, 14669, 14669, 14669, 14669, 14669, 14669, 14669, - 14683, 14683, 14683, 14683, 14683, 14683, 14683, 14683, - 14683, 14683, 14683, 14683, 14683, 14683, 14699, 14699, - 14699, 14699, 14699, 14699, 14699, 14699, 14699, 14699, - 14699, 14699, 14699, 14699, 14699, 14699, 14713, 14713, - 14713, 14713, 14713, 14713, 14713, 14713, 14713, 14713, - 14713, 14713, 14713, 14713, 14717, 14717, 14717, 14717, - 14723, 14723, 14723, 14723, 14723, 14723, 14731, 14731, - 14731, 14731, 14731, 14731, 14731, 14731, 14737, 14737, - 14737, 14737, 14737, 14737, 14741, 14741, 14741, 14741, - 14747, 14747, 14747, 14747, 14747, 14747, 14753, 14753, - 14753, 14753, 14753, 14753, 14759, 14759, 14759, 14759, - 14759, 14759, 14767, 14767, 14767, 14767, 14767, 14767, - 14767, 14767, 14771, 14771, 14771, 14771, 14779, 14779, - 14779, 14779, 14779, 14779, 14779, 14779, 14783, 14783, - 14783, 14783, 14797, 14797, 14797, 14797, 14797, 14797, - 14797, 14797, 14797, 14797, 14797, 14797, 14797, 14797, - 14813, 14813, 14813, 14813, 14813, 14813, 14813, 14813, - 14813, 14813, 14813, 14813, 14813, 14813, 14813, 14813, - 14821, 14821, 14821, 14821, 14821, 14821, 14821, 14821, - 14827, 14827, 14827, 14827, 14827, 14827, 14831, 14831, - 14831, 14831, 14843, 14843, 14843, 14843, 14843, 14843, - 14843, 14843, 14843, 14843, 14843, 14843, 14851, 14851, - 14851, 14851, 14851, 14851, 14851, 14851, 14867, 14867, - 14867, 14867, 14867, 14867, 14867, 14867, 14867, 14867, - 14867, 14867, 14867, 14867, 14867, 14867, 14869, 14869, - 14879, 14879, 14879, 14879, 14879, 14879, 14879, 14879, - 14879, 14879, 14887, 14887, 14887, 14887, 14887, 14887, - 14887, 14887, 14891, 14891, 14891, 14891, 14897, 14897, - 14897, 14897, 14897, 14897, 14923, 14923, 14923, 14923, - 14923, 14923, 14923, 14923, 14923, 14923, 14923, 14923, - 14923, 14923, 14923, 14923, 14923, 14923, 14923, 14923, - 14923, 14923, 14923, 14923, 14923, 14923, 14929, 14929, - 14929, 14929, 14929, 14929, 14939, 14939, 14939, 14939, - 14939, 14939, 14939, 14939, 14939, 14939, 14947, 14947, - 14947, 14947, 14947, 14947, 14947, 14947, 14951, 14951, - 14951, 14951, 14957, 14957, 14957, 14957, 14957, 14957, - 14969, 14969, 14969, 14969, 14969, 14969, 14969, 14969, - 14969, 14969, 14969, 14969, 14983, 14983, 14983, 14983, - 14983, 14983, 14983, 14983, 14983, 14983, 14983, 14983, - 14983, 14983, 15013, 15013, 15013, 15013, 15013, 15013, - 15013, 15013, 15013, 15013, 15013, 15013, 15013, 15013, - 15013, 15013, 15013, 15013, 15013, 15013, 15013, 15013, - 15013, 15013, 15013, 15013, 15013, 15013, 15013, 15013, - 15017, 15017, 15017, 15017, 15031, 15031, 15031, 15031, - 15031, 15031, 15031, 15031, 15031, 15031, 15031, 15031, - 15031, 15031, 15053, 15053, 15053, 15053, 15053, 15053, - 15053, 15053, 15053, 15053, 15053, 15053, 15053, 15053, - 15053, 15053, 15053, 15053, 15053, 15053, 15053, 15053, - 15061, 15061, 15061, 15061, 15061, 15061, 15061, 15061, - 15073, 15073, 15073, 15073, 15073, 15073, 15073, 15073, - 15073, 15073, 15073, 15073, 15077, 15077, 15077, 15077, - 15083, 15083, 15083, 15083, 15083, 15083, 15091, 15091, - 15091, 15091, 15091, 15091, 15091, 15091, 15101, 15101, - 15101, 15101, 15101, 15101, 15101, 15101, 15101, 15101, - 15107, 15107, 15107, 15107, 15107, 15107, 15121, 15121, - 15121, 15121, 15121, 15121, 15121, 15121, 15121, 15121, - 15121, 15121, 15121, 15121, 15131, 15131, 15131, 15131, - 15131, 15131, 15131, 15131, 15131, 15131, 15137, 15137, - 15137, 15137, 15137, 15137, 15139, 15139, 15149, 15149, - 15149, 15149, 15149, 15149, 15149, 15149, 15149, 15149, - 15161, 15161, 15161, 15161, 15161, 15161, 15161, 15161, - 15161, 15161, 15161, 15161, 15173, 15173, 15173, 15173, - 15173, 15173, 15173, 15173, 15173, 15173, 15173, 15173, - 15187, 15187, 15187, 15187, 15187, 15187, 15187, 15187, - 15187, 15187, 15187, 15187, 15187, 15187, 15193, 15193, - 15193, 15193, 15193, 15193, 15199, 15199, 15199, 15199, - 15199, 15199, 15217, 15217, 15217, 15217, 15217, 15217, - 15217, 15217, 15217, 15217, 15217, 15217, 15217, 15217, - 15217, 15217, 15217, 15217, 15227, 15227, 15227, 15227, - 15227, 15227, 15227, 15227, 15227, 15227, 15233, 15233, - 15233, 15233, 15233, 15233, 15241, 15241, 15241, 15241, - 15241, 15241, 15241, 15241, 15259, 15259, 15259, 15259, - 15259, 15259, 15259, 15259, 15259, 15259, 15259, 15259, - 15259, 15259, 15259, 15259, 15259, 15259, 15263, 15263, - 15263, 15263, 15269, 15269, 15269, 15269, 15269, 15269, - 15271, 15271, 15277, 15277, 15277, 15277, 15277, 15277, - 15287, 15287, 15287, 15287, 15287, 15287, 15287, 15287, - 15287, 15287, 15289, 15289, 15299, 15299, 15299, 15299, - 15299, 15299, 15299, 15299, 15299, 15299, 15307, 15307, - 15307, 15307, 15307, 15307, 15307, 15307, 15313, 15313, - 15313, 15313, 15313, 15313, 15319, 15319, 15319, 15319, - 15319, 15319, 15329, 15329, 15329, 15329, 15329, 15329, - 15329, 15329, 15329, 15329, 15331, 15331, 15349, 15349, - 15349, 15349, 15349, 15349, 15349, 15349, 15349, 15349, - 15349, 15349, 15349, 15349, 15349, 15349, 15349, 15349, - 15359, 15359, 15359, 15359, 15359, 15359, 15359, 15359, - 15359, 15359, 15361, 15361, 15373, 15373, 15373, 15373, - 15373, 15373, 15373, 15373, 15373, 15373, 15373, 15373, - 15377, 15377, 15377, 15377, 15383, 15383, 15383, 15383, - 15383, 15383, 15391, 15391, 15391, 15391, 15391, 15391, - 15391, 15391, 15401, 15401, 15401, 15401, 15401, 15401, - 15401, 15401, 15401, 15401, 15413, 15413, 15413, 15413, - 15413, 15413, 15413, 15413, 15413, 15413, 15413, 15413, - 15427, 15427, 15427, 15427, 15427, 15427, 15427, 15427, - 15427, 15427, 15427, 15427, 15427, 15427, 15439, 15439, - 15439, 15439, 15439, 15439, 15439, 15439, 15439, 15439, - 15439, 15439, 15443, 15443, 15443, 15443, 15451, 15451, - 15451, 15451, 15451, 15451, 15451, 15451, 15461, 15461, - 15461, 15461, 15461, 15461, 15461, 15461, 15461, 15461, - 15467, 15467, 15467, 15467, 15467, 15467, 15473, 15473, - 15473, 15473, 15473, 15473, 15493, 15493, 15493, 15493, - 15493, 15493, 15493, 15493, 15493, 15493, 15493, 15493, - 15493, 15493, 15493, 15493, 15493, 15493, 15493, 15493, - 15497, 15497, 15497, 15497, 15511, 15511, 15511, 15511, - 15511, 15511, 15511, 15511, 15511, 15511, 15511, 15511, - 15511, 15511, 15527, 15527, 15527, 15527, 15527, 15527, - 15527, 15527, 15527, 15527, 15527, 15527, 15527, 15527, - 15527, 15527, 15541, 15541, 15541, 15541, 15541, 15541, - 15541, 15541, 15541, 15541, 15541, 15541, 15541, 15541, - 15551, 15551, 15551, 15551, 15551, 15551, 15551, 15551, - 15551, 15551, 15559, 15559, 15559, 15559, 15559, 15559, - 15559, 15559, 15569, 15569, 15569, 15569, 15569, 15569, - 15569, 15569, 15569, 15569, 15581, 15581, 15581, 15581, - 15581, 15581, 15581, 15581, 15581, 15581, 15581, 15581, - 15583, 15583, 15601, 15601, 15601, 15601, 15601, 15601, - 15601, 15601, 15601, 15601, 15601, 15601, 15601, 15601, - 15601, 15601, 15601, 15601, 15607, 15607, 15607, 15607, - 15607, 15607, 15619, 15619, 15619, 15619, 15619, 15619, - 15619, 15619, 15619, 15619, 15619, 15619, 15629, 15629, - 15629, 15629, 15629, 15629, 15629, 15629, 15629, 15629, - 15641, 15641, 15641, 15641, 15641, 15641, 15641, 15641, - 15641, 15641, 15641, 15641, 15643, 15643, 15647, 15647, - 15647, 15647, 15649, 15649, 15661, 15661, 15661, 15661, - 15661, 15661, 15661, 15661, 15661, 15661, 15661, 15661, - 15667, 15667, 15667, 15667, 15667, 15667, 15671, 15671, - 15671, 15671, 15679, 15679, 15679, 15679, 15679, 15679, - 15679, 15679, 15683, 15683, 15683, 15683, 15727, 15727, - 15727, 15727, 15727, 15727, 15727, 15727, 15727, 15727, - 15727, 15727, 15727, 15727, 15727, 15727, 15727, 15727, - 15727, 15727, 15727, 15727, 15727, 15727, 15727, 15727, - 15727, 15727, 15727, 15727, 15727, 15727, 15727, 15727, - 15727, 15727, 15727, 15727, 15727, 15727, 15727, 15727, - 15727, 15727, 15731, 15731, 15731, 15731, 15733, 15733, - 15737, 15737, 15737, 15737, 15739, 15739, 15749, 15749, - 15749, 15749, 15749, 15749, 15749, 15749, 15749, 15749, - 15761, 15761, 15761, 15761, 15761, 15761, 15761, 15761, - 15761, 15761, 15761, 15761, 15767, 15767, 15767, 15767, - 15767, 15767, 15773, 15773, 15773, 15773, 15773, 15773, - 15787, 15787, 15787, 15787, 15787, 15787, 15787, 15787, - 15787, 15787, 15787, 15787, 15787, 15787, 15791, 15791, - 15791, 15791, 15797, 15797, 15797, 15797, 15797, 15797, - 15803, 15803, 15803, 15803, 15803, 15803, 15809, 15809, - 15809, 15809, 15809, 15809, 15817, 15817, 15817, 15817, - 15817, 15817, 15817, 15817, 15823, 15823, 15823, 15823, - 15823, 15823, 15859, 15859, 15859, 15859, 15859, 15859, - 15859, 15859, 15859, 15859, 15859, 15859, 15859, 15859, - 15859, 15859, 15859, 15859, 15859, 15859, 15859, 15859, - 15859, 15859, 15859, 15859, 15859, 15859, 15859, 15859, - 15859, 15859, 15859, 15859, 15859, 15859, 15877, 15877, - 15877, 15877, 15877, 15877, 15877, 15877, 15877, 15877, - 15877, 15877, 15877, 15877, 15877, 15877, 15877, 15877, - 15881, 15881, 15881, 15881, 15887, 15887, 15887, 15887, - 15887, 15887, 15889, 15889, 15901, 15901, 15901, 15901, - 15901, 15901, 15901, 15901, 15901, 15901, 15901, 15901, - 15907, 15907, 15907, 15907, 15907, 15907, 15913, 15913, - 15913, 15913, 15913, 15913, 15919, 15919, 15919, 15919, - 15919, 15919, 15923, 15923, 15923, 15923, 15937, 15937, - 15937, 15937, 15937, 15937, 15937, 15937, 15937, 15937, - 15937, 15937, 15937, 15937, 15959, 15959, 15959, 15959, - 15959, 15959, 15959, 15959, 15959, 15959, 15959, 15959, - 15959, 15959, 15959, 15959, 15959, 15959, 15959, 15959, - 15959, 15959, 15971, 15971, 15971, 15971, 15971, 15971, - 15971, 15971, 15971, 15971, 15971, 15971, 15973, 15973, - 15991, 15991, 15991, 15991, 15991, 15991, 15991, 15991, - 15991, 15991, 15991, 15991, 15991, 15991, 15991, 15991, - 15991, 15991, 16001, 16001, 16001, 16001, 16001, 16001, - 16001, 16001, 16001, 16001, 16007, 16007, 16007, 16007, - 16007, 16007, 16033, 16033, 16033, 16033, 16033, 16033, - 16033, 16033, 16033, 16033, 16033, 16033, 16033, 16033, - 16033, 16033, 16033, 16033, 16033, 16033, 16033, 16033, - 16033, 16033, 16033, 16033, 16057, 16057, 16057, 16057, - 16057, 16057, 16057, 16057, 16057, 16057, 16057, 16057, - 16057, 16057, 16057, 16057, 16057, 16057, 16057, 16057, - 16057, 16057, 16057, 16057, 16061, 16061, 16061, 16061, - 16063, 16063, 16067, 16067, 16067, 16067, 16069, 16069, - 16073, 16073, 16073, 16073, 16087, 16087, 16087, 16087, - 16087, 16087, 16087, 16087, 16087, 16087, 16087, 16087, - 16087, 16087, 16091, 16091, 16091, 16091, 16097, 16097, - 16097, 16097, 16097, 16097, 16103, 16103, 16103, 16103, - 16103, 16103, 16111, 16111, 16111, 16111, 16111, 16111, - 16111, 16111, 16127, 16127, 16127, 16127, 16127, 16127, - 16127, 16127, 16127, 16127, 16127, 16127, 16127, 16127, - 16127, 16127, 16139, 16139, 16139, 16139, 16139, 16139, - 16139, 16139, 16139, 16139, 16139, 16139, 16141, 16141, - 16183, 16183, 16183, 16183, 16183, 16183, 16183, 16183, - 16183, 16183, 16183, 16183, 16183, 16183, 16183, 16183, - 16183, 16183, 16183, 16183, 16183, 16183, 16183, 16183, - 16183, 16183, 16183, 16183, 16183, 16183, 16183, 16183, - 16183, 16183, 16183, 16183, 16183, 16183, 16183, 16183, - 16183, 16183, 16187, 16187, 16187, 16187, 16189, 16189, - 16193, 16193, 16193, 16193, 16217, 16217, 16217, 16217, - 16217, 16217, 16217, 16217, 16217, 16217, 16217, 16217, - 16217, 16217, 16217, 16217, 16217, 16217, 16217, 16217, - 16217, 16217, 16217, 16217, 16223, 16223, 16223, 16223, - 16223, 16223, 16229, 16229, 16229, 16229, 16229, 16229, - 16231, 16231, 16249, 16249, 16249, 16249, 16249, 16249, - 16249, 16249, 16249, 16249, 16249, 16249, 16249, 16249, - 16249, 16249, 16249, 16249, 16253, 16253, 16253, 16253, - 16267, 16267, 16267, 16267, 16267, 16267, 16267, 16267, - 16267, 16267, 16267, 16267, 16267, 16267, 16273, 16273, - 16273, 16273, 16273, 16273, 16301, 16301, 16301, 16301, - 16301, 16301, 16301, 16301, 16301, 16301, 16301, 16301, - 16301, 16301, 16301, 16301, 16301, 16301, 16301, 16301, - 16301, 16301, 16301, 16301, 16301, 16301, 16301, 16301, - 16319, 16319, 16319, 16319, 16319, 16319, 16319, 16319, - 16319, 16319, 16319, 16319, 16319, 16319, 16319, 16319, - 16319, 16319, 16333, 16333, 16333, 16333, 16333, 16333, - 16333, 16333, 16333, 16333, 16333, 16333, 16333, 16333, - 16339, 16339, 16339, 16339, 16339, 16339, 16349, 16349, - 16349, 16349, 16349, 16349, 16349, 16349, 16349, 16349, - 16361, 16361, 16361, 16361, 16361, 16361, 16361, 16361, - 16361, 16361, 16361, 16361, 16363, 16363, 16369, 16369, - 16369, 16369, 16369, 16369, 16381, 16381, 16381, 16381, - 16381, 16381, 16381, 16381, 16381, 16381, 16381, 16381, - 16411, 16411, 16411, 16411, 16411, 16411, 16411, 16411, - 16411, 16411, 16411, 16411, 16411, 16411, 16411, 16411, - 16411, 16411, 16411, 16411, 16411, 16411, 16411, 16411, - 16411, 16411, 16411, 16411, 16411, 16411, 16417, 16417, - 16417, 16417, 16417, 16417, 16421, 16421, 16421, 16421, - 16427, 16427, 16427, 16427, 16427, 16427, 16433, 16433, - 16433, 16433, 16433, 16433, 16447, 16447, 16447, 16447, - 16447, 16447, 16447, 16447, 16447, 16447, 16447, 16447, - 16447, 16447, 16451, 16451, 16451, 16451, 16453, 16453, - 16477, 16477, 16477, 16477, 16477, 16477, 16477, 16477, - 16477, 16477, 16477, 16477, 16477, 16477, 16477, 16477, - 16477, 16477, 16477, 16477, 16477, 16477, 16477, 16477, - 16481, 16481, 16481, 16481, 16487, 16487, 16487, 16487, - 16487, 16487, 16493, 16493, 16493, 16493, 16493, 16493, - 16519, 16519, 16519, 16519, 16519, 16519, 16519, 16519, - 16519, 16519, 16519, 16519, 16519, 16519, 16519, 16519, - 16519, 16519, 16519, 16519, 16519, 16519, 16519, 16519, - 16519, 16519, 16529, 16529, 16529, 16529, 16529, 16529, - 16529, 16529, 16529, 16529, 16547, 16547, 16547, 16547, - 16547, 16547, 16547, 16547, 16547, 16547, 16547, 16547, - 16547, 16547, 16547, 16547, 16547, 16547, 16553, 16553, - 16553, 16553, 16553, 16553, 16561, 16561, 16561, 16561, - 16561, 16561, 16561, 16561, 16567, 16567, 16567, 16567, - 16567, 16567, 16573, 16573, 16573, 16573, 16573, 16573, - 16603, 16603, 16603, 16603, 16603, 16603, 16603, 16603, - 16603, 16603, 16603, 16603, 16603, 16603, 16603, 16603, - 16603, 16603, 16603, 16603, 16603, 16603, 16603, 16603, - 16603, 16603, 16603, 16603, 16603, 16603, 16607, 16607, - 16607, 16607, 16619, 16619, 16619, 16619, 16619, 16619, - 16619, 16619, 16619, 16619, 16619, 16619, 16631, 16631, - 16631, 16631, 16631, 16631, 16631, 16631, 16631, 16631, - 16631, 16631, 16633, 16633, 16649, 16649, 16649, 16649, - 16649, 16649, 16649, 16649, 16649, 16649, 16649, 16649, - 16649, 16649, 16649, 16649, 16651, 16651, 16657, 16657, - 16657, 16657, 16657, 16657, 16661, 16661, 16661, 16661, - 16673, 16673, 16673, 16673, 16673, 16673, 16673, 16673, - 16673, 16673, 16673, 16673, 16691, 16691, 16691, 16691, - 16691, 16691, 16691, 16691, 16691, 16691, 16691, 16691, - 16691, 16691, 16691, 16691, 16691, 16691, 16693, 16693, - 16699, 16699, 16699, 16699, 16699, 16699, 16703, 16703, - 16703, 16703, 16729, 16729, 16729, 16729, 16729, 16729, - 16729, 16729, 16729, 16729, 16729, 16729, 16729, 16729, - 16729, 16729, 16729, 16729, 16729, 16729, 16729, 16729, - 16729, 16729, 16729, 16729, 16741, 16741, 16741, 16741, - 16741, 16741, 16741, 16741, 16741, 16741, 16741, 16741, - 16747, 16747, 16747, 16747, 16747, 16747, 16759, 16759, - 16759, 16759, 16759, 16759, 16759, 16759, 16759, 16759, - 16759, 16759, 16763, 16763, 16763, 16763, 16787, 16787, - 16787, 16787, 16787, 16787, 16787, 16787, 16787, 16787, - 16787, 16787, 16787, 16787, 16787, 16787, 16787, 16787, - 16787, 16787, 16787, 16787, 16787, 16787, 16811, 16811, - 16811, 16811, 16811, 16811, 16811, 16811, 16811, 16811, - 16811, 16811, 16811, 16811, 16811, 16811, 16811, 16811, - 16811, 16811, 16811, 16811, 16811, 16811, 16823, 16823, - 16823, 16823, 16823, 16823, 16823, 16823, 16823, 16823, - 16823, 16823, 16829, 16829, 16829, 16829, 16829, 16829, - 16831, 16831, 16843, 16843, 16843, 16843, 16843, 16843, - 16843, 16843, 16843, 16843, 16843, 16843, 16871, 16871, - 16871, 16871, 16871, 16871, 16871, 16871, 16871, 16871, - 16871, 16871, 16871, 16871, 16871, 16871, 16871, 16871, - 16871, 16871, 16871, 16871, 16871, 16871, 16871, 16871, - 16871, 16871, 16879, 16879, 16879, 16879, 16879, 16879, - 16879, 16879, 16883, 16883, 16883, 16883, 16889, 16889, - 16889, 16889, 16889, 16889, 16901, 16901, 16901, 16901, - 16901, 16901, 16901, 16901, 16901, 16901, 16901, 16901, - 16903, 16903, 16921, 16921, 16921, 16921, 16921, 16921, - 16921, 16921, 16921, 16921, 16921, 16921, 16921, 16921, - 16921, 16921, 16921, 16921, 16927, 16927, 16927, 16927, - 16927, 16927, 16931, 16931, 16931, 16931, 16937, 16937, - 16937, 16937, 16937, 16937, 16943, 16943, 16943, 16943, - 16943, 16943, 16963, 16963, 16963, 16963, 16963, 16963, - 16963, 16963, 16963, 16963, 16963, 16963, 16963, 16963, - 16963, 16963, 16963, 16963, 16963, 16963, 16979, 16979, - 16979, 16979, 16979, 16979, 16979, 16979, 16979, 16979, - 16979, 16979, 16979, 16979, 16979, 16979, 16981, 16981, - 16987, 16987, 16987, 16987, 16987, 16987, 16993, 16993, - 16993, 16993, 16993, 16993, 17011, 17011, 17011, 17011, - 17011, 17011, 17011, 17011, 17011, 17011, 17011, 17011, - 17011, 17011, 17011, 17011, 17011, 17011, 17021, 17021, - 17021, 17021, 17021, 17021, 17021, 17021, 17021, 17021, - 17027, 17027, 17027, 17027, 17027, 17027, 17029, 17029, - 17033, 17033, 17033, 17033, 17041, 17041, 17041, 17041, - 17041, 17041, 17041, 17041, 17047, 17047, 17047, 17047, - 17047, 17047, 17053, 17053, 17053, 17053, 17053, 17053, - 17077, 17077, 17077, 17077, 17077, 17077, 17077, 17077, - 17077, 17077, 17077, 17077, 17077, 17077, 17077, 17077, - 17077, 17077, 17077, 17077, 17077, 17077, 17077, 17077, - 17093, 17093, 17093, 17093, 17093, 17093, 17093, 17093, - 17093, 17093, 17093, 17093, 17093, 17093, 17093, 17093, - 17099, 17099, 17099, 17099, 17099, 17099, 17107, 17107, - 17107, 17107, 17107, 17107, 17107, 17107, 17117, 17117, - 17117, 17117, 17117, 17117, 17117, 17117, 17117, 17117, - 17123, 17123, 17123, 17123, 17123, 17123, 17137, 17137, - 17137, 17137, 17137, 17137, 17137, 17137, 17137, 17137, - 17137, 17137, 17137, 17137, 17159, 17159, 17159, 17159, - 17159, 17159, 17159, 17159, 17159, 17159, 17159, 17159, - 17159, 17159, 17159, 17159, 17159, 17159, 17159, 17159, - 17159, 17159, 17167, 17167, 17167, 17167, 17167, 17167, - 17167, 17167, 17183, 17183, 17183, 17183, 17183, 17183, - 17183, 17183, 17183, 17183, 17183, 17183, 17183, 17183, - 17183, 17183, 17189, 17189, 17189, 17189, 17189, 17189, - 17191, 17191, 17203, 17203, 17203, 17203, 17203, 17203, - 17203, 17203, 17203, 17203, 17203, 17203, 17207, 17207, - 17207, 17207, 17209, 17209, 17231, 17231, 17231, 17231, - 17231, 17231, 17231, 17231, 17231, 17231, 17231, 17231, - 17231, 17231, 17231, 17231, 17231, 17231, 17231, 17231, - 17231, 17231, 17239, 17239, 17239, 17239, 17239, 17239, - 17239, 17239, 17257, 17257, 17257, 17257, 17257, 17257, - 17257, 17257, 17257, 17257, 17257, 17257, 17257, 17257, - 17257, 17257, 17257, 17257, 17291, 17291, 17291, 17291, - 17291, 17291, 17291, 17291, 17291, 17291, 17291, 17291, - 17291, 17291, 17291, 17291, 17291, 17291, 17291, 17291, - 17291, 17291, 17291, 17291, 17291, 17291, 17291, 17291, - 17291, 17291, 17291, 17291, 17291, 17291, 17293, 17293, - 17299, 17299, 17299, 17299, 17299, 17299, 17317, 17317, - 17317, 17317, 17317, 17317, 17317, 17317, 17317, 17317, - 17317, 17317, 17317, 17317, 17317, 17317, 17317, 17317, - 17321, 17321, 17321, 17321, 17327, 17327, 17327, 17327, - 17327, 17327, 17333, 17333, 17333, 17333, 17333, 17333, - 17341, 17341, 17341, 17341, 17341, 17341, 17341, 17341, - 17351, 17351, 17351, 17351, 17351, 17351, 17351, 17351, - 17351, 17351, 17359, 17359, 17359, 17359, 17359, 17359, - 17359, 17359, 17377, 17377, 17377, 17377, 17377, 17377, - 17377, 17377, 17377, 17377, 17377, 17377, 17377, 17377, - 17377, 17377, 17377, 17377, 17383, 17383, 17383, 17383, - 17383, 17383, 17387, 17387, 17387, 17387, 17389, 17389, - 17393, 17393, 17393, 17393, 17401, 17401, 17401, 17401, - 17401, 17401, 17401, 17401, 17417, 17417, 17417, 17417, - 17417, 17417, 17417, 17417, 17417, 17417, 17417, 17417, - 17417, 17417, 17417, 17417, 17419, 17419, 17431, 17431, - 17431, 17431, 17431, 17431, 17431, 17431, 17431, 17431, - 17431, 17431, 17443, 17443, 17443, 17443, 17443, 17443, - 17443, 17443, 17443, 17443, 17443, 17443, 17449, 17449, - 17449, 17449, 17449, 17449, 17467, 17467, 17467, 17467, - 17467, 17467, 17467, 17467, 17467, 17467, 17467, 17467, - 17467, 17467, 17467, 17467, 17467, 17467, 17471, 17471, - 17471, 17471, 17477, 17477, 17477, 17477, 17477, 17477, - 17483, 17483, 17483, 17483, 17483, 17483, 17489, 17489, - 17489, 17489, 17489, 17489, 17491, 17491, 17497, 17497, - 17497, 17497, 17497, 17497, 17509, 17509, 17509, 17509, - 17509, 17509, 17509, 17509, 17509, 17509, 17509, 17509, - 17519, 17519, 17519, 17519, 17519, 17519, 17519, 17519, - 17519, 17519, 17539, 17539, 17539, 17539, 17539, 17539, - 17539, 17539, 17539, 17539, 17539, 17539, 17539, 17539, - 17539, 17539, 17539, 17539, 17539, 17539, 17551, 17551, - 17551, 17551, 17551, 17551, 17551, 17551, 17551, 17551, - 17551, 17551, 17569, 17569, 17569, 17569, 17569, 17569, - 17569, 17569, 17569, 17569, 17569, 17569, 17569, 17569, - 17569, 17569, 17569, 17569, 17573, 17573, 17573, 17573, - 17579, 17579, 17579, 17579, 17579, 17579, 17581, 17581, - 17597, 17597, 17597, 17597, 17597, 17597, 17597, 17597, - 17597, 17597, 17597, 17597, 17597, 17597, 17597, 17597, - 17599, 17599, 17609, 17609, 17609, 17609, 17609, 17609, - 17609, 17609, 17609, 17609, 17623, 17623, 17623, 17623, - 17623, 17623, 17623, 17623, 17623, 17623, 17623, 17623, - 17623, 17623, 17627, 17627, 17627, 17627, 17657, 17657, - 17657, 17657, 17657, 17657, 17657, 17657, 17657, 17657, - 17657, 17657, 17657, 17657, 17657, 17657, 17657, 17657, - 17657, 17657, 17657, 17657, 17657, 17657, 17657, 17657, - 17657, 17657, 17657, 17657, 17659, 17659, 17669, 17669, - 17669, 17669, 17669, 17669, 17669, 17669, 17669, 17669, - 17681, 17681, 17681, 17681, 17681, 17681, 17681, 17681, - 17681, 17681, 17681, 17681, 17683, 17683, 17707, 17707, - 17707, 17707, 17707, 17707, 17707, 17707, 17707, 17707, - 17707, 17707, 17707, 17707, 17707, 17707, 17707, 17707, - 17707, 17707, 17707, 17707, 17707, 17707, 17713, 17713, - 17713, 17713, 17713, 17713, 17729, 17729, 17729, 17729, - 17729, 17729, 17729, 17729, 17729, 17729, 17729, 17729, - 17729, 17729, 17729, 17729, 17737, 17737, 17737, 17737, - 17737, 17737, 17737, 17737, 17747, 17747, 17747, 17747, - 17747, 17747, 17747, 17747, 17747, 17747, 17749, 17749, - 17761, 17761, 17761, 17761, 17761, 17761, 17761, 17761, - 17761, 17761, 17761, 17761, 17783, 17783, 17783, 17783, - 17783, 17783, 17783, 17783, 17783, 17783, 17783, 17783, - 17783, 17783, 17783, 17783, 17783, 17783, 17783, 17783, - 17783, 17783, 17789, 17789, 17789, 17789, 17789, 17789, - 17791, 17791, 17807, 17807, 17807, 17807, 17807, 17807, - 17807, 17807, 17807, 17807, 17807, 17807, 17807, 17807, - 17807, 17807, 17827, 17827, 17827, 17827, 17827, 17827, - 17827, 17827, 17827, 17827, 17827, 17827, 17827, 17827, - 17827, 17827, 17827, 17827, 17827, 17827, 17837, 17837, - 17837, 17837, 17837, 17837, 17837, 17837, 17837, 17837, - 17839, 17839, 17851, 17851, 17851, 17851, 17851, 17851, - 17851, 17851, 17851, 17851, 17851, 17851, 17863, 17863, - 17863, 17863, 17863, 17863, 17863, 17863, 17863, 17863, - 17863, 17863, 17881, 17881, 17881, 17881, 17881, 17881, - 17881, 17881, 17881, 17881, 17881, 17881, 17881, 17881, - 17881, 17881, 17881, 17881, 17891, 17891, 17891, 17891, - 17891, 17891, 17891, 17891, 17891, 17891, 17903, 17903, - 17903, 17903, 17903, 17903, 17903, 17903, 17903, 17903, - 17903, 17903, 17909, 17909, 17909, 17909, 17909, 17909, - 17911, 17911, 17921, 17921, 17921, 17921, 17921, 17921, - 17921, 17921, 17921, 17921, 17923, 17923, 17929, 17929, - 17929, 17929, 17929, 17929, 17939, 17939, 17939, 17939, - 17939, 17939, 17939, 17939, 17939, 17939, 17957, 17957, - 17957, 17957, 17957, 17957, 17957, 17957, 17957, 17957, - 17957, 17957, 17957, 17957, 17957, 17957, 17957, 17957, - 17959, 17959, 17971, 17971, 17971, 17971, 17971, 17971, - 17971, 17971, 17971, 17971, 17971, 17971, 17977, 17977, - 17977, 17977, 17977, 17977, 17981, 17981, 17981, 17981, - 17987, 17987, 17987, 17987, 17987, 17987, 17989, 17989, - 18013, 18013, 18013, 18013, 18013, 18013, 18013, 18013, - 18013, 18013, 18013, 18013, 18013, 18013, 18013, 18013, - 18013, 18013, 18013, 18013, 18013, 18013, 18013, 18013, - 18041, 18041, 18041, 18041, 18041, 18041, 18041, 18041, - 18041, 18041, 18041, 18041, 18041, 18041, 18041, 18041, - 18041, 18041, 18041, 18041, 18041, 18041, 18041, 18041, - 18041, 18041, 18041, 18041, 18043, 18043, 18047, 18047, - 18047, 18047, 18049, 18049, 18059, 18059, 18059, 18059, - 18059, 18059, 18059, 18059, 18059, 18059, 18061, 18061, - 18077, 18077, 18077, 18077, 18077, 18077, 18077, 18077, - 18077, 18077, 18077, 18077, 18077, 18077, 18077, 18077, - 18089, 18089, 18089, 18089, 18089, 18089, 18089, 18089, - 18089, 18089, 18089, 18089, 18097, 18097, 18097, 18097, - 18097, 18097, 18097, 18097, 18119, 18119, 18119, 18119, - 18119, 18119, 18119, 18119, 18119, 18119, 18119, 18119, - 18119, 18119, 18119, 18119, 18119, 18119, 18119, 18119, - 18119, 18119, 18121, 18121, 18127, 18127, 18127, 18127, - 18127, 18127, 18131, 18131, 18131, 18131, 18133, 18133, - 18143, 18143, 18143, 18143, 18143, 18143, 18143, 18143, - 18143, 18143, 18149, 18149, 18149, 18149, 18149, 18149, - 18169, 18169, 18169, 18169, 18169, 18169, 18169, 18169, - 18169, 18169, 18169, 18169, 18169, 18169, 18169, 18169, - 18169, 18169, 18169, 18169, 18181, 18181, 18181, 18181, - 18181, 18181, 18181, 18181, 18181, 18181, 18181, 18181, - 18191, 18191, 18191, 18191, 18191, 18191, 18191, 18191, - 18191, 18191, 18199, 18199, 18199, 18199, 18199, 18199, - 18199, 18199, 18211, 18211, 18211, 18211, 18211, 18211, - 18211, 18211, 18211, 18211, 18211, 18211, 18217, 18217, - 18217, 18217, 18217, 18217, 18223, 18223, 18223, 18223, - 18223, 18223, 18229, 18229, 18229, 18229, 18229, 18229, - 18233, 18233, 18233, 18233, 18251, 18251, 18251, 18251, - 18251, 18251, 18251, 18251, 18251, 18251, 18251, 18251, - 18251, 18251, 18251, 18251, 18251, 18251, 18253, 18253, - 18257, 18257, 18257, 18257, 18269, 18269, 18269, 18269, - 18269, 18269, 18269, 18269, 18269, 18269, 18269, 18269, - 18287, 18287, 18287, 18287, 18287, 18287, 18287, 18287, - 18287, 18287, 18287, 18287, 18287, 18287, 18287, 18287, - 18287, 18287, 18289, 18289, 18301, 18301, 18301, 18301, - 18301, 18301, 18301, 18301, 18301, 18301, 18301, 18301, - 18307, 18307, 18307, 18307, 18307, 18307, 18311, 18311, - 18311, 18311, 18313, 18313, 18329, 18329, 18329, 18329, - 18329, 18329, 18329, 18329, 18329, 18329, 18329, 18329, - 18329, 18329, 18329, 18329, 18341, 18341, 18341, 18341, - 18341, 18341, 18341, 18341, 18341, 18341, 18341, 18341, - 18353, 18353, 18353, 18353, 18353, 18353, 18353, 18353, - 18353, 18353, 18353, 18353, 18367, 18367, 18367, 18367, - 18367, 18367, 18367, 18367, 18367, 18367, 18367, 18367, - 18367, 18367, 18371, 18371, 18371, 18371, 18379, 18379, - 18379, 18379, 18379, 18379, 18379, 18379, 18397, 18397, - 18397, 18397, 18397, 18397, 18397, 18397, 18397, 18397, - 18397, 18397, 18397, 18397, 18397, 18397, 18397, 18397, - 18401, 18401, 18401, 18401, 18413, 18413, 18413, 18413, - 18413, 18413, 18413, 18413, 18413, 18413, 18413, 18413, - 18427, 18427, 18427, 18427, 18427, 18427, 18427, 18427, - 18427, 18427, 18427, 18427, 18427, 18427, 18433, 18433, - 18433, 18433, 18433, 18433, 18439, 18439, 18439, 18439, - 18439, 18439, 18443, 18443, 18443, 18443, 18451, 18451, - 18451, 18451, 18451, 18451, 18451, 18451, 18457, 18457, - 18457, 18457, 18457, 18457, 18461, 18461, 18461, 18461, - 18481, 18481, 18481, 18481, 18481, 18481, 18481, 18481, - 18481, 18481, 18481, 18481, 18481, 18481, 18481, 18481, - 18481, 18481, 18481, 18481, 18493, 18493, 18493, 18493, - 18493, 18493, 18493, 18493, 18493, 18493, 18493, 18493, - 18503, 18503, 18503, 18503, 18503, 18503, 18503, 18503, - 18503, 18503, 18517, 18517, 18517, 18517, 18517, 18517, - 18517, 18517, 18517, 18517, 18517, 18517, 18517, 18517, - 18521, 18521, 18521, 18521, 18523, 18523, 18539, 18539, - 18539, 18539, 18539, 18539, 18539, 18539, 18539, 18539, - 18539, 18539, 18539, 18539, 18539, 18539, 18541, 18541, - 18553, 18553, 18553, 18553, 18553, 18553, 18553, 18553, - 18553, 18553, 18553, 18553, 18583, 18583, 18583, 18583, - 18583, 18583, 18583, 18583, 18583, 18583, 18583, 18583, - 18583, 18583, 18583, 18583, 18583, 18583, 18583, 18583, - 18583, 18583, 18583, 18583, 18583, 18583, 18583, 18583, - 18583, 18583, 18587, 18587, 18587, 18587, 18593, 18593, - 18593, 18593, 18593, 18593, 18617, 18617, 18617, 18617, - 18617, 18617, 18617, 18617, 18617, 18617, 18617, 18617, - 18617, 18617, 18617, 18617, 18617, 18617, 18617, 18617, - 18617, 18617, 18617, 18617, 18637, 18637, 18637, 18637, - 18637, 18637, 18637, 18637, 18637, 18637, 18637, 18637, - 18637, 18637, 18637, 18637, 18637, 18637, 18637, 18637, - 18661, 18661, 18661, 18661, 18661, 18661, 18661, 18661, - 18661, 18661, 18661, 18661, 18661, 18661, 18661, 18661, - 18661, 18661, 18661, 18661, 18661, 18661, 18661, 18661, - 18671, 18671, 18671, 18671, 18671, 18671, 18671, 18671, - 18671, 18671, 18679, 18679, 18679, 18679, 18679, 18679, - 18679, 18679, 18691, 18691, 18691, 18691, 18691, 18691, - 18691, 18691, 18691, 18691, 18691, 18691, 18701, 18701, - 18701, 18701, 18701, 18701, 18701, 18701, 18701, 18701, - 18713, 18713, 18713, 18713, 18713, 18713, 18713, 18713, - 18713, 18713, 18713, 18713, 18719, 18719, 18719, 18719, - 18719, 18719, 18731, 18731, 18731, 18731, 18731, 18731, - 18731, 18731, 18731, 18731, 18731, 18731, 18743, 18743, - 18743, 18743, 18743, 18743, 18743, 18743, 18743, 18743, - 18743, 18743, 18749, 18749, 18749, 18749, 18749, 18749, - 18757, 18757, 18757, 18757, 18757, 18757, 18757, 18757, - 18773, 18773, 18773, 18773, 18773, 18773, 18773, 18773, - 18773, 18773, 18773, 18773, 18773, 18773, 18773, 18773, - 18787, 18787, 18787, 18787, 18787, 18787, 18787, 18787, - 18787, 18787, 18787, 18787, 18787, 18787, 18793, 18793, - 18793, 18793, 18793, 18793, 18797, 18797, 18797, 18797, - 18803, 18803, 18803, 18803, 18803, 18803, 18839, 18839, - 18839, 18839, 18839, 18839, 18839, 18839, 18839, 18839, - 18839, 18839, 18839, 18839, 18839, 18839, 18839, 18839, - 18839, 18839, 18839, 18839, 18839, 18839, 18839, 18839, - 18839, 18839, 18839, 18839, 18839, 18839, 18839, 18839, - 18839, 18839, 18859, 18859, 18859, 18859, 18859, 18859, - 18859, 18859, 18859, 18859, 18859, 18859, 18859, 18859, - 18859, 18859, 18859, 18859, 18859, 18859, 18869, 18869, - 18869, 18869, 18869, 18869, 18869, 18869, 18869, 18869, - 18899, 18899, 18899, 18899, 18899, 18899, 18899, 18899, - 18899, 18899, 18899, 18899, 18899, 18899, 18899, 18899, - 18899, 18899, 18899, 18899, 18899, 18899, 18899, 18899, - 18899, 18899, 18899, 18899, 18899, 18899, 18911, 18911, - 18911, 18911, 18911, 18911, 18911, 18911, 18911, 18911, - 18911, 18911, 18913, 18913, 18917, 18917, 18917, 18917, - 18919, 18919, 18947, 18947, 18947, 18947, 18947, 18947, - 18947, 18947, 18947, 18947, 18947, 18947, 18947, 18947, - 18947, 18947, 18947, 18947, 18947, 18947, 18947, 18947, - 18947, 18947, 18947, 18947, 18947, 18947, 18959, 18959, - 18959, 18959, 18959, 18959, 18959, 18959, 18959, 18959, - 18959, 18959, 18973, 18973, 18973, 18973, 18973, 18973, - 18973, 18973, 18973, 18973, 18973, 18973, 18973, 18973, - 18979, 18979, 18979, 18979, 18979, 18979, 19001, 19001, - 19001, 19001, 19001, 19001, 19001, 19001, 19001, 19001, - 19001, 19001, 19001, 19001, 19001, 19001, 19001, 19001, - 19001, 19001, 19001, 19001, 19009, 19009, 19009, 19009, - 19009, 19009, 19009, 19009, 19013, 19013, 19013, 19013, - 19031, 19031, 19031, 19031, 19031, 19031, 19031, 19031, - 19031, 19031, 19031, 19031, 19031, 19031, 19031, 19031, - 19031, 19031, 19037, 19037, 19037, 19037, 19037, 19037, - 19051, 19051, 19051, 19051, 19051, 19051, 19051, 19051, - 19051, 19051, 19051, 19051, 19051, 19051, 19069, 19069, - 19069, 19069, 19069, 19069, 19069, 19069, 19069, 19069, - 19069, 19069, 19069, 19069, 19069, 19069, 19069, 19069, - 19073, 19073, 19073, 19073, 19079, 19079, 19079, 19079, - 19079, 19079, 19081, 19081, 19087, 19087, 19087, 19087, - 19087, 19087, 19121, 19121, 19121, 19121, 19121, 19121, - 19121, 19121, 19121, 19121, 19121, 19121, 19121, 19121, - 19121, 19121, 19121, 19121, 19121, 19121, 19121, 19121, - 19121, 19121, 19121, 19121, 19121, 19121, 19121, 19121, - 19121, 19121, 19121, 19121, 19139, 19139, 19139, 19139, - 19139, 19139, 19139, 19139, 19139, 19139, 19139, 19139, - 19139, 19139, 19139, 19139, 19139, 19139, 19141, 19141, - 19157, 19157, 19157, 19157, 19157, 19157, 19157, 19157, - 19157, 19157, 19157, 19157, 19157, 19157, 19157, 19157, - 19163, 19163, 19163, 19163, 19163, 19163, 19181, 19181, - 19181, 19181, 19181, 19181, 19181, 19181, 19181, 19181, - 19181, 19181, 19181, 19181, 19181, 19181, 19181, 19181, - 19183, 19183, 19207, 19207, 19207, 19207, 19207, 19207, - 19207, 19207, 19207, 19207, 19207, 19207, 19207, 19207, - 19207, 19207, 19207, 19207, 19207, 19207, 19207, 19207, - 19207, 19207, 19211, 19211, 19211, 19211, 19213, 19213, - 19219, 19219, 19219, 19219, 19219, 19219, 19231, 19231, - 19231, 19231, 19231, 19231, 19231, 19231, 19231, 19231, - 19231, 19231, 19237, 19237, 19237, 19237, 19237, 19237, - 19249, 19249, 19249, 19249, 19249, 19249, 19249, 19249, - 19249, 19249, 19249, 19249, 19259, 19259, 19259, 19259, - 19259, 19259, 19259, 19259, 19259, 19259, 19267, 19267, - 19267, 19267, 19267, 19267, 19267, 19267, 19273, 19273, - 19273, 19273, 19273, 19273, 19289, 19289, 19289, 19289, - 19289, 19289, 19289, 19289, 19289, 19289, 19289, 19289, - 19289, 19289, 19289, 19289, 19301, 19301, 19301, 19301, - 19301, 19301, 19301, 19301, 19301, 19301, 19301, 19301, - 19309, 19309, 19309, 19309, 19309, 19309, 19309, 19309, - 19319, 19319, 19319, 19319, 19319, 19319, 19319, 19319, - 19319, 19319, 19333, 19333, 19333, 19333, 19333, 19333, - 19333, 19333, 19333, 19333, 19333, 19333, 19333, 19333, - 19373, 19373, 19373, 19373, 19373, 19373, 19373, 19373, - 19373, 19373, 19373, 19373, 19373, 19373, 19373, 19373, - 19373, 19373, 19373, 19373, 19373, 19373, 19373, 19373, - 19373, 19373, 19373, 19373, 19373, 19373, 19373, 19373, - 19373, 19373, 19373, 19373, 19373, 19373, 19373, 19373, - 19379, 19379, 19379, 19379, 19379, 19379, 19381, 19381, - 19387, 19387, 19387, 19387, 19387, 19387, 19391, 19391, - 19391, 19391, 19403, 19403, 19403, 19403, 19403, 19403, - 19403, 19403, 19403, 19403, 19403, 19403, 19417, 19417, - 19417, 19417, 19417, 19417, 19417, 19417, 19417, 19417, - 19417, 19417, 19417, 19417, 19421, 19421, 19421, 19421, - 19423, 19423, 19427, 19427, 19427, 19427, 19429, 19429, - 19433, 19433, 19433, 19433, 19441, 19441, 19441, 19441, - 19441, 19441, 19441, 19441, 19447, 19447, 19447, 19447, - 19447, 19447, 19457, 19457, 19457, 19457, 19457, 19457, - 19457, 19457, 19457, 19457, 19463, 19463, 19463, 19463, - 19463, 19463, 19469, 19469, 19469, 19469, 19469, 19469, - 19471, 19471, 19477, 19477, 19477, 19477, 19477, 19477, - 19483, 19483, 19483, 19483, 19483, 19483, 19489, 19489, - 19489, 19489, 19489, 19489, 19501, 19501, 19501, 19501, - 19501, 19501, 19501, 19501, 19501, 19501, 19501, 19501, - 19507, 19507, 19507, 19507, 19507, 19507, 19531, 19531, - 19531, 19531, 19531, 19531, 19531, 19531, 19531, 19531, - 19531, 19531, 19531, 19531, 19531, 19531, 19531, 19531, - 19531, 19531, 19531, 19531, 19531, 19531, 19541, 19541, - 19541, 19541, 19541, 19541, 19541, 19541, 19541, 19541, - 19543, 19543, 19553, 19553, 19553, 19553, 19553, 19553, - 19553, 19553, 19553, 19553, 19559, 19559, 19559, 19559, - 19559, 19559, 19571, 19571, 19571, 19571, 19571, 19571, - 19571, 19571, 19571, 19571, 19571, 19571, 19577, 19577, - 19577, 19577, 19577, 19577, 19583, 19583, 19583, 19583, - 19583, 19583, 19597, 19597, 19597, 19597, 19597, 19597, - 19597, 19597, 19597, 19597, 19597, 19597, 19597, 19597, - 19603, 19603, 19603, 19603, 19603, 19603, 19609, 19609, - 19609, 19609, 19609, 19609, 19661, 19661, 19661, 19661, - 19661, 19661, 19661, 19661, 19661, 19661, 19661, 19661, - 19661, 19661, 19661, 19661, 19661, 19661, 19661, 19661, - 19661, 19661, 19661, 19661, 19661, 19661, 19661, 19661, - 19661, 19661, 19661, 19661, 19661, 19661, 19661, 19661, - 19661, 19661, 19661, 19661, 19661, 19661, 19661, 19661, - 19661, 19661, 19661, 19661, 19661, 19661, 19661, 19661, - 19681, 19681, 19681, 19681, 19681, 19681, 19681, 19681, - 19681, 19681, 19681, 19681, 19681, 19681, 19681, 19681, - 19681, 19681, 19681, 19681, 19687, 19687, 19687, 19687, - 19687, 19687, 19697, 19697, 19697, 19697, 19697, 19697, - 19697, 19697, 19697, 19697, 19699, 19699, 19709, 19709, - 19709, 19709, 19709, 19709, 19709, 19709, 19709, 19709, - 19717, 19717, 19717, 19717, 19717, 19717, 19717, 19717, - 19727, 19727, 19727, 19727, 19727, 19727, 19727, 19727, - 19727, 19727, 19739, 19739, 19739, 19739, 19739, 19739, - 19739, 19739, 19739, 19739, 19739, 19739, 19751, 19751, - 19751, 19751, 19751, 19751, 19751, 19751, 19751, 19751, - 19751, 19751, 19753, 19753, 19759, 19759, 19759, 19759, - 19759, 19759, 19763, 19763, 19763, 19763, 19777, 19777, - 19777, 19777, 19777, 19777, 19777, 19777, 19777, 19777, - 19777, 19777, 19777, 19777, 19793, 19793, 19793, 19793, - 19793, 19793, 19793, 19793, 19793, 19793, 19793, 19793, - 19793, 19793, 19793, 19793, 19801, 19801, 19801, 19801, - 19801, 19801, 19801, 19801, 19813, 19813, 19813, 19813, - 19813, 19813, 19813, 19813, 19813, 19813, 19813, 19813, - 19819, 19819, 19819, 19819, 19819, 19819, 19841, 19841, - 19841, 19841, 19841, 19841, 19841, 19841, 19841, 19841, - 19841, 19841, 19841, 19841, 19841, 19841, 19841, 19841, - 19841, 19841, 19841, 19841, 19843, 19843, 19853, 19853, - 19853, 19853, 19853, 19853, 19853, 19853, 19853, 19853, - 19861, 19861, 19861, 19861, 19861, 19861, 19861, 19861, - 19867, 19867, 19867, 19867, 19867, 19867, 19889, 19889, - 19889, 19889, 19889, 19889, 19889, 19889, 19889, 19889, - 19889, 19889, 19889, 19889, 19889, 19889, 19889, 19889, - 19889, 19889, 19889, 19889, 19891, 19891, 19913, 19913, - 19913, 19913, 19913, 19913, 19913, 19913, 19913, 19913, - 19913, 19913, 19913, 19913, 19913, 19913, 19913, 19913, - 19913, 19913, 19913, 19913, 19919, 19919, 19919, 19919, - 19919, 19919, 19927, 19927, 19927, 19927, 19927, 19927, - 19927, 19927, 19937, 19937, 19937, 19937, 19937, 19937, - 19937, 19937, 19937, 19937, 19949, 19949, 19949, 19949, - 19949, 19949, 19949, 19949, 19949, 19949, 19949, 19949, - 19961, 19961, 19961, 19961, 19961, 19961, 19961, 19961, - 19961, 19961, 19961, 19961, 19963, 19963, 19973, 19973, - 19973, 19973, 19973, 19973, 19973, 19973, 19973, 19973, - 19979, 19979, 19979, 19979, 19979, 19979, 19991, 19991, - 19991, 19991, 19991, 19991, 19991, 19991, 19991, 19991, - 19991, 19991, 19993, 19993, 19997, 19997, 19997, 19997, - 20011, 20011, 20011, 20011, 20011, 20011, 20011, 20011, - 20011, 20011, 20011, 20011, 20011, 20011, 20021, 20021, - 20021, 20021, 20021, 20021, 20021, 20021, 20021, 20021, - 20023, 20023, 20029, 20029, 20029, 20029, 20029, 20029, - 20047, 20047, 20047, 20047, 20047, 20047, 20047, 20047, - 20047, 20047, 20047, 20047, 20047, 20047, 20047, 20047, - 20047, 20047, 20051, 20051, 20051, 20051, 20063, 20063, - 20063, 20063, 20063, 20063, 20063, 20063, 20063, 20063, - 20063, 20063, 20071, 20071, 20071, 20071, 20071, 20071, - 20071, 20071, 20089, 20089, 20089, 20089, 20089, 20089, - 20089, 20089, 20089, 20089, 20089, 20089, 20089, 20089, - 20089, 20089, 20089, 20089, 20101, 20101, 20101, 20101, - 20101, 20101, 20101, 20101, 20101, 20101, 20101, 20101, - 20107, 20107, 20107, 20107, 20107, 20107, 20113, 20113, - 20113, 20113, 20113, 20113, 20117, 20117, 20117, 20117, - 20123, 20123, 20123, 20123, 20123, 20123, 20129, 20129, - 20129, 20129, 20129, 20129, 20143, 20143, 20143, 20143, - 20143, 20143, 20143, 20143, 20143, 20143, 20143, 20143, - 20143, 20143, 20147, 20147, 20147, 20147, 20149, 20149, - 20161, 20161, 20161, 20161, 20161, 20161, 20161, 20161, - 20161, 20161, 20161, 20161, 20173, 20173, 20173, 20173, - 20173, 20173, 20173, 20173, 20173, 20173, 20173, 20173, - 20177, 20177, 20177, 20177, 20183, 20183, 20183, 20183, - 20183, 20183, 20201, 20201, 20201, 20201, 20201, 20201, - 20201, 20201, 20201, 20201, 20201, 20201, 20201, 20201, - 20201, 20201, 20201, 20201, 20219, 20219, 20219, 20219, - 20219, 20219, 20219, 20219, 20219, 20219, 20219, 20219, - 20219, 20219, 20219, 20219, 20219, 20219, 20231, 20231, - 20231, 20231, 20231, 20231, 20231, 20231, 20231, 20231, - 20231, 20231, 20233, 20233, 20249, 20249, 20249, 20249, - 20249, 20249, 20249, 20249, 20249, 20249, 20249, 20249, - 20249, 20249, 20249, 20249, 20261, 20261, 20261, 20261, - 20261, 20261, 20261, 20261, 20261, 20261, 20261, 20261, - 20269, 20269, 20269, 20269, 20269, 20269, 20269, 20269, - 20287, 20287, 20287, 20287, 20287, 20287, 20287, 20287, - 20287, 20287, 20287, 20287, 20287, 20287, 20287, 20287, - 20287, 20287, 20297, 20297, 20297, 20297, 20297, 20297, - 20297, 20297, 20297, 20297, 20323, 20323, 20323, 20323, - 20323, 20323, 20323, 20323, 20323, 20323, 20323, 20323, - 20323, 20323, 20323, 20323, 20323, 20323, 20323, 20323, - 20323, 20323, 20323, 20323, 20323, 20323, 20327, 20327, - 20327, 20327, 20333, 20333, 20333, 20333, 20333, 20333, - 20341, 20341, 20341, 20341, 20341, 20341, 20341, 20341, - 20347, 20347, 20347, 20347, 20347, 20347, 20353, 20353, - 20353, 20353, 20353, 20353, 20357, 20357, 20357, 20357, - 20359, 20359, 20369, 20369, 20369, 20369, 20369, 20369, - 20369, 20369, 20369, 20369, 20389, 20389, 20389, 20389, - 20389, 20389, 20389, 20389, 20389, 20389, 20389, 20389, - 20389, 20389, 20389, 20389, 20389, 20389, 20389, 20389, - 20393, 20393, 20393, 20393, 20399, 20399, 20399, 20399, - 20399, 20399, 20407, 20407, 20407, 20407, 20407, 20407, - 20407, 20407, 20411, 20411, 20411, 20411, 20431, 20431, - 20431, 20431, 20431, 20431, 20431, 20431, 20431, 20431, - 20431, 20431, 20431, 20431, 20431, 20431, 20431, 20431, - 20431, 20431, 20441, 20441, 20441, 20441, 20441, 20441, - 20441, 20441, 20441, 20441, 20443, 20443, 20477, 20477, - 20477, 20477, 20477, 20477, 20477, 20477, 20477, 20477, - 20477, 20477, 20477, 20477, 20477, 20477, 20477, 20477, - 20477, 20477, 20477, 20477, 20477, 20477, 20477, 20477, - 20477, 20477, 20477, 20477, 20477, 20477, 20477, 20477, - 20479, 20479, 20483, 20483, 20483, 20483, 20507, 20507, - 20507, 20507, 20507, 20507, 20507, 20507, 20507, 20507, - 20507, 20507, 20507, 20507, 20507, 20507, 20507, 20507, - 20507, 20507, 20507, 20507, 20507, 20507, 20509, 20509, - 20521, 20521, 20521, 20521, 20521, 20521, 20521, 20521, - 20521, 20521, 20521, 20521, 20533, 20533, 20533, 20533, - 20533, 20533, 20533, 20533, 20533, 20533, 20533, 20533, - 20543, 20543, 20543, 20543, 20543, 20543, 20543, 20543, - 20543, 20543, 20549, 20549, 20549, 20549, 20549, 20549, - 20551, 20551, 20563, 20563, 20563, 20563, 20563, 20563, - 20563, 20563, 20563, 20563, 20563, 20563, 20593, 20593, - 20593, 20593, 20593, 20593, 20593, 20593, 20593, 20593, - 20593, 20593, 20593, 20593, 20593, 20593, 20593, 20593, - 20593, 20593, 20593, 20593, 20593, 20593, 20593, 20593, - 20593, 20593, 20593, 20593, 20599, 20599, 20599, 20599, - 20599, 20599, 20611, 20611, 20611, 20611, 20611, 20611, - 20611, 20611, 20611, 20611, 20611, 20611, 20627, 20627, - 20627, 20627, 20627, 20627, 20627, 20627, 20627, 20627, - 20627, 20627, 20627, 20627, 20627, 20627, 20639, 20639, - 20639, 20639, 20639, 20639, 20639, 20639, 20639, 20639, - 20639, 20639, 20641, 20641, 20663, 20663, 20663, 20663, - 20663, 20663, 20663, 20663, 20663, 20663, 20663, 20663, - 20663, 20663, 20663, 20663, 20663, 20663, 20663, 20663, - 20663, 20663, 20681, 20681, 20681, 20681, 20681, 20681, - 20681, 20681, 20681, 20681, 20681, 20681, 20681, 20681, - 20681, 20681, 20681, 20681, 20693, 20693, 20693, 20693, - 20693, 20693, 20693, 20693, 20693, 20693, 20693, 20693, - 20707, 20707, 20707, 20707, 20707, 20707, 20707, 20707, - 20707, 20707, 20707, 20707, 20707, 20707, 20717, 20717, - 20717, 20717, 20717, 20717, 20717, 20717, 20717, 20717, - 20719, 20719, 20731, 20731, 20731, 20731, 20731, 20731, - 20731, 20731, 20731, 20731, 20731, 20731, 20743, 20743, - 20743, 20743, 20743, 20743, 20743, 20743, 20743, 20743, - 20743, 20743, 20747, 20747, 20747, 20747, 20749, 20749, - 20753, 20753, 20753, 20753, 20759, 20759, 20759, 20759, - 20759, 20759, 20771, 20771, 20771, 20771, 20771, 20771, - 20771, 20771, 20771, 20771, 20771, 20771, 20773, 20773, - 20789, 20789, 20789, 20789, 20789, 20789, 20789, 20789, - 20789, 20789, 20789, 20789, 20789, 20789, 20789, 20789, - 20807, 20807, 20807, 20807, 20807, 20807, 20807, 20807, - 20807, 20807, 20807, 20807, 20807, 20807, 20807, 20807, - 20807, 20807, 20809, 20809, 20849, 20849, 20849, 20849, - 20849, 20849, 20849, 20849, 20849, 20849, 20849, 20849, - 20849, 20849, 20849, 20849, 20849, 20849, 20849, 20849, - 20849, 20849, 20849, 20849, 20849, 20849, 20849, 20849, - 20849, 20849, 20849, 20849, 20849, 20849, 20849, 20849, - 20849, 20849, 20849, 20849, 20857, 20857, 20857, 20857, - 20857, 20857, 20857, 20857, 20873, 20873, 20873, 20873, - 20873, 20873, 20873, 20873, 20873, 20873, 20873, 20873, - 20873, 20873, 20873, 20873, 20879, 20879, 20879, 20879, - 20879, 20879, 20887, 20887, 20887, 20887, 20887, 20887, - 20887, 20887, 20897, 20897, 20897, 20897, 20897, 20897, - 20897, 20897, 20897, 20897, 20899, 20899, 20903, 20903, - 20903, 20903, 20921, 20921, 20921, 20921, 20921, 20921, - 20921, 20921, 20921, 20921, 20921, 20921, 20921, 20921, - 20921, 20921, 20921, 20921, 20929, 20929, 20929, 20929, - 20929, 20929, 20929, 20929, 20939, 20939, 20939, 20939, - 20939, 20939, 20939, 20939, 20939, 20939, 20947, 20947, - 20947, 20947, 20947, 20947, 20947, 20947, 20959, 20959, - 20959, 20959, 20959, 20959, 20959, 20959, 20959, 20959, - 20959, 20959, 20963, 20963, 20963, 20963, 20981, 20981, - 20981, 20981, 20981, 20981, 20981, 20981, 20981, 20981, - 20981, 20981, 20981, 20981, 20981, 20981, 20981, 20981, - 20983, 20983, 21001, 21001, 21001, 21001, 21001, 21001, - 21001, 21001, 21001, 21001, 21001, 21001, 21001, 21001, - 21001, 21001, 21001, 21001, 21011, 21011, 21011, 21011, - 21011, 21011, 21011, 21011, 21011, 21011, 21013, 21013, - 21017, 21017, 21017, 21017, 21019, 21019, 21023, 21023, - 21023, 21023, 21031, 21031, 21031, 21031, 21031, 21031, - 21031, 21031, 21059, 21059, 21059, 21059, 21059, 21059, - 21059, 21059, 21059, 21059, 21059, 21059, 21059, 21059, - 21059, 21059, 21059, 21059, 21059, 21059, 21059, 21059, - 21059, 21059, 21059, 21059, 21059, 21059, 21061, 21061, - 21067, 21067, 21067, 21067, 21067, 21067, 21089, 21089, - 21089, 21089, 21089, 21089, 21089, 21089, 21089, 21089, - 21089, 21089, 21089, 21089, 21089, 21089, 21089, 21089, - 21089, 21089, 21089, 21089, 21101, 21101, 21101, 21101, - 21101, 21101, 21101, 21101, 21101, 21101, 21101, 21101, - 21107, 21107, 21107, 21107, 21107, 21107, 21121, 21121, - 21121, 21121, 21121, 21121, 21121, 21121, 21121, 21121, - 21121, 21121, 21121, 21121, 21139, 21139, 21139, 21139, - 21139, 21139, 21139, 21139, 21139, 21139, 21139, 21139, - 21139, 21139, 21139, 21139, 21139, 21139, 21143, 21143, - 21143, 21143, 21149, 21149, 21149, 21149, 21149, 21149, - 21157, 21157, 21157, 21157, 21157, 21157, 21157, 21157, - 21163, 21163, 21163, 21163, 21163, 21163, 21169, 21169, - 21169, 21169, 21169, 21169, 21179, 21179, 21179, 21179, - 21179, 21179, 21179, 21179, 21179, 21179, 21187, 21187, - 21187, 21187, 21187, 21187, 21187, 21187, 21191, 21191, - 21191, 21191, 21193, 21193, 21211, 21211, 21211, 21211, - 21211, 21211, 21211, 21211, 21211, 21211, 21211, 21211, - 21211, 21211, 21211, 21211, 21211, 21211, 21221, 21221, - 21221, 21221, 21221, 21221, 21221, 21221, 21221, 21221, - 21227, 21227, 21227, 21227, 21227, 21227, 21247, 21247, - 21247, 21247, 21247, 21247, 21247, 21247, 21247, 21247, - 21247, 21247, 21247, 21247, 21247, 21247, 21247, 21247, - 21247, 21247, 21269, 21269, 21269, 21269, 21269, 21269, - 21269, 21269, 21269, 21269, 21269, 21269, 21269, 21269, - 21269, 21269, 21269, 21269, 21269, 21269, 21269, 21269, - 21277, 21277, 21277, 21277, 21277, 21277, 21277, 21277, - 21283, 21283, 21283, 21283, 21283, 21283, 21313, 21313, - 21313, 21313, 21313, 21313, 21313, 21313, 21313, 21313, - 21313, 21313, 21313, 21313, 21313, 21313, 21313, 21313, - 21313, 21313, 21313, 21313, 21313, 21313, 21313, 21313, - 21313, 21313, 21313, 21313, 21317, 21317, 21317, 21317, - 21319, 21319, 21323, 21323, 21323, 21323, 21341, 21341, - 21341, 21341, 21341, 21341, 21341, 21341, 21341, 21341, - 21341, 21341, 21341, 21341, 21341, 21341, 21341, 21341, - 21347, 21347, 21347, 21347, 21347, 21347, 21377, 21377, - 21377, 21377, 21377, 21377, 21377, 21377, 21377, 21377, - 21377, 21377, 21377, 21377, 21377, 21377, 21377, 21377, - 21377, 21377, 21377, 21377, 21377, 21377, 21377, 21377, - 21377, 21377, 21377, 21377, 21379, 21379, 21383, 21383, - 21383, 21383, 21391, 21391, 21391, 21391, 21391, 21391, - 21391, 21391, 21397, 21397, 21397, 21397, 21397, 21397, - 21401, 21401, 21401, 21401, 21407, 21407, 21407, 21407, - 21407, 21407, 21419, 21419, 21419, 21419, 21419, 21419, - 21419, 21419, 21419, 21419, 21419, 21419, 21433, 21433, - 21433, 21433, 21433, 21433, 21433, 21433, 21433, 21433, - 21433, 21433, 21433, 21433, 21467, 21467, 21467, 21467, - 21467, 21467, 21467, 21467, 21467, 21467, 21467, 21467, - 21467, 21467, 21467, 21467, 21467, 21467, 21467, 21467, - 21467, 21467, 21467, 21467, 21467, 21467, 21467, 21467, - 21467, 21467, 21467, 21467, 21467, 21467, 21481, 21481, - 21481, 21481, 21481, 21481, 21481, 21481, 21481, 21481, - 21481, 21481, 21481, 21481, 21487, 21487, 21487, 21487, - 21487, 21487, 21491, 21491, 21491, 21491, 21493, 21493, - 21499, 21499, 21499, 21499, 21499, 21499, 21503, 21503, - 21503, 21503, 21517, 21517, 21517, 21517, 21517, 21517, - 21517, 21517, 21517, 21517, 21517, 21517, 21517, 21517, - 21521, 21521, 21521, 21521, 21523, 21523, 21529, 21529, - 21529, 21529, 21529, 21529, 21557, 21557, 21557, 21557, - 21557, 21557, 21557, 21557, 21557, 21557, 21557, 21557, - 21557, 21557, 21557, 21557, 21557, 21557, 21557, 21557, - 21557, 21557, 21557, 21557, 21557, 21557, 21557, 21557, - 21559, 21559, 21563, 21563, 21563, 21563, 21569, 21569, - 21569, 21569, 21569, 21569, 21577, 21577, 21577, 21577, - 21577, 21577, 21577, 21577, 21587, 21587, 21587, 21587, - 21587, 21587, 21587, 21587, 21587, 21587, 21589, 21589, - 21599, 21599, 21599, 21599, 21599, 21599, 21599, 21599, - 21599, 21599, 21601, 21601, 21611, 21611, 21611, 21611, - 21611, 21611, 21611, 21611, 21611, 21611, 21613, 21613, - 21617, 21617, 21617, 21617, 21647, 21647, 21647, 21647, - 21647, 21647, 21647, 21647, 21647, 21647, 21647, 21647, - 21647, 21647, 21647, 21647, 21647, 21647, 21647, 21647, - 21647, 21647, 21647, 21647, 21647, 21647, 21647, 21647, - 21647, 21647, 21649, 21649, 21661, 21661, 21661, 21661, - 21661, 21661, 21661, 21661, 21661, 21661, 21661, 21661, - 21673, 21673, 21673, 21673, 21673, 21673, 21673, 21673, - 21673, 21673, 21673, 21673, 21683, 21683, 21683, 21683, - 21683, 21683, 21683, 21683, 21683, 21683, 21701, 21701, - 21701, 21701, 21701, 21701, 21701, 21701, 21701, 21701, - 21701, 21701, 21701, 21701, 21701, 21701, 21701, 21701, - 21713, 21713, 21713, 21713, 21713, 21713, 21713, 21713, - 21713, 21713, 21713, 21713, 21727, 21727, 21727, 21727, - 21727, 21727, 21727, 21727, 21727, 21727, 21727, 21727, - 21727, 21727, 21737, 21737, 21737, 21737, 21737, 21737, - 21737, 21737, 21737, 21737, 21739, 21739, 21751, 21751, - 21751, 21751, 21751, 21751, 21751, 21751, 21751, 21751, - 21751, 21751, 21757, 21757, 21757, 21757, 21757, 21757, - 21767, 21767, 21767, 21767, 21767, 21767, 21767, 21767, - 21767, 21767, 21773, 21773, 21773, 21773, 21773, 21773, - 21787, 21787, 21787, 21787, 21787, 21787, 21787, 21787, - 21787, 21787, 21787, 21787, 21787, 21787, 21799, 21799, - 21799, 21799, 21799, 21799, 21799, 21799, 21799, 21799, - 21799, 21799, 21803, 21803, 21803, 21803, 21817, 21817, - 21817, 21817, 21817, 21817, 21817, 21817, 21817, 21817, - 21817, 21817, 21817, 21817, 21821, 21821, 21821, 21821, - 21839, 21839, 21839, 21839, 21839, 21839, 21839, 21839, - 21839, 21839, 21839, 21839, 21839, 21839, 21839, 21839, - 21839, 21839, 21841, 21841, 21851, 21851, 21851, 21851, - 21851, 21851, 21851, 21851, 21851, 21851, 21859, 21859, - 21859, 21859, 21859, 21859, 21859, 21859, 21863, 21863, - 21863, 21863, 21871, 21871, 21871, 21871, 21871, 21871, - 21871, 21871, 21881, 21881, 21881, 21881, 21881, 21881, - 21881, 21881, 21881, 21881, 21893, 21893, 21893, 21893, - 21893, 21893, 21893, 21893, 21893, 21893, 21893, 21893, - 21911, 21911, 21911, 21911, 21911, 21911, 21911, 21911, - 21911, 21911, 21911, 21911, 21911, 21911, 21911, 21911, - 21911, 21911, 21929, 21929, 21929, 21929, 21929, 21929, - 21929, 21929, 21929, 21929, 21929, 21929, 21929, 21929, - 21929, 21929, 21929, 21929, 21937, 21937, 21937, 21937, - 21937, 21937, 21937, 21937, 21943, 21943, 21943, 21943, - 21943, 21943, 21961, 21961, 21961, 21961, 21961, 21961, - 21961, 21961, 21961, 21961, 21961, 21961, 21961, 21961, - 21961, 21961, 21961, 21961, 21977, 21977, 21977, 21977, - 21977, 21977, 21977, 21977, 21977, 21977, 21977, 21977, - 21977, 21977, 21977, 21977, 21991, 21991, 21991, 21991, - 21991, 21991, 21991, 21991, 21991, 21991, 21991, 21991, - 21991, 21991, 21997, 21997, 21997, 21997, 21997, 21997, - 22003, 22003, 22003, 22003, 22003, 22003, 22013, 22013, - 22013, 22013, 22013, 22013, 22013, 22013, 22013, 22013, - 22027, 22027, 22027, 22027, 22027, 22027, 22027, 22027, - 22027, 22027, 22027, 22027, 22027, 22027, 22031, 22031, - 22031, 22031, 22037, 22037, 22037, 22037, 22037, 22037, - 22039, 22039, 22051, 22051, 22051, 22051, 22051, 22051, - 22051, 22051, 22051, 22051, 22051, 22051, 22063, 22063, - 22063, 22063, 22063, 22063, 22063, 22063, 22063, 22063, - 22063, 22063, 22067, 22067, 22067, 22067, 22073, 22073, - 22073, 22073, 22073, 22073, 22079, 22079, 22079, 22079, - 22079, 22079, 22091, 22091, 22091, 22091, 22091, 22091, - 22091, 22091, 22091, 22091, 22091, 22091, 22093, 22093, - 22109, 22109, 22109, 22109, 22109, 22109, 22109, 22109, - 22109, 22109, 22109, 22109, 22109, 22109, 22109, 22109, - 22111, 22111, 22123, 22123, 22123, 22123, 22123, 22123, - 22123, 22123, 22123, 22123, 22123, 22123, 22129, 22129, - 22129, 22129, 22129, 22129, 22133, 22133, 22133, 22133, - 22147, 22147, 22147, 22147, 22147, 22147, 22147, 22147, - 22147, 22147, 22147, 22147, 22147, 22147, 22153, 22153, - 22153, 22153, 22153, 22153, 22157, 22157, 22157, 22157, - 22159, 22159, 22171, 22171, 22171, 22171, 22171, 22171, - 22171, 22171, 22171, 22171, 22171, 22171, 22189, 22189, - 22189, 22189, 22189, 22189, 22189, 22189, 22189, 22189, - 22189, 22189, 22189, 22189, 22189, 22189, 22189, 22189, - 22193, 22193, 22193, 22193, 22229, 22229, 22229, 22229, - 22229, 22229, 22229, 22229, 22229, 22229, 22229, 22229, - 22229, 22229, 22229, 22229, 22229, 22229, 22229, 22229, - 22229, 22229, 22229, 22229, 22229, 22229, 22229, 22229, - 22229, 22229, 22229, 22229, 22229, 22229, 22229, 22229, - 22247, 22247, 22247, 22247, 22247, 22247, 22247, 22247, - 22247, 22247, 22247, 22247, 22247, 22247, 22247, 22247, - 22247, 22247, 22259, 22259, 22259, 22259, 22259, 22259, - 22259, 22259, 22259, 22259, 22259, 22259, 22271, 22271, - 22271, 22271, 22271, 22271, 22271, 22271, 22271, 22271, - 22271, 22271, 22273, 22273, 22277, 22277, 22277, 22277, - 22279, 22279, 22283, 22283, 22283, 22283, 22291, 22291, - 22291, 22291, 22291, 22291, 22291, 22291, 22303, 22303, - 22303, 22303, 22303, 22303, 22303, 22303, 22303, 22303, - 22303, 22303, 22307, 22307, 22307, 22307, 22343, 22343, - 22343, 22343, 22343, 22343, 22343, 22343, 22343, 22343, - 22343, 22343, 22343, 22343, 22343, 22343, 22343, 22343, - 22343, 22343, 22343, 22343, 22343, 22343, 22343, 22343, - 22343, 22343, 22343, 22343, 22343, 22343, 22343, 22343, - 22343, 22343, 22349, 22349, 22349, 22349, 22349, 22349, - 22367, 22367, 22367, 22367, 22367, 22367, 22367, 22367, - 22367, 22367, 22367, 22367, 22367, 22367, 22367, 22367, - 22367, 22367, 22369, 22369, 22381, 22381, 22381, 22381, - 22381, 22381, 22381, 22381, 22381, 22381, 22381, 22381, - 22391, 22391, 22391, 22391, 22391, 22391, 22391, 22391, - 22391, 22391, 22397, 22397, 22397, 22397, 22397, 22397, - 22409, 22409, 22409, 22409, 22409, 22409, 22409, 22409, - 22409, 22409, 22409, 22409, 22433, 22433, 22433, 22433, - 22433, 22433, 22433, 22433, 22433, 22433, 22433, 22433, - 22433, 22433, 22433, 22433, 22433, 22433, 22433, 22433, - 22433, 22433, 22433, 22433, 22441, 22441, 22441, 22441, - 22441, 22441, 22441, 22441, 22447, 22447, 22447, 22447, - 22447, 22447, 22453, 22453, 22453, 22453, 22453, 22453, - 22469, 22469, 22469, 22469, 22469, 22469, 22469, 22469, - 22469, 22469, 22469, 22469, 22469, 22469, 22469, 22469, - 22481, 22481, 22481, 22481, 22481, 22481, 22481, 22481, - 22481, 22481, 22481, 22481, 22483, 22483, 22501, 22501, - 22501, 22501, 22501, 22501, 22501, 22501, 22501, 22501, - 22501, 22501, 22501, 22501, 22501, 22501, 22501, 22501, - 22511, 22511, 22511, 22511, 22511, 22511, 22511, 22511, - 22511, 22511, 22531, 22531, 22531, 22531, 22531, 22531, - 22531, 22531, 22531, 22531, 22531, 22531, 22531, 22531, - 22531, 22531, 22531, 22531, 22531, 22531, 22541, 22541, - 22541, 22541, 22541, 22541, 22541, 22541, 22541, 22541, - 22543, 22543, 22549, 22549, 22549, 22549, 22549, 22549, - 22567, 22567, 22567, 22567, 22567, 22567, 22567, 22567, - 22567, 22567, 22567, 22567, 22567, 22567, 22567, 22567, - 22567, 22567, 22571, 22571, 22571, 22571, 22573, 22573, - 22613, 22613, 22613, 22613, 22613, 22613, 22613, 22613, - 22613, 22613, 22613, 22613, 22613, 22613, 22613, 22613, - 22613, 22613, 22613, 22613, 22613, 22613, 22613, 22613, - 22613, 22613, 22613, 22613, 22613, 22613, 22613, 22613, - 22613, 22613, 22613, 22613, 22613, 22613, 22613, 22613, - 22619, 22619, 22619, 22619, 22619, 22619, 22621, 22621, - 22637, 22637, 22637, 22637, 22637, 22637, 22637, 22637, - 22637, 22637, 22637, 22637, 22637, 22637, 22637, 22637, - 22639, 22639, 22643, 22643, 22643, 22643, 22651, 22651, - 22651, 22651, 22651, 22651, 22651, 22651, 22669, 22669, - 22669, 22669, 22669, 22669, 22669, 22669, 22669, 22669, - 22669, 22669, 22669, 22669, 22669, 22669, 22669, 22669, - 22679, 22679, 22679, 22679, 22679, 22679, 22679, 22679, - 22679, 22679, 22691, 22691, 22691, 22691, 22691, 22691, - 22691, 22691, 22691, 22691, 22691, 22691, 22697, 22697, - 22697, 22697, 22697, 22697, 22699, 22699, 22709, 22709, - 22709, 22709, 22709, 22709, 22709, 22709, 22709, 22709, - 22717, 22717, 22717, 22717, 22717, 22717, 22717, 22717, - 22721, 22721, 22721, 22721, 22727, 22727, 22727, 22727, - 22727, 22727, 22739, 22739, 22739, 22739, 22739, 22739, - 22739, 22739, 22739, 22739, 22739, 22739, 22741, 22741, - 22751, 22751, 22751, 22751, 22751, 22751, 22751, 22751, - 22751, 22751, 22769, 22769, 22769, 22769, 22769, 22769, - 22769, 22769, 22769, 22769, 22769, 22769, 22769, 22769, - 22769, 22769, 22769, 22769, 22777, 22777, 22777, 22777, - 22777, 22777, 22777, 22777, 22783, 22783, 22783, 22783, - 22783, 22783, 22787, 22787, 22787, 22787, 22807, 22807, - 22807, 22807, 22807, 22807, 22807, 22807, 22807, 22807, - 22807, 22807, 22807, 22807, 22807, 22807, 22807, 22807, - 22807, 22807, 22811, 22811, 22811, 22811, 22817, 22817, - 22817, 22817, 22817, 22817, 22853, 22853, 22853, 22853, - 22853, 22853, 22853, 22853, 22853, 22853, 22853, 22853, - 22853, 22853, 22853, 22853, 22853, 22853, 22853, 22853, - 22853, 22853, 22853, 22853, 22853, 22853, 22853, 22853, - 22853, 22853, 22853, 22853, 22853, 22853, 22853, 22853, - 22859, 22859, 22859, 22859, 22859, 22859, 22861, 22861, - 22871, 22871, 22871, 22871, 22871, 22871, 22871, 22871, - 22871, 22871, 22877, 22877, 22877, 22877, 22877, 22877, - 22901, 22901, 22901, 22901, 22901, 22901, 22901, 22901, - 22901, 22901, 22901, 22901, 22901, 22901, 22901, 22901, - 22901, 22901, 22901, 22901, 22901, 22901, 22901, 22901, - 22907, 22907, 22907, 22907, 22907, 22907, 22921, 22921, - 22921, 22921, 22921, 22921, 22921, 22921, 22921, 22921, - 22921, 22921, 22921, 22921, 22937, 22937, 22937, 22937, - 22937, 22937, 22937, 22937, 22937, 22937, 22937, 22937, - 22937, 22937, 22937, 22937, 22943, 22943, 22943, 22943, - 22943, 22943, 22961, 22961, 22961, 22961, 22961, 22961, - 22961, 22961, 22961, 22961, 22961, 22961, 22961, 22961, - 22961, 22961, 22961, 22961, 22963, 22963, 22973, 22973, - 22973, 22973, 22973, 22973, 22973, 22973, 22973, 22973, - 22993, 22993, 22993, 22993, 22993, 22993, 22993, 22993, - 22993, 22993, 22993, 22993, 22993, 22993, 22993, 22993, - 22993, 22993, 22993, 22993, 23003, 23003, 23003, 23003, - 23003, 23003, 23003, 23003, 23003, 23003, 23011, 23011, - 23011, 23011, 23011, 23011, 23011, 23011, 23017, 23017, - 23017, 23017, 23017, 23017, 23021, 23021, 23021, 23021, - 23027, 23027, 23027, 23027, 23027, 23027, 23029, 23029, - 23039, 23039, 23039, 23039, 23039, 23039, 23039, 23039, - 23039, 23039, 23041, 23041, 23053, 23053, 23053, 23053, - 23053, 23053, 23053, 23053, 23053, 23053, 23053, 23053, - 23057, 23057, 23057, 23057, 23059, 23059, 23063, 23063, - 23063, 23063, 23071, 23071, 23071, 23071, 23071, 23071, - 23071, 23071, 23081, 23081, 23081, 23081, 23081, 23081, - 23081, 23081, 23081, 23081, 23087, 23087, 23087, 23087, - 23087, 23087, 23099, 23099, 23099, 23099, 23099, 23099, - 23099, 23099, 23099, 23099, 23099, 23099, 23117, 23117, - 23117, 23117, 23117, 23117, 23117, 23117, 23117, 23117, - 23117, 23117, 23117, 23117, 23117, 23117, 23117, 23117, - 23131, 23131, 23131, 23131, 23131, 23131, 23131, 23131, - 23131, 23131, 23131, 23131, 23131, 23131, 23143, 23143, - 23143, 23143, 23143, 23143, 23143, 23143, 23143, 23143, - 23143, 23143, 23159, 23159, 23159, 23159, 23159, 23159, - 23159, 23159, 23159, 23159, 23159, 23159, 23159, 23159, - 23159, 23159, 23167, 23167, 23167, 23167, 23167, 23167, - 23167, 23167, 23173, 23173, 23173, 23173, 23173, 23173, - 23189, 23189, 23189, 23189, 23189, 23189, 23189, 23189, - 23189, 23189, 23189, 23189, 23189, 23189, 23189, 23189, - 23197, 23197, 23197, 23197, 23197, 23197, 23197, 23197, - 23201, 23201, 23201, 23201, 23203, 23203, 23209, 23209, - 23209, 23209, 23209, 23209, 23227, 23227, 23227, 23227, - 23227, 23227, 23227, 23227, 23227, 23227, 23227, 23227, - 23227, 23227, 23227, 23227, 23227, 23227, 23251, 23251, - 23251, 23251, 23251, 23251, 23251, 23251, 23251, 23251, - 23251, 23251, 23251, 23251, 23251, 23251, 23251, 23251, - 23251, 23251, 23251, 23251, 23251, 23251, 23269, 23269, - 23269, 23269, 23269, 23269, 23269, 23269, 23269, 23269, - 23269, 23269, 23269, 23269, 23269, 23269, 23269, 23269, - 23279, 23279, 23279, 23279, 23279, 23279, 23279, 23279, - 23279, 23279, 23291, 23291, 23291, 23291, 23291, 23291, - 23291, 23291, 23291, 23291, 23291, 23291, 23293, 23293, - 23297, 23297, 23297, 23297, 23311, 23311, 23311, 23311, - 23311, 23311, 23311, 23311, 23311, 23311, 23311, 23311, - 23311, 23311, 23321, 23321, 23321, 23321, 23321, 23321, - 23321, 23321, 23321, 23321, 23327, 23327, 23327, 23327, - 23327, 23327, 23333, 23333, 23333, 23333, 23333, 23333, - 23339, 23339, 23339, 23339, 23339, 23339, 23357, 23357, - 23357, 23357, 23357, 23357, 23357, 23357, 23357, 23357, - 23357, 23357, 23357, 23357, 23357, 23357, 23357, 23357, - 23369, 23369, 23369, 23369, 23369, 23369, 23369, 23369, - 23369, 23369, 23369, 23369, 23371, 23371, 23399, 23399, - 23399, 23399, 23399, 23399, 23399, 23399, 23399, 23399, - 23399, 23399, 23399, 23399, 23399, 23399, 23399, 23399, - 23399, 23399, 23399, 23399, 23399, 23399, 23399, 23399, - 23399, 23399, 23417, 23417, 23417, 23417, 23417, 23417, - 23417, 23417, 23417, 23417, 23417, 23417, 23417, 23417, - 23417, 23417, 23417, 23417, 23431, 23431, 23431, 23431, - 23431, 23431, 23431, 23431, 23431, 23431, 23431, 23431, - 23431, 23431, 23447, 23447, 23447, 23447, 23447, 23447, - 23447, 23447, 23447, 23447, 23447, 23447, 23447, 23447, - 23447, 23447, 23459, 23459, 23459, 23459, 23459, 23459, - 23459, 23459, 23459, 23459, 23459, 23459, 23473, 23473, - 23473, 23473, 23473, 23473, 23473, 23473, 23473, 23473, - 23473, 23473, 23473, 23473, 23497, 23497, 23497, 23497, - 23497, 23497, 23497, 23497, 23497, 23497, 23497, 23497, - 23497, 23497, 23497, 23497, 23497, 23497, 23497, 23497, - 23497, 23497, 23497, 23497, 23509, 23509, 23509, 23509, - 23509, 23509, 23509, 23509, 23509, 23509, 23509, 23509, - 23531, 23531, 23531, 23531, 23531, 23531, 23531, 23531, - 23531, 23531, 23531, 23531, 23531, 23531, 23531, 23531, - 23531, 23531, 23531, 23531, 23531, 23531, 23537, 23537, - 23537, 23537, 23537, 23537, 23539, 23539, 23549, 23549, - 23549, 23549, 23549, 23549, 23549, 23549, 23549, 23549, - 23557, 23557, 23557, 23557, 23557, 23557, 23557, 23557, - 23561, 23561, 23561, 23561, 23563, 23563, 23567, 23567, - 23567, 23567, 23581, 23581, 23581, 23581, 23581, 23581, - 23581, 23581, 23581, 23581, 23581, 23581, 23581, 23581, - 23593, 23593, 23593, 23593, 23593, 23593, 23593, 23593, - 23593, 23593, 23593, 23593, 23599, 23599, 23599, 23599, - 23599, 23599, 23603, 23603, 23603, 23603, 23609, 23609, - 23609, 23609, 23609, 23609, 23623, 23623, 23623, 23623, - 23623, 23623, 23623, 23623, 23623, 23623, 23623, 23623, - 23623, 23623, 23627, 23627, 23627, 23627, 23629, 23629, - 23633, 23633, 23633, 23633, 23663, 23663, 23663, 23663, - 23663, 23663, 23663, 23663, 23663, 23663, 23663, 23663, - 23663, 23663, 23663, 23663, 23663, 23663, 23663, 23663, - 23663, 23663, 23663, 23663, 23663, 23663, 23663, 23663, - 23663, 23663, 23669, 23669, 23669, 23669, 23669, 23669, - 23671, 23671, 23677, 23677, 23677, 23677, 23677, 23677, - 23687, 23687, 23687, 23687, 23687, 23687, 23687, 23687, - 23687, 23687, 23689, 23689, 23719, 23719, 23719, 23719, - 23719, 23719, 23719, 23719, 23719, 23719, 23719, 23719, - 23719, 23719, 23719, 23719, 23719, 23719, 23719, 23719, - 23719, 23719, 23719, 23719, 23719, 23719, 23719, 23719, - 23719, 23719, 23741, 23741, 23741, 23741, 23741, 23741, - 23741, 23741, 23741, 23741, 23741, 23741, 23741, 23741, - 23741, 23741, 23741, 23741, 23741, 23741, 23741, 23741, - 23743, 23743, 23747, 23747, 23747, 23747, 23753, 23753, - 23753, 23753, 23753, 23753, 23761, 23761, 23761, 23761, - 23761, 23761, 23761, 23761, 23767, 23767, 23767, 23767, - 23767, 23767, 23773, 23773, 23773, 23773, 23773, 23773, - 23789, 23789, 23789, 23789, 23789, 23789, 23789, 23789, - 23789, 23789, 23789, 23789, 23789, 23789, 23789, 23789, - 23801, 23801, 23801, 23801, 23801, 23801, 23801, 23801, - 23801, 23801, 23801, 23801, 23813, 23813, 23813, 23813, - 23813, 23813, 23813, 23813, 23813, 23813, 23813, 23813, - 23819, 23819, 23819, 23819, 23819, 23819, 23827, 23827, - 23827, 23827, 23827, 23827, 23827, 23827, 23831, 23831, - 23831, 23831, 23833, 23833, 23857, 23857, 23857, 23857, - 23857, 23857, 23857, 23857, 23857, 23857, 23857, 23857, - 23857, 23857, 23857, 23857, 23857, 23857, 23857, 23857, - 23857, 23857, 23857, 23857, 23869, 23869, 23869, 23869, - 23869, 23869, 23869, 23869, 23869, 23869, 23869, 23869, - 23873, 23873, 23873, 23873, 23879, 23879, 23879, 23879, - 23879, 23879, 23887, 23887, 23887, 23887, 23887, 23887, - 23887, 23887, 23893, 23893, 23893, 23893, 23893, 23893, - 23899, 23899, 23899, 23899, 23899, 23899, 23909, 23909, - 23909, 23909, 23909, 23909, 23909, 23909, 23909, 23909, - 23911, 23911, 23917, 23917, 23917, 23917, 23917, 23917, - 23929, 23929, 23929, 23929, 23929, 23929, 23929, 23929, - 23929, 23929, 23929, 23929, 23957, 23957, 23957, 23957, - 23957, 23957, 23957, 23957, 23957, 23957, 23957, 23957, - 23957, 23957, 23957, 23957, 23957, 23957, 23957, 23957, - 23957, 23957, 23957, 23957, 23957, 23957, 23957, 23957, - 23971, 23971, 23971, 23971, 23971, 23971, 23971, 23971, - 23971, 23971, 23971, 23971, 23971, 23971, 23977, 23977, - 23977, 23977, 23977, 23977, 23981, 23981, 23981, 23981, - 23993, 23993, 23993, 23993, 23993, 23993, 23993, 23993, - 23993, 23993, 23993, 23993, 24001, 24001, 24001, 24001, - 24001, 24001, 24001, 24001, 24007, 24007, 24007, 24007, - 24007, 24007, 24019, 24019, 24019, 24019, 24019, 24019, - 24019, 24019, 24019, 24019, 24019, 24019, 24023, 24023, - 24023, 24023, 24029, 24029, 24029, 24029, 24029, 24029, - 24043, 24043, 24043, 24043, 24043, 24043, 24043, 24043, - 24043, 24043, 24043, 24043, 24043, 24043, 24049, 24049, - 24049, 24049, 24049, 24049, 24061, 24061, 24061, 24061, - 24061, 24061, 24061, 24061, 24061, 24061, 24061, 24061, - 24071, 24071, 24071, 24071, 24071, 24071, 24071, 24071, - 24071, 24071, 24077, 24077, 24077, 24077, 24077, 24077, - 24083, 24083, 24083, 24083, 24083, 24083, 24091, 24091, - 24091, 24091, 24091, 24091, 24091, 24091, 24097, 24097, - 24097, 24097, 24097, 24097, 24103, 24103, 24103, 24103, - 24103, 24103, 24107, 24107, 24107, 24107, 24109, 24109, - 24113, 24113, 24113, 24113, 24121, 24121, 24121, 24121, - 24121, 24121, 24121, 24121, 24133, 24133, 24133, 24133, - 24133, 24133, 24133, 24133, 24133, 24133, 24133, 24133, - 24137, 24137, 24137, 24137, 24151, 24151, 24151, 24151, - 24151, 24151, 24151, 24151, 24151, 24151, 24151, 24151, - 24151, 24151, 24169, 24169, 24169, 24169, 24169, 24169, - 24169, 24169, 24169, 24169, 24169, 24169, 24169, 24169, - 24169, 24169, 24169, 24169, 24179, 24179, 24179, 24179, - 24179, 24179, 24179, 24179, 24179, 24179, 24181, 24181, - 24197, 24197, 24197, 24197, 24197, 24197, 24197, 24197, - 24197, 24197, 24197, 24197, 24197, 24197, 24197, 24197, - 24203, 24203, 24203, 24203, 24203, 24203, 24223, 24223, - 24223, 24223, 24223, 24223, 24223, 24223, 24223, 24223, - 24223, 24223, 24223, 24223, 24223, 24223, 24223, 24223, - 24223, 24223, 24229, 24229, 24229, 24229, 24229, 24229, - 24239, 24239, 24239, 24239, 24239, 24239, 24239, 24239, - 24239, 24239, 24247, 24247, 24247, 24247, 24247, 24247, - 24247, 24247, 24251, 24251, 24251, 24251, 24281, 24281, - 24281, 24281, 24281, 24281, 24281, 24281, 24281, 24281, - 24281, 24281, 24281, 24281, 24281, 24281, 24281, 24281, - 24281, 24281, 24281, 24281, 24281, 24281, 24281, 24281, - 24281, 24281, 24281, 24281, 24317, 24317, 24317, 24317, - 24317, 24317, 24317, 24317, 24317, 24317, 24317, 24317, - 24317, 24317, 24317, 24317, 24317, 24317, 24317, 24317, - 24317, 24317, 24317, 24317, 24317, 24317, 24317, 24317, - 24317, 24317, 24317, 24317, 24317, 24317, 24317, 24317, - 24329, 24329, 24329, 24329, 24329, 24329, 24329, 24329, - 24329, 24329, 24329, 24329, 24337, 24337, 24337, 24337, - 24337, 24337, 24337, 24337, 24359, 24359, 24359, 24359, - 24359, 24359, 24359, 24359, 24359, 24359, 24359, 24359, - 24359, 24359, 24359, 24359, 24359, 24359, 24359, 24359, - 24359, 24359, 24371, 24371, 24371, 24371, 24371, 24371, - 24371, 24371, 24371, 24371, 24371, 24371, 24373, 24373, - 24379, 24379, 24379, 24379, 24379, 24379, 24391, 24391, - 24391, 24391, 24391, 24391, 24391, 24391, 24391, 24391, - 24391, 24391, 24407, 24407, 24407, 24407, 24407, 24407, - 24407, 24407, 24407, 24407, 24407, 24407, 24407, 24407, - 24407, 24407, 24413, 24413, 24413, 24413, 24413, 24413, - 24419, 24419, 24419, 24419, 24419, 24419, 24421, 24421, - 24439, 24439, 24439, 24439, 24439, 24439, 24439, 24439, - 24439, 24439, 24439, 24439, 24439, 24439, 24439, 24439, - 24439, 24439, 24443, 24443, 24443, 24443, 24469, 24469, - 24469, 24469, 24469, 24469, 24469, 24469, 24469, 24469, - 24469, 24469, 24469, 24469, 24469, 24469, 24469, 24469, - 24469, 24469, 24469, 24469, 24469, 24469, 24469, 24469, - 24473, 24473, 24473, 24473, 24481, 24481, 24481, 24481, - 24481, 24481, 24481, 24481, 24499, 24499, 24499, 24499, - 24499, 24499, 24499, 24499, 24499, 24499, 24499, 24499, - 24499, 24499, 24499, 24499, 24499, 24499, 24509, 24509, - 24509, 24509, 24509, 24509, 24509, 24509, 24509, 24509, - 24517, 24517, 24517, 24517, 24517, 24517, 24517, 24517, - 24527, 24527, 24527, 24527, 24527, 24527, 24527, 24527, - 24527, 24527, 24533, 24533, 24533, 24533, 24533, 24533, - 24547, 24547, 24547, 24547, 24547, 24547, 24547, 24547, - 24547, 24547, 24547, 24547, 24547, 24547, 24551, 24551, - 24551, 24551, 24571, 24571, 24571, 24571, 24571, 24571, - 24571, 24571, 24571, 24571, 24571, 24571, 24571, 24571, - 24571, 24571, 24571, 24571, 24571, 24571, 24593, 24593, - 24593, 24593, 24593, 24593, 24593, 24593, 24593, 24593, - 24593, 24593, 24593, 24593, 24593, 24593, 24593, 24593, - 24593, 24593, 24593, 24593, 24611, 24611, 24611, 24611, - 24611, 24611, 24611, 24611, 24611, 24611, 24611, 24611, - 24611, 24611, 24611, 24611, 24611, 24611, 24623, 24623, - 24623, 24623, 24623, 24623, 24623, 24623, 24623, 24623, - 24623, 24623, 24631, 24631, 24631, 24631, 24631, 24631, - 24631, 24631, 24659, 24659, 24659, 24659, 24659, 24659, - 24659, 24659, 24659, 24659, 24659, 24659, 24659, 24659, - 24659, 24659, 24659, 24659, 24659, 24659, 24659, 24659, - 24659, 24659, 24659, 24659, 24659, 24659, 24671, 24671, - 24671, 24671, 24671, 24671, 24671, 24671, 24671, 24671, - 24671, 24671, 24677, 24677, 24677, 24677, 24677, 24677, - 24683, 24683, 24683, 24683, 24683, 24683, 24691, 24691, - 24691, 24691, 24691, 24691, 24691, 24691, 24697, 24697, - 24697, 24697, 24697, 24697, 24709, 24709, 24709, 24709, - 24709, 24709, 24709, 24709, 24709, 24709, 24709, 24709, - 24733, 24733, 24733, 24733, 24733, 24733, 24733, 24733, - 24733, 24733, 24733, 24733, 24733, 24733, 24733, 24733, - 24733, 24733, 24733, 24733, 24733, 24733, 24733, 24733, - 24749, 24749, 24749, 24749, 24749, 24749, 24749, 24749, - 24749, 24749, 24749, 24749, 24749, 24749, 24749, 24749, - 24763, 24763, 24763, 24763, 24763, 24763, 24763, 24763, - 24763, 24763, 24763, 24763, 24763, 24763, 24767, 24767, - 24767, 24767, 24781, 24781, 24781, 24781, 24781, 24781, - 24781, 24781, 24781, 24781, 24781, 24781, 24781, 24781, - 24793, 24793, 24793, 24793, 24793, 24793, 24793, 24793, - 24793, 24793, 24793, 24793, 24799, 24799, 24799, 24799, - 24799, 24799, 24809, 24809, 24809, 24809, 24809, 24809, - 24809, 24809, 24809, 24809, 24821, 24821, 24821, 24821, - 24821, 24821, 24821, 24821, 24821, 24821, 24821, 24821, - 24841, 24841, 24841, 24841, 24841, 24841, 24841, 24841, - 24841, 24841, 24841, 24841, 24841, 24841, 24841, 24841, - 24841, 24841, 24841, 24841, 24847, 24847, 24847, 24847, - 24847, 24847, 24851, 24851, 24851, 24851, 24859, 24859, - 24859, 24859, 24859, 24859, 24859, 24859, 24877, 24877, - 24877, 24877, 24877, 24877, 24877, 24877, 24877, 24877, - 24877, 24877, 24877, 24877, 24877, 24877, 24877, 24877, - 24889, 24889, 24889, 24889, 24889, 24889, 24889, 24889, - 24889, 24889, 24889, 24889, 24907, 24907, 24907, 24907, - 24907, 24907, 24907, 24907, 24907, 24907, 24907, 24907, - 24907, 24907, 24907, 24907, 24907, 24907, 24917, 24917, - 24917, 24917, 24917, 24917, 24917, 24917, 24917, 24917, - 24919, 24919, 24923, 24923, 24923, 24923, 24943, 24943, - 24943, 24943, 24943, 24943, 24943, 24943, 24943, 24943, - 24943, 24943, 24943, 24943, 24943, 24943, 24943, 24943, - 24943, 24943, 24953, 24953, 24953, 24953, 24953, 24953, - 24953, 24953, 24953, 24953, 24967, 24967, 24967, 24967, - 24967, 24967, 24967, 24967, 24967, 24967, 24967, 24967, - 24967, 24967, 24971, 24971, 24971, 24971, 24977, 24977, - 24977, 24977, 24977, 24977, 24979, 24979, 24989, 24989, - 24989, 24989, 24989, 24989, 24989, 24989, 24989, 24989, - 25013, 25013, 25013, 25013, 25013, 25013, 25013, 25013, - 25013, 25013, 25013, 25013, 25013, 25013, 25013, 25013, - 25013, 25013, 25013, 25013, 25013, 25013, 25013, 25013, - 25031, 25031, 25031, 25031, 25031, 25031, 25031, 25031, - 25031, 25031, 25031, 25031, 25031, 25031, 25031, 25031, - 25031, 25031, 25033, 25033, 25037, 25037, 25037, 25037, - 25057, 25057, 25057, 25057, 25057, 25057, 25057, 25057, - 25057, 25057, 25057, 25057, 25057, 25057, 25057, 25057, - 25057, 25057, 25057, 25057, 25073, 25073, 25073, 25073, - 25073, 25073, 25073, 25073, 25073, 25073, 25073, 25073, - 25073, 25073, 25073, 25073, 25087, 25087, 25087, 25087, - 25087, 25087, 25087, 25087, 25087, 25087, 25087, 25087, - 25087, 25087, 25097, 25097, 25097, 25097, 25097, 25097, - 25097, 25097, 25097, 25097, 25111, 25111, 25111, 25111, - 25111, 25111, 25111, 25111, 25111, 25111, 25111, 25111, - 25111, 25111, 25117, 25117, 25117, 25117, 25117, 25117, - 25121, 25121, 25121, 25121, 25127, 25127, 25127, 25127, - 25127, 25127, 25147, 25147, 25147, 25147, 25147, 25147, - 25147, 25147, 25147, 25147, 25147, 25147, 25147, 25147, - 25147, 25147, 25147, 25147, 25147, 25147, 25153, 25153, - 25153, 25153, 25153, 25153, 25163, 25163, 25163, 25163, - 25163, 25163, 25163, 25163, 25163, 25163, 25169, 25169, - 25169, 25169, 25169, 25169, 25171, 25171, 25183, 25183, - 25183, 25183, 25183, 25183, 25183, 25183, 25183, 25183, - 25183, 25183, 25189, 25189, 25189, 25189, 25189, 25189, - 25219, 25219, 25219, 25219, 25219, 25219, 25219, 25219, - 25219, 25219, 25219, 25219, 25219, 25219, 25219, 25219, - 25219, 25219, 25219, 25219, 25219, 25219, 25219, 25219, - 25219, 25219, 25219, 25219, 25219, 25219, 25229, 25229, - 25229, 25229, 25229, 25229, 25229, 25229, 25229, 25229, - 25237, 25237, 25237, 25237, 25237, 25237, 25237, 25237, - 25243, 25243, 25243, 25243, 25243, 25243, 25247, 25247, - 25247, 25247, 25253, 25253, 25253, 25253, 25253, 25253, - 25261, 25261, 25261, 25261, 25261, 25261, 25261, 25261, - 25301, 25301, 25301, 25301, 25301, 25301, 25301, 25301, - 25301, 25301, 25301, 25301, 25301, 25301, 25301, 25301, - 25301, 25301, 25301, 25301, 25301, 25301, 25301, 25301, - 25301, 25301, 25301, 25301, 25301, 25301, 25301, 25301, - 25301, 25301, 25301, 25301, 25301, 25301, 25301, 25301, - 25303, 25303, 25307, 25307, 25307, 25307, 25309, 25309, - 25321, 25321, 25321, 25321, 25321, 25321, 25321, 25321, - 25321, 25321, 25321, 25321, 25339, 25339, 25339, 25339, - 25339, 25339, 25339, 25339, 25339, 25339, 25339, 25339, - 25339, 25339, 25339, 25339, 25339, 25339, 25343, 25343, - 25343, 25343, 25349, 25349, 25349, 25349, 25349, 25349, - 25357, 25357, 25357, 25357, 25357, 25357, 25357, 25357, - 25367, 25367, 25367, 25367, 25367, 25367, 25367, 25367, - 25367, 25367, 25373, 25373, 25373, 25373, 25373, 25373, - 25391, 25391, 25391, 25391, 25391, 25391, 25391, 25391, - 25391, 25391, 25391, 25391, 25391, 25391, 25391, 25391, - 25391, 25391, 25409, 25409, 25409, 25409, 25409, 25409, - 25409, 25409, 25409, 25409, 25409, 25409, 25409, 25409, - 25409, 25409, 25409, 25409, 25411, 25411, 25423, 25423, - 25423, 25423, 25423, 25423, 25423, 25423, 25423, 25423, - 25423, 25423, 25439, 25439, 25439, 25439, 25439, 25439, - 25439, 25439, 25439, 25439, 25439, 25439, 25439, 25439, - 25439, 25439, 25447, 25447, 25447, 25447, 25447, 25447, - 25447, 25447, 25453, 25453, 25453, 25453, 25453, 25453, - 25457, 25457, 25457, 25457, 25463, 25463, 25463, 25463, - 25463, 25463, 25469, 25469, 25469, 25469, 25469, 25469, - 25471, 25471, 25523, 25523, 25523, 25523, 25523, 25523, - 25523, 25523, 25523, 25523, 25523, 25523, 25523, 25523, - 25523, 25523, 25523, 25523, 25523, 25523, 25523, 25523, - 25523, 25523, 25523, 25523, 25523, 25523, 25523, 25523, - 25523, 25523, 25523, 25523, 25523, 25523, 25523, 25523, - 25523, 25523, 25523, 25523, 25523, 25523, 25523, 25523, - 25523, 25523, 25523, 25523, 25523, 25523, 25537, 25537, - 25537, 25537, 25537, 25537, 25537, 25537, 25537, 25537, - 25537, 25537, 25537, 25537, 25541, 25541, 25541, 25541, - 25561, 25561, 25561, 25561, 25561, 25561, 25561, 25561, - 25561, 25561, 25561, 25561, 25561, 25561, 25561, 25561, - 25561, 25561, 25561, 25561, 25577, 25577, 25577, 25577, - 25577, 25577, 25577, 25577, 25577, 25577, 25577, 25577, - 25577, 25577, 25577, 25577, 25579, 25579, 25583, 25583, - 25583, 25583, 25589, 25589, 25589, 25589, 25589, 25589, - 25601, 25601, 25601, 25601, 25601, 25601, 25601, 25601, - 25601, 25601, 25601, 25601, 25603, 25603, 25609, 25609, - 25609, 25609, 25609, 25609, 25621, 25621, 25621, 25621, - 25621, 25621, 25621, 25621, 25621, 25621, 25621, 25621, - 25633, 25633, 25633, 25633, 25633, 25633, 25633, 25633, - 25633, 25633, 25633, 25633, 25639, 25639, 25639, 25639, - 25639, 25639, 25643, 25643, 25643, 25643, 25657, 25657, - 25657, 25657, 25657, 25657, 25657, 25657, 25657, 25657, - 25657, 25657, 25657, 25657, 25667, 25667, 25667, 25667, - 25667, 25667, 25667, 25667, 25667, 25667, 25673, 25673, - 25673, 25673, 25673, 25673, 25679, 25679, 25679, 25679, - 25679, 25679, 25693, 25693, 25693, 25693, 25693, 25693, - 25693, 25693, 25693, 25693, 25693, 25693, 25693, 25693, - 25703, 25703, 25703, 25703, 25703, 25703, 25703, 25703, - 25703, 25703, 25717, 25717, 25717, 25717, 25717, 25717, - 25717, 25717, 25717, 25717, 25717, 25717, 25717, 25717, - 25733, 25733, 25733, 25733, 25733, 25733, 25733, 25733, - 25733, 25733, 25733, 25733, 25733, 25733, 25733, 25733, - 25741, 25741, 25741, 25741, 25741, 25741, 25741, 25741, - 25747, 25747, 25747, 25747, 25747, 25747, 25759, 25759, - 25759, 25759, 25759, 25759, 25759, 25759, 25759, 25759, - 25759, 25759, 25763, 25763, 25763, 25763, 25771, 25771, - 25771, 25771, 25771, 25771, 25771, 25771, 25793, 25793, - 25793, 25793, 25793, 25793, 25793, 25793, 25793, 25793, - 25793, 25793, 25793, 25793, 25793, 25793, 25793, 25793, - 25793, 25793, 25793, 25793, 25799, 25799, 25799, 25799, - 25799, 25799, 25801, 25801, 25819, 25819, 25819, 25819, - 25819, 25819, 25819, 25819, 25819, 25819, 25819, 25819, - 25819, 25819, 25819, 25819, 25819, 25819, 25841, 25841, - 25841, 25841, 25841, 25841, 25841, 25841, 25841, 25841, - 25841, 25841, 25841, 25841, 25841, 25841, 25841, 25841, - 25841, 25841, 25841, 25841, 25847, 25847, 25847, 25847, - 25847, 25847, 25849, 25849, 25867, 25867, 25867, 25867, - 25867, 25867, 25867, 25867, 25867, 25867, 25867, 25867, - 25867, 25867, 25867, 25867, 25867, 25867, 25873, 25873, - 25873, 25873, 25873, 25873, 25889, 25889, 25889, 25889, - 25889, 25889, 25889, 25889, 25889, 25889, 25889, 25889, - 25889, 25889, 25889, 25889, 25903, 25903, 25903, 25903, - 25903, 25903, 25903, 25903, 25903, 25903, 25903, 25903, - 25903, 25903, 25913, 25913, 25913, 25913, 25913, 25913, - 25913, 25913, 25913, 25913, 25919, 25919, 25919, 25919, - 25919, 25919, 25931, 25931, 25931, 25931, 25931, 25931, - 25931, 25931, 25931, 25931, 25931, 25931, 25933, 25933, - 25939, 25939, 25939, 25939, 25939, 25939, 25943, 25943, - 25943, 25943, 25951, 25951, 25951, 25951, 25951, 25951, - 25951, 25951, 25969, 25969, 25969, 25969, 25969, 25969, - 25969, 25969, 25969, 25969, 25969, 25969, 25969, 25969, - 25969, 25969, 25969, 25969, 25981, 25981, 25981, 25981, - 25981, 25981, 25981, 25981, 25981, 25981, 25981, 25981, - 25997, 25997, 25997, 25997, 25997, 25997, 25997, 25997, - 25997, 25997, 25997, 25997, 25997, 25997, 25997, 25997, - 25999, 25999, 26003, 26003, 26003, 26003, 26017, 26017, - 26017, 26017, 26017, 26017, 26017, 26017, 26017, 26017, - 26017, 26017, 26017, 26017, 26021, 26021, 26021, 26021, - 26029, 26029, 26029, 26029, 26029, 26029, 26029, 26029, - 26041, 26041, 26041, 26041, 26041, 26041, 26041, 26041, - 26041, 26041, 26041, 26041, 26053, 26053, 26053, 26053, - 26053, 26053, 26053, 26053, 26053, 26053, 26053, 26053, - 26083, 26083, 26083, 26083, 26083, 26083, 26083, 26083, - 26083, 26083, 26083, 26083, 26083, 26083, 26083, 26083, - 26083, 26083, 26083, 26083, 26083, 26083, 26083, 26083, - 26083, 26083, 26083, 26083, 26083, 26083, 26099, 26099, - 26099, 26099, 26099, 26099, 26099, 26099, 26099, 26099, - 26099, 26099, 26099, 26099, 26099, 26099, 26107, 26107, - 26107, 26107, 26107, 26107, 26107, 26107, 26111, 26111, - 26111, 26111, 26113, 26113, 26119, 26119, 26119, 26119, - 26119, 26119, 26141, 26141, 26141, 26141, 26141, 26141, - 26141, 26141, 26141, 26141, 26141, 26141, 26141, 26141, - 26141, 26141, 26141, 26141, 26141, 26141, 26141, 26141, - 26153, 26153, 26153, 26153, 26153, 26153, 26153, 26153, - 26153, 26153, 26153, 26153, 26161, 26161, 26161, 26161, - 26161, 26161, 26161, 26161, 26171, 26171, 26171, 26171, - 26171, 26171, 26171, 26171, 26171, 26171, 26177, 26177, - 26177, 26177, 26177, 26177, 26183, 26183, 26183, 26183, - 26183, 26183, 26189, 26189, 26189, 26189, 26189, 26189, - 26203, 26203, 26203, 26203, 26203, 26203, 26203, 26203, - 26203, 26203, 26203, 26203, 26203, 26203, 26209, 26209, - 26209, 26209, 26209, 26209, 26227, 26227, 26227, 26227, - 26227, 26227, 26227, 26227, 26227, 26227, 26227, 26227, - 26227, 26227, 26227, 26227, 26227, 26227, 26237, 26237, - 26237, 26237, 26237, 26237, 26237, 26237, 26237, 26237, - 26249, 26249, 26249, 26249, 26249, 26249, 26249, 26249, - 26249, 26249, 26249, 26249, 26251, 26251, 26261, 26261, - 26261, 26261, 26261, 26261, 26261, 26261, 26261, 26261, - 26263, 26263, 26267, 26267, 26267, 26267, 26293, 26293, - 26293, 26293, 26293, 26293, 26293, 26293, 26293, 26293, - 26293, 26293, 26293, 26293, 26293, 26293, 26293, 26293, - 26293, 26293, 26293, 26293, 26293, 26293, 26293, 26293, - 26297, 26297, 26297, 26297, 26309, 26309, 26309, 26309, - 26309, 26309, 26309, 26309, 26309, 26309, 26309, 26309, - 26317, 26317, 26317, 26317, 26317, 26317, 26317, 26317, - 26321, 26321, 26321, 26321, 26339, 26339, 26339, 26339, - 26339, 26339, 26339, 26339, 26339, 26339, 26339, 26339, - 26339, 26339, 26339, 26339, 26339, 26339, 26347, 26347, - 26347, 26347, 26347, 26347, 26347, 26347, 26357, 26357, - 26357, 26357, 26357, 26357, 26357, 26357, 26357, 26357, - 26371, 26371, 26371, 26371, 26371, 26371, 26371, 26371, - 26371, 26371, 26371, 26371, 26371, 26371, 26387, 26387, - 26387, 26387, 26387, 26387, 26387, 26387, 26387, 26387, - 26387, 26387, 26387, 26387, 26387, 26387, 26393, 26393, - 26393, 26393, 26393, 26393, 26399, 26399, 26399, 26399, - 26399, 26399, 26407, 26407, 26407, 26407, 26407, 26407, - 26407, 26407, 26417, 26417, 26417, 26417, 26417, 26417, - 26417, 26417, 26417, 26417, 26423, 26423, 26423, 26423, - 26423, 26423, 26431, 26431, 26431, 26431, 26431, 26431, - 26431, 26431, 26437, 26437, 26437, 26437, 26437, 26437, - 26449, 26449, 26449, 26449, 26449, 26449, 26449, 26449, - 26449, 26449, 26449, 26449, 26459, 26459, 26459, 26459, - 26459, 26459, 26459, 26459, 26459, 26459, 26479, 26479, - 26479, 26479, 26479, 26479, 26479, 26479, 26479, 26479, - 26479, 26479, 26479, 26479, 26479, 26479, 26479, 26479, - 26479, 26479, 26489, 26489, 26489, 26489, 26489, 26489, - 26489, 26489, 26489, 26489, 26497, 26497, 26497, 26497, - 26497, 26497, 26497, 26497, 26501, 26501, 26501, 26501, - 26513, 26513, 26513, 26513, 26513, 26513, 26513, 26513, - 26513, 26513, 26513, 26513, 26539, 26539, 26539, 26539, - 26539, 26539, 26539, 26539, 26539, 26539, 26539, 26539, - 26539, 26539, 26539, 26539, 26539, 26539, 26539, 26539, - 26539, 26539, 26539, 26539, 26539, 26539, 26557, 26557, - 26557, 26557, 26557, 26557, 26557, 26557, 26557, 26557, - 26557, 26557, 26557, 26557, 26557, 26557, 26557, 26557, - 26561, 26561, 26561, 26561, 26573, 26573, 26573, 26573, - 26573, 26573, 26573, 26573, 26573, 26573, 26573, 26573, - 26591, 26591, 26591, 26591, 26591, 26591, 26591, 26591, - 26591, 26591, 26591, 26591, 26591, 26591, 26591, 26591, - 26591, 26591, 26597, 26597, 26597, 26597, 26597, 26597, - 26627, 26627, 26627, 26627, 26627, 26627, 26627, 26627, - 26627, 26627, 26627, 26627, 26627, 26627, 26627, 26627, - 26627, 26627, 26627, 26627, 26627, 26627, 26627, 26627, - 26627, 26627, 26627, 26627, 26627, 26627, 26633, 26633, - 26633, 26633, 26633, 26633, 26641, 26641, 26641, 26641, - 26641, 26641, 26641, 26641, 26647, 26647, 26647, 26647, - 26647, 26647, 26669, 26669, 26669, 26669, 26669, 26669, - 26669, 26669, 26669, 26669, 26669, 26669, 26669, 26669, - 26669, 26669, 26669, 26669, 26669, 26669, 26669, 26669, - 26681, 26681, 26681, 26681, 26681, 26681, 26681, 26681, - 26681, 26681, 26681, 26681, 26683, 26683, 26687, 26687, - 26687, 26687, 26693, 26693, 26693, 26693, 26693, 26693, - 26699, 26699, 26699, 26699, 26699, 26699, 26701, 26701, - 26711, 26711, 26711, 26711, 26711, 26711, 26711, 26711, - 26711, 26711, 26713, 26713, 26717, 26717, 26717, 26717, - 26723, 26723, 26723, 26723, 26723, 26723, 26729, 26729, - 26729, 26729, 26729, 26729, 26731, 26731, 26737, 26737, - 26737, 26737, 26737, 26737, 26759, 26759, 26759, 26759, - 26759, 26759, 26759, 26759, 26759, 26759, 26759, 26759, - 26759, 26759, 26759, 26759, 26759, 26759, 26759, 26759, - 26759, 26759, 26777, 26777, 26777, 26777, 26777, 26777, - 26777, 26777, 26777, 26777, 26777, 26777, 26777, 26777, - 26777, 26777, 26777, 26777, 26783, 26783, 26783, 26783, - 26783, 26783, 26801, 26801, 26801, 26801, 26801, 26801, - 26801, 26801, 26801, 26801, 26801, 26801, 26801, 26801, - 26801, 26801, 26801, 26801, 26813, 26813, 26813, 26813, - 26813, 26813, 26813, 26813, 26813, 26813, 26813, 26813, - 26821, 26821, 26821, 26821, 26821, 26821, 26821, 26821, - 26833, 26833, 26833, 26833, 26833, 26833, 26833, 26833, - 26833, 26833, 26833, 26833, 26839, 26839, 26839, 26839, - 26839, 26839, 26849, 26849, 26849, 26849, 26849, 26849, - 26849, 26849, 26849, 26849, 26861, 26861, 26861, 26861, - 26861, 26861, 26861, 26861, 26861, 26861, 26861, 26861, - 26863, 26863, 26879, 26879, 26879, 26879, 26879, 26879, - 26879, 26879, 26879, 26879, 26879, 26879, 26879, 26879, - 26879, 26879, 26881, 26881, 26891, 26891, 26891, 26891, - 26891, 26891, 26891, 26891, 26891, 26891, 26893, 26893, - 26903, 26903, 26903, 26903, 26903, 26903, 26903, 26903, - 26903, 26903, 26921, 26921, 26921, 26921, 26921, 26921, - 26921, 26921, 26921, 26921, 26921, 26921, 26921, 26921, - 26921, 26921, 26921, 26921, 26927, 26927, 26927, 26927, - 26927, 26927, 26947, 26947, 26947, 26947, 26947, 26947, - 26947, 26947, 26947, 26947, 26947, 26947, 26947, 26947, - 26947, 26947, 26947, 26947, 26947, 26947, 26951, 26951, - 26951, 26951, 26953, 26953, 26959, 26959, 26959, 26959, - 26959, 26959, 26981, 26981, 26981, 26981, 26981, 26981, - 26981, 26981, 26981, 26981, 26981, 26981, 26981, 26981, - 26981, 26981, 26981, 26981, 26981, 26981, 26981, 26981, - 26987, 26987, 26987, 26987, 26987, 26987, 26993, 26993, - 26993, 26993, 26993, 26993, 27011, 27011, 27011, 27011, - 27011, 27011, 27011, 27011, 27011, 27011, 27011, 27011, - 27011, 27011, 27011, 27011, 27011, 27011, 27017, 27017, - 27017, 27017, 27017, 27017, 27031, 27031, 27031, 27031, - 27031, 27031, 27031, 27031, 27031, 27031, 27031, 27031, - 27031, 27031, 27043, 27043, 27043, 27043, 27043, 27043, - 27043, 27043, 27043, 27043, 27043, 27043, 27059, 27059, - 27059, 27059, 27059, 27059, 27059, 27059, 27059, 27059, - 27059, 27059, 27059, 27059, 27059, 27059, 27061, 27061, - 27067, 27067, 27067, 27067, 27067, 27067, 27073, 27073, - 27073, 27073, 27073, 27073, 27077, 27077, 27077, 27077, - 27091, 27091, 27091, 27091, 27091, 27091, 27091, 27091, - 27091, 27091, 27091, 27091, 27091, 27091, 27103, 27103, - 27103, 27103, 27103, 27103, 27103, 27103, 27103, 27103, - 27103, 27103, 27107, 27107, 27107, 27107, 27109, 27109, - 27127, 27127, 27127, 27127, 27127, 27127, 27127, 27127, - 27127, 27127, 27127, 27127, 27127, 27127, 27127, 27127, - 27127, 27127, 27143, 27143, 27143, 27143, 27143, 27143, - 27143, 27143, 27143, 27143, 27143, 27143, 27143, 27143, - 27143, 27143, 27179, 27179, 27179, 27179, 27179, 27179, - 27179, 27179, 27179, 27179, 27179, 27179, 27179, 27179, - 27179, 27179, 27179, 27179, 27179, 27179, 27179, 27179, - 27179, 27179, 27179, 27179, 27179, 27179, 27179, 27179, - 27179, 27179, 27179, 27179, 27179, 27179, 27191, 27191, - 27191, 27191, 27191, 27191, 27191, 27191, 27191, 27191, - 27191, 27191, 27197, 27197, 27197, 27197, 27197, 27197, - 27211, 27211, 27211, 27211, 27211, 27211, 27211, 27211, - 27211, 27211, 27211, 27211, 27211, 27211, 27239, 27239, - 27239, 27239, 27239, 27239, 27239, 27239, 27239, 27239, - 27239, 27239, 27239, 27239, 27239, 27239, 27239, 27239, - 27239, 27239, 27239, 27239, 27239, 27239, 27239, 27239, - 27239, 27239, 27241, 27241, 27253, 27253, 27253, 27253, - 27253, 27253, 27253, 27253, 27253, 27253, 27253, 27253, - 27259, 27259, 27259, 27259, 27259, 27259, 27271, 27271, - 27271, 27271, 27271, 27271, 27271, 27271, 27271, 27271, - 27271, 27271, 27277, 27277, 27277, 27277, 27277, 27277, - 27281, 27281, 27281, 27281, 27283, 27283, 27299, 27299, - 27299, 27299, 27299, 27299, 27299, 27299, 27299, 27299, - 27299, 27299, 27299, 27299, 27299, 27299, 27329, 27329, - 27329, 27329, 27329, 27329, 27329, 27329, 27329, 27329, - 27329, 27329, 27329, 27329, 27329, 27329, 27329, 27329, - 27329, 27329, 27329, 27329, 27329, 27329, 27329, 27329, - 27329, 27329, 27329, 27329, 27337, 27337, 27337, 27337, - 27337, 27337, 27337, 27337, 27361, 27361, 27361, 27361, - 27361, 27361, 27361, 27361, 27361, 27361, 27361, 27361, - 27361, 27361, 27361, 27361, 27361, 27361, 27361, 27361, - 27361, 27361, 27361, 27361, 27367, 27367, 27367, 27367, - 27367, 27367, 27397, 27397, 27397, 27397, 27397, 27397, - 27397, 27397, 27397, 27397, 27397, 27397, 27397, 27397, - 27397, 27397, 27397, 27397, 27397, 27397, 27397, 27397, - 27397, 27397, 27397, 27397, 27397, 27397, 27397, 27397, - 27407, 27407, 27407, 27407, 27407, 27407, 27407, 27407, - 27407, 27407, 27409, 27409, 27427, 27427, 27427, 27427, - 27427, 27427, 27427, 27427, 27427, 27427, 27427, 27427, - 27427, 27427, 27427, 27427, 27427, 27427, 27431, 27431, - 27431, 27431, 27437, 27437, 27437, 27437, 27437, 27437, - 27449, 27449, 27449, 27449, 27449, 27449, 27449, 27449, - 27449, 27449, 27449, 27449, 27457, 27457, 27457, 27457, - 27457, 27457, 27457, 27457, 27479, 27479, 27479, 27479, - 27479, 27479, 27479, 27479, 27479, 27479, 27479, 27479, - 27479, 27479, 27479, 27479, 27479, 27479, 27479, 27479, - 27479, 27479, 27481, 27481, 27487, 27487, 27487, 27487, - 27487, 27487, 27509, 27509, 27509, 27509, 27509, 27509, - 27509, 27509, 27509, 27509, 27509, 27509, 27509, 27509, - 27509, 27509, 27509, 27509, 27509, 27509, 27509, 27509, - 27527, 27527, 27527, 27527, 27527, 27527, 27527, 27527, - 27527, 27527, 27527, 27527, 27527, 27527, 27527, 27527, - 27527, 27527, 27529, 27529, 27539, 27539, 27539, 27539, - 27539, 27539, 27539, 27539, 27539, 27539, 27541, 27541, - 27551, 27551, 27551, 27551, 27551, 27551, 27551, 27551, - 27551, 27551, 27581, 27581, 27581, 27581, 27581, 27581, - 27581, 27581, 27581, 27581, 27581, 27581, 27581, 27581, - 27581, 27581, 27581, 27581, 27581, 27581, 27581, 27581, - 27581, 27581, 27581, 27581, 27581, 27581, 27581, 27581, - 27583, 27583, 27611, 27611, 27611, 27611, 27611, 27611, - 27611, 27611, 27611, 27611, 27611, 27611, 27611, 27611, - 27611, 27611, 27611, 27611, 27611, 27611, 27611, 27611, - 27611, 27611, 27611, 27611, 27611, 27611, 27617, 27617, - 27617, 27617, 27617, 27617, 27631, 27631, 27631, 27631, - 27631, 27631, 27631, 27631, 27631, 27631, 27631, 27631, - 27631, 27631, 27647, 27647, 27647, 27647, 27647, 27647, - 27647, 27647, 27647, 27647, 27647, 27647, 27647, 27647, - 27647, 27647, 27653, 27653, 27653, 27653, 27653, 27653, - 27673, 27673, 27673, 27673, 27673, 27673, 27673, 27673, - 27673, 27673, 27673, 27673, 27673, 27673, 27673, 27673, - 27673, 27673, 27673, 27673, 27689, 27689, 27689, 27689, - 27689, 27689, 27689, 27689, 27689, 27689, 27689, 27689, - 27689, 27689, 27689, 27689, 27691, 27691, 27697, 27697, - 27697, 27697, 27697, 27697, 27701, 27701, 27701, 27701, - 27733, 27733, 27733, 27733, 27733, 27733, 27733, 27733, - 27733, 27733, 27733, 27733, 27733, 27733, 27733, 27733, - 27733, 27733, 27733, 27733, 27733, 27733, 27733, 27733, - 27733, 27733, 27733, 27733, 27733, 27733, 27733, 27733, - 27737, 27737, 27737, 27737, 27739, 27739, 27743, 27743, - 27743, 27743, 27749, 27749, 27749, 27749, 27749, 27749, - 27751, 27751, 27763, 27763, 27763, 27763, 27763, 27763, - 27763, 27763, 27763, 27763, 27763, 27763, 27767, 27767, - 27767, 27767, 27773, 27773, 27773, 27773, 27773, 27773, - 27779, 27779, 27779, 27779, 27779, 27779, 27791, 27791, - 27791, 27791, 27791, 27791, 27791, 27791, 27791, 27791, - 27791, 27791, 27793, 27793, 27799, 27799, 27799, 27799, - 27799, 27799, 27803, 27803, 27803, 27803, 27809, 27809, - 27809, 27809, 27809, 27809, 27817, 27817, 27817, 27817, - 27817, 27817, 27817, 27817, 27823, 27823, 27823, 27823, - 27823, 27823, 27827, 27827, 27827, 27827, 27847, 27847, - 27847, 27847, 27847, 27847, 27847, 27847, 27847, 27847, - 27847, 27847, 27847, 27847, 27847, 27847, 27847, 27847, - 27847, 27847, 27851, 27851, 27851, 27851, 27883, 27883, - 27883, 27883, 27883, 27883, 27883, 27883, 27883, 27883, - 27883, 27883, 27883, 27883, 27883, 27883, 27883, 27883, - 27883, 27883, 27883, 27883, 27883, 27883, 27883, 27883, - 27883, 27883, 27883, 27883, 27883, 27883, 27893, 27893, - 27893, 27893, 27893, 27893, 27893, 27893, 27893, 27893, - 27901, 27901, 27901, 27901, 27901, 27901, 27901, 27901, - 27917, 27917, 27917, 27917, 27917, 27917, 27917, 27917, - 27917, 27917, 27917, 27917, 27917, 27917, 27917, 27917, - 27919, 27919, 27941, 27941, 27941, 27941, 27941, 27941, - 27941, 27941, 27941, 27941, 27941, 27941, 27941, 27941, - 27941, 27941, 27941, 27941, 27941, 27941, 27941, 27941, - 27943, 27943, 27947, 27947, 27947, 27947, 27953, 27953, - 27953, 27953, 27953, 27953, 27961, 27961, 27961, 27961, - 27961, 27961, 27961, 27961, 27967, 27967, 27967, 27967, - 27967, 27967, 27983, 27983, 27983, 27983, 27983, 27983, - 27983, 27983, 27983, 27983, 27983, 27983, 27983, 27983, - 27983, 27983, 27997, 27997, 27997, 27997, 27997, 27997, - 27997, 27997, 27997, 27997, 27997, 27997, 27997, 27997, - 28001, 28001, 28001, 28001, 28019, 28019, 28019, 28019, - 28019, 28019, 28019, 28019, 28019, 28019, 28019, 28019, - 28019, 28019, 28019, 28019, 28019, 28019, 28027, 28027, - 28027, 28027, 28027, 28027, 28027, 28027, 28031, 28031, - 28031, 28031, 28051, 28051, 28051, 28051, 28051, 28051, - 28051, 28051, 28051, 28051, 28051, 28051, 28051, 28051, - 28051, 28051, 28051, 28051, 28051, 28051, 28057, 28057, - 28057, 28057, 28057, 28057, 28069, 28069, 28069, 28069, - 28069, 28069, 28069, 28069, 28069, 28069, 28069, 28069, - 28081, 28081, 28081, 28081, 28081, 28081, 28081, 28081, - 28081, 28081, 28081, 28081, 28087, 28087, 28087, 28087, - 28087, 28087, 28097, 28097, 28097, 28097, 28097, 28097, - 28097, 28097, 28097, 28097, 28099, 28099, 28109, 28109, - 28109, 28109, 28109, 28109, 28109, 28109, 28109, 28109, - 28111, 28111, 28123, 28123, 28123, 28123, 28123, 28123, - 28123, 28123, 28123, 28123, 28123, 28123, 28151, 28151, - 28151, 28151, 28151, 28151, 28151, 28151, 28151, 28151, - 28151, 28151, 28151, 28151, 28151, 28151, 28151, 28151, - 28151, 28151, 28151, 28151, 28151, 28151, 28151, 28151, - 28151, 28151, 28163, 28163, 28163, 28163, 28163, 28163, - 28163, 28163, 28163, 28163, 28163, 28163, 28181, 28181, - 28181, 28181, 28181, 28181, 28181, 28181, 28181, 28181, - 28181, 28181, 28181, 28181, 28181, 28181, 28181, 28181, - 28183, 28183, 28201, 28201, 28201, 28201, 28201, 28201, - 28201, 28201, 28201, 28201, 28201, 28201, 28201, 28201, - 28201, 28201, 28201, 28201, 28211, 28211, 28211, 28211, - 28211, 28211, 28211, 28211, 28211, 28211, 28219, 28219, - 28219, 28219, 28219, 28219, 28219, 28219, 28229, 28229, - 28229, 28229, 28229, 28229, 28229, 28229, 28229, 28229, - 28277, 28277, 28277, 28277, 28277, 28277, 28277, 28277, - 28277, 28277, 28277, 28277, 28277, 28277, 28277, 28277, - 28277, 28277, 28277, 28277, 28277, 28277, 28277, 28277, - 28277, 28277, 28277, 28277, 28277, 28277, 28277, 28277, - 28277, 28277, 28277, 28277, 28277, 28277, 28277, 28277, - 28277, 28277, 28277, 28277, 28277, 28277, 28277, 28277, - 28279, 28279, 28283, 28283, 28283, 28283, 28289, 28289, - 28289, 28289, 28289, 28289, 28297, 28297, 28297, 28297, - 28297, 28297, 28297, 28297, 28307, 28307, 28307, 28307, - 28307, 28307, 28307, 28307, 28307, 28307, 28309, 28309, - 28319, 28319, 28319, 28319, 28319, 28319, 28319, 28319, - 28319, 28319, 28349, 28349, 28349, 28349, 28349, 28349, - 28349, 28349, 28349, 28349, 28349, 28349, 28349, 28349, - 28349, 28349, 28349, 28349, 28349, 28349, 28349, 28349, - 28349, 28349, 28349, 28349, 28349, 28349, 28349, 28349, - 28351, 28351, 28387, 28387, 28387, 28387, 28387, 28387, - 28387, 28387, 28387, 28387, 28387, 28387, 28387, 28387, - 28387, 28387, 28387, 28387, 28387, 28387, 28387, 28387, - 28387, 28387, 28387, 28387, 28387, 28387, 28387, 28387, - 28387, 28387, 28387, 28387, 28387, 28387, 28393, 28393, - 28393, 28393, 28393, 28393, 28403, 28403, 28403, 28403, - 28403, 28403, 28403, 28403, 28403, 28403, 28409, 28409, - 28409, 28409, 28409, 28409, 28411, 28411, 28429, 28429, - 28429, 28429, 28429, 28429, 28429, 28429, 28429, 28429, - 28429, 28429, 28429, 28429, 28429, 28429, 28429, 28429, - 28433, 28433, 28433, 28433, 28439, 28439, 28439, 28439, - 28439, 28439, 28447, 28447, 28447, 28447, 28447, 28447, - 28447, 28447, 28463, 28463, 28463, 28463, 28463, 28463, - 28463, 28463, 28463, 28463, 28463, 28463, 28463, 28463, - 28463, 28463, 28477, 28477, 28477, 28477, 28477, 28477, - 28477, 28477, 28477, 28477, 28477, 28477, 28477, 28477, - 28493, 28493, 28493, 28493, 28493, 28493, 28493, 28493, - 28493, 28493, 28493, 28493, 28493, 28493, 28493, 28493, - 28499, 28499, 28499, 28499, 28499, 28499, 28513, 28513, - 28513, 28513, 28513, 28513, 28513, 28513, 28513, 28513, - 28513, 28513, 28513, 28513, 28517, 28517, 28517, 28517, - 28537, 28537, 28537, 28537, 28537, 28537, 28537, 28537, - 28537, 28537, 28537, 28537, 28537, 28537, 28537, 28537, - 28537, 28537, 28537, 28537, 28541, 28541, 28541, 28541, - 28547, 28547, 28547, 28547, 28547, 28547, 28549, 28549, - 28559, 28559, 28559, 28559, 28559, 28559, 28559, 28559, - 28559, 28559, 28571, 28571, 28571, 28571, 28571, 28571, - 28571, 28571, 28571, 28571, 28571, 28571, 28573, 28573, - 28579, 28579, 28579, 28579, 28579, 28579, 28591, 28591, - 28591, 28591, 28591, 28591, 28591, 28591, 28591, 28591, - 28591, 28591, 28597, 28597, 28597, 28597, 28597, 28597, - 28603, 28603, 28603, 28603, 28603, 28603, 28607, 28607, - 28607, 28607, 28619, 28619, 28619, 28619, 28619, 28619, - 28619, 28619, 28619, 28619, 28619, 28619, 28621, 28621, - 28627, 28627, 28627, 28627, 28627, 28627, 28631, 28631, - 28631, 28631, 28643, 28643, 28643, 28643, 28643, 28643, - 28643, 28643, 28643, 28643, 28643, 28643, 28649, 28649, - 28649, 28649, 28649, 28649, 28657, 28657, 28657, 28657, - 28657, 28657, 28657, 28657, 28661, 28661, 28661, 28661, - 28663, 28663, 28669, 28669, 28669, 28669, 28669, 28669, - 28687, 28687, 28687, 28687, 28687, 28687, 28687, 28687, - 28687, 28687, 28687, 28687, 28687, 28687, 28687, 28687, - 28687, 28687, 28697, 28697, 28697, 28697, 28697, 28697, - 28697, 28697, 28697, 28697, 28703, 28703, 28703, 28703, - 28703, 28703, 28711, 28711, 28711, 28711, 28711, 28711, - 28711, 28711, 28723, 28723, 28723, 28723, 28723, 28723, - 28723, 28723, 28723, 28723, 28723, 28723, 28729, 28729, - 28729, 28729, 28729, 28729, 28751, 28751, 28751, 28751, - 28751, 28751, 28751, 28751, 28751, 28751, 28751, 28751, - 28751, 28751, 28751, 28751, 28751, 28751, 28751, 28751, - 28751, 28751, 28753, 28753, 28759, 28759, 28759, 28759, - 28759, 28759, 28771, 28771, 28771, 28771, 28771, 28771, - 28771, 28771, 28771, 28771, 28771, 28771, 28789, 28789, - 28789, 28789, 28789, 28789, 28789, 28789, 28789, 28789, - 28789, 28789, 28789, 28789, 28789, 28789, 28789, 28789, - 28793, 28793, 28793, 28793, 28807, 28807, 28807, 28807, - 28807, 28807, 28807, 28807, 28807, 28807, 28807, 28807, - 28807, 28807, 28813, 28813, 28813, 28813, 28813, 28813, - 28817, 28817, 28817, 28817, 28837, 28837, 28837, 28837, - 28837, 28837, 28837, 28837, 28837, 28837, 28837, 28837, - 28837, 28837, 28837, 28837, 28837, 28837, 28837, 28837, - 28843, 28843, 28843, 28843, 28843, 28843, 28859, 28859, - 28859, 28859, 28859, 28859, 28859, 28859, 28859, 28859, - 28859, 28859, 28859, 28859, 28859, 28859, 28867, 28867, - 28867, 28867, 28867, 28867, 28867, 28867, 28871, 28871, - 28871, 28871, 28879, 28879, 28879, 28879, 28879, 28879, - 28879, 28879, 28901, 28901, 28901, 28901, 28901, 28901, - 28901, 28901, 28901, 28901, 28901, 28901, 28901, 28901, - 28901, 28901, 28901, 28901, 28901, 28901, 28901, 28901, - 28909, 28909, 28909, 28909, 28909, 28909, 28909, 28909, - 28921, 28921, 28921, 28921, 28921, 28921, 28921, 28921, - 28921, 28921, 28921, 28921, 28927, 28927, 28927, 28927, - 28927, 28927, 28933, 28933, 28933, 28933, 28933, 28933, - 28949, 28949, 28949, 28949, 28949, 28949, 28949, 28949, - 28949, 28949, 28949, 28949, 28949, 28949, 28949, 28949, - 28961, 28961, 28961, 28961, 28961, 28961, 28961, 28961, - 28961, 28961, 28961, 28961, 28979, 28979, 28979, 28979, - 28979, 28979, 28979, 28979, 28979, 28979, 28979, 28979, - 28979, 28979, 28979, 28979, 28979, 28979, 29009, 29009, - 29009, 29009, 29009, 29009, 29009, 29009, 29009, 29009, - 29009, 29009, 29009, 29009, 29009, 29009, 29009, 29009, - 29009, 29009, 29009, 29009, 29009, 29009, 29009, 29009, - 29009, 29009, 29009, 29009, 29017, 29017, 29017, 29017, - 29017, 29017, 29017, 29017, 29021, 29021, 29021, 29021, - 29023, 29023, 29027, 29027, 29027, 29027, 29033, 29033, - 29033, 29033, 29033, 29033, 29059, 29059, 29059, 29059, - 29059, 29059, 29059, 29059, 29059, 29059, 29059, 29059, - 29059, 29059, 29059, 29059, 29059, 29059, 29059, 29059, - 29059, 29059, 29059, 29059, 29059, 29059, 29063, 29063, - 29063, 29063, 29077, 29077, 29077, 29077, 29077, 29077, - 29077, 29077, 29077, 29077, 29077, 29077, 29077, 29077, - 29101, 29101, 29101, 29101, 29101, 29101, 29101, 29101, - 29101, 29101, 29101, 29101, 29101, 29101, 29101, 29101, - 29101, 29101, 29101, 29101, 29101, 29101, 29101, 29101, - 29123, 29123, 29123, 29123, 29123, 29123, 29123, 29123, - 29123, 29123, 29123, 29123, 29123, 29123, 29123, 29123, - 29123, 29123, 29123, 29123, 29123, 29123, 29129, 29129, - 29129, 29129, 29129, 29129, 29131, 29131, 29137, 29137, - 29137, 29137, 29137, 29137, 29147, 29147, 29147, 29147, - 29147, 29147, 29147, 29147, 29147, 29147, 29153, 29153, - 29153, 29153, 29153, 29153, 29167, 29167, 29167, 29167, - 29167, 29167, 29167, 29167, 29167, 29167, 29167, 29167, - 29167, 29167, 29173, 29173, 29173, 29173, 29173, 29173, - 29179, 29179, 29179, 29179, 29179, 29179, 29191, 29191, - 29191, 29191, 29191, 29191, 29191, 29191, 29191, 29191, - 29191, 29191, 29201, 29201, 29201, 29201, 29201, 29201, - 29201, 29201, 29201, 29201, 29207, 29207, 29207, 29207, - 29207, 29207, 29209, 29209, 29221, 29221, 29221, 29221, - 29221, 29221, 29221, 29221, 29221, 29221, 29221, 29221, - 29231, 29231, 29231, 29231, 29231, 29231, 29231, 29231, - 29231, 29231, 29243, 29243, 29243, 29243, 29243, 29243, - 29243, 29243, 29243, 29243, 29243, 29243, 29251, 29251, - 29251, 29251, 29251, 29251, 29251, 29251, 29269, 29269, - 29269, 29269, 29269, 29269, 29269, 29269, 29269, 29269, - 29269, 29269, 29269, 29269, 29269, 29269, 29269, 29269, - 29287, 29287, 29287, 29287, 29287, 29287, 29287, 29287, - 29287, 29287, 29287, 29287, 29287, 29287, 29287, 29287, - 29287, 29287, 29297, 29297, 29297, 29297, 29297, 29297, - 29297, 29297, 29297, 29297, 29303, 29303, 29303, 29303, - 29303, 29303, 29311, 29311, 29311, 29311, 29311, 29311, - 29311, 29311, 29327, 29327, 29327, 29327, 29327, 29327, - 29327, 29327, 29327, 29327, 29327, 29327, 29327, 29327, - 29327, 29327, 29333, 29333, 29333, 29333, 29333, 29333, - 29339, 29339, 29339, 29339, 29339, 29339, 29347, 29347, - 29347, 29347, 29347, 29347, 29347, 29347, 29363, 29363, - 29363, 29363, 29363, 29363, 29363, 29363, 29363, 29363, - 29363, 29363, 29363, 29363, 29363, 29363, 29383, 29383, - 29383, 29383, 29383, 29383, 29383, 29383, 29383, 29383, - 29383, 29383, 29383, 29383, 29383, 29383, 29383, 29383, - 29383, 29383, 29387, 29387, 29387, 29387, 29389, 29389, - 29399, 29399, 29399, 29399, 29399, 29399, 29399, 29399, - 29399, 29399, 29401, 29401, 29411, 29411, 29411, 29411, - 29411, 29411, 29411, 29411, 29411, 29411, 29423, 29423, - 29423, 29423, 29423, 29423, 29423, 29423, 29423, 29423, - 29423, 29423, 29429, 29429, 29429, 29429, 29429, 29429, - 29437, 29437, 29437, 29437, 29437, 29437, 29437, 29437, - 29443, 29443, 29443, 29443, 29443, 29443, 29453, 29453, - 29453, 29453, 29453, 29453, 29453, 29453, 29453, 29453, - 29473, 29473, 29473, 29473, 29473, 29473, 29473, 29473, - 29473, 29473, 29473, 29473, 29473, 29473, 29473, 29473, - 29473, 29473, 29473, 29473, 29483, 29483, 29483, 29483, - 29483, 29483, 29483, 29483, 29483, 29483, 29501, 29501, - 29501, 29501, 29501, 29501, 29501, 29501, 29501, 29501, - 29501, 29501, 29501, 29501, 29501, 29501, 29501, 29501, - 29527, 29527, 29527, 29527, 29527, 29527, 29527, 29527, - 29527, 29527, 29527, 29527, 29527, 29527, 29527, 29527, - 29527, 29527, 29527, 29527, 29527, 29527, 29527, 29527, - 29527, 29527, 29531, 29531, 29531, 29531, 29537, 29537, - 29537, 29537, 29537, 29537, 29567, 29567, 29567, 29567, - 29567, 29567, 29567, 29567, 29567, 29567, 29567, 29567, - 29567, 29567, 29567, 29567, 29567, 29567, 29567, 29567, - 29567, 29567, 29567, 29567, 29567, 29567, 29567, 29567, - 29567, 29567, 29569, 29569, 29573, 29573, 29573, 29573, - 29581, 29581, 29581, 29581, 29581, 29581, 29581, 29581, - 29587, 29587, 29587, 29587, 29587, 29587, 29599, 29599, - 29599, 29599, 29599, 29599, 29599, 29599, 29599, 29599, - 29599, 29599, 29611, 29611, 29611, 29611, 29611, 29611, - 29611, 29611, 29611, 29611, 29611, 29611, 29629, 29629, - 29629, 29629, 29629, 29629, 29629, 29629, 29629, 29629, - 29629, 29629, 29629, 29629, 29629, 29629, 29629, 29629, - 29633, 29633, 29633, 29633, 29641, 29641, 29641, 29641, - 29641, 29641, 29641, 29641, 29663, 29663, 29663, 29663, - 29663, 29663, 29663, 29663, 29663, 29663, 29663, 29663, - 29663, 29663, 29663, 29663, 29663, 29663, 29663, 29663, - 29663, 29663, 29669, 29669, 29669, 29669, 29669, 29669, - 29671, 29671, 29683, 29683, 29683, 29683, 29683, 29683, - 29683, 29683, 29683, 29683, 29683, 29683, 29717, 29717, - 29717, 29717, 29717, 29717, 29717, 29717, 29717, 29717, - 29717, 29717, 29717, 29717, 29717, 29717, 29717, 29717, - 29717, 29717, 29717, 29717, 29717, 29717, 29717, 29717, - 29717, 29717, 29717, 29717, 29717, 29717, 29717, 29717, - 29723, 29723, 29723, 29723, 29723, 29723, 29741, 29741, - 29741, 29741, 29741, 29741, 29741, 29741, 29741, 29741, - 29741, 29741, 29741, 29741, 29741, 29741, 29741, 29741, - 29753, 29753, 29753, 29753, 29753, 29753, 29753, 29753, - 29753, 29753, 29753, 29753, 29759, 29759, 29759, 29759, - 29759, 29759, 29761, 29761, 29789, 29789, 29789, 29789, - 29789, 29789, 29789, 29789, 29789, 29789, 29789, 29789, - 29789, 29789, 29789, 29789, 29789, 29789, 29789, 29789, - 29789, 29789, 29789, 29789, 29789, 29789, 29789, 29789, - 29803, 29803, 29803, 29803, 29803, 29803, 29803, 29803, - 29803, 29803, 29803, 29803, 29803, 29803, 29819, 29819, - 29819, 29819, 29819, 29819, 29819, 29819, 29819, 29819, - 29819, 29819, 29819, 29819, 29819, 29819, 29833, 29833, - 29833, 29833, 29833, 29833, 29833, 29833, 29833, 29833, - 29833, 29833, 29833, 29833, 29837, 29837, 29837, 29837, - 29851, 29851, 29851, 29851, 29851, 29851, 29851, 29851, - 29851, 29851, 29851, 29851, 29851, 29851, 29863, 29863, - 29863, 29863, 29863, 29863, 29863, 29863, 29863, 29863, - 29863, 29863, 29867, 29867, 29867, 29867, 29873, 29873, - 29873, 29873, 29873, 29873, 29879, 29879, 29879, 29879, - 29879, 29879, 29881, 29881, 29917, 29917, 29917, 29917, - 29917, 29917, 29917, 29917, 29917, 29917, 29917, 29917, - 29917, 29917, 29917, 29917, 29917, 29917, 29917, 29917, - 29917, 29917, 29917, 29917, 29917, 29917, 29917, 29917, - 29917, 29917, 29917, 29917, 29917, 29917, 29917, 29917, - 29921, 29921, 29921, 29921, 29927, 29927, 29927, 29927, - 29927, 29927, 29947, 29947, 29947, 29947, 29947, 29947, - 29947, 29947, 29947, 29947, 29947, 29947, 29947, 29947, - 29947, 29947, 29947, 29947, 29947, 29947, 29959, 29959, - 29959, 29959, 29959, 29959, 29959, 29959, 29959, 29959, - 29959, 29959, 29983, 29983, 29983, 29983, 29983, 29983, - 29983, 29983, 29983, 29983, 29983, 29983, 29983, 29983, - 29983, 29983, 29983, 29983, 29983, 29983, 29983, 29983, - 29983, 29983, 29989, 29989, 29989, 29989, 29989, 29989, - 30011, 30011, 30011, 30011, 30011, 30011, 30011, 30011, - 30011, 30011, 30011, 30011, 30011, 30011, 30011, 30011, - 30011, 30011, 30011, 30011, 30011, 30011, 30013, 30013, - 30029, 30029, 30029, 30029, 30029, 30029, 30029, 30029, - 30029, 30029, 30029, 30029, 30029, 30029, 30029, 30029, - 30047, 30047, 30047, 30047, 30047, 30047, 30047, 30047, - 30047, 30047, 30047, 30047, 30047, 30047, 30047, 30047, - 30047, 30047, 30059, 30059, 30059, 30059, 30059, 30059, - 30059, 30059, 30059, 30059, 30059, 30059, 30071, 30071, - 30071, 30071, 30071, 30071, 30071, 30071, 30071, 30071, - 30071, 30071, 30089, 30089, 30089, 30089, 30089, 30089, - 30089, 30089, 30089, 30089, 30089, 30089, 30089, 30089, - 30089, 30089, 30089, 30089, 30091, 30091, 30097, 30097, - 30097, 30097, 30097, 30097, 30103, 30103, 30103, 30103, - 30103, 30103, 30109, 30109, 30109, 30109, 30109, 30109, - 30113, 30113, 30113, 30113, 30119, 30119, 30119, 30119, - 30119, 30119, 30133, 30133, 30133, 30133, 30133, 30133, - 30133, 30133, 30133, 30133, 30133, 30133, 30133, 30133, - 30137, 30137, 30137, 30137, 30139, 30139, 30161, 30161, - 30161, 30161, 30161, 30161, 30161, 30161, 30161, 30161, - 30161, 30161, 30161, 30161, 30161, 30161, 30161, 30161, - 30161, 30161, 30161, 30161, 30169, 30169, 30169, 30169, - 30169, 30169, 30169, 30169, 30181, 30181, 30181, 30181, - 30181, 30181, 30181, 30181, 30181, 30181, 30181, 30181, - 30187, 30187, 30187, 30187, 30187, 30187, 30197, 30197, - 30197, 30197, 30197, 30197, 30197, 30197, 30197, 30197, - 30203, 30203, 30203, 30203, 30203, 30203, 30211, 30211, - 30211, 30211, 30211, 30211, 30211, 30211, 30223, 30223, - 30223, 30223, 30223, 30223, 30223, 30223, 30223, 30223, - 30223, 30223, 30241, 30241, 30241, 30241, 30241, 30241, - 30241, 30241, 30241, 30241, 30241, 30241, 30241, 30241, - 30241, 30241, 30241, 30241, 30253, 30253, 30253, 30253, - 30253, 30253, 30253, 30253, 30253, 30253, 30253, 30253, - 30259, 30259, 30259, 30259, 30259, 30259, 30269, 30269, - 30269, 30269, 30269, 30269, 30269, 30269, 30269, 30269, - 30271, 30271, 30293, 30293, 30293, 30293, 30293, 30293, - 30293, 30293, 30293, 30293, 30293, 30293, 30293, 30293, - 30293, 30293, 30293, 30293, 30293, 30293, 30293, 30293, - 30307, 30307, 30307, 30307, 30307, 30307, 30307, 30307, - 30307, 30307, 30307, 30307, 30307, 30307, 30313, 30313, - 30313, 30313, 30313, 30313, 30319, 30319, 30319, 30319, - 30319, 30319, 30323, 30323, 30323, 30323, 30341, 30341, - 30341, 30341, 30341, 30341, 30341, 30341, 30341, 30341, - 30341, 30341, 30341, 30341, 30341, 30341, 30341, 30341, - 30347, 30347, 30347, 30347, 30347, 30347, 30367, 30367, - 30367, 30367, 30367, 30367, 30367, 30367, 30367, 30367, - 30367, 30367, 30367, 30367, 30367, 30367, 30367, 30367, - 30367, 30367, 30389, 30389, 30389, 30389, 30389, 30389, - 30389, 30389, 30389, 30389, 30389, 30389, 30389, 30389, - 30389, 30389, 30389, 30389, 30389, 30389, 30389, 30389, - 30391, 30391, 30403, 30403, 30403, 30403, 30403, 30403, - 30403, 30403, 30403, 30403, 30403, 30403, 30427, 30427, - 30427, 30427, 30427, 30427, 30427, 30427, 30427, 30427, - 30427, 30427, 30427, 30427, 30427, 30427, 30427, 30427, - 30427, 30427, 30427, 30427, 30427, 30427, 30431, 30431, - 30431, 30431, 30449, 30449, 30449, 30449, 30449, 30449, - 30449, 30449, 30449, 30449, 30449, 30449, 30449, 30449, - 30449, 30449, 30449, 30449, 30467, 30467, 30467, 30467, - 30467, 30467, 30467, 30467, 30467, 30467, 30467, 30467, - 30467, 30467, 30467, 30467, 30467, 30467, 30469, 30469, - 30491, 30491, 30491, 30491, 30491, 30491, 30491, 30491, - 30491, 30491, 30491, 30491, 30491, 30491, 30491, 30491, - 30491, 30491, 30491, 30491, 30491, 30491, 30493, 30493, - 30497, 30497, 30497, 30497, 30509, 30509, 30509, 30509, - 30509, 30509, 30509, 30509, 30509, 30509, 30509, 30509, - 30517, 30517, 30517, 30517, 30517, 30517, 30517, 30517, - 30529, 30529, 30529, 30529, 30529, 30529, 30529, 30529, - 30529, 30529, 30529, 30529, 30539, 30539, 30539, 30539, - 30539, 30539, 30539, 30539, 30539, 30539, 30553, 30553, - 30553, 30553, 30553, 30553, 30553, 30553, 30553, 30553, - 30553, 30553, 30553, 30553, 30557, 30557, 30557, 30557, - 30559, 30559, 30577, 30577, 30577, 30577, 30577, 30577, - 30577, 30577, 30577, 30577, 30577, 30577, 30577, 30577, - 30577, 30577, 30577, 30577, 30593, 30593, 30593, 30593, - 30593, 30593, 30593, 30593, 30593, 30593, 30593, 30593, - 30593, 30593, 30593, 30593, 30631, 30631, 30631, 30631, - 30631, 30631, 30631, 30631, 30631, 30631, 30631, 30631, - 30631, 30631, 30631, 30631, 30631, 30631, 30631, 30631, - 30631, 30631, 30631, 30631, 30631, 30631, 30631, 30631, - 30631, 30631, 30631, 30631, 30631, 30631, 30631, 30631, - 30631, 30631, 30637, 30637, 30637, 30637, 30637, 30637, - 30643, 30643, 30643, 30643, 30643, 30643, 30649, 30649, - 30649, 30649, 30649, 30649, 30661, 30661, 30661, 30661, - 30661, 30661, 30661, 30661, 30661, 30661, 30661, 30661, - 30671, 30671, 30671, 30671, 30671, 30671, 30671, 30671, - 30671, 30671, 30677, 30677, 30677, 30677, 30677, 30677, - 30689, 30689, 30689, 30689, 30689, 30689, 30689, 30689, - 30689, 30689, 30689, 30689, 30697, 30697, 30697, 30697, - 30697, 30697, 30697, 30697, 30703, 30703, 30703, 30703, - 30703, 30703, 30707, 30707, 30707, 30707, 30713, 30713, - 30713, 30713, 30713, 30713, 30727, 30727, 30727, 30727, - 30727, 30727, 30727, 30727, 30727, 30727, 30727, 30727, - 30727, 30727, 30757, 30757, 30757, 30757, 30757, 30757, - 30757, 30757, 30757, 30757, 30757, 30757, 30757, 30757, - 30757, 30757, 30757, 30757, 30757, 30757, 30757, 30757, - 30757, 30757, 30757, 30757, 30757, 30757, 30757, 30757, - 30763, 30763, 30763, 30763, 30763, 30763, 30773, 30773, - 30773, 30773, 30773, 30773, 30773, 30773, 30773, 30773, - 30781, 30781, 30781, 30781, 30781, 30781, 30781, 30781, - 30803, 30803, 30803, 30803, 30803, 30803, 30803, 30803, - 30803, 30803, 30803, 30803, 30803, 30803, 30803, 30803, - 30803, 30803, 30803, 30803, 30803, 30803, 30809, 30809, - 30809, 30809, 30809, 30809, 30817, 30817, 30817, 30817, - 30817, 30817, 30817, 30817, 30829, 30829, 30829, 30829, - 30829, 30829, 30829, 30829, 30829, 30829, 30829, 30829, - 30839, 30839, 30839, 30839, 30839, 30839, 30839, 30839, - 30839, 30839, 30841, 30841, 30851, 30851, 30851, 30851, - 30851, 30851, 30851, 30851, 30851, 30851, 30853, 30853, - 30859, 30859, 30859, 30859, 30859, 30859, 30869, 30869, - 30869, 30869, 30869, 30869, 30869, 30869, 30869, 30869, - 30871, 30871, 30881, 30881, 30881, 30881, 30881, 30881, - 30881, 30881, 30881, 30881, 30893, 30893, 30893, 30893, - 30893, 30893, 30893, 30893, 30893, 30893, 30893, 30893, - 30911, 30911, 30911, 30911, 30911, 30911, 30911, 30911, - 30911, 30911, 30911, 30911, 30911, 30911, 30911, 30911, - 30911, 30911, 30931, 30931, 30931, 30931, 30931, 30931, - 30931, 30931, 30931, 30931, 30931, 30931, 30931, 30931, - 30931, 30931, 30931, 30931, 30931, 30931, 30937, 30937, - 30937, 30937, 30937, 30937, 30941, 30941, 30941, 30941, - 30949, 30949, 30949, 30949, 30949, 30949, 30949, 30949, - 30971, 30971, 30971, 30971, 30971, 30971, 30971, 30971, - 30971, 30971, 30971, 30971, 30971, 30971, 30971, 30971, - 30971, 30971, 30971, 30971, 30971, 30971, 30977, 30977, - 30977, 30977, 30977, 30977, 30983, 30983, 30983, 30983, - 30983, 30983, 31013, 31013, 31013, 31013, 31013, 31013, - 31013, 31013, 31013, 31013, 31013, 31013, 31013, 31013, - 31013, 31013, 31013, 31013, 31013, 31013, 31013, 31013, - 31013, 31013, 31013, 31013, 31013, 31013, 31013, 31013, - 31019, 31019, 31019, 31019, 31019, 31019, 31033, 31033, - 31033, 31033, 31033, 31033, 31033, 31033, 31033, 31033, - 31033, 31033, 31033, 31033, 31039, 31039, 31039, 31039, - 31039, 31039, 31051, 31051, 31051, 31051, 31051, 31051, - 31051, 31051, 31051, 31051, 31051, 31051, 31063, 31063, - 31063, 31063, 31063, 31063, 31063, 31063, 31063, 31063, - 31063, 31063, 31069, 31069, 31069, 31069, 31069, 31069, - 31079, 31079, 31079, 31079, 31079, 31079, 31079, 31079, - 31079, 31079, 31081, 31081, 31091, 31091, 31091, 31091, - 31091, 31091, 31091, 31091, 31091, 31091, 31121, 31121, - 31121, 31121, 31121, 31121, 31121, 31121, 31121, 31121, - 31121, 31121, 31121, 31121, 31121, 31121, 31121, 31121, - 31121, 31121, 31121, 31121, 31121, 31121, 31121, 31121, - 31121, 31121, 31121, 31121, 31123, 31123, 31139, 31139, - 31139, 31139, 31139, 31139, 31139, 31139, 31139, 31139, - 31139, 31139, 31139, 31139, 31139, 31139, 31147, 31147, - 31147, 31147, 31147, 31147, 31147, 31147, 31151, 31151, - 31151, 31151, 31153, 31153, 31159, 31159, 31159, 31159, - 31159, 31159, 31177, 31177, 31177, 31177, 31177, 31177, - 31177, 31177, 31177, 31177, 31177, 31177, 31177, 31177, - 31177, 31177, 31177, 31177, 31181, 31181, 31181, 31181, - 31183, 31183, 31189, 31189, 31189, 31189, 31189, 31189, - 31193, 31193, 31193, 31193, 31219, 31219, 31219, 31219, - 31219, 31219, 31219, 31219, 31219, 31219, 31219, 31219, - 31219, 31219, 31219, 31219, 31219, 31219, 31219, 31219, - 31219, 31219, 31219, 31219, 31219, 31219, 31223, 31223, - 31223, 31223, 31231, 31231, 31231, 31231, 31231, 31231, - 31231, 31231, 31237, 31237, 31237, 31237, 31237, 31237, - 31247, 31247, 31247, 31247, 31247, 31247, 31247, 31247, - 31247, 31247, 31249, 31249, 31253, 31253, 31253, 31253, - 31259, 31259, 31259, 31259, 31259, 31259, 31267, 31267, - 31267, 31267, 31267, 31267, 31267, 31267, 31271, 31271, - 31271, 31271, 31277, 31277, 31277, 31277, 31277, 31277, - 31307, 31307, 31307, 31307, 31307, 31307, 31307, 31307, - 31307, 31307, 31307, 31307, 31307, 31307, 31307, 31307, - 31307, 31307, 31307, 31307, 31307, 31307, 31307, 31307, - 31307, 31307, 31307, 31307, 31307, 31307, 31319, 31319, - 31319, 31319, 31319, 31319, 31319, 31319, 31319, 31319, - 31319, 31319, 31321, 31321, 31327, 31327, 31327, 31327, - 31327, 31327, 31333, 31333, 31333, 31333, 31333, 31333, - 31337, 31337, 31337, 31337, 31357, 31357, 31357, 31357, - 31357, 31357, 31357, 31357, 31357, 31357, 31357, 31357, - 31357, 31357, 31357, 31357, 31357, 31357, 31357, 31357, - 31379, 31379, 31379, 31379, 31379, 31379, 31379, 31379, - 31379, 31379, 31379, 31379, 31379, 31379, 31379, 31379, - 31379, 31379, 31379, 31379, 31379, 31379, 31387, 31387, - 31387, 31387, 31387, 31387, 31387, 31387, 31391, 31391, - 31391, 31391, 31393, 31393, 31397, 31397, 31397, 31397, - 31469, 31469, 31469, 31469, 31469, 31469, 31469, 31469, - 31469, 31469, 31469, 31469, 31469, 31469, 31469, 31469, - 31469, 31469, 31469, 31469, 31469, 31469, 31469, 31469, - 31469, 31469, 31469, 31469, 31469, 31469, 31469, 31469, - 31469, 31469, 31469, 31469, 31469, 31469, 31469, 31469, - 31469, 31469, 31469, 31469, 31469, 31469, 31469, 31469, - 31469, 31469, 31469, 31469, 31469, 31469, 31469, 31469, - 31469, 31469, 31469, 31469, 31469, 31469, 31469, 31469, - 31469, 31469, 31469, 31469, 31469, 31469, 31469, 31469, - 31477, 31477, 31477, 31477, 31477, 31477, 31477, 31477, - 31481, 31481, 31481, 31481, 31489, 31489, 31489, 31489, - 31489, 31489, 31489, 31489, 31511, 31511, 31511, 31511, - 31511, 31511, 31511, 31511, 31511, 31511, 31511, 31511, - 31511, 31511, 31511, 31511, 31511, 31511, 31511, 31511, - 31511, 31511, 31513, 31513, 31517, 31517, 31517, 31517, - 31531, 31531, 31531, 31531, 31531, 31531, 31531, 31531, - 31531, 31531, 31531, 31531, 31531, 31531, 31541, 31541, - 31541, 31541, 31541, 31541, 31541, 31541, 31541, 31541, - 31543, 31543, 31547, 31547, 31547, 31547, 31567, 31567, - 31567, 31567, 31567, 31567, 31567, 31567, 31567, 31567, - 31567, 31567, 31567, 31567, 31567, 31567, 31567, 31567, - 31567, 31567, 31573, 31573, 31573, 31573, 31573, 31573, - 31583, 31583, 31583, 31583, 31583, 31583, 31583, 31583, - 31583, 31583, 31601, 31601, 31601, 31601, 31601, 31601, - 31601, 31601, 31601, 31601, 31601, 31601, 31601, 31601, - 31601, 31601, 31601, 31601, 31607, 31607, 31607, 31607, - 31607, 31607, 31627, 31627, 31627, 31627, 31627, 31627, - 31627, 31627, 31627, 31627, 31627, 31627, 31627, 31627, - 31627, 31627, 31627, 31627, 31627, 31627, 31643, 31643, - 31643, 31643, 31643, 31643, 31643, 31643, 31643, 31643, - 31643, 31643, 31643, 31643, 31643, 31643, 31649, 31649, - 31649, 31649, 31649, 31649, 31657, 31657, 31657, 31657, - 31657, 31657, 31657, 31657, 31663, 31663, 31663, 31663, - 31663, 31663, 31667, 31667, 31667, 31667, 31687, 31687, - 31687, 31687, 31687, 31687, 31687, 31687, 31687, 31687, - 31687, 31687, 31687, 31687, 31687, 31687, 31687, 31687, - 31687, 31687, 31699, 31699, 31699, 31699, 31699, 31699, - 31699, 31699, 31699, 31699, 31699, 31699, 31721, 31721, - 31721, 31721, 31721, 31721, 31721, 31721, 31721, 31721, - 31721, 31721, 31721, 31721, 31721, 31721, 31721, 31721, - 31721, 31721, 31721, 31721, 31723, 31723, 31727, 31727, - 31727, 31727, 31729, 31729, 31741, 31741, 31741, 31741, - 31741, 31741, 31741, 31741, 31741, 31741, 31741, 31741, - 31751, 31751, 31751, 31751, 31751, 31751, 31751, 31751, - 31751, 31751, 31769, 31769, 31769, 31769, 31769, 31769, - 31769, 31769, 31769, 31769, 31769, 31769, 31769, 31769, - 31769, 31769, 31769, 31769, 31771, 31771, 31793, 31793, - 31793, 31793, 31793, 31793, 31793, 31793, 31793, 31793, - 31793, 31793, 31793, 31793, 31793, 31793, 31793, 31793, - 31793, 31793, 31793, 31793, 31799, 31799, 31799, 31799, - 31799, 31799, 31817, 31817, 31817, 31817, 31817, 31817, - 31817, 31817, 31817, 31817, 31817, 31817, 31817, 31817, - 31817, 31817, 31817, 31817, 31847, 31847, 31847, 31847, - 31847, 31847, 31847, 31847, 31847, 31847, 31847, 31847, - 31847, 31847, 31847, 31847, 31847, 31847, 31847, 31847, - 31847, 31847, 31847, 31847, 31847, 31847, 31847, 31847, - 31847, 31847, 31849, 31849, 31859, 31859, 31859, 31859, - 31859, 31859, 31859, 31859, 31859, 31859, 31873, 31873, - 31873, 31873, 31873, 31873, 31873, 31873, 31873, 31873, - 31873, 31873, 31873, 31873, 31883, 31883, 31883, 31883, - 31883, 31883, 31883, 31883, 31883, 31883, 31891, 31891, - 31891, 31891, 31891, 31891, 31891, 31891, 31907, 31907, - 31907, 31907, 31907, 31907, 31907, 31907, 31907, 31907, - 31907, 31907, 31907, 31907, 31907, 31907, 31957, 31957, - 31957, 31957, 31957, 31957, 31957, 31957, 31957, 31957, - 31957, 31957, 31957, 31957, 31957, 31957, 31957, 31957, - 31957, 31957, 31957, 31957, 31957, 31957, 31957, 31957, - 31957, 31957, 31957, 31957, 31957, 31957, 31957, 31957, - 31957, 31957, 31957, 31957, 31957, 31957, 31957, 31957, - 31957, 31957, 31957, 31957, 31957, 31957, 31957, 31957, - 31963, 31963, 31963, 31963, 31963, 31963, 31973, 31973, - 31973, 31973, 31973, 31973, 31973, 31973, 31973, 31973, - 31981, 31981, 31981, 31981, 31981, 31981, 31981, 31981, - 31991, 31991, 31991, 31991, 31991, 31991, 31991, 31991, - 31991, 31991, 32003, 32003, 32003, 32003, 32003, 32003, - 32003, 32003, 32003, 32003, 32003, 32003, 32009, 32009, - 32009, 32009, 32009, 32009, 32027, 32027, 32027, 32027, - 32027, 32027, 32027, 32027, 32027, 32027, 32027, 32027, - 32027, 32027, 32027, 32027, 32027, 32027, 32029, 32029, - 32051, 32051, 32051, 32051, 32051, 32051, 32051, 32051, - 32051, 32051, 32051, 32051, 32051, 32051, 32051, 32051, - 32051, 32051, 32051, 32051, 32051, 32051, 32057, 32057, - 32057, 32057, 32057, 32057, 32059, 32059, 32063, 32063, - 32063, 32063, 32069, 32069, 32069, 32069, 32069, 32069, - 32077, 32077, 32077, 32077, 32077, 32077, 32077, 32077, - 32083, 32083, 32083, 32083, 32083, 32083, 32089, 32089, - 32089, 32089, 32089, 32089, 32099, 32099, 32099, 32099, - 32099, 32099, 32099, 32099, 32099, 32099, 32117, 32117, - 32117, 32117, 32117, 32117, 32117, 32117, 32117, 32117, - 32117, 32117, 32117, 32117, 32117, 32117, 32117, 32117, - 32119, 32119, 32141, 32141, 32141, 32141, 32141, 32141, - 32141, 32141, 32141, 32141, 32141, 32141, 32141, 32141, - 32141, 32141, 32141, 32141, 32141, 32141, 32141, 32141, - 32143, 32143, 32159, 32159, 32159, 32159, 32159, 32159, - 32159, 32159, 32159, 32159, 32159, 32159, 32159, 32159, - 32159, 32159, 32173, 32173, 32173, 32173, 32173, 32173, - 32173, 32173, 32173, 32173, 32173, 32173, 32173, 32173, - 32183, 32183, 32183, 32183, 32183, 32183, 32183, 32183, - 32183, 32183, 32189, 32189, 32189, 32189, 32189, 32189, - 32191, 32191, 32203, 32203, 32203, 32203, 32203, 32203, - 32203, 32203, 32203, 32203, 32203, 32203, 32213, 32213, - 32213, 32213, 32213, 32213, 32213, 32213, 32213, 32213, - 32233, 32233, 32233, 32233, 32233, 32233, 32233, 32233, - 32233, 32233, 32233, 32233, 32233, 32233, 32233, 32233, - 32233, 32233, 32233, 32233, 32237, 32237, 32237, 32237, - 32251, 32251, 32251, 32251, 32251, 32251, 32251, 32251, - 32251, 32251, 32251, 32251, 32251, 32251, 32257, 32257, - 32257, 32257, 32257, 32257, 32261, 32261, 32261, 32261, - 32297, 32297, 32297, 32297, 32297, 32297, 32297, 32297, - 32297, 32297, 32297, 32297, 32297, 32297, 32297, 32297, - 32297, 32297, 32297, 32297, 32297, 32297, 32297, 32297, - 32297, 32297, 32297, 32297, 32297, 32297, 32297, 32297, - 32297, 32297, 32297, 32297, 32299, 32299, 32303, 32303, - 32303, 32303, 32309, 32309, 32309, 32309, 32309, 32309, - 32321, 32321, 32321, 32321, 32321, 32321, 32321, 32321, - 32321, 32321, 32321, 32321, 32323, 32323, 32327, 32327, - 32327, 32327, 32341, 32341, 32341, 32341, 32341, 32341, - 32341, 32341, 32341, 32341, 32341, 32341, 32341, 32341, - 32353, 32353, 32353, 32353, 32353, 32353, 32353, 32353, - 32353, 32353, 32353, 32353, 32359, 32359, 32359, 32359, - 32359, 32359, 32363, 32363, 32363, 32363, 32369, 32369, - 32369, 32369, 32369, 32369, 32371, 32371, 32377, 32377, - 32377, 32377, 32377, 32377, 32381, 32381, 32381, 32381, - 32401, 32401, 32401, 32401, 32401, 32401, 32401, 32401, - 32401, 32401, 32401, 32401, 32401, 32401, 32401, 32401, - 32401, 32401, 32401, 32401, 32411, 32411, 32411, 32411, - 32411, 32411, 32411, 32411, 32411, 32411, 32413, 32413, - 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, - 32423, 32423, 32429, 32429, 32429, 32429, 32429, 32429, - 32441, 32441, 32441, 32441, 32441, 32441, 32441, 32441, - 32441, 32441, 32441, 32441, 32443, 32443, 32467, 32467, - 32467, 32467, 32467, 32467, 32467, 32467, 32467, 32467, - 32467, 32467, 32467, 32467, 32467, 32467, 32467, 32467, - 32467, 32467, 32467, 32467, 32467, 32467, 32479, 32479, - 32479, 32479, 32479, 32479, 32479, 32479, 32479, 32479, - 32479, 32479, 32491, 32491, 32491, 32491, 32491, 32491, - 32491, 32491, 32491, 32491, 32491, 32491, 32497, 32497, - 32497, 32497, 32497, 32497, 32503, 32503, 32503, 32503, - 32503, 32503, 32507, 32507, 32507, 32507, 32531, 32531, - 32531, 32531, 32531, 32531, 32531, 32531, 32531, 32531, - 32531, 32531, 32531, 32531, 32531, 32531, 32531, 32531, - 32531, 32531, 32531, 32531, 32531, 32531, 32533, 32533, - 32537, 32537, 32537, 32537, 32561, 32561, 32561, 32561, - 32561, 32561, 32561, 32561, 32561, 32561, 32561, 32561, - 32561, 32561, 32561, 32561, 32561, 32561, 32561, 32561, - 32561, 32561, 32561, 32561, 32563, 32563, 32569, 32569, - 32569, 32569, 32569, 32569, 32573, 32573, 32573, 32573, - 32579, 32579, 32579, 32579, 32579, 32579, 32587, 32587, - 32587, 32587, 32587, 32587, 32587, 32587, 32603, 32603, - 32603, 32603, 32603, 32603, 32603, 32603, 32603, 32603, - 32603, 32603, 32603, 32603, 32603, 32603, 32609, 32609, - 32609, 32609, 32609, 32609, 32611, 32611, 32621, 32621, - 32621, 32621, 32621, 32621, 32621, 32621, 32621, 32621, - 32633, 32633, 32633, 32633, 32633, 32633, 32633, 32633, - 32633, 32633, 32633, 32633, 32647, 32647, 32647, 32647, - 32647, 32647, 32647, 32647, 32647, 32647, 32647, 32647, - 32647, 32647, 32653, 32653, 32653, 32653, 32653, 32653, - 32687, 32687, 32687, 32687, 32687, 32687, 32687, 32687, - 32687, 32687, 32687, 32687, 32687, 32687, 32687, 32687, - 32687, 32687, 32687, 32687, 32687, 32687, 32687, 32687, - 32687, 32687, 32687, 32687, 32687, 32687, 32687, 32687, - 32687, 32687, 32693, 32693, 32693, 32693, 32693, 32693, - 32707, 32707, 32707, 32707, 32707, 32707, 32707, 32707, - 32707, 32707, 32707, 32707, 32707, 32707, 32713, 32713, - 32713, 32713, 32713, 32713, 32717, 32717, 32717, 32717, - 32719, 32719, 32749, 32749, 32749, 32749, 32749, 32749, - 32749, 32749, 32749, 32749, 32749, 32749, 32749, 32749, - 32749, 32749, 32749, 32749, 32749, 32749, 32749, 32749, - 32749, 32749, 32749, 32749, 32749, 32749, 32749, 32749, - 32771, 32771, 32771, 32771, 32771, 32771, 32771, 32771, - 32771, 32771, 32771, 32771, 32771, 32771, 32771, 32771, - 32771, 32771, 32771, 32771, 32771, 32771, 32779, 32779, - 32779, 32779, 32779, 32779, 32779, 32779, 32783, 32783, - 32783, 32783, 32789, 32789, 32789, 32789, 32789, 32789, - 32797, 32797, 32797, 32797, 32797, 32797, 32797, 32797, - 32801, 32801, 32801, 32801, 32803, 32803, 32831, 32831, - 32831, 32831, 32831, 32831, 32831, 32831, 32831, 32831, - 32831, 32831, 32831, 32831, 32831, 32831, 32831, 32831, - 32831, 32831, 32831, 32831, 32831, 32831, 32831, 32831, - 32831, 32831, 32833, 32833, 32839, 32839, 32839, 32839, - 32839, 32839, 32843, 32843, 32843, 32843, 32869, 32869, - 32869, 32869, 32869, 32869, 32869, 32869, 32869, 32869, - 32869, 32869, 32869, 32869, 32869, 32869, 32869, 32869, - 32869, 32869, 32869, 32869, 32869, 32869, 32869, 32869, - 32887, 32887, 32887, 32887, 32887, 32887, 32887, 32887, - 32887, 32887, 32887, 32887, 32887, 32887, 32887, 32887, - 32887, 32887, 32909, 32909, 32909, 32909, 32909, 32909, - 32909, 32909, 32909, 32909, 32909, 32909, 32909, 32909, - 32909, 32909, 32909, 32909, 32909, 32909, 32909, 32909, - 32911, 32911, 32917, 32917, 32917, 32917, 32917, 32917, - 32933, 32933, 32933, 32933, 32933, 32933, 32933, 32933, - 32933, 32933, 32933, 32933, 32933, 32933, 32933, 32933, - 32939, 32939, 32939, 32939, 32939, 32939, 32941, 32941, - 32957, 32957, 32957, 32957, 32957, 32957, 32957, 32957, - 32957, 32957, 32957, 32957, 32957, 32957, 32957, 32957, - 32969, 32969, 32969, 32969, 32969, 32969, 32969, 32969, - 32969, 32969, 32969, 32969, 32971, 32971, 32983, 32983, - 32983, 32983, 32983, 32983, 32983, 32983, 32983, 32983, - 32983, 32983, 32987, 32987, 32987, 32987, 32993, 32993, - 32993, 32993, 32993, 32993, 32999, 32999, 32999, 32999, - 32999, 32999, 33013, 33013, 33013, 33013, 33013, 33013, - 33013, 33013, 33013, 33013, 33013, 33013, 33013, 33013, - 33023, 33023, 33023, 33023, 33023, 33023, 33023, 33023, - 33023, 33023, 33029, 33029, 33029, 33029, 33029, 33029, - 33037, 33037, 33037, 33037, 33037, 33037, 33037, 33037, - 33049, 33049, 33049, 33049, 33049, 33049, 33049, 33049, - 33049, 33049, 33049, 33049, 33053, 33053, 33053, 33053, - 33071, 33071, 33071, 33071, 33071, 33071, 33071, 33071, - 33071, 33071, 33071, 33071, 33071, 33071, 33071, 33071, - 33071, 33071, 33073, 33073, 33083, 33083, 33083, 33083, - 33083, 33083, 33083, 33083, 33083, 33083, 33091, 33091, - 33091, 33091, 33091, 33091, 33091, 33091, 33107, 33107, - 33107, 33107, 33107, 33107, 33107, 33107, 33107, 33107, - 33107, 33107, 33107, 33107, 33107, 33107, 33113, 33113, - 33113, 33113, 33113, 33113, 33119, 33119, 33119, 33119, - 33119, 33119, 33149, 33149, 33149, 33149, 33149, 33149, - 33149, 33149, 33149, 33149, 33149, 33149, 33149, 33149, - 33149, 33149, 33149, 33149, 33149, 33149, 33149, 33149, - 33149, 33149, 33149, 33149, 33149, 33149, 33149, 33149, - 33151, 33151, 33161, 33161, 33161, 33161, 33161, 33161, - 33161, 33161, 33161, 33161, 33179, 33179, 33179, 33179, - 33179, 33179, 33179, 33179, 33179, 33179, 33179, 33179, - 33179, 33179, 33179, 33179, 33179, 33179, 33181, 33181, - 33191, 33191, 33191, 33191, 33191, 33191, 33191, 33191, - 33191, 33191, 33199, 33199, 33199, 33199, 33199, 33199, - 33199, 33199, 33203, 33203, 33203, 33203, 33211, 33211, - 33211, 33211, 33211, 33211, 33211, 33211, 33223, 33223, - 33223, 33223, 33223, 33223, 33223, 33223, 33223, 33223, - 33223, 33223, 33247, 33247, 33247, 33247, 33247, 33247, - 33247, 33247, 33247, 33247, 33247, 33247, 33247, 33247, - 33247, 33247, 33247, 33247, 33247, 33247, 33247, 33247, - 33247, 33247, 33287, 33287, 33287, 33287, 33287, 33287, - 33287, 33287, 33287, 33287, 33287, 33287, 33287, 33287, - 33287, 33287, 33287, 33287, 33287, 33287, 33287, 33287, - 33287, 33287, 33287, 33287, 33287, 33287, 33287, 33287, - 33287, 33287, 33287, 33287, 33287, 33287, 33287, 33287, - 33287, 33287, 33289, 33289, 33301, 33301, 33301, 33301, - 33301, 33301, 33301, 33301, 33301, 33301, 33301, 33301, - 33311, 33311, 33311, 33311, 33311, 33311, 33311, 33311, - 33311, 33311, 33317, 33317, 33317, 33317, 33317, 33317, - 33329, 33329, 33329, 33329, 33329, 33329, 33329, 33329, - 33329, 33329, 33329, 33329, 33331, 33331, 33343, 33343, - 33343, 33343, 33343, 33343, 33343, 33343, 33343, 33343, - 33343, 33343, 33347, 33347, 33347, 33347, 33349, 33349, - 33353, 33353, 33353, 33353, 33359, 33359, 33359, 33359, - 33359, 33359, 33377, 33377, 33377, 33377, 33377, 33377, - 33377, 33377, 33377, 33377, 33377, 33377, 33377, 33377, - 33377, 33377, 33377, 33377, 33391, 33391, 33391, 33391, - 33391, 33391, 33391, 33391, 33391, 33391, 33391, 33391, - 33391, 33391, 33403, 33403, 33403, 33403, 33403, 33403, - 33403, 33403, 33403, 33403, 33403, 33403, 33409, 33409, - 33409, 33409, 33409, 33409, 33413, 33413, 33413, 33413, - 33427, 33427, 33427, 33427, 33427, 33427, 33427, 33427, - 33427, 33427, 33427, 33427, 33427, 33427, 33457, 33457, - 33457, 33457, 33457, 33457, 33457, 33457, 33457, 33457, - 33457, 33457, 33457, 33457, 33457, 33457, 33457, 33457, - 33457, 33457, 33457, 33457, 33457, 33457, 33457, 33457, - 33457, 33457, 33457, 33457, 33461, 33461, 33461, 33461, - 33469, 33469, 33469, 33469, 33469, 33469, 33469, 33469, - 33479, 33479, 33479, 33479, 33479, 33479, 33479, 33479, - 33479, 33479, 33487, 33487, 33487, 33487, 33487, 33487, - 33487, 33487, 33493, 33493, 33493, 33493, 33493, 33493, - 33503, 33503, 33503, 33503, 33503, 33503, 33503, 33503, - 33503, 33503, 33521, 33521, 33521, 33521, 33521, 33521, - 33521, 33521, 33521, 33521, 33521, 33521, 33521, 33521, - 33521, 33521, 33521, 33521, 33529, 33529, 33529, 33529, - 33529, 33529, 33529, 33529, 33533, 33533, 33533, 33533, - 33547, 33547, 33547, 33547, 33547, 33547, 33547, 33547, - 33547, 33547, 33547, 33547, 33547, 33547, 33563, 33563, - 33563, 33563, 33563, 33563, 33563, 33563, 33563, 33563, - 33563, 33563, 33563, 33563, 33563, 33563, 33569, 33569, - 33569, 33569, 33569, 33569, 33577, 33577, 33577, 33577, - 33577, 33577, 33577, 33577, 33581, 33581, 33581, 33581, - 33587, 33587, 33587, 33587, 33587, 33587, 33589, 33589, - 33599, 33599, 33599, 33599, 33599, 33599, 33599, 33599, - 33599, 33599, 33601, 33601, 33613, 33613, 33613, 33613, - 33613, 33613, 33613, 33613, 33613, 33613, 33613, 33613, - 33617, 33617, 33617, 33617, 33619, 33619, 33623, 33623, - 33623, 33623, 33629, 33629, 33629, 33629, 33629, 33629, - 33637, 33637, 33637, 33637, 33637, 33637, 33637, 33637, - 33641, 33641, 33641, 33641, 33647, 33647, 33647, 33647, - 33647, 33647, 33679, 33679, 33679, 33679, 33679, 33679, - 33679, 33679, 33679, 33679, 33679, 33679, 33679, 33679, - 33679, 33679, 33679, 33679, 33679, 33679, 33679, 33679, - 33679, 33679, 33679, 33679, 33679, 33679, 33679, 33679, - 33679, 33679, 33703, 33703, 33703, 33703, 33703, 33703, - 33703, 33703, 33703, 33703, 33703, 33703, 33703, 33703, - 33703, 33703, 33703, 33703, 33703, 33703, 33703, 33703, - 33703, 33703, 33713, 33713, 33713, 33713, 33713, 33713, - 33713, 33713, 33713, 33713, 33721, 33721, 33721, 33721, - 33721, 33721, 33721, 33721, 33739, 33739, 33739, 33739, - 33739, 33739, 33739, 33739, 33739, 33739, 33739, 33739, - 33739, 33739, 33739, 33739, 33739, 33739, 33749, 33749, - 33749, 33749, 33749, 33749, 33749, 33749, 33749, 33749, - 33751, 33751, 33757, 33757, 33757, 33757, 33757, 33757, - 33767, 33767, 33767, 33767, 33767, 33767, 33767, 33767, - 33767, 33767, 33769, 33769, 33773, 33773, 33773, 33773, - 33791, 33791, 33791, 33791, 33791, 33791, 33791, 33791, - 33791, 33791, 33791, 33791, 33791, 33791, 33791, 33791, - 33791, 33791, 33797, 33797, 33797, 33797, 33797, 33797, - 33809, 33809, 33809, 33809, 33809, 33809, 33809, 33809, - 33809, 33809, 33809, 33809, 33811, 33811, 33827, 33827, - 33827, 33827, 33827, 33827, 33827, 33827, 33827, 33827, - 33827, 33827, 33827, 33827, 33827, 33827, 33829, 33829, - 33851, 33851, 33851, 33851, 33851, 33851, 33851, 33851, - 33851, 33851, 33851, 33851, 33851, 33851, 33851, 33851, - 33851, 33851, 33851, 33851, 33851, 33851, 33857, 33857, - 33857, 33857, 33857, 33857, 33863, 33863, 33863, 33863, - 33863, 33863, 33871, 33871, 33871, 33871, 33871, 33871, - 33871, 33871, 33889, 33889, 33889, 33889, 33889, 33889, - 33889, 33889, 33889, 33889, 33889, 33889, 33889, 33889, - 33889, 33889, 33889, 33889, 33893, 33893, 33893, 33893, - 33911, 33911, 33911, 33911, 33911, 33911, 33911, 33911, - 33911, 33911, 33911, 33911, 33911, 33911, 33911, 33911, - 33911, 33911, 33923, 33923, 33923, 33923, 33923, 33923, - 33923, 33923, 33923, 33923, 33923, 33923, 33931, 33931, - 33931, 33931, 33931, 33931, 33931, 33931, 33937, 33937, - 33937, 33937, 33937, 33937, 33941, 33941, 33941, 33941, - 33961, 33961, 33961, 33961, 33961, 33961, 33961, 33961, - 33961, 33961, 33961, 33961, 33961, 33961, 33961, 33961, - 33961, 33961, 33961, 33961, 33967, 33967, 33967, 33967, - 33967, 33967, 33997, 33997, 33997, 33997, 33997, 33997, - 33997, 33997, 33997, 33997, 33997, 33997, 33997, 33997, - 33997, 33997, 33997, 33997, 33997, 33997, 33997, 33997, - 33997, 33997, 33997, 33997, 33997, 33997, 33997, 33997, - 34019, 34019, 34019, 34019, 34019, 34019, 34019, 34019, - 34019, 34019, 34019, 34019, 34019, 34019, 34019, 34019, - 34019, 34019, 34019, 34019, 34019, 34019, 34031, 34031, - 34031, 34031, 34031, 34031, 34031, 34031, 34031, 34031, - 34031, 34031, 34033, 34033, 34039, 34039, 34039, 34039, - 34039, 34039, 34057, 34057, 34057, 34057, 34057, 34057, - 34057, 34057, 34057, 34057, 34057, 34057, 34057, 34057, - 34057, 34057, 34057, 34057, 34061, 34061, 34061, 34061, - 34123, 34123, 34123, 34123, 34123, 34123, 34123, 34123, - 34123, 34123, 34123, 34123, 34123, 34123, 34123, 34123, - 34123, 34123, 34123, 34123, 34123, 34123, 34123, 34123, - 34123, 34123, 34123, 34123, 34123, 34123, 34123, 34123, - 34123, 34123, 34123, 34123, 34123, 34123, 34123, 34123, - 34123, 34123, 34123, 34123, 34123, 34123, 34123, 34123, - 34123, 34123, 34123, 34123, 34123, 34123, 34123, 34123, - 34123, 34123, 34123, 34123, 34123, 34123, 34127, 34127, - 34127, 34127, 34129, 34129, 34141, 34141, 34141, 34141, - 34141, 34141, 34141, 34141, 34141, 34141, 34141, 34141, - 34147, 34147, 34147, 34147, 34147, 34147, 34157, 34157, - 34157, 34157, 34157, 34157, 34157, 34157, 34157, 34157, - 34159, 34159, 34171, 34171, 34171, 34171, 34171, 34171, - 34171, 34171, 34171, 34171, 34171, 34171, 34183, 34183, - 34183, 34183, 34183, 34183, 34183, 34183, 34183, 34183, - 34183, 34183, 34211, 34211, 34211, 34211, 34211, 34211, - 34211, 34211, 34211, 34211, 34211, 34211, 34211, 34211, - 34211, 34211, 34211, 34211, 34211, 34211, 34211, 34211, - 34211, 34211, 34211, 34211, 34211, 34211, 34213, 34213, - 34217, 34217, 34217, 34217, 34231, 34231, 34231, 34231, - 34231, 34231, 34231, 34231, 34231, 34231, 34231, 34231, - 34231, 34231, 34253, 34253, 34253, 34253, 34253, 34253, - 34253, 34253, 34253, 34253, 34253, 34253, 34253, 34253, - 34253, 34253, 34253, 34253, 34253, 34253, 34253, 34253, - 34259, 34259, 34259, 34259, 34259, 34259, 34261, 34261, - 34267, 34267, 34267, 34267, 34267, 34267, 34273, 34273, - 34273, 34273, 34273, 34273, 34283, 34283, 34283, 34283, - 34283, 34283, 34283, 34283, 34283, 34283, 34297, 34297, - 34297, 34297, 34297, 34297, 34297, 34297, 34297, 34297, - 34297, 34297, 34297, 34297, 34301, 34301, 34301, 34301, - 34303, 34303, 34313, 34313, 34313, 34313, 34313, 34313, - 34313, 34313, 34313, 34313, 34319, 34319, 34319, 34319, - 34319, 34319, 34327, 34327, 34327, 34327, 34327, 34327, - 34327, 34327, 34337, 34337, 34337, 34337, 34337, 34337, - 34337, 34337, 34337, 34337, 34351, 34351, 34351, 34351, - 34351, 34351, 34351, 34351, 34351, 34351, 34351, 34351, - 34351, 34351, 34361, 34361, 34361, 34361, 34361, 34361, - 34361, 34361, 34361, 34361, 34367, 34367, 34367, 34367, - 34367, 34367, 34369, 34369, 34381, 34381, 34381, 34381, - 34381, 34381, 34381, 34381, 34381, 34381, 34381, 34381, - 34403, 34403, 34403, 34403, 34403, 34403, 34403, 34403, - 34403, 34403, 34403, 34403, 34403, 34403, 34403, 34403, - 34403, 34403, 34403, 34403, 34403, 34403, 34421, 34421, - 34421, 34421, 34421, 34421, 34421, 34421, 34421, 34421, - 34421, 34421, 34421, 34421, 34421, 34421, 34421, 34421, - 34429, 34429, 34429, 34429, 34429, 34429, 34429, 34429, - 34439, 34439, 34439, 34439, 34439, 34439, 34439, 34439, - 34439, 34439, 34457, 34457, 34457, 34457, 34457, 34457, - 34457, 34457, 34457, 34457, 34457, 34457, 34457, 34457, - 34457, 34457, 34457, 34457, 34469, 34469, 34469, 34469, - 34469, 34469, 34469, 34469, 34469, 34469, 34469, 34469, - 34471, 34471, 34483, 34483, 34483, 34483, 34483, 34483, - 34483, 34483, 34483, 34483, 34483, 34483, 34487, 34487, - 34487, 34487, 34499, 34499, 34499, 34499, 34499, 34499, - 34499, 34499, 34499, 34499, 34499, 34499, 34501, 34501, - 34511, 34511, 34511, 34511, 34511, 34511, 34511, 34511, - 34511, 34511, 34513, 34513, 34519, 34519, 34519, 34519, - 34519, 34519, 34537, 34537, 34537, 34537, 34537, 34537, - 34537, 34537, 34537, 34537, 34537, 34537, 34537, 34537, - 34537, 34537, 34537, 34537, 34543, 34543, 34543, 34543, - 34543, 34543, 34549, 34549, 34549, 34549, 34549, 34549, - 34583, 34583, 34583, 34583, 34583, 34583, 34583, 34583, - 34583, 34583, 34583, 34583, 34583, 34583, 34583, 34583, - 34583, 34583, 34583, 34583, 34583, 34583, 34583, 34583, - 34583, 34583, 34583, 34583, 34583, 34583, 34583, 34583, - 34583, 34583, 34589, 34589, 34589, 34589, 34589, 34589, - 34591, 34591, 34603, 34603, 34603, 34603, 34603, 34603, - 34603, 34603, 34603, 34603, 34603, 34603, 34607, 34607, - 34607, 34607, 34613, 34613, 34613, 34613, 34613, 34613, - 34631, 34631, 34631, 34631, 34631, 34631, 34631, 34631, - 34631, 34631, 34631, 34631, 34631, 34631, 34631, 34631, - 34631, 34631, 34649, 34649, 34649, 34649, 34649, 34649, - 34649, 34649, 34649, 34649, 34649, 34649, 34649, 34649, - 34649, 34649, 34649, 34649, 34651, 34651, 34667, 34667, - 34667, 34667, 34667, 34667, 34667, 34667, 34667, 34667, - 34667, 34667, 34667, 34667, 34667, 34667, 34673, 34673, - 34673, 34673, 34673, 34673, 34679, 34679, 34679, 34679, - 34679, 34679, 34687, 34687, 34687, 34687, 34687, 34687, - 34687, 34687, 34693, 34693, 34693, 34693, 34693, 34693, - 34703, 34703, 34703, 34703, 34703, 34703, 34703, 34703, - 34703, 34703, 34721, 34721, 34721, 34721, 34721, 34721, - 34721, 34721, 34721, 34721, 34721, 34721, 34721, 34721, - 34721, 34721, 34721, 34721, 34729, 34729, 34729, 34729, - 34729, 34729, 34729, 34729, 34739, 34739, 34739, 34739, - 34739, 34739, 34739, 34739, 34739, 34739, 34747, 34747, - 34747, 34747, 34747, 34747, 34747, 34747, 34757, 34757, - 34757, 34757, 34757, 34757, 34757, 34757, 34757, 34757, - 34759, 34759, 34763, 34763, 34763, 34763, 34781, 34781, - 34781, 34781, 34781, 34781, 34781, 34781, 34781, 34781, - 34781, 34781, 34781, 34781, 34781, 34781, 34781, 34781, - 34807, 34807, 34807, 34807, 34807, 34807, 34807, 34807, - 34807, 34807, 34807, 34807, 34807, 34807, 34807, 34807, - 34807, 34807, 34807, 34807, 34807, 34807, 34807, 34807, - 34807, 34807, 34819, 34819, 34819, 34819, 34819, 34819, - 34819, 34819, 34819, 34819, 34819, 34819, 34841, 34841, - 34841, 34841, 34841, 34841, 34841, 34841, 34841, 34841, - 34841, 34841, 34841, 34841, 34841, 34841, 34841, 34841, - 34841, 34841, 34841, 34841, 34843, 34843, 34847, 34847, - 34847, 34847, 34849, 34849, 34871, 34871, 34871, 34871, - 34871, 34871, 34871, 34871, 34871, 34871, 34871, 34871, - 34871, 34871, 34871, 34871, 34871, 34871, 34871, 34871, - 34871, 34871, 34877, 34877, 34877, 34877, 34877, 34877, - 34883, 34883, 34883, 34883, 34883, 34883, 34897, 34897, - 34897, 34897, 34897, 34897, 34897, 34897, 34897, 34897, - 34897, 34897, 34897, 34897, 34913, 34913, 34913, 34913, - 34913, 34913, 34913, 34913, 34913, 34913, 34913, 34913, - 34913, 34913, 34913, 34913, 34919, 34919, 34919, 34919, - 34919, 34919, 34939, 34939, 34939, 34939, 34939, 34939, - 34939, 34939, 34939, 34939, 34939, 34939, 34939, 34939, - 34939, 34939, 34939, 34939, 34939, 34939, 34949, 34949, - 34949, 34949, 34949, 34949, 34949, 34949, 34949, 34949, - 34961, 34961, 34961, 34961, 34961, 34961, 34961, 34961, - 34961, 34961, 34961, 34961, 34963, 34963, 34981, 34981, - 34981, 34981, 34981, 34981, 34981, 34981, 34981, 34981, - 34981, 34981, 34981, 34981, 34981, 34981, 34981, 34981, - 35023, 35023, 35023, 35023, 35023, 35023, 35023, 35023, - 35023, 35023, 35023, 35023, 35023, 35023, 35023, 35023, - 35023, 35023, 35023, 35023, 35023, 35023, 35023, 35023, - 35023, 35023, 35023, 35023, 35023, 35023, 35023, 35023, - 35023, 35023, 35023, 35023, 35023, 35023, 35023, 35023, - 35023, 35023, 35027, 35027, 35027, 35027, 35051, 35051, - 35051, 35051, 35051, 35051, 35051, 35051, 35051, 35051, - 35051, 35051, 35051, 35051, 35051, 35051, 35051, 35051, - 35051, 35051, 35051, 35051, 35051, 35051, 35053, 35053, - 35059, 35059, 35059, 35059, 35059, 35059, 35069, 35069, - 35069, 35069, 35069, 35069, 35069, 35069, 35069, 35069, - 35081, 35081, 35081, 35081, 35081, 35081, 35081, 35081, - 35081, 35081, 35081, 35081, 35083, 35083, 35089, 35089, - 35089, 35089, 35089, 35089, 35099, 35099, 35099, 35099, - 35099, 35099, 35099, 35099, 35099, 35099, 35107, 35107, - 35107, 35107, 35107, 35107, 35107, 35107, 35111, 35111, - 35111, 35111, 35117, 35117, 35117, 35117, 35117, 35117, - 35129, 35129, 35129, 35129, 35129, 35129, 35129, 35129, - 35129, 35129, 35129, 35129, 35141, 35141, 35141, 35141, - 35141, 35141, 35141, 35141, 35141, 35141, 35141, 35141, - 35149, 35149, 35149, 35149, 35149, 35149, 35149, 35149, - 35153, 35153, 35153, 35153, 35159, 35159, 35159, 35159, - 35159, 35159, 35171, 35171, 35171, 35171, 35171, 35171, - 35171, 35171, 35171, 35171, 35171, 35171, 35201, 35201, - 35201, 35201, 35201, 35201, 35201, 35201, 35201, 35201, - 35201, 35201, 35201, 35201, 35201, 35201, 35201, 35201, - 35201, 35201, 35201, 35201, 35201, 35201, 35201, 35201, - 35201, 35201, 35201, 35201, 35221, 35221, 35221, 35221, - 35221, 35221, 35221, 35221, 35221, 35221, 35221, 35221, - 35221, 35221, 35221, 35221, 35221, 35221, 35221, 35221, - 35227, 35227, 35227, 35227, 35227, 35227, 35251, 35251, - 35251, 35251, 35251, 35251, 35251, 35251, 35251, 35251, - 35251, 35251, 35251, 35251, 35251, 35251, 35251, 35251, - 35251, 35251, 35251, 35251, 35251, 35251, 35257, 35257, - 35257, 35257, 35257, 35257, 35267, 35267, 35267, 35267, - 35267, 35267, 35267, 35267, 35267, 35267, 35279, 35279, - 35279, 35279, 35279, 35279, 35279, 35279, 35279, 35279, - 35279, 35279, 35281, 35281, 35291, 35291, 35291, 35291, - 35291, 35291, 35291, 35291, 35291, 35291, 35311, 35311, - 35311, 35311, 35311, 35311, 35311, 35311, 35311, 35311, - 35311, 35311, 35311, 35311, 35311, 35311, 35311, 35311, - 35311, 35311, 35317, 35317, 35317, 35317, 35317, 35317, - 35323, 35323, 35323, 35323, 35323, 35323, 35327, 35327, - 35327, 35327, 35339, 35339, 35339, 35339, 35339, 35339, - 35339, 35339, 35339, 35339, 35339, 35339, 35353, 35353, - 35353, 35353, 35353, 35353, 35353, 35353, 35353, 35353, - 35353, 35353, 35353, 35353, 35363, 35363, 35363, 35363, - 35363, 35363, 35363, 35363, 35363, 35363, 35381, 35381, - 35381, 35381, 35381, 35381, 35381, 35381, 35381, 35381, - 35381, 35381, 35381, 35381, 35381, 35381, 35381, 35381, - 35393, 35393, 35393, 35393, 35393, 35393, 35393, 35393, - 35393, 35393, 35393, 35393, 35401, 35401, 35401, 35401, - 35401, 35401, 35401, 35401, 35407, 35407, 35407, 35407, - 35407, 35407, 35419, 35419, 35419, 35419, 35419, 35419, - 35419, 35419, 35419, 35419, 35419, 35419, 35423, 35423, - 35423, 35423, 35437, 35437, 35437, 35437, 35437, 35437, - 35437, 35437, 35437, 35437, 35437, 35437, 35437, 35437, - 35447, 35447, 35447, 35447, 35447, 35447, 35447, 35447, - 35447, 35447, 35449, 35449, 35461, 35461, 35461, 35461, - 35461, 35461, 35461, 35461, 35461, 35461, 35461, 35461, - 35491, 35491, 35491, 35491, 35491, 35491, 35491, 35491, - 35491, 35491, 35491, 35491, 35491, 35491, 35491, 35491, - 35491, 35491, 35491, 35491, 35491, 35491, 35491, 35491, - 35491, 35491, 35491, 35491, 35491, 35491, 35507, 35507, - 35507, 35507, 35507, 35507, 35507, 35507, 35507, 35507, - 35507, 35507, 35507, 35507, 35507, 35507, 35509, 35509, - 35521, 35521, 35521, 35521, 35521, 35521, 35521, 35521, - 35521, 35521, 35521, 35521, 35527, 35527, 35527, 35527, - 35527, 35527, 35531, 35531, 35531, 35531, 35533, 35533, - 35537, 35537, 35537, 35537, 35543, 35543, 35543, 35543, - 35543, 35543, 35569, 35569, 35569, 35569, 35569, 35569, - 35569, 35569, 35569, 35569, 35569, 35569, 35569, 35569, - 35569, 35569, 35569, 35569, 35569, 35569, 35569, 35569, - 35569, 35569, 35569, 35569, 35573, 35573, 35573, 35573, - 35591, 35591, 35591, 35591, 35591, 35591, 35591, 35591, - 35591, 35591, 35591, 35591, 35591, 35591, 35591, 35591, - 35591, 35591, 35593, 35593, 35597, 35597, 35597, 35597, - 35603, 35603, 35603, 35603, 35603, 35603, 35617, 35617, - 35617, 35617, 35617, 35617, 35617, 35617, 35617, 35617, - 35617, 35617, 35617, 35617, 35671, 35671, 35671, 35671, - 35671, 35671, 35671, 35671, 35671, 35671, 35671, 35671, - 35671, 35671, 35671, 35671, 35671, 35671, 35671, 35671, - 35671, 35671, 35671, 35671, 35671, 35671, 35671, 35671, - 35671, 35671, 35671, 35671, 35671, 35671, 35671, 35671, - 35671, 35671, 35671, 35671, 35671, 35671, 35671, 35671, - 35671, 35671, 35671, 35671, 35671, 35671, 35671, 35671, - 35671, 35671, 35677, 35677, 35677, 35677, 35677, 35677, - 35729, 35729, 35729, 35729, 35729, 35729, 35729, 35729, - 35729, 35729, 35729, 35729, 35729, 35729, 35729, 35729, - 35729, 35729, 35729, 35729, 35729, 35729, 35729, 35729, - 35729, 35729, 35729, 35729, 35729, 35729, 35729, 35729, - 35729, 35729, 35729, 35729, 35729, 35729, 35729, 35729, - 35729, 35729, 35729, 35729, 35729, 35729, 35729, 35729, - 35729, 35729, 35729, 35729, 35731, 35731, 35747, 35747, - 35747, 35747, 35747, 35747, 35747, 35747, 35747, 35747, - 35747, 35747, 35747, 35747, 35747, 35747, 35753, 35753, - 35753, 35753, 35753, 35753, 35759, 35759, 35759, 35759, - 35759, 35759, 35771, 35771, 35771, 35771, 35771, 35771, - 35771, 35771, 35771, 35771, 35771, 35771, 35797, 35797, - 35797, 35797, 35797, 35797, 35797, 35797, 35797, 35797, - 35797, 35797, 35797, 35797, 35797, 35797, 35797, 35797, - 35797, 35797, 35797, 35797, 35797, 35797, 35797, 35797, - 35801, 35801, 35801, 35801, 35803, 35803, 35809, 35809, - 35809, 35809, 35809, 35809, 35831, 35831, 35831, 35831, - 35831, 35831, 35831, 35831, 35831, 35831, 35831, 35831, - 35831, 35831, 35831, 35831, 35831, 35831, 35831, 35831, - 35831, 35831, 35837, 35837, 35837, 35837, 35837, 35837, - 35839, 35839, 35851, 35851, 35851, 35851, 35851, 35851, - 35851, 35851, 35851, 35851, 35851, 35851, 35863, 35863, - 35863, 35863, 35863, 35863, 35863, 35863, 35863, 35863, - 35863, 35863, 35869, 35869, 35869, 35869, 35869, 35869, - 35879, 35879, 35879, 35879, 35879, 35879, 35879, 35879, - 35879, 35879, 35897, 35897, 35897, 35897, 35897, 35897, - 35897, 35897, 35897, 35897, 35897, 35897, 35897, 35897, - 35897, 35897, 35897, 35897, 35899, 35899, 35911, 35911, - 35911, 35911, 35911, 35911, 35911, 35911, 35911, 35911, - 35911, 35911, 35923, 35923, 35923, 35923, 35923, 35923, - 35923, 35923, 35923, 35923, 35923, 35923, 35933, 35933, - 35933, 35933, 35933, 35933, 35933, 35933, 35933, 35933, - 35951, 35951, 35951, 35951, 35951, 35951, 35951, 35951, - 35951, 35951, 35951, 35951, 35951, 35951, 35951, 35951, - 35951, 35951, 35963, 35963, 35963, 35963, 35963, 35963, - 35963, 35963, 35963, 35963, 35963, 35963, 35969, 35969, - 35969, 35969, 35969, 35969, 35977, 35977, 35977, 35977, - 35977, 35977, 35977, 35977, 35983, 35983, 35983, 35983, - 35983, 35983, 35993, 35993, 35993, 35993, 35993, 35993, - 35993, 35993, 35993, 35993, 35999, 35999, 35999, 35999, - 35999, 35999, 36007, 36007, 36007, 36007, 36007, 36007, - 36007, 36007, 36011, 36011, 36011, 36011, 36013, 36013, - 36017, 36017, 36017, 36017, 36037, 36037, 36037, 36037, - 36037, 36037, 36037, 36037, 36037, 36037, 36037, 36037, - 36037, 36037, 36037, 36037, 36037, 36037, 36037, 36037, - 36061, 36061, 36061, 36061, 36061, 36061, 36061, 36061, - 36061, 36061, 36061, 36061, 36061, 36061, 36061, 36061, - 36061, 36061, 36061, 36061, 36061, 36061, 36061, 36061, - 36067, 36067, 36067, 36067, 36067, 36067, 36073, 36073, - 36073, 36073, 36073, 36073, 36083, 36083, 36083, 36083, - 36083, 36083, 36083, 36083, 36083, 36083, 36097, 36097, - 36097, 36097, 36097, 36097, 36097, 36097, 36097, 36097, - 36097, 36097, 36097, 36097, 36107, 36107, 36107, 36107, - 36107, 36107, 36107, 36107, 36107, 36107, 36109, 36109, - 36131, 36131, 36131, 36131, 36131, 36131, 36131, 36131, - 36131, 36131, 36131, 36131, 36131, 36131, 36131, 36131, - 36131, 36131, 36131, 36131, 36131, 36131, 36137, 36137, - 36137, 36137, 36137, 36137, 36151, 36151, 36151, 36151, - 36151, 36151, 36151, 36151, 36151, 36151, 36151, 36151, - 36151, 36151, 36161, 36161, 36161, 36161, 36161, 36161, - 36161, 36161, 36161, 36161, 36187, 36187, 36187, 36187, - 36187, 36187, 36187, 36187, 36187, 36187, 36187, 36187, - 36187, 36187, 36187, 36187, 36187, 36187, 36187, 36187, - 36187, 36187, 36187, 36187, 36187, 36187, 36191, 36191, - 36191, 36191, 36209, 36209, 36209, 36209, 36209, 36209, - 36209, 36209, 36209, 36209, 36209, 36209, 36209, 36209, - 36209, 36209, 36209, 36209, 36217, 36217, 36217, 36217, - 36217, 36217, 36217, 36217, 36229, 36229, 36229, 36229, - 36229, 36229, 36229, 36229, 36229, 36229, 36229, 36229, - 36241, 36241, 36241, 36241, 36241, 36241, 36241, 36241, - 36241, 36241, 36241, 36241, 36251, 36251, 36251, 36251, - 36251, 36251, 36251, 36251, 36251, 36251, 36263, 36263, - 36263, 36263, 36263, 36263, 36263, 36263, 36263, 36263, - 36263, 36263, 36269, 36269, 36269, 36269, 36269, 36269, - 36277, 36277, 36277, 36277, 36277, 36277, 36277, 36277, - 36293, 36293, 36293, 36293, 36293, 36293, 36293, 36293, - 36293, 36293, 36293, 36293, 36293, 36293, 36293, 36293, - 36299, 36299, 36299, 36299, 36299, 36299, 36307, 36307, - 36307, 36307, 36307, 36307, 36307, 36307, 36313, 36313, - 36313, 36313, 36313, 36313, 36319, 36319, 36319, 36319, - 36319, 36319, 36341, 36341, 36341, 36341, 36341, 36341, - 36341, 36341, 36341, 36341, 36341, 36341, 36341, 36341, - 36341, 36341, 36341, 36341, 36341, 36341, 36341, 36341, - 36343, 36343, 36353, 36353, 36353, 36353, 36353, 36353, - 36353, 36353, 36353, 36353, 36373, 36373, 36373, 36373, - 36373, 36373, 36373, 36373, 36373, 36373, 36373, 36373, - 36373, 36373, 36373, 36373, 36373, 36373, 36373, 36373, - 36383, 36383, 36383, 36383, 36383, 36383, 36383, 36383, - 36383, 36383, 36389, 36389, 36389, 36389, 36389, 36389, - 36433, 36433, 36433, 36433, 36433, 36433, 36433, 36433, - 36433, 36433, 36433, 36433, 36433, 36433, 36433, 36433, - 36433, 36433, 36433, 36433, 36433, 36433, 36433, 36433, - 36433, 36433, 36433, 36433, 36433, 36433, 36433, 36433, - 36433, 36433, 36433, 36433, 36433, 36433, 36433, 36433, - 36433, 36433, 36433, 36433, 36451, 36451, 36451, 36451, - 36451, 36451, 36451, 36451, 36451, 36451, 36451, 36451, - 36451, 36451, 36451, 36451, 36451, 36451, 36457, 36457, - 36457, 36457, 36457, 36457, 36467, 36467, 36467, 36467, - 36467, 36467, 36467, 36467, 36467, 36467, 36469, 36469, - 36473, 36473, 36473, 36473, 36479, 36479, 36479, 36479, - 36479, 36479, 36493, 36493, 36493, 36493, 36493, 36493, - 36493, 36493, 36493, 36493, 36493, 36493, 36493, 36493, - 36497, 36497, 36497, 36497, 36523, 36523, 36523, 36523, - 36523, 36523, 36523, 36523, 36523, 36523, 36523, 36523, - 36523, 36523, 36523, 36523, 36523, 36523, 36523, 36523, - 36523, 36523, 36523, 36523, 36523, 36523, 36527, 36527, - 36527, 36527, 36529, 36529, 36541, 36541, 36541, 36541, - 36541, 36541, 36541, 36541, 36541, 36541, 36541, 36541, - 36551, 36551, 36551, 36551, 36551, 36551, 36551, 36551, - 36551, 36551, 36559, 36559, 36559, 36559, 36559, 36559, - 36559, 36559, 36563, 36563, 36563, 36563, 36571, 36571, - 36571, 36571, 36571, 36571, 36571, 36571, 36583, 36583, - 36583, 36583, 36583, 36583, 36583, 36583, 36583, 36583, - 36583, 36583, 36587, 36587, 36587, 36587, 36599, 36599, - 36599, 36599, 36599, 36599, 36599, 36599, 36599, 36599, - 36599, 36599, 36607, 36607, 36607, 36607, 36607, 36607, - 36607, 36607, 36629, 36629, 36629, 36629, 36629, 36629, - 36629, 36629, 36629, 36629, 36629, 36629, 36629, 36629, - 36629, 36629, 36629, 36629, 36629, 36629, 36629, 36629, - 36637, 36637, 36637, 36637, 36637, 36637, 36637, 36637, - 36643, 36643, 36643, 36643, 36643, 36643, 36653, 36653, - 36653, 36653, 36653, 36653, 36653, 36653, 36653, 36653, - 36671, 36671, 36671, 36671, 36671, 36671, 36671, 36671, - 36671, 36671, 36671, 36671, 36671, 36671, 36671, 36671, - 36671, 36671, 36677, 36677, 36677, 36677, 36677, 36677, - 36683, 36683, 36683, 36683, 36683, 36683, 36691, 36691, - 36691, 36691, 36691, 36691, 36691, 36691, 36697, 36697, - 36697, 36697, 36697, 36697, 36709, 36709, 36709, 36709, - 36709, 36709, 36709, 36709, 36709, 36709, 36709, 36709, - 36713, 36713, 36713, 36713, 36721, 36721, 36721, 36721, - 36721, 36721, 36721, 36721, 36739, 36739, 36739, 36739, - 36739, 36739, 36739, 36739, 36739, 36739, 36739, 36739, - 36739, 36739, 36739, 36739, 36739, 36739, 36749, 36749, - 36749, 36749, 36749, 36749, 36749, 36749, 36749, 36749, - 36761, 36761, 36761, 36761, 36761, 36761, 36761, 36761, - 36761, 36761, 36761, 36761, 36767, 36767, 36767, 36767, - 36767, 36767, 36779, 36779, 36779, 36779, 36779, 36779, - 36779, 36779, 36779, 36779, 36779, 36779, 36781, 36781, - 36787, 36787, 36787, 36787, 36787, 36787, 36791, 36791, - 36791, 36791, 36793, 36793, 36809, 36809, 36809, 36809, - 36809, 36809, 36809, 36809, 36809, 36809, 36809, 36809, - 36809, 36809, 36809, 36809, 36821, 36821, 36821, 36821, - 36821, 36821, 36821, 36821, 36821, 36821, 36821, 36821, - 36833, 36833, 36833, 36833, 36833, 36833, 36833, 36833, - 36833, 36833, 36833, 36833, 36847, 36847, 36847, 36847, - 36847, 36847, 36847, 36847, 36847, 36847, 36847, 36847, - 36847, 36847, 36857, 36857, 36857, 36857, 36857, 36857, - 36857, 36857, 36857, 36857, 36871, 36871, 36871, 36871, - 36871, 36871, 36871, 36871, 36871, 36871, 36871, 36871, - 36871, 36871, 36877, 36877, 36877, 36877, 36877, 36877, - 36887, 36887, 36887, 36887, 36887, 36887, 36887, 36887, - 36887, 36887, 36899, 36899, 36899, 36899, 36899, 36899, - 36899, 36899, 36899, 36899, 36899, 36899, 36901, 36901, - 36913, 36913, 36913, 36913, 36913, 36913, 36913, 36913, - 36913, 36913, 36913, 36913, 36919, 36919, 36919, 36919, - 36919, 36919, 36923, 36923, 36923, 36923, 36929, 36929, - 36929, 36929, 36929, 36929, 36931, 36931, 36943, 36943, - 36943, 36943, 36943, 36943, 36943, 36943, 36943, 36943, - 36943, 36943, 36947, 36947, 36947, 36947, 36973, 36973, - 36973, 36973, 36973, 36973, 36973, 36973, 36973, 36973, - 36973, 36973, 36973, 36973, 36973, 36973, 36973, 36973, - 36973, 36973, 36973, 36973, 36973, 36973, 36973, 36973, - 36979, 36979, 36979, 36979, 36979, 36979, 36997, 36997, - 36997, 36997, 36997, 36997, 36997, 36997, 36997, 36997, - 36997, 36997, 36997, 36997, 36997, 36997, 36997, 36997, - 37003, 37003, 37003, 37003, 37003, 37003, 37013, 37013, - 37013, 37013, 37013, 37013, 37013, 37013, 37013, 37013, - 37019, 37019, 37019, 37019, 37019, 37019, 37021, 37021, - 37039, 37039, 37039, 37039, 37039, 37039, 37039, 37039, - 37039, 37039, 37039, 37039, 37039, 37039, 37039, 37039, - 37039, 37039, 37049, 37049, 37049, 37049, 37049, 37049, - 37049, 37049, 37049, 37049, 37057, 37057, 37057, 37057, - 37057, 37057, 37057, 37057, 37061, 37061, 37061, 37061, - 37087, 37087, 37087, 37087, 37087, 37087, 37087, 37087, - 37087, 37087, 37087, 37087, 37087, 37087, 37087, 37087, - 37087, 37087, 37087, 37087, 37087, 37087, 37087, 37087, - 37087, 37087, 37097, 37097, 37097, 37097, 37097, 37097, - 37097, 37097, 37097, 37097, 37117, 37117, 37117, 37117, - 37117, 37117, 37117, 37117, 37117, 37117, 37117, 37117, - 37117, 37117, 37117, 37117, 37117, 37117, 37117, 37117, - 37123, 37123, 37123, 37123, 37123, 37123, 37139, 37139, - 37139, 37139, 37139, 37139, 37139, 37139, 37139, 37139, - 37139, 37139, 37139, 37139, 37139, 37139, 37159, 37159, - 37159, 37159, 37159, 37159, 37159, 37159, 37159, 37159, - 37159, 37159, 37159, 37159, 37159, 37159, 37159, 37159, - 37159, 37159, 37171, 37171, 37171, 37171, 37171, 37171, - 37171, 37171, 37171, 37171, 37171, 37171, 37181, 37181, - 37181, 37181, 37181, 37181, 37181, 37181, 37181, 37181, - 37189, 37189, 37189, 37189, 37189, 37189, 37189, 37189, - 37199, 37199, 37199, 37199, 37199, 37199, 37199, 37199, - 37199, 37199, 37201, 37201, 37217, 37217, 37217, 37217, - 37217, 37217, 37217, 37217, 37217, 37217, 37217, 37217, - 37217, 37217, 37217, 37217, 37223, 37223, 37223, 37223, - 37223, 37223, 37243, 37243, 37243, 37243, 37243, 37243, - 37243, 37243, 37243, 37243, 37243, 37243, 37243, 37243, - 37243, 37243, 37243, 37243, 37243, 37243, 37253, 37253, - 37253, 37253, 37253, 37253, 37253, 37253, 37253, 37253, - 37273, 37273, 37273, 37273, 37273, 37273, 37273, 37273, - 37273, 37273, 37273, 37273, 37273, 37273, 37273, 37273, - 37273, 37273, 37273, 37273, 37277, 37277, 37277, 37277, - 37307, 37307, 37307, 37307, 37307, 37307, 37307, 37307, - 37307, 37307, 37307, 37307, 37307, 37307, 37307, 37307, - 37307, 37307, 37307, 37307, 37307, 37307, 37307, 37307, - 37307, 37307, 37307, 37307, 37307, 37307, 37309, 37309, - 37313, 37313, 37313, 37313, 37321, 37321, 37321, 37321, - 37321, 37321, 37321, 37321, 37337, 37337, 37337, 37337, - 37337, 37337, 37337, 37337, 37337, 37337, 37337, 37337, - 37337, 37337, 37337, 37337, 37339, 37339, 37357, 37357, - 37357, 37357, 37357, 37357, 37357, 37357, 37357, 37357, - 37357, 37357, 37357, 37357, 37357, 37357, 37357, 37357, - 37361, 37361, 37361, 37361, 37363, 37363, 37369, 37369, - 37369, 37369, 37369, 37369, 37379, 37379, 37379, 37379, - 37379, 37379, 37379, 37379, 37379, 37379, 37397, 37397, - 37397, 37397, 37397, 37397, 37397, 37397, 37397, 37397, - 37397, 37397, 37397, 37397, 37397, 37397, 37397, 37397, - 37409, 37409, 37409, 37409, 37409, 37409, 37409, 37409, - 37409, 37409, 37409, 37409, 37423, 37423, 37423, 37423, - 37423, 37423, 37423, 37423, 37423, 37423, 37423, 37423, - 37423, 37423, 37441, 37441, 37441, 37441, 37441, 37441, - 37441, 37441, 37441, 37441, 37441, 37441, 37441, 37441, - 37441, 37441, 37441, 37441, 37447, 37447, 37447, 37447, - 37447, 37447, 37463, 37463, 37463, 37463, 37463, 37463, - 37463, 37463, 37463, 37463, 37463, 37463, 37463, 37463, - 37463, 37463, 37483, 37483, 37483, 37483, 37483, 37483, - 37483, 37483, 37483, 37483, 37483, 37483, 37483, 37483, - 37483, 37483, 37483, 37483, 37483, 37483, 37489, 37489, - 37489, 37489, 37489, 37489, 37493, 37493, 37493, 37493, - 37501, 37501, 37501, 37501, 37501, 37501, 37501, 37501, - 37507, 37507, 37507, 37507, 37507, 37507, 37511, 37511, - 37511, 37511, 37517, 37517, 37517, 37517, 37517, 37517, - 37529, 37529, 37529, 37529, 37529, 37529, 37529, 37529, - 37529, 37529, 37529, 37529, 37537, 37537, 37537, 37537, - 37537, 37537, 37537, 37537, 37547, 37547, 37547, 37547, - 37547, 37547, 37547, 37547, 37547, 37547, 37549, 37549, - 37561, 37561, 37561, 37561, 37561, 37561, 37561, 37561, - 37561, 37561, 37561, 37561, 37567, 37567, 37567, 37567, - 37567, 37567, 37571, 37571, 37571, 37571, 37573, 37573, - 37579, 37579, 37579, 37579, 37579, 37579, 37589, 37589, - 37589, 37589, 37589, 37589, 37589, 37589, 37589, 37589, - 37591, 37591, 37607, 37607, 37607, 37607, 37607, 37607, - 37607, 37607, 37607, 37607, 37607, 37607, 37607, 37607, - 37607, 37607, 37619, 37619, 37619, 37619, 37619, 37619, - 37619, 37619, 37619, 37619, 37619, 37619, 37633, 37633, - 37633, 37633, 37633, 37633, 37633, 37633, 37633, 37633, - 37633, 37633, 37633, 37633, 37643, 37643, 37643, 37643, - 37643, 37643, 37643, 37643, 37643, 37643, 37649, 37649, - 37649, 37649, 37649, 37649, 37657, 37657, 37657, 37657, - 37657, 37657, 37657, 37657, 37663, 37663, 37663, 37663, - 37663, 37663, 37691, 37691, 37691, 37691, 37691, 37691, - 37691, 37691, 37691, 37691, 37691, 37691, 37691, 37691, - 37691, 37691, 37691, 37691, 37691, 37691, 37691, 37691, - 37691, 37691, 37691, 37691, 37691, 37691, 37693, 37693, - 37699, 37699, 37699, 37699, 37699, 37699, 37717, 37717, - 37717, 37717, 37717, 37717, 37717, 37717, 37717, 37717, - 37717, 37717, 37717, 37717, 37717, 37717, 37717, 37717, - 37747, 37747, 37747, 37747, 37747, 37747, 37747, 37747, - 37747, 37747, 37747, 37747, 37747, 37747, 37747, 37747, - 37747, 37747, 37747, 37747, 37747, 37747, 37747, 37747, - 37747, 37747, 37747, 37747, 37747, 37747, 37781, 37781, - 37781, 37781, 37781, 37781, 37781, 37781, 37781, 37781, - 37781, 37781, 37781, 37781, 37781, 37781, 37781, 37781, - 37781, 37781, 37781, 37781, 37781, 37781, 37781, 37781, - 37781, 37781, 37781, 37781, 37781, 37781, 37781, 37781, - 37783, 37783, 37799, 37799, 37799, 37799, 37799, 37799, - 37799, 37799, 37799, 37799, 37799, 37799, 37799, 37799, - 37799, 37799, 37811, 37811, 37811, 37811, 37811, 37811, - 37811, 37811, 37811, 37811, 37811, 37811, 37813, 37813, - 37831, 37831, 37831, 37831, 37831, 37831, 37831, 37831, - 37831, 37831, 37831, 37831, 37831, 37831, 37831, 37831, - 37831, 37831, 37847, 37847, 37847, 37847, 37847, 37847, - 37847, 37847, 37847, 37847, 37847, 37847, 37847, 37847, - 37847, 37847, 37853, 37853, 37853, 37853, 37853, 37853, - 37861, 37861, 37861, 37861, 37861, 37861, 37861, 37861, - 37871, 37871, 37871, 37871, 37871, 37871, 37871, 37871, - 37871, 37871, 37879, 37879, 37879, 37879, 37879, 37879, - 37879, 37879, 37889, 37889, 37889, 37889, 37889, 37889, - 37889, 37889, 37889, 37889, 37897, 37897, 37897, 37897, - 37897, 37897, 37897, 37897, 37907, 37907, 37907, 37907, - 37907, 37907, 37907, 37907, 37907, 37907, 37951, 37951, - 37951, 37951, 37951, 37951, 37951, 37951, 37951, 37951, - 37951, 37951, 37951, 37951, 37951, 37951, 37951, 37951, - 37951, 37951, 37951, 37951, 37951, 37951, 37951, 37951, - 37951, 37951, 37951, 37951, 37951, 37951, 37951, 37951, - 37951, 37951, 37951, 37951, 37951, 37951, 37951, 37951, - 37951, 37951, 37957, 37957, 37957, 37957, 37957, 37957, - 37963, 37963, 37963, 37963, 37963, 37963, 37967, 37967, - 37967, 37967, 37987, 37987, 37987, 37987, 37987, 37987, - 37987, 37987, 37987, 37987, 37987, 37987, 37987, 37987, - 37987, 37987, 37987, 37987, 37987, 37987, 37991, 37991, - 37991, 37991, 37993, 37993, 37997, 37997, 37997, 37997, - 38011, 38011, 38011, 38011, 38011, 38011, 38011, 38011, - 38011, 38011, 38011, 38011, 38011, 38011, 38039, 38039, - 38039, 38039, 38039, 38039, 38039, 38039, 38039, 38039, - 38039, 38039, 38039, 38039, 38039, 38039, 38039, 38039, - 38039, 38039, 38039, 38039, 38039, 38039, 38039, 38039, - 38039, 38039, 38047, 38047, 38047, 38047, 38047, 38047, - 38047, 38047, 38053, 38053, 38053, 38053, 38053, 38053, - 38069, 38069, 38069, 38069, 38069, 38069, 38069, 38069, - 38069, 38069, 38069, 38069, 38069, 38069, 38069, 38069, - 38083, 38083, 38083, 38083, 38083, 38083, 38083, 38083, - 38083, 38083, 38083, 38083, 38083, 38083, 38113, 38113, - 38113, 38113, 38113, 38113, 38113, 38113, 38113, 38113, - 38113, 38113, 38113, 38113, 38113, 38113, 38113, 38113, - 38113, 38113, 38113, 38113, 38113, 38113, 38113, 38113, - 38113, 38113, 38113, 38113, 38119, 38119, 38119, 38119, - 38119, 38119, 38149, 38149, 38149, 38149, 38149, 38149, - 38149, 38149, 38149, 38149, 38149, 38149, 38149, 38149, - 38149, 38149, 38149, 38149, 38149, 38149, 38149, 38149, - 38149, 38149, 38149, 38149, 38149, 38149, 38149, 38149, - 38153, 38153, 38153, 38153, 38167, 38167, 38167, 38167, - 38167, 38167, 38167, 38167, 38167, 38167, 38167, 38167, - 38167, 38167, 38177, 38177, 38177, 38177, 38177, 38177, - 38177, 38177, 38177, 38177, 38183, 38183, 38183, 38183, - 38183, 38183, 38189, 38189, 38189, 38189, 38189, 38189, - 38197, 38197, 38197, 38197, 38197, 38197, 38197, 38197, - 38201, 38201, 38201, 38201, 38219, 38219, 38219, 38219, - 38219, 38219, 38219, 38219, 38219, 38219, 38219, 38219, - 38219, 38219, 38219, 38219, 38219, 38219, 38231, 38231, - 38231, 38231, 38231, 38231, 38231, 38231, 38231, 38231, - 38231, 38231, 38237, 38237, 38237, 38237, 38237, 38237, - 38239, 38239, 38261, 38261, 38261, 38261, 38261, 38261, - 38261, 38261, 38261, 38261, 38261, 38261, 38261, 38261, - 38261, 38261, 38261, 38261, 38261, 38261, 38261, 38261, - 38273, 38273, 38273, 38273, 38273, 38273, 38273, 38273, - 38273, 38273, 38273, 38273, 38281, 38281, 38281, 38281, - 38281, 38281, 38281, 38281, 38287, 38287, 38287, 38287, - 38287, 38287, 38299, 38299, 38299, 38299, 38299, 38299, - 38299, 38299, 38299, 38299, 38299, 38299, 38303, 38303, - 38303, 38303, 38317, 38317, 38317, 38317, 38317, 38317, - 38317, 38317, 38317, 38317, 38317, 38317, 38317, 38317, - 38321, 38321, 38321, 38321, 38327, 38327, 38327, 38327, - 38327, 38327, 38329, 38329, 38333, 38333, 38333, 38333, - 38351, 38351, 38351, 38351, 38351, 38351, 38351, 38351, - 38351, 38351, 38351, 38351, 38351, 38351, 38351, 38351, - 38351, 38351, 38371, 38371, 38371, 38371, 38371, 38371, - 38371, 38371, 38371, 38371, 38371, 38371, 38371, 38371, - 38371, 38371, 38371, 38371, 38371, 38371, 38377, 38377, - 38377, 38377, 38377, 38377, 38393, 38393, 38393, 38393, - 38393, 38393, 38393, 38393, 38393, 38393, 38393, 38393, - 38393, 38393, 38393, 38393, 38431, 38431, 38431, 38431, - 38431, 38431, 38431, 38431, 38431, 38431, 38431, 38431, - 38431, 38431, 38431, 38431, 38431, 38431, 38431, 38431, - 38431, 38431, 38431, 38431, 38431, 38431, 38431, 38431, - 38431, 38431, 38431, 38431, 38431, 38431, 38431, 38431, - 38431, 38431, 38447, 38447, 38447, 38447, 38447, 38447, - 38447, 38447, 38447, 38447, 38447, 38447, 38447, 38447, - 38447, 38447, 38449, 38449, 38453, 38453, 38453, 38453, - 38459, 38459, 38459, 38459, 38459, 38459, 38461, 38461, - 38501, 38501, 38501, 38501, 38501, 38501, 38501, 38501, - 38501, 38501, 38501, 38501, 38501, 38501, 38501, 38501, - 38501, 38501, 38501, 38501, 38501, 38501, 38501, 38501, - 38501, 38501, 38501, 38501, 38501, 38501, 38501, 38501, - 38501, 38501, 38501, 38501, 38501, 38501, 38501, 38501, - 38543, 38543, 38543, 38543, 38543, 38543, 38543, 38543, - 38543, 38543, 38543, 38543, 38543, 38543, 38543, 38543, - 38543, 38543, 38543, 38543, 38543, 38543, 38543, 38543, - 38543, 38543, 38543, 38543, 38543, 38543, 38543, 38543, - 38543, 38543, 38543, 38543, 38543, 38543, 38543, 38543, - 38543, 38543, 38557, 38557, 38557, 38557, 38557, 38557, - 38557, 38557, 38557, 38557, 38557, 38557, 38557, 38557, - 38561, 38561, 38561, 38561, 38567, 38567, 38567, 38567, - 38567, 38567, 38569, 38569, 38593, 38593, 38593, 38593, - 38593, 38593, 38593, 38593, 38593, 38593, 38593, 38593, - 38593, 38593, 38593, 38593, 38593, 38593, 38593, 38593, - 38593, 38593, 38593, 38593, 38603, 38603, 38603, 38603, - 38603, 38603, 38603, 38603, 38603, 38603, 38609, 38609, - 38609, 38609, 38609, 38609, 38611, 38611, 38629, 38629, - 38629, 38629, 38629, 38629, 38629, 38629, 38629, 38629, - 38629, 38629, 38629, 38629, 38629, 38629, 38629, 38629, - 38639, 38639, 38639, 38639, 38639, 38639, 38639, 38639, - 38639, 38639, 38651, 38651, 38651, 38651, 38651, 38651, - 38651, 38651, 38651, 38651, 38651, 38651, 38653, 38653, - 38669, 38669, 38669, 38669, 38669, 38669, 38669, 38669, - 38669, 38669, 38669, 38669, 38669, 38669, 38669, 38669, - 38671, 38671, 38677, 38677, 38677, 38677, 38677, 38677, - 38693, 38693, 38693, 38693, 38693, 38693, 38693, 38693, - 38693, 38693, 38693, 38693, 38693, 38693, 38693, 38693, - 38699, 38699, 38699, 38699, 38699, 38699, 38707, 38707, - 38707, 38707, 38707, 38707, 38707, 38707, 38711, 38711, - 38711, 38711, 38713, 38713, 38723, 38723, 38723, 38723, - 38723, 38723, 38723, 38723, 38723, 38723, 38729, 38729, - 38729, 38729, 38729, 38729, 38737, 38737, 38737, 38737, - 38737, 38737, 38737, 38737, 38747, 38747, 38747, 38747, - 38747, 38747, 38747, 38747, 38747, 38747, 38749, 38749, - 38767, 38767, 38767, 38767, 38767, 38767, 38767, 38767, - 38767, 38767, 38767, 38767, 38767, 38767, 38767, 38767, - 38767, 38767, 38783, 38783, 38783, 38783, 38783, 38783, - 38783, 38783, 38783, 38783, 38783, 38783, 38783, 38783, - 38783, 38783, 38791, 38791, 38791, 38791, 38791, 38791, - 38791, 38791, 38803, 38803, 38803, 38803, 38803, 38803, - 38803, 38803, 38803, 38803, 38803, 38803, 38821, 38821, - 38821, 38821, 38821, 38821, 38821, 38821, 38821, 38821, - 38821, 38821, 38821, 38821, 38821, 38821, 38821, 38821, - 38833, 38833, 38833, 38833, 38833, 38833, 38833, 38833, - 38833, 38833, 38833, 38833, 38839, 38839, 38839, 38839, - 38839, 38839, 38851, 38851, 38851, 38851, 38851, 38851, - 38851, 38851, 38851, 38851, 38851, 38851, 38861, 38861, - 38861, 38861, 38861, 38861, 38861, 38861, 38861, 38861, - 38867, 38867, 38867, 38867, 38867, 38867, 38873, 38873, - 38873, 38873, 38873, 38873, 38891, 38891, 38891, 38891, - 38891, 38891, 38891, 38891, 38891, 38891, 38891, 38891, - 38891, 38891, 38891, 38891, 38891, 38891, 38903, 38903, - 38903, 38903, 38903, 38903, 38903, 38903, 38903, 38903, - 38903, 38903, 38917, 38917, 38917, 38917, 38917, 38917, - 38917, 38917, 38917, 38917, 38917, 38917, 38917, 38917, - 38921, 38921, 38921, 38921, 38923, 38923, 38933, 38933, - 38933, 38933, 38933, 38933, 38933, 38933, 38933, 38933, - 38953, 38953, 38953, 38953, 38953, 38953, 38953, 38953, - 38953, 38953, 38953, 38953, 38953, 38953, 38953, 38953, - 38953, 38953, 38953, 38953, 38959, 38959, 38959, 38959, - 38959, 38959, 38971, 38971, 38971, 38971, 38971, 38971, - 38971, 38971, 38971, 38971, 38971, 38971, 38977, 38977, - 38977, 38977, 38977, 38977, 38993, 38993, 38993, 38993, - 38993, 38993, 38993, 38993, 38993, 38993, 38993, 38993, - 38993, 38993, 38993, 38993, 39019, 39019, 39019, 39019, - 39019, 39019, 39019, 39019, 39019, 39019, 39019, 39019, - 39019, 39019, 39019, 39019, 39019, 39019, 39019, 39019, - 39019, 39019, 39019, 39019, 39019, 39019, 39023, 39023, - 39023, 39023, 39041, 39041, 39041, 39041, 39041, 39041, - 39041, 39041, 39041, 39041, 39041, 39041, 39041, 39041, - 39041, 39041, 39041, 39041, 39043, 39043, 39047, 39047, - 39047, 39047, 39079, 39079, 39079, 39079, 39079, 39079, - 39079, 39079, 39079, 39079, 39079, 39079, 39079, 39079, - 39079, 39079, 39079, 39079, 39079, 39079, 39079, 39079, - 39079, 39079, 39079, 39079, 39079, 39079, 39079, 39079, - 39079, 39079, 39089, 39089, 39089, 39089, 39089, 39089, - 39089, 39089, 39089, 39089, 39097, 39097, 39097, 39097, - 39097, 39097, 39097, 39097, 39103, 39103, 39103, 39103, - 39103, 39103, 39107, 39107, 39107, 39107, 39113, 39113, - 39113, 39113, 39113, 39113, 39119, 39119, 39119, 39119, - 39119, 39119, 39133, 39133, 39133, 39133, 39133, 39133, - 39133, 39133, 39133, 39133, 39133, 39133, 39133, 39133, - 39139, 39139, 39139, 39139, 39139, 39139, 39157, 39157, - 39157, 39157, 39157, 39157, 39157, 39157, 39157, 39157, - 39157, 39157, 39157, 39157, 39157, 39157, 39157, 39157, - 39161, 39161, 39161, 39161, 39163, 39163, 39181, 39181, - 39181, 39181, 39181, 39181, 39181, 39181, 39181, 39181, - 39181, 39181, 39181, 39181, 39181, 39181, 39181, 39181, - 39191, 39191, 39191, 39191, 39191, 39191, 39191, 39191, - 39191, 39191, 39199, 39199, 39199, 39199, 39199, 39199, - 39199, 39199, 39209, 39209, 39209, 39209, 39209, 39209, - 39209, 39209, 39209, 39209, 39217, 39217, 39217, 39217, - 39217, 39217, 39217, 39217, 39227, 39227, 39227, 39227, - 39227, 39227, 39227, 39227, 39227, 39227, 39229, 39229, - 39233, 39233, 39233, 39233, 39239, 39239, 39239, 39239, - 39239, 39239, 39241, 39241, 39251, 39251, 39251, 39251, - 39251, 39251, 39251, 39251, 39251, 39251, 39293, 39293, - 39293, 39293, 39293, 39293, 39293, 39293, 39293, 39293, - 39293, 39293, 39293, 39293, 39293, 39293, 39293, 39293, - 39293, 39293, 39293, 39293, 39293, 39293, 39293, 39293, - 39293, 39293, 39293, 39293, 39293, 39293, 39293, 39293, - 39293, 39293, 39293, 39293, 39293, 39293, 39293, 39293, - 39301, 39301, 39301, 39301, 39301, 39301, 39301, 39301, - 39313, 39313, 39313, 39313, 39313, 39313, 39313, 39313, - 39313, 39313, 39313, 39313, 39317, 39317, 39317, 39317, - 39323, 39323, 39323, 39323, 39323, 39323, 39341, 39341, - 39341, 39341, 39341, 39341, 39341, 39341, 39341, 39341, - 39341, 39341, 39341, 39341, 39341, 39341, 39341, 39341, - 39343, 39343, 39359, 39359, 39359, 39359, 39359, 39359, - 39359, 39359, 39359, 39359, 39359, 39359, 39359, 39359, - 39359, 39359, 39367, 39367, 39367, 39367, 39367, 39367, - 39367, 39367, 39371, 39371, 39371, 39371, 39373, 39373, - 39383, 39383, 39383, 39383, 39383, 39383, 39383, 39383, - 39383, 39383, 39397, 39397, 39397, 39397, 39397, 39397, - 39397, 39397, 39397, 39397, 39397, 39397, 39397, 39397, - 39409, 39409, 39409, 39409, 39409, 39409, 39409, 39409, - 39409, 39409, 39409, 39409, 39419, 39419, 39419, 39419, - 39419, 39419, 39419, 39419, 39419, 39419, 39439, 39439, - 39439, 39439, 39439, 39439, 39439, 39439, 39439, 39439, - 39439, 39439, 39439, 39439, 39439, 39439, 39439, 39439, - 39439, 39439, 39443, 39443, 39443, 39443, 39451, 39451, - 39451, 39451, 39451, 39451, 39451, 39451, 39461, 39461, - 39461, 39461, 39461, 39461, 39461, 39461, 39461, 39461, - 39499, 39499, 39499, 39499, 39499, 39499, 39499, 39499, - 39499, 39499, 39499, 39499, 39499, 39499, 39499, 39499, - 39499, 39499, 39499, 39499, 39499, 39499, 39499, 39499, - 39499, 39499, 39499, 39499, 39499, 39499, 39499, 39499, - 39499, 39499, 39499, 39499, 39499, 39499, 39503, 39503, - 39503, 39503, 39509, 39509, 39509, 39509, 39509, 39509, - 39511, 39511, 39521, 39521, 39521, 39521, 39521, 39521, - 39521, 39521, 39521, 39521, 39541, 39541, 39541, 39541, - 39541, 39541, 39541, 39541, 39541, 39541, 39541, 39541, - 39541, 39541, 39541, 39541, 39541, 39541, 39541, 39541, - 39551, 39551, 39551, 39551, 39551, 39551, 39551, 39551, - 39551, 39551, 39563, 39563, 39563, 39563, 39563, 39563, - 39563, 39563, 39563, 39563, 39563, 39563, 39569, 39569, - 39569, 39569, 39569, 39569, 39581, 39581, 39581, 39581, - 39581, 39581, 39581, 39581, 39581, 39581, 39581, 39581, - 39607, 39607, 39607, 39607, 39607, 39607, 39607, 39607, - 39607, 39607, 39607, 39607, 39607, 39607, 39607, 39607, - 39607, 39607, 39607, 39607, 39607, 39607, 39607, 39607, - 39607, 39607, 39619, 39619, 39619, 39619, 39619, 39619, - 39619, 39619, 39619, 39619, 39619, 39619, 39623, 39623, - 39623, 39623, 39631, 39631, 39631, 39631, 39631, 39631, - 39631, 39631, 39659, 39659, 39659, 39659, 39659, 39659, - 39659, 39659, 39659, 39659, 39659, 39659, 39659, 39659, - 39659, 39659, 39659, 39659, 39659, 39659, 39659, 39659, - 39659, 39659, 39659, 39659, 39659, 39659, 39667, 39667, - 39667, 39667, 39667, 39667, 39667, 39667, 39671, 39671, - 39671, 39671, 39679, 39679, 39679, 39679, 39679, 39679, - 39679, 39679, 39703, 39703, 39703, 39703, 39703, 39703, - 39703, 39703, 39703, 39703, 39703, 39703, 39703, 39703, - 39703, 39703, 39703, 39703, 39703, 39703, 39703, 39703, - 39703, 39703, 39709, 39709, 39709, 39709, 39709, 39709, - 39719, 39719, 39719, 39719, 39719, 39719, 39719, 39719, - 39719, 39719, 39727, 39727, 39727, 39727, 39727, 39727, - 39727, 39727, 39733, 39733, 39733, 39733, 39733, 39733, - 39749, 39749, 39749, 39749, 39749, 39749, 39749, 39749, - 39749, 39749, 39749, 39749, 39749, 39749, 39749, 39749, - 39761, 39761, 39761, 39761, 39761, 39761, 39761, 39761, - 39761, 39761, 39761, 39761, 39769, 39769, 39769, 39769, - 39769, 39769, 39769, 39769, 39779, 39779, 39779, 39779, - 39779, 39779, 39779, 39779, 39779, 39779, 39791, 39791, - 39791, 39791, 39791, 39791, 39791, 39791, 39791, 39791, - 39791, 39791, 39799, 39799, 39799, 39799, 39799, 39799, - 39799, 39799, 39821, 39821, 39821, 39821, 39821, 39821, - 39821, 39821, 39821, 39821, 39821, 39821, 39821, 39821, - 39821, 39821, 39821, 39821, 39821, 39821, 39821, 39821, - 39827, 39827, 39827, 39827, 39827, 39827, 39829, 39829, - 39839, 39839, 39839, 39839, 39839, 39839, 39839, 39839, - 39839, 39839, 39841, 39841, 39847, 39847, 39847, 39847, - 39847, 39847, 39857, 39857, 39857, 39857, 39857, 39857, - 39857, 39857, 39857, 39857, 39863, 39863, 39863, 39863, - 39863, 39863, 39869, 39869, 39869, 39869, 39869, 39869, - 39877, 39877, 39877, 39877, 39877, 39877, 39877, 39877, - 39883, 39883, 39883, 39883, 39883, 39883, 39887, 39887, - 39887, 39887, 39901, 39901, 39901, 39901, 39901, 39901, - 39901, 39901, 39901, 39901, 39901, 39901, 39901, 39901, - 39929, 39929, 39929, 39929, 39929, 39929, 39929, 39929, - 39929, 39929, 39929, 39929, 39929, 39929, 39929, 39929, - 39929, 39929, 39929, 39929, 39929, 39929, 39929, 39929, - 39929, 39929, 39929, 39929, 39937, 39937, 39937, 39937, - 39937, 39937, 39937, 39937, 39953, 39953, 39953, 39953, - 39953, 39953, 39953, 39953, 39953, 39953, 39953, 39953, - 39953, 39953, 39953, 39953, 39971, 39971, 39971, 39971, - 39971, 39971, 39971, 39971, 39971, 39971, 39971, 39971, - 39971, 39971, 39971, 39971, 39971, 39971, 39979, 39979, - 39979, 39979, 39979, 39979, 39979, 39979, 39983, 39983, - 39983, 39983, 39989, 39989, 39989, 39989, 39989, 39989, - 40009, 40009, 40009, 40009, 40009, 40009, 40009, 40009, - 40009, 40009, 40009, 40009, 40009, 40009, 40009, 40009, - 40009, 40009, 40009, 40009, 40013, 40013, 40013, 40013, - 40031, 40031, 40031, 40031, 40031, 40031, 40031, 40031, - 40031, 40031, 40031, 40031, 40031, 40031, 40031, 40031, - 40031, 40031, 40037, 40037, 40037, 40037, 40037, 40037, - 40039, 40039, 40063, 40063, 40063, 40063, 40063, 40063, - 40063, 40063, 40063, 40063, 40063, 40063, 40063, 40063, - 40063, 40063, 40063, 40063, 40063, 40063, 40063, 40063, - 40063, 40063, 40087, 40087, 40087, 40087, 40087, 40087, - 40087, 40087, 40087, 40087, 40087, 40087, 40087, 40087, - 40087, 40087, 40087, 40087, 40087, 40087, 40087, 40087, - 40087, 40087, 40093, 40093, 40093, 40093, 40093, 40093, - 40099, 40099, 40099, 40099, 40099, 40099, 40111, 40111, - 40111, 40111, 40111, 40111, 40111, 40111, 40111, 40111, - 40111, 40111, 40123, 40123, 40123, 40123, 40123, 40123, - 40123, 40123, 40123, 40123, 40123, 40123, 40127, 40127, - 40127, 40127, 40129, 40129, 40151, 40151, 40151, 40151, - 40151, 40151, 40151, 40151, 40151, 40151, 40151, 40151, - 40151, 40151, 40151, 40151, 40151, 40151, 40151, 40151, - 40151, 40151, 40153, 40153, 40163, 40163, 40163, 40163, - 40163, 40163, 40163, 40163, 40163, 40163, 40169, 40169, - 40169, 40169, 40169, 40169, 40177, 40177, 40177, 40177, - 40177, 40177, 40177, 40177, 40189, 40189, 40189, 40189, - 40189, 40189, 40189, 40189, 40189, 40189, 40189, 40189, - 40193, 40193, 40193, 40193, 40213, 40213, 40213, 40213, - 40213, 40213, 40213, 40213, 40213, 40213, 40213, 40213, - 40213, 40213, 40213, 40213, 40213, 40213, 40213, 40213, - 40231, 40231, 40231, 40231, 40231, 40231, 40231, 40231, - 40231, 40231, 40231, 40231, 40231, 40231, 40231, 40231, - 40231, 40231, 40237, 40237, 40237, 40237, 40237, 40237, - 40241, 40241, 40241, 40241, 40253, 40253, 40253, 40253, - 40253, 40253, 40253, 40253, 40253, 40253, 40253, 40253, - 40277, 40277, 40277, 40277, 40277, 40277, 40277, 40277, - 40277, 40277, 40277, 40277, 40277, 40277, 40277, 40277, - 40277, 40277, 40277, 40277, 40277, 40277, 40277, 40277, - 40283, 40283, 40283, 40283, 40283, 40283, 40289, 40289, - 40289, 40289, 40289, 40289, 40343, 40343, 40343, 40343, - 40343, 40343, 40343, 40343, 40343, 40343, 40343, 40343, - 40343, 40343, 40343, 40343, 40343, 40343, 40343, 40343, - 40343, 40343, 40343, 40343, 40343, 40343, 40343, 40343, - 40343, 40343, 40343, 40343, 40343, 40343, 40343, 40343, - 40343, 40343, 40343, 40343, 40343, 40343, 40343, 40343, - 40343, 40343, 40343, 40343, 40343, 40343, 40343, 40343, - 40343, 40343, 40351, 40351, 40351, 40351, 40351, 40351, - 40351, 40351, 40357, 40357, 40357, 40357, 40357, 40357, - 40361, 40361, 40361, 40361, 40387, 40387, 40387, 40387, - 40387, 40387, 40387, 40387, 40387, 40387, 40387, 40387, - 40387, 40387, 40387, 40387, 40387, 40387, 40387, 40387, - 40387, 40387, 40387, 40387, 40387, 40387, 40423, 40423, - 40423, 40423, 40423, 40423, 40423, 40423, 40423, 40423, - 40423, 40423, 40423, 40423, 40423, 40423, 40423, 40423, - 40423, 40423, 40423, 40423, 40423, 40423, 40423, 40423, - 40423, 40423, 40423, 40423, 40423, 40423, 40423, 40423, - 40423, 40423, 40427, 40427, 40427, 40427, 40429, 40429, - 40433, 40433, 40433, 40433, 40459, 40459, 40459, 40459, - 40459, 40459, 40459, 40459, 40459, 40459, 40459, 40459, - 40459, 40459, 40459, 40459, 40459, 40459, 40459, 40459, - 40459, 40459, 40459, 40459, 40459, 40459, 40471, 40471, - 40471, 40471, 40471, 40471, 40471, 40471, 40471, 40471, - 40471, 40471, 40483, 40483, 40483, 40483, 40483, 40483, - 40483, 40483, 40483, 40483, 40483, 40483, 40487, 40487, - 40487, 40487, 40493, 40493, 40493, 40493, 40493, 40493, - 40499, 40499, 40499, 40499, 40499, 40499, 40507, 40507, - 40507, 40507, 40507, 40507, 40507, 40507, 40519, 40519, - 40519, 40519, 40519, 40519, 40519, 40519, 40519, 40519, - 40519, 40519, 40529, 40529, 40529, 40529, 40529, 40529, - 40529, 40529, 40529, 40529, 40531, 40531, 40543, 40543, - 40543, 40543, 40543, 40543, 40543, 40543, 40543, 40543, - 40543, 40543, 40559, 40559, 40559, 40559, 40559, 40559, - 40559, 40559, 40559, 40559, 40559, 40559, 40559, 40559, - 40559, 40559, 40577, 40577, 40577, 40577, 40577, 40577, - 40577, 40577, 40577, 40577, 40577, 40577, 40577, 40577, - 40577, 40577, 40577, 40577, 40583, 40583, 40583, 40583, - 40583, 40583, 40591, 40591, 40591, 40591, 40591, 40591, - 40591, 40591, 40597, 40597, 40597, 40597, 40597, 40597, - 40609, 40609, 40609, 40609, 40609, 40609, 40609, 40609, - 40609, 40609, 40609, 40609, 40627, 40627, 40627, 40627, - 40627, 40627, 40627, 40627, 40627, 40627, 40627, 40627, - 40627, 40627, 40627, 40627, 40627, 40627, 40637, 40637, - 40637, 40637, 40637, 40637, 40637, 40637, 40637, 40637, - 40639, 40639, 40693, 40693, 40693, 40693, 40693, 40693, - 40693, 40693, 40693, 40693, 40693, 40693, 40693, 40693, - 40693, 40693, 40693, 40693, 40693, 40693, 40693, 40693, - 40693, 40693, 40693, 40693, 40693, 40693, 40693, 40693, - 40693, 40693, 40693, 40693, 40693, 40693, 40693, 40693, - 40693, 40693, 40693, 40693, 40693, 40693, 40693, 40693, - 40693, 40693, 40693, 40693, 40693, 40693, 40693, 40693, - 40697, 40697, 40697, 40697, 40699, 40699, 40709, 40709, - 40709, 40709, 40709, 40709, 40709, 40709, 40709, 40709, - 40739, 40739, 40739, 40739, 40739, 40739, 40739, 40739, - 40739, 40739, 40739, 40739, 40739, 40739, 40739, 40739, - 40739, 40739, 40739, 40739, 40739, 40739, 40739, 40739, - 40739, 40739, 40739, 40739, 40739, 40739, 40751, 40751, - 40751, 40751, 40751, 40751, 40751, 40751, 40751, 40751, - 40751, 40751, 40759, 40759, 40759, 40759, 40759, 40759, - 40759, 40759, 40763, 40763, 40763, 40763, 40771, 40771, - 40771, 40771, 40771, 40771, 40771, 40771, 40787, 40787, - 40787, 40787, 40787, 40787, 40787, 40787, 40787, 40787, - 40787, 40787, 40787, 40787, 40787, 40787, 40801, 40801, - 40801, 40801, 40801, 40801, 40801, 40801, 40801, 40801, - 40801, 40801, 40801, 40801, 40813, 40813, 40813, 40813, - 40813, 40813, 40813, 40813, 40813, 40813, 40813, 40813, - 40819, 40819, 40819, 40819, 40819, 40819, 40823, 40823, - 40823, 40823, 40829, 40829, 40829, 40829, 40829, 40829, - 40841, 40841, 40841, 40841, 40841, 40841, 40841, 40841, - 40841, 40841, 40841, 40841, 40847, 40847, 40847, 40847, - 40847, 40847, 40849, 40849, 40853, 40853, 40853, 40853, - 40867, 40867, 40867, 40867, 40867, 40867, 40867, 40867, - 40867, 40867, 40867, 40867, 40867, 40867, 40879, 40879, - 40879, 40879, 40879, 40879, 40879, 40879, 40879, 40879, - 40879, 40879, 40883, 40883, 40883, 40883, 40897, 40897, - 40897, 40897, 40897, 40897, 40897, 40897, 40897, 40897, - 40897, 40897, 40897, 40897, 40903, 40903, 40903, 40903, - 40903, 40903, 40927, 40927, 40927, 40927, 40927, 40927, - 40927, 40927, 40927, 40927, 40927, 40927, 40927, 40927, - 40927, 40927, 40927, 40927, 40927, 40927, 40927, 40927, - 40927, 40927, 40933, 40933, 40933, 40933, 40933, 40933, - 40939, 40939, 40939, 40939, 40939, 40939, 40949, 40949, - 40949, 40949, 40949, 40949, 40949, 40949, 40949, 40949, - 40961, 40961, 40961, 40961, 40961, 40961, 40961, 40961, - 40961, 40961, 40961, 40961, 40973, 40973, 40973, 40973, - 40973, 40973, 40973, 40973, 40973, 40973, 40973, 40973, - 40993, 40993, 40993, 40993, 40993, 40993, 40993, 40993, - 40993, 40993, 40993, 40993, 40993, 40993, 40993, 40993, - 40993, 40993, 40993, 40993, 41011, 41011, 41011, 41011, - 41011, 41011, 41011, 41011, 41011, 41011, 41011, 41011, - 41011, 41011, 41011, 41011, 41011, 41011, 41017, 41017, - 41017, 41017, 41017, 41017, 41023, 41023, 41023, 41023, - 41023, 41023, 41039, 41039, 41039, 41039, 41039, 41039, - 41039, 41039, 41039, 41039, 41039, 41039, 41039, 41039, - 41039, 41039, 41047, 41047, 41047, 41047, 41047, 41047, - 41047, 41047, 41051, 41051, 41051, 41051, 41057, 41057, - 41057, 41057, 41057, 41057, 41077, 41077, 41077, 41077, - 41077, 41077, 41077, 41077, 41077, 41077, 41077, 41077, - 41077, 41077, 41077, 41077, 41077, 41077, 41077, 41077, - 41081, 41081, 41081, 41081, 41113, 41113, 41113, 41113, - 41113, 41113, 41113, 41113, 41113, 41113, 41113, 41113, - 41113, 41113, 41113, 41113, 41113, 41113, 41113, 41113, - 41113, 41113, 41113, 41113, 41113, 41113, 41113, 41113, - 41113, 41113, 41113, 41113, 41117, 41117, 41117, 41117, - 41131, 41131, 41131, 41131, 41131, 41131, 41131, 41131, - 41131, 41131, 41131, 41131, 41131, 41131, 41141, 41141, - 41141, 41141, 41141, 41141, 41141, 41141, 41141, 41141, - 41143, 41143, 41149, 41149, 41149, 41149, 41149, 41149, - 41161, 41161, 41161, 41161, 41161, 41161, 41161, 41161, - 41161, 41161, 41161, 41161, 41177, 41177, 41177, 41177, - 41177, 41177, 41177, 41177, 41177, 41177, 41177, 41177, - 41177, 41177, 41177, 41177, 41179, 41179, 41183, 41183, - 41183, 41183, 41189, 41189, 41189, 41189, 41189, 41189, - 41201, 41201, 41201, 41201, 41201, 41201, 41201, 41201, - 41201, 41201, 41201, 41201, 41203, 41203, 41213, 41213, - 41213, 41213, 41213, 41213, 41213, 41213, 41213, 41213, - 41221, 41221, 41221, 41221, 41221, 41221, 41221, 41221, - 41227, 41227, 41227, 41227, 41227, 41227, 41231, 41231, - 41231, 41231, 41233, 41233, 41243, 41243, 41243, 41243, - 41243, 41243, 41243, 41243, 41243, 41243, 41257, 41257, - 41257, 41257, 41257, 41257, 41257, 41257, 41257, 41257, - 41257, 41257, 41257, 41257, 41263, 41263, 41263, 41263, - 41263, 41263, 41269, 41269, 41269, 41269, 41269, 41269, - 41281, 41281, 41281, 41281, 41281, 41281, 41281, 41281, - 41281, 41281, 41281, 41281, 41299, 41299, 41299, 41299, - 41299, 41299, 41299, 41299, 41299, 41299, 41299, 41299, - 41299, 41299, 41299, 41299, 41299, 41299, 41333, 41333, - 41333, 41333, 41333, 41333, 41333, 41333, 41333, 41333, - 41333, 41333, 41333, 41333, 41333, 41333, 41333, 41333, - 41333, 41333, 41333, 41333, 41333, 41333, 41333, 41333, - 41333, 41333, 41333, 41333, 41333, 41333, 41333, 41333, - 41341, 41341, 41341, 41341, 41341, 41341, 41341, 41341, - 41351, 41351, 41351, 41351, 41351, 41351, 41351, 41351, - 41351, 41351, 41357, 41357, 41357, 41357, 41357, 41357, - 41381, 41381, 41381, 41381, 41381, 41381, 41381, 41381, - 41381, 41381, 41381, 41381, 41381, 41381, 41381, 41381, - 41381, 41381, 41381, 41381, 41381, 41381, 41381, 41381, - 41387, 41387, 41387, 41387, 41387, 41387, 41389, 41389, - 41399, 41399, 41399, 41399, 41399, 41399, 41399, 41399, - 41399, 41399, 41411, 41411, 41411, 41411, 41411, 41411, - 41411, 41411, 41411, 41411, 41411, 41411, 41413, 41413, - 41443, 41443, 41443, 41443, 41443, 41443, 41443, 41443, - 41443, 41443, 41443, 41443, 41443, 41443, 41443, 41443, - 41443, 41443, 41443, 41443, 41443, 41443, 41443, 41443, - 41443, 41443, 41443, 41443, 41443, 41443, 41453, 41453, - 41453, 41453, 41453, 41453, 41453, 41453, 41453, 41453, - 41467, 41467, 41467, 41467, 41467, 41467, 41467, 41467, - 41467, 41467, 41467, 41467, 41467, 41467, 41479, 41479, - 41479, 41479, 41479, 41479, 41479, 41479, 41479, 41479, - 41479, 41479, 41491, 41491, 41491, 41491, 41491, 41491, - 41491, 41491, 41491, 41491, 41491, 41491, 41507, 41507, - 41507, 41507, 41507, 41507, 41507, 41507, 41507, 41507, - 41507, 41507, 41507, 41507, 41507, 41507, 41513, 41513, - 41513, 41513, 41513, 41513, 41519, 41519, 41519, 41519, - 41519, 41519, 41521, 41521, 41539, 41539, 41539, 41539, - 41539, 41539, 41539, 41539, 41539, 41539, 41539, 41539, - 41539, 41539, 41539, 41539, 41539, 41539, 41543, 41543, - 41543, 41543, 41549, 41549, 41549, 41549, 41549, 41549, - 41579, 41579, 41579, 41579, 41579, 41579, 41579, 41579, - 41579, 41579, 41579, 41579, 41579, 41579, 41579, 41579, - 41579, 41579, 41579, 41579, 41579, 41579, 41579, 41579, - 41579, 41579, 41579, 41579, 41579, 41579, 41593, 41593, - 41593, 41593, 41593, 41593, 41593, 41593, 41593, 41593, - 41593, 41593, 41593, 41593, 41597, 41597, 41597, 41597, - 41603, 41603, 41603, 41603, 41603, 41603, 41609, 41609, - 41609, 41609, 41609, 41609, 41611, 41611, 41617, 41617, - 41617, 41617, 41617, 41617, 41621, 41621, 41621, 41621, - 41627, 41627, 41627, 41627, 41627, 41627, 41641, 41641, - 41641, 41641, 41641, 41641, 41641, 41641, 41641, 41641, - 41641, 41641, 41641, 41641, 41647, 41647, 41647, 41647, - 41647, 41647, 41651, 41651, 41651, 41651, 41659, 41659, - 41659, 41659, 41659, 41659, 41659, 41659, 41669, 41669, - 41669, 41669, 41669, 41669, 41669, 41669, 41669, 41669, - 41681, 41681, 41681, 41681, 41681, 41681, 41681, 41681, - 41681, 41681, 41681, 41681, 41687, 41687, 41687, 41687, - 41687, 41687, 41719, 41719, 41719, 41719, 41719, 41719, - 41719, 41719, 41719, 41719, 41719, 41719, 41719, 41719, - 41719, 41719, 41719, 41719, 41719, 41719, 41719, 41719, - 41719, 41719, 41719, 41719, 41719, 41719, 41719, 41719, - 41719, 41719, 41729, 41729, 41729, 41729, 41729, 41729, - 41729, 41729, 41729, 41729, 41737, 41737, 41737, 41737, - 41737, 41737, 41737, 41737, 41759, 41759, 41759, 41759, - 41759, 41759, 41759, 41759, 41759, 41759, 41759, 41759, - 41759, 41759, 41759, 41759, 41759, 41759, 41759, 41759, - 41759, 41759, 41761, 41761, 41771, 41771, 41771, 41771, - 41771, 41771, 41771, 41771, 41771, 41771, 41777, 41777, - 41777, 41777, 41777, 41777, 41801, 41801, 41801, 41801, - 41801, 41801, 41801, 41801, 41801, 41801, 41801, 41801, - 41801, 41801, 41801, 41801, 41801, 41801, 41801, 41801, - 41801, 41801, 41801, 41801, 41809, 41809, 41809, 41809, - 41809, 41809, 41809, 41809, 41813, 41813, 41813, 41813, - 41843, 41843, 41843, 41843, 41843, 41843, 41843, 41843, - 41843, 41843, 41843, 41843, 41843, 41843, 41843, 41843, - 41843, 41843, 41843, 41843, 41843, 41843, 41843, 41843, - 41843, 41843, 41843, 41843, 41843, 41843, 41849, 41849, - 41849, 41849, 41849, 41849, 41851, 41851, 41863, 41863, - 41863, 41863, 41863, 41863, 41863, 41863, 41863, 41863, - 41863, 41863, 41879, 41879, 41879, 41879, 41879, 41879, - 41879, 41879, 41879, 41879, 41879, 41879, 41879, 41879, - 41879, 41879, 41887, 41887, 41887, 41887, 41887, 41887, - 41887, 41887, 41893, 41893, 41893, 41893, 41893, 41893, - 41897, 41897, 41897, 41897, 41903, 41903, 41903, 41903, - 41903, 41903, 41911, 41911, 41911, 41911, 41911, 41911, - 41911, 41911, 41927, 41927, 41927, 41927, 41927, 41927, - 41927, 41927, 41927, 41927, 41927, 41927, 41927, 41927, - 41927, 41927, 41941, 41941, 41941, 41941, 41941, 41941, - 41941, 41941, 41941, 41941, 41941, 41941, 41941, 41941, - 41947, 41947, 41947, 41947, 41947, 41947, 41953, 41953, - 41953, 41953, 41953, 41953, 41957, 41957, 41957, 41957, - 41959, 41959, 41969, 41969, 41969, 41969, 41969, 41969, - 41969, 41969, 41969, 41969, 41981, 41981, 41981, 41981, - 41981, 41981, 41981, 41981, 41981, 41981, 41981, 41981, - 41983, 41983, 41999, 41999, 41999, 41999, 41999, 41999, - 41999, 41999, 41999, 41999, 41999, 41999, 41999, 41999, - 41999, 41999, 42013, 42013, 42013, 42013, 42013, 42013, - 42013, 42013, 42013, 42013, 42013, 42013, 42013, 42013, - 42017, 42017, 42017, 42017, 42019, 42019, 42023, 42023, - 42023, 42023, 42043, 42043, 42043, 42043, 42043, 42043, - 42043, 42043, 42043, 42043, 42043, 42043, 42043, 42043, - 42043, 42043, 42043, 42043, 42043, 42043, 42061, 42061, - 42061, 42061, 42061, 42061, 42061, 42061, 42061, 42061, - 42061, 42061, 42061, 42061, 42061, 42061, 42061, 42061, - 42071, 42071, 42071, 42071, 42071, 42071, 42071, 42071, - 42071, 42071, 42073, 42073, 42083, 42083, 42083, 42083, - 42083, 42083, 42083, 42083, 42083, 42083, 42089, 42089, - 42089, 42089, 42089, 42089, 42101, 42101, 42101, 42101, - 42101, 42101, 42101, 42101, 42101, 42101, 42101, 42101, - 42131, 42131, 42131, 42131, 42131, 42131, 42131, 42131, - 42131, 42131, 42131, 42131, 42131, 42131, 42131, 42131, - 42131, 42131, 42131, 42131, 42131, 42131, 42131, 42131, - 42131, 42131, 42131, 42131, 42131, 42131, 42139, 42139, - 42139, 42139, 42139, 42139, 42139, 42139, 42157, 42157, - 42157, 42157, 42157, 42157, 42157, 42157, 42157, 42157, - 42157, 42157, 42157, 42157, 42157, 42157, 42157, 42157, - 42169, 42169, 42169, 42169, 42169, 42169, 42169, 42169, - 42169, 42169, 42169, 42169, 42179, 42179, 42179, 42179, - 42179, 42179, 42179, 42179, 42179, 42179, 42181, 42181, - 42187, 42187, 42187, 42187, 42187, 42187, 42193, 42193, - 42193, 42193, 42193, 42193, 42197, 42197, 42197, 42197, - 42209, 42209, 42209, 42209, 42209, 42209, 42209, 42209, - 42209, 42209, 42209, 42209, 42221, 42221, 42221, 42221, - 42221, 42221, 42221, 42221, 42221, 42221, 42221, 42221, - 42223, 42223, 42227, 42227, 42227, 42227, 42239, 42239, - 42239, 42239, 42239, 42239, 42239, 42239, 42239, 42239, - 42239, 42239, 42257, 42257, 42257, 42257, 42257, 42257, - 42257, 42257, 42257, 42257, 42257, 42257, 42257, 42257, - 42257, 42257, 42257, 42257, 42281, 42281, 42281, 42281, - 42281, 42281, 42281, 42281, 42281, 42281, 42281, 42281, - 42281, 42281, 42281, 42281, 42281, 42281, 42281, 42281, - 42281, 42281, 42281, 42281, 42283, 42283, 42293, 42293, - 42293, 42293, 42293, 42293, 42293, 42293, 42293, 42293, - 42299, 42299, 42299, 42299, 42299, 42299, 42307, 42307, - 42307, 42307, 42307, 42307, 42307, 42307, 42323, 42323, - 42323, 42323, 42323, 42323, 42323, 42323, 42323, 42323, - 42323, 42323, 42323, 42323, 42323, 42323, 42331, 42331, - 42331, 42331, 42331, 42331, 42331, 42331, 42337, 42337, - 42337, 42337, 42337, 42337, 42349, 42349, 42349, 42349, - 42349, 42349, 42349, 42349, 42349, 42349, 42349, 42349, - 42359, 42359, 42359, 42359, 42359, 42359, 42359, 42359, - 42359, 42359, 42373, 42373, 42373, 42373, 42373, 42373, - 42373, 42373, 42373, 42373, 42373, 42373, 42373, 42373, - 42379, 42379, 42379, 42379, 42379, 42379, 42391, 42391, - 42391, 42391, 42391, 42391, 42391, 42391, 42391, 42391, - 42391, 42391, 42397, 42397, 42397, 42397, 42397, 42397, - 42403, 42403, 42403, 42403, 42403, 42403, 42407, 42407, - 42407, 42407, 42409, 42409, 42433, 42433, 42433, 42433, - 42433, 42433, 42433, 42433, 42433, 42433, 42433, 42433, - 42433, 42433, 42433, 42433, 42433, 42433, 42433, 42433, - 42433, 42433, 42433, 42433, 42437, 42437, 42437, 42437, - 42443, 42443, 42443, 42443, 42443, 42443, 42451, 42451, - 42451, 42451, 42451, 42451, 42451, 42451, 42457, 42457, - 42457, 42457, 42457, 42457, 42461, 42461, 42461, 42461, - 42463, 42463, 42467, 42467, 42467, 42467, 42473, 42473, - 42473, 42473, 42473, 42473, 42487, 42487, 42487, 42487, - 42487, 42487, 42487, 42487, 42487, 42487, 42487, 42487, - 42487, 42487, 42491, 42491, 42491, 42491, 42499, 42499, - 42499, 42499, 42499, 42499, 42499, 42499, 42509, 42509, - 42509, 42509, 42509, 42509, 42509, 42509, 42509, 42509, - 42533, 42533, 42533, 42533, 42533, 42533, 42533, 42533, - 42533, 42533, 42533, 42533, 42533, 42533, 42533, 42533, - 42533, 42533, 42533, 42533, 42533, 42533, 42533, 42533, - 42557, 42557, 42557, 42557, 42557, 42557, 42557, 42557, - 42557, 42557, 42557, 42557, 42557, 42557, 42557, 42557, - 42557, 42557, 42557, 42557, 42557, 42557, 42557, 42557, - 42569, 42569, 42569, 42569, 42569, 42569, 42569, 42569, - 42569, 42569, 42569, 42569, 42571, 42571, 42577, 42577, - 42577, 42577, 42577, 42577, 42589, 42589, 42589, 42589, - 42589, 42589, 42589, 42589, 42589, 42589, 42589, 42589, - 42611, 42611, 42611, 42611, 42611, 42611, 42611, 42611, - 42611, 42611, 42611, 42611, 42611, 42611, 42611, 42611, - 42611, 42611, 42611, 42611, 42611, 42611, 42641, 42641, - 42641, 42641, 42641, 42641, 42641, 42641, 42641, 42641, - 42641, 42641, 42641, 42641, 42641, 42641, 42641, 42641, - 42641, 42641, 42641, 42641, 42641, 42641, 42641, 42641, - 42641, 42641, 42641, 42641, 42643, 42643, 42649, 42649, - 42649, 42649, 42649, 42649, 42667, 42667, 42667, 42667, - 42667, 42667, 42667, 42667, 42667, 42667, 42667, 42667, - 42667, 42667, 42667, 42667, 42667, 42667, 42677, 42677, - 42677, 42677, 42677, 42677, 42677, 42677, 42677, 42677, - 42683, 42683, 42683, 42683, 42683, 42683, 42689, 42689, - 42689, 42689, 42689, 42689, 42697, 42697, 42697, 42697, - 42697, 42697, 42697, 42697, 42701, 42701, 42701, 42701, - 42703, 42703, 42709, 42709, 42709, 42709, 42709, 42709, - 42719, 42719, 42719, 42719, 42719, 42719, 42719, 42719, - 42719, 42719, 42727, 42727, 42727, 42727, 42727, 42727, - 42727, 42727, 42737, 42737, 42737, 42737, 42737, 42737, - 42737, 42737, 42737, 42737, 42743, 42743, 42743, 42743, - 42743, 42743, 42751, 42751, 42751, 42751, 42751, 42751, - 42751, 42751, 42767, 42767, 42767, 42767, 42767, 42767, - 42767, 42767, 42767, 42767, 42767, 42767, 42767, 42767, - 42767, 42767, 42773, 42773, 42773, 42773, 42773, 42773, - 42787, 42787, 42787, 42787, 42787, 42787, 42787, 42787, - 42787, 42787, 42787, 42787, 42787, 42787, 42793, 42793, - 42793, 42793, 42793, 42793, 42797, 42797, 42797, 42797, - 42821, 42821, 42821, 42821, 42821, 42821, 42821, 42821, - 42821, 42821, 42821, 42821, 42821, 42821, 42821, 42821, - 42821, 42821, 42821, 42821, 42821, 42821, 42821, 42821, - 42829, 42829, 42829, 42829, 42829, 42829, 42829, 42829, - 42839, 42839, 42839, 42839, 42839, 42839, 42839, 42839, - 42839, 42839, 42841, 42841, 42853, 42853, 42853, 42853, - 42853, 42853, 42853, 42853, 42853, 42853, 42853, 42853, - 42859, 42859, 42859, 42859, 42859, 42859, 42863, 42863, - 42863, 42863, 42899, 42899, 42899, 42899, 42899, 42899, - 42899, 42899, 42899, 42899, 42899, 42899, 42899, 42899, - 42899, 42899, 42899, 42899, 42899, 42899, 42899, 42899, - 42899, 42899, 42899, 42899, 42899, 42899, 42899, 42899, - 42899, 42899, 42899, 42899, 42899, 42899, 42901, 42901, - 42923, 42923, 42923, 42923, 42923, 42923, 42923, 42923, - 42923, 42923, 42923, 42923, 42923, 42923, 42923, 42923, - 42923, 42923, 42923, 42923, 42923, 42923, 42929, 42929, - 42929, 42929, 42929, 42929, 42937, 42937, 42937, 42937, - 42937, 42937, 42937, 42937, 42943, 42943, 42943, 42943, - 42943, 42943, 42953, 42953, 42953, 42953, 42953, 42953, - 42953, 42953, 42953, 42953, 42961, 42961, 42961, 42961, - 42961, 42961, 42961, 42961, 42967, 42967, 42967, 42967, - 42967, 42967, 42979, 42979, 42979, 42979, 42979, 42979, - 42979, 42979, 42979, 42979, 42979, 42979, 42989, 42989, - 42989, 42989, 42989, 42989, 42989, 42989, 42989, 42989, - 43003, 43003, 43003, 43003, 43003, 43003, 43003, 43003, - 43003, 43003, 43003, 43003, 43003, 43003, 43013, 43013, - 43013, 43013, 43013, 43013, 43013, 43013, 43013, 43013, - 43019, 43019, 43019, 43019, 43019, 43019, 43037, 43037, - 43037, 43037, 43037, 43037, 43037, 43037, 43037, 43037, - 43037, 43037, 43037, 43037, 43037, 43037, 43037, 43037, - 43049, 43049, 43049, 43049, 43049, 43049, 43049, 43049, - 43049, 43049, 43049, 43049, 43051, 43051, 43063, 43063, - 43063, 43063, 43063, 43063, 43063, 43063, 43063, 43063, - 43063, 43063, 43067, 43067, 43067, 43067, 43093, 43093, - 43093, 43093, 43093, 43093, 43093, 43093, 43093, 43093, - 43093, 43093, 43093, 43093, 43093, 43093, 43093, 43093, - 43093, 43093, 43093, 43093, 43093, 43093, 43093, 43093, - 43103, 43103, 43103, 43103, 43103, 43103, 43103, 43103, - 43103, 43103, 43117, 43117, 43117, 43117, 43117, 43117, - 43117, 43117, 43117, 43117, 43117, 43117, 43117, 43117, - 43133, 43133, 43133, 43133, 43133, 43133, 43133, 43133, - 43133, 43133, 43133, 43133, 43133, 43133, 43133, 43133, - 43151, 43151, 43151, 43151, 43151, 43151, 43151, 43151, - 43151, 43151, 43151, 43151, 43151, 43151, 43151, 43151, - 43151, 43151, 43159, 43159, 43159, 43159, 43159, 43159, - 43159, 43159, 43177, 43177, 43177, 43177, 43177, 43177, - 43177, 43177, 43177, 43177, 43177, 43177, 43177, 43177, - 43177, 43177, 43177, 43177, 43189, 43189, 43189, 43189, - 43189, 43189, 43189, 43189, 43189, 43189, 43189, 43189, - 43201, 43201, 43201, 43201, 43201, 43201, 43201, 43201, - 43201, 43201, 43201, 43201, 43207, 43207, 43207, 43207, - 43207, 43207, 43223, 43223, 43223, 43223, 43223, 43223, - 43223, 43223, 43223, 43223, 43223, 43223, 43223, 43223, - 43223, 43223, 43237, 43237, 43237, 43237, 43237, 43237, - 43237, 43237, 43237, 43237, 43237, 43237, 43237, 43237, - 43261, 43261, 43261, 43261, 43261, 43261, 43261, 43261, - 43261, 43261, 43261, 43261, 43261, 43261, 43261, 43261, - 43261, 43261, 43261, 43261, 43261, 43261, 43261, 43261, - 43271, 43271, 43271, 43271, 43271, 43271, 43271, 43271, - 43271, 43271, 43283, 43283, 43283, 43283, 43283, 43283, - 43283, 43283, 43283, 43283, 43283, 43283, 43291, 43291, - 43291, 43291, 43291, 43291, 43291, 43291, 43313, 43313, - 43313, 43313, 43313, 43313, 43313, 43313, 43313, 43313, - 43313, 43313, 43313, 43313, 43313, 43313, 43313, 43313, - 43313, 43313, 43313, 43313, 43319, 43319, 43319, 43319, - 43319, 43319, 43321, 43321, 43331, 43331, 43331, 43331, - 43331, 43331, 43331, 43331, 43331, 43331, 43391, 43391, - 43391, 43391, 43391, 43391, 43391, 43391, 43391, 43391, - 43391, 43391, 43391, 43391, 43391, 43391, 43391, 43391, - 43391, 43391, 43391, 43391, 43391, 43391, 43391, 43391, - 43391, 43391, 43391, 43391, 43391, 43391, 43391, 43391, - 43391, 43391, 43391, 43391, 43391, 43391, 43391, 43391, - 43391, 43391, 43391, 43391, 43391, 43391, 43391, 43391, - 43391, 43391, 43391, 43391, 43391, 43391, 43391, 43391, - 43391, 43391, 43397, 43397, 43397, 43397, 43397, 43397, - 43399, 43399, 43403, 43403, 43403, 43403, 43411, 43411, - 43411, 43411, 43411, 43411, 43411, 43411, 43427, 43427, - 43427, 43427, 43427, 43427, 43427, 43427, 43427, 43427, - 43427, 43427, 43427, 43427, 43427, 43427, 43441, 43441, - 43441, 43441, 43441, 43441, 43441, 43441, 43441, 43441, - 43441, 43441, 43441, 43441, 43451, 43451, 43451, 43451, - 43451, 43451, 43451, 43451, 43451, 43451, 43457, 43457, - 43457, 43457, 43457, 43457, 43481, 43481, 43481, 43481, - 43481, 43481, 43481, 43481, 43481, 43481, 43481, 43481, - 43481, 43481, 43481, 43481, 43481, 43481, 43481, 43481, - 43481, 43481, 43481, 43481, 43487, 43487, 43487, 43487, - 43487, 43487, 43499, 43499, 43499, 43499, 43499, 43499, - 43499, 43499, 43499, 43499, 43499, 43499, 43517, 43517, - 43517, 43517, 43517, 43517, 43517, 43517, 43517, 43517, - 43517, 43517, 43517, 43517, 43517, 43517, 43517, 43517, - 43541, 43541, 43541, 43541, 43541, 43541, 43541, 43541, - 43541, 43541, 43541, 43541, 43541, 43541, 43541, 43541, - 43541, 43541, 43541, 43541, 43541, 43541, 43541, 43541, - 43543, 43543, 43573, 43573, 43573, 43573, 43573, 43573, - 43573, 43573, 43573, 43573, 43573, 43573, 43573, 43573, - 43573, 43573, 43573, 43573, 43573, 43573, 43573, 43573, - 43573, 43573, 43573, 43573, 43573, 43573, 43573, 43573, - 43577, 43577, 43577, 43577, 43579, 43579, 43591, 43591, - 43591, 43591, 43591, 43591, 43591, 43591, 43591, 43591, - 43591, 43591, 43597, 43597, 43597, 43597, 43597, 43597, - 43607, 43607, 43607, 43607, 43607, 43607, 43607, 43607, - 43607, 43607, 43609, 43609, 43613, 43613, 43613, 43613, - 43627, 43627, 43627, 43627, 43627, 43627, 43627, 43627, - 43627, 43627, 43627, 43627, 43627, 43627, 43633, 43633, - 43633, 43633, 43633, 43633, 43649, 43649, 43649, 43649, - 43649, 43649, 43649, 43649, 43649, 43649, 43649, 43649, - 43649, 43649, 43649, 43649, 43651, 43651, 43661, 43661, - 43661, 43661, 43661, 43661, 43661, 43661, 43661, 43661, - 43669, 43669, 43669, 43669, 43669, 43669, 43669, 43669, - 43691, 43691, 43691, 43691, 43691, 43691, 43691, 43691, - 43691, 43691, 43691, 43691, 43691, 43691, 43691, 43691, - 43691, 43691, 43691, 43691, 43691, 43691, 43711, 43711, - 43711, 43711, 43711, 43711, 43711, 43711, 43711, 43711, - 43711, 43711, 43711, 43711, 43711, 43711, 43711, 43711, - 43711, 43711, 43717, 43717, 43717, 43717, 43717, 43717, - 43721, 43721, 43721, 43721, 43753, 43753, 43753, 43753, - 43753, 43753, 43753, 43753, 43753, 43753, 43753, 43753, - 43753, 43753, 43753, 43753, 43753, 43753, 43753, 43753, - 43753, 43753, 43753, 43753, 43753, 43753, 43753, 43753, - 43753, 43753, 43753, 43753, 43759, 43759, 43759, 43759, - 43759, 43759, 43777, 43777, 43777, 43777, 43777, 43777, - 43777, 43777, 43777, 43777, 43777, 43777, 43777, 43777, - 43777, 43777, 43777, 43777, 43781, 43781, 43781, 43781, - 43783, 43783, 43787, 43787, 43787, 43787, 43789, 43789, - 43793, 43793, 43793, 43793, 43801, 43801, 43801, 43801, - 43801, 43801, 43801, 43801, 43853, 43853, 43853, 43853, - 43853, 43853, 43853, 43853, 43853, 43853, 43853, 43853, - 43853, 43853, 43853, 43853, 43853, 43853, 43853, 43853, - 43853, 43853, 43853, 43853, 43853, 43853, 43853, 43853, - 43853, 43853, 43853, 43853, 43853, 43853, 43853, 43853, - 43853, 43853, 43853, 43853, 43853, 43853, 43853, 43853, - 43853, 43853, 43853, 43853, 43853, 43853, 43853, 43853, - 43867, 43867, 43867, 43867, 43867, 43867, 43867, 43867, - 43867, 43867, 43867, 43867, 43867, 43867, 43889, 43889, - 43889, 43889, 43889, 43889, 43889, 43889, 43889, 43889, - 43889, 43889, 43889, 43889, 43889, 43889, 43889, 43889, - 43889, 43889, 43889, 43889, 43891, 43891, 43913, 43913, - 43913, 43913, 43913, 43913, 43913, 43913, 43913, 43913, - 43913, 43913, 43913, 43913, 43913, 43913, 43913, 43913, - 43913, 43913, 43913, 43913, 43933, 43933, 43933, 43933, - 43933, 43933, 43933, 43933, 43933, 43933, 43933, 43933, - 43933, 43933, 43933, 43933, 43933, 43933, 43933, 43933, - 43943, 43943, 43943, 43943, 43943, 43943, 43943, 43943, - 43943, 43943, 43951, 43951, 43951, 43951, 43951, 43951, - 43951, 43951, 43961, 43961, 43961, 43961, 43961, 43961, - 43961, 43961, 43961, 43961, 43963, 43963, 43969, 43969, - 43969, 43969, 43969, 43969, 43973, 43973, 43973, 43973, - 43987, 43987, 43987, 43987, 43987, 43987, 43987, 43987, - 43987, 43987, 43987, 43987, 43987, 43987, 43991, 43991, - 43991, 43991, 43997, 43997, 43997, 43997, 43997, 43997, - 44017, 44017, 44017, 44017, 44017, 44017, 44017, 44017, - 44017, 44017, 44017, 44017, 44017, 44017, 44017, 44017, - 44017, 44017, 44017, 44017, 44021, 44021, 44021, 44021, - 44027, 44027, 44027, 44027, 44027, 44027, 44029, 44029, - 44041, 44041, 44041, 44041, 44041, 44041, 44041, 44041, - 44041, 44041, 44041, 44041, 44053, 44053, 44053, 44053, - 44053, 44053, 44053, 44053, 44053, 44053, 44053, 44053, - 44059, 44059, 44059, 44059, 44059, 44059, 44071, 44071, - 44071, 44071, 44071, 44071, 44071, 44071, 44071, 44071, - 44071, 44071, 44087, 44087, 44087, 44087, 44087, 44087, - 44087, 44087, 44087, 44087, 44087, 44087, 44087, 44087, - 44087, 44087, 44089, 44089, 44101, 44101, 44101, 44101, - 44101, 44101, 44101, 44101, 44101, 44101, 44101, 44101, - 44111, 44111, 44111, 44111, 44111, 44111, 44111, 44111, - 44111, 44111, 44119, 44119, 44119, 44119, 44119, 44119, - 44119, 44119, 44123, 44123, 44123, 44123, 44129, 44129, - 44129, 44129, 44129, 44129, 44131, 44131, 44159, 44159, - 44159, 44159, 44159, 44159, 44159, 44159, 44159, 44159, - 44159, 44159, 44159, 44159, 44159, 44159, 44159, 44159, - 44159, 44159, 44159, 44159, 44159, 44159, 44159, 44159, - 44159, 44159, 44171, 44171, 44171, 44171, 44171, 44171, - 44171, 44171, 44171, 44171, 44171, 44171, 44179, 44179, - 44179, 44179, 44179, 44179, 44179, 44179, 44189, 44189, - 44189, 44189, 44189, 44189, 44189, 44189, 44189, 44189, - 44201, 44201, 44201, 44201, 44201, 44201, 44201, 44201, - 44201, 44201, 44201, 44201, 44203, 44203, 44207, 44207, - 44207, 44207, 44221, 44221, 44221, 44221, 44221, 44221, - 44221, 44221, 44221, 44221, 44221, 44221, 44221, 44221, - 44249, 44249, 44249, 44249, 44249, 44249, 44249, 44249, - 44249, 44249, 44249, 44249, 44249, 44249, 44249, 44249, - 44249, 44249, 44249, 44249, 44249, 44249, 44249, 44249, - 44249, 44249, 44249, 44249, 44257, 44257, 44257, 44257, - 44257, 44257, 44257, 44257, 44263, 44263, 44263, 44263, - 44263, 44263, 44267, 44267, 44267, 44267, 44269, 44269, - 44273, 44273, 44273, 44273, 44279, 44279, 44279, 44279, - 44279, 44279, 44281, 44281, 44293, 44293, 44293, 44293, - 44293, 44293, 44293, 44293, 44293, 44293, 44293, 44293, - 44351, 44351, 44351, 44351, 44351, 44351, 44351, 44351, - 44351, 44351, 44351, 44351, 44351, 44351, 44351, 44351, - 44351, 44351, 44351, 44351, 44351, 44351, 44351, 44351, - 44351, 44351, 44351, 44351, 44351, 44351, 44351, 44351, - 44351, 44351, 44351, 44351, 44351, 44351, 44351, 44351, - 44351, 44351, 44351, 44351, 44351, 44351, 44351, 44351, - 44351, 44351, 44351, 44351, 44351, 44351, 44351, 44351, - 44351, 44351, 44357, 44357, 44357, 44357, 44357, 44357, - 44371, 44371, 44371, 44371, 44371, 44371, 44371, 44371, - 44371, 44371, 44371, 44371, 44371, 44371, 44381, 44381, - 44381, 44381, 44381, 44381, 44381, 44381, 44381, 44381, - 44383, 44383, 44389, 44389, 44389, 44389, 44389, 44389, - 44417, 44417, 44417, 44417, 44417, 44417, 44417, 44417, - 44417, 44417, 44417, 44417, 44417, 44417, 44417, 44417, - 44417, 44417, 44417, 44417, 44417, 44417, 44417, 44417, - 44417, 44417, 44417, 44417, 44449, 44449, 44449, 44449, - 44449, 44449, 44449, 44449, 44449, 44449, 44449, 44449, - 44449, 44449, 44449, 44449, 44449, 44449, 44449, 44449, - 44449, 44449, 44449, 44449, 44449, 44449, 44449, 44449, - 44449, 44449, 44449, 44449, 44453, 44453, 44453, 44453, - 44483, 44483, 44483, 44483, 44483, 44483, 44483, 44483, - 44483, 44483, 44483, 44483, 44483, 44483, 44483, 44483, - 44483, 44483, 44483, 44483, 44483, 44483, 44483, 44483, - 44483, 44483, 44483, 44483, 44483, 44483, 44491, 44491, - 44491, 44491, 44491, 44491, 44491, 44491, 44497, 44497, - 44497, 44497, 44497, 44497, 44501, 44501, 44501, 44501, - 44507, 44507, 44507, 44507, 44507, 44507, 44519, 44519, - 44519, 44519, 44519, 44519, 44519, 44519, 44519, 44519, - 44519, 44519, 44531, 44531, 44531, 44531, 44531, 44531, - 44531, 44531, 44531, 44531, 44531, 44531, 44533, 44533, - 44537, 44537, 44537, 44537, 44543, 44543, 44543, 44543, - 44543, 44543, 44549, 44549, 44549, 44549, 44549, 44549, - 44563, 44563, 44563, 44563, 44563, 44563, 44563, 44563, - 44563, 44563, 44563, 44563, 44563, 44563, 44579, 44579, - 44579, 44579, 44579, 44579, 44579, 44579, 44579, 44579, - 44579, 44579, 44579, 44579, 44579, 44579, 44587, 44587, - 44587, 44587, 44587, 44587, 44587, 44587, 44617, 44617, - 44617, 44617, 44617, 44617, 44617, 44617, 44617, 44617, - 44617, 44617, 44617, 44617, 44617, 44617, 44617, 44617, - 44617, 44617, 44617, 44617, 44617, 44617, 44617, 44617, - 44617, 44617, 44617, 44617, 44621, 44621, 44621, 44621, - 44623, 44623, 44633, 44633, 44633, 44633, 44633, 44633, - 44633, 44633, 44633, 44633, 44641, 44641, 44641, 44641, - 44641, 44641, 44641, 44641, 44647, 44647, 44647, 44647, - 44647, 44647, 44651, 44651, 44651, 44651, 44657, 44657, - 44657, 44657, 44657, 44657, 44683, 44683, 44683, 44683, - 44683, 44683, 44683, 44683, 44683, 44683, 44683, 44683, - 44683, 44683, 44683, 44683, 44683, 44683, 44683, 44683, - 44683, 44683, 44683, 44683, 44683, 44683, 44687, 44687, - 44687, 44687, 44699, 44699, 44699, 44699, 44699, 44699, - 44699, 44699, 44699, 44699, 44699, 44699, 44701, 44701, - 44711, 44711, 44711, 44711, 44711, 44711, 44711, 44711, - 44711, 44711, 44729, 44729, 44729, 44729, 44729, 44729, - 44729, 44729, 44729, 44729, 44729, 44729, 44729, 44729, - 44729, 44729, 44729, 44729, 44741, 44741, 44741, 44741, - 44741, 44741, 44741, 44741, 44741, 44741, 44741, 44741, - 44753, 44753, 44753, 44753, 44753, 44753, 44753, 44753, - 44753, 44753, 44753, 44753, 44771, 44771, 44771, 44771, - 44771, 44771, 44771, 44771, 44771, 44771, 44771, 44771, - 44771, 44771, 44771, 44771, 44771, 44771, 44773, 44773, - 44777, 44777, 44777, 44777, 44789, 44789, 44789, 44789, - 44789, 44789, 44789, 44789, 44789, 44789, 44789, 44789, - 44797, 44797, 44797, 44797, 44797, 44797, 44797, 44797, - 44809, 44809, 44809, 44809, 44809, 44809, 44809, 44809, - 44809, 44809, 44809, 44809, 44819, 44819, 44819, 44819, - 44819, 44819, 44819, 44819, 44819, 44819, 44839, 44839, - 44839, 44839, 44839, 44839, 44839, 44839, 44839, 44839, - 44839, 44839, 44839, 44839, 44839, 44839, 44839, 44839, - 44839, 44839, 44843, 44843, 44843, 44843, 44851, 44851, - 44851, 44851, 44851, 44851, 44851, 44851, 44867, 44867, - 44867, 44867, 44867, 44867, 44867, 44867, 44867, 44867, - 44867, 44867, 44867, 44867, 44867, 44867, 44879, 44879, - 44879, 44879, 44879, 44879, 44879, 44879, 44879, 44879, - 44879, 44879, 44887, 44887, 44887, 44887, 44887, 44887, - 44887, 44887, 44893, 44893, 44893, 44893, 44893, 44893, - 44909, 44909, 44909, 44909, 44909, 44909, 44909, 44909, - 44909, 44909, 44909, 44909, 44909, 44909, 44909, 44909, - 44917, 44917, 44917, 44917, 44917, 44917, 44917, 44917, - 44927, 44927, 44927, 44927, 44927, 44927, 44927, 44927, - 44927, 44927, 44939, 44939, 44939, 44939, 44939, 44939, - 44939, 44939, 44939, 44939, 44939, 44939, 44953, 44953, - 44953, 44953, 44953, 44953, 44953, 44953, 44953, 44953, - 44953, 44953, 44953, 44953, 44959, 44959, 44959, 44959, - 44959, 44959, 44963, 44963, 44963, 44963, 44971, 44971, - 44971, 44971, 44971, 44971, 44971, 44971, 44983, 44983, - 44983, 44983, 44983, 44983, 44983, 44983, 44983, 44983, - 44983, 44983, 44987, 44987, 44987, 44987, 45007, 45007, - 45007, 45007, 45007, 45007, 45007, 45007, 45007, 45007, - 45007, 45007, 45007, 45007, 45007, 45007, 45007, 45007, - 45007, 45007, 45013, 45013, 45013, 45013, 45013, 45013, - 45053, 45053, 45053, 45053, 45053, 45053, 45053, 45053, - 45053, 45053, 45053, 45053, 45053, 45053, 45053, 45053, - 45053, 45053, 45053, 45053, 45053, 45053, 45053, 45053, - 45053, 45053, 45053, 45053, 45053, 45053, 45053, 45053, - 45053, 45053, 45053, 45053, 45053, 45053, 45053, 45053, - 45061, 45061, 45061, 45061, 45061, 45061, 45061, 45061, - 45077, 45077, 45077, 45077, 45077, 45077, 45077, 45077, - 45077, 45077, 45077, 45077, 45077, 45077, 45077, 45077, - 45083, 45083, 45083, 45083, 45083, 45083, 45119, 45119, - 45119, 45119, 45119, 45119, 45119, 45119, 45119, 45119, - 45119, 45119, 45119, 45119, 45119, 45119, 45119, 45119, - 45119, 45119, 45119, 45119, 45119, 45119, 45119, 45119, - 45119, 45119, 45119, 45119, 45119, 45119, 45119, 45119, - 45119, 45119, 45121, 45121, 45127, 45127, 45127, 45127, - 45127, 45127, 45131, 45131, 45131, 45131, 45137, 45137, - 45137, 45137, 45137, 45137, 45139, 45139, 45161, 45161, - 45161, 45161, 45161, 45161, 45161, 45161, 45161, 45161, - 45161, 45161, 45161, 45161, 45161, 45161, 45161, 45161, - 45161, 45161, 45161, 45161, 45179, 45179, 45179, 45179, - 45179, 45179, 45179, 45179, 45179, 45179, 45179, 45179, - 45179, 45179, 45179, 45179, 45179, 45179, 45181, 45181, - 45191, 45191, 45191, 45191, 45191, 45191, 45191, 45191, - 45191, 45191, 45197, 45197, 45197, 45197, 45197, 45197, - 45233, 45233, 45233, 45233, 45233, 45233, 45233, 45233, - 45233, 45233, 45233, 45233, 45233, 45233, 45233, 45233, - 45233, 45233, 45233, 45233, 45233, 45233, 45233, 45233, - 45233, 45233, 45233, 45233, 45233, 45233, 45233, 45233, - 45233, 45233, 45233, 45233, 45247, 45247, 45247, 45247, - 45247, 45247, 45247, 45247, 45247, 45247, 45247, 45247, - 45247, 45247, 45259, 45259, 45259, 45259, 45259, 45259, - 45259, 45259, 45259, 45259, 45259, 45259, 45263, 45263, - 45263, 45263, 45281, 45281, 45281, 45281, 45281, 45281, - 45281, 45281, 45281, 45281, 45281, 45281, 45281, 45281, - 45281, 45281, 45281, 45281, 45289, 45289, 45289, 45289, - 45289, 45289, 45289, 45289, 45293, 45293, 45293, 45293, - 45307, 45307, 45307, 45307, 45307, 45307, 45307, 45307, - 45307, 45307, 45307, 45307, 45307, 45307, 45317, 45317, - 45317, 45317, 45317, 45317, 45317, 45317, 45317, 45317, - 45319, 45319, 45329, 45329, 45329, 45329, 45329, 45329, - 45329, 45329, 45329, 45329, 45337, 45337, 45337, 45337, - 45337, 45337, 45337, 45337, 45341, 45341, 45341, 45341, - 45343, 45343, 45361, 45361, 45361, 45361, 45361, 45361, - 45361, 45361, 45361, 45361, 45361, 45361, 45361, 45361, - 45361, 45361, 45361, 45361, 45377, 45377, 45377, 45377, - 45377, 45377, 45377, 45377, 45377, 45377, 45377, 45377, - 45377, 45377, 45377, 45377, 45389, 45389, 45389, 45389, - 45389, 45389, 45389, 45389, 45389, 45389, 45389, 45389, - 45403, 45403, 45403, 45403, 45403, 45403, 45403, 45403, - 45403, 45403, 45403, 45403, 45403, 45403, 45413, 45413, - 45413, 45413, 45413, 45413, 45413, 45413, 45413, 45413, - 45427, 45427, 45427, 45427, 45427, 45427, 45427, 45427, - 45427, 45427, 45427, 45427, 45427, 45427, 45433, 45433, - 45433, 45433, 45433, 45433, 45439, 45439, 45439, 45439, - 45439, 45439, 45481, 45481, 45481, 45481, 45481, 45481, - 45481, 45481, 45481, 45481, 45481, 45481, 45481, 45481, - 45481, 45481, 45481, 45481, 45481, 45481, 45481, 45481, - 45481, 45481, 45481, 45481, 45481, 45481, 45481, 45481, - 45481, 45481, 45481, 45481, 45481, 45481, 45481, 45481, - 45481, 45481, 45481, 45481, 45491, 45491, 45491, 45491, - 45491, 45491, 45491, 45491, 45491, 45491, 45497, 45497, - 45497, 45497, 45497, 45497, 45503, 45503, 45503, 45503, - 45503, 45503, 45523, 45523, 45523, 45523, 45523, 45523, - 45523, 45523, 45523, 45523, 45523, 45523, 45523, 45523, - 45523, 45523, 45523, 45523, 45523, 45523, 45533, 45533, - 45533, 45533, 45533, 45533, 45533, 45533, 45533, 45533, - 45541, 45541, 45541, 45541, 45541, 45541, 45541, 45541, - 45553, 45553, 45553, 45553, 45553, 45553, 45553, 45553, - 45553, 45553, 45553, 45553, 45557, 45557, 45557, 45557, - 45569, 45569, 45569, 45569, 45569, 45569, 45569, 45569, - 45569, 45569, 45569, 45569, 45587, 45587, 45587, 45587, - 45587, 45587, 45587, 45587, 45587, 45587, 45587, 45587, - 45587, 45587, 45587, 45587, 45587, 45587, 45589, 45589, - 45599, 45599, 45599, 45599, 45599, 45599, 45599, 45599, - 45599, 45599, 45613, 45613, 45613, 45613, 45613, 45613, - 45613, 45613, 45613, 45613, 45613, 45613, 45613, 45613, - 45631, 45631, 45631, 45631, 45631, 45631, 45631, 45631, - 45631, 45631, 45631, 45631, 45631, 45631, 45631, 45631, - 45631, 45631, 45641, 45641, 45641, 45641, 45641, 45641, - 45641, 45641, 45641, 45641, 45659, 45659, 45659, 45659, - 45659, 45659, 45659, 45659, 45659, 45659, 45659, 45659, - 45659, 45659, 45659, 45659, 45659, 45659, 45667, 45667, - 45667, 45667, 45667, 45667, 45667, 45667, 45673, 45673, - 45673, 45673, 45673, 45673, 45677, 45677, 45677, 45677, - 45691, 45691, 45691, 45691, 45691, 45691, 45691, 45691, - 45691, 45691, 45691, 45691, 45691, 45691, 45697, 45697, - 45697, 45697, 45697, 45697, 45707, 45707, 45707, 45707, - 45707, 45707, 45707, 45707, 45707, 45707, 45737, 45737, - 45737, 45737, 45737, 45737, 45737, 45737, 45737, 45737, - 45737, 45737, 45737, 45737, 45737, 45737, 45737, 45737, - 45737, 45737, 45737, 45737, 45737, 45737, 45737, 45737, - 45737, 45737, 45737, 45737, 45751, 45751, 45751, 45751, - 45751, 45751, 45751, 45751, 45751, 45751, 45751, 45751, - 45751, 45751, 45757, 45757, 45757, 45757, 45757, 45757, - 45763, 45763, 45763, 45763, 45763, 45763, 45767, 45767, - 45767, 45767, 45779, 45779, 45779, 45779, 45779, 45779, - 45779, 45779, 45779, 45779, 45779, 45779, 45817, 45817, - 45817, 45817, 45817, 45817, 45817, 45817, 45817, 45817, - 45817, 45817, 45817, 45817, 45817, 45817, 45817, 45817, - 45817, 45817, 45817, 45817, 45817, 45817, 45817, 45817, - 45817, 45817, 45817, 45817, 45817, 45817, 45817, 45817, - 45817, 45817, 45817, 45817, 45821, 45821, 45821, 45821, - 45823, 45823, 45827, 45827, 45827, 45827, 45833, 45833, - 45833, 45833, 45833, 45833, 45841, 45841, 45841, 45841, - 45841, 45841, 45841, 45841, 45853, 45853, 45853, 45853, - 45853, 45853, 45853, 45853, 45853, 45853, 45853, 45853, - 45863, 45863, 45863, 45863, 45863, 45863, 45863, 45863, - 45863, 45863, 45869, 45869, 45869, 45869, 45869, 45869, - 45887, 45887, 45887, 45887, 45887, 45887, 45887, 45887, - 45887, 45887, 45887, 45887, 45887, 45887, 45887, 45887, - 45887, 45887, 45893, 45893, 45893, 45893, 45893, 45893, - 45943, 45943, 45943, 45943, 45943, 45943, 45943, 45943, - 45943, 45943, 45943, 45943, 45943, 45943, 45943, 45943, - 45943, 45943, 45943, 45943, 45943, 45943, 45943, 45943, - 45943, 45943, 45943, 45943, 45943, 45943, 45943, 45943, - 45943, 45943, 45943, 45943, 45943, 45943, 45943, 45943, - 45943, 45943, 45943, 45943, 45943, 45943, 45943, 45943, - 45943, 45943, 45949, 45949, 45949, 45949, 45949, 45949, - 45953, 45953, 45953, 45953, 45959, 45959, 45959, 45959, - 45959, 45959, 45971, 45971, 45971, 45971, 45971, 45971, - 45971, 45971, 45971, 45971, 45971, 45971, 45979, 45979, - 45979, 45979, 45979, 45979, 45979, 45979, 45989, 45989, - 45989, 45989, 45989, 45989, 45989, 45989, 45989, 45989, - 46021, 46021, 46021, 46021, 46021, 46021, 46021, 46021, - 46021, 46021, 46021, 46021, 46021, 46021, 46021, 46021, - 46021, 46021, 46021, 46021, 46021, 46021, 46021, 46021, - 46021, 46021, 46021, 46021, 46021, 46021, 46021, 46021, - 46027, 46027, 46027, 46027, 46027, 46027, 46049, 46049, - 46049, 46049, 46049, 46049, 46049, 46049, 46049, 46049, - 46049, 46049, 46049, 46049, 46049, 46049, 46049, 46049, - 46049, 46049, 46049, 46049, 46051, 46051, 46061, 46061, - 46061, 46061, 46061, 46061, 46061, 46061, 46061, 46061, - 46073, 46073, 46073, 46073, 46073, 46073, 46073, 46073, - 46073, 46073, 46073, 46073, 46091, 46091, 46091, 46091, - 46091, 46091, 46091, 46091, 46091, 46091, 46091, 46091, - 46091, 46091, 46091, 46091, 46091, 46091, 46093, 46093, - 46099, 46099, 46099, 46099, 46099, 46099, 46103, 46103, - 46103, 46103, 46133, 46133, 46133, 46133, 46133, 46133, - 46133, 46133, 46133, 46133, 46133, 46133, 46133, 46133, - 46133, 46133, 46133, 46133, 46133, 46133, 46133, 46133, - 46133, 46133, 46133, 46133, 46133, 46133, 46133, 46133, - 46141, 46141, 46141, 46141, 46141, 46141, 46141, 46141, - 46147, 46147, 46147, 46147, 46147, 46147, 46153, 46153, - 46153, 46153, 46153, 46153, 46171, 46171, 46171, 46171, - 46171, 46171, 46171, 46171, 46171, 46171, 46171, 46171, - 46171, 46171, 46171, 46171, 46171, 46171, 46181, 46181, - 46181, 46181, 46181, 46181, 46181, 46181, 46181, 46181, - 46183, 46183, 46187, 46187, 46187, 46187, 46199, 46199, - 46199, 46199, 46199, 46199, 46199, 46199, 46199, 46199, - 46199, 46199, 46219, 46219, 46219, 46219, 46219, 46219, - 46219, 46219, 46219, 46219, 46219, 46219, 46219, 46219, - 46219, 46219, 46219, 46219, 46219, 46219, 46229, 46229, - 46229, 46229, 46229, 46229, 46229, 46229, 46229, 46229, - 46237, 46237, 46237, 46237, 46237, 46237, 46237, 46237, - 46261, 46261, 46261, 46261, 46261, 46261, 46261, 46261, - 46261, 46261, 46261, 46261, 46261, 46261, 46261, 46261, - 46261, 46261, 46261, 46261, 46261, 46261, 46261, 46261, - 46271, 46271, 46271, 46271, 46271, 46271, 46271, 46271, - 46271, 46271, 46273, 46273, 46279, 46279, 46279, 46279, - 46279, 46279, 46301, 46301, 46301, 46301, 46301, 46301, - 46301, 46301, 46301, 46301, 46301, 46301, 46301, 46301, - 46301, 46301, 46301, 46301, 46301, 46301, 46301, 46301, - 46307, 46307, 46307, 46307, 46307, 46307, 46309, 46309, - 46327, 46327, 46327, 46327, 46327, 46327, 46327, 46327, - 46327, 46327, 46327, 46327, 46327, 46327, 46327, 46327, - 46327, 46327, 46337, 46337, 46337, 46337, 46337, 46337, - 46337, 46337, 46337, 46337, 46349, 46349, 46349, 46349, - 46349, 46349, 46349, 46349, 46349, 46349, 46349, 46349, - 46351, 46351, 46381, 46381, 46381, 46381, 46381, 46381, - 46381, 46381, 46381, 46381, 46381, 46381, 46381, 46381, - 46381, 46381, 46381, 46381, 46381, 46381, 46381, 46381, - 46381, 46381, 46381, 46381, 46381, 46381, 46381, 46381, - 46399, 46399, 46399, 46399, 46399, 46399, 46399, 46399, - 46399, 46399, 46399, 46399, 46399, 46399, 46399, 46399, - 46399, 46399, 46411, 46411, 46411, 46411, 46411, 46411, - 46411, 46411, 46411, 46411, 46411, 46411, 46439, 46439, - 46439, 46439, 46439, 46439, 46439, 46439, 46439, 46439, - 46439, 46439, 46439, 46439, 46439, 46439, 46439, 46439, - 46439, 46439, 46439, 46439, 46439, 46439, 46439, 46439, - 46439, 46439, 46441, 46441, 46447, 46447, 46447, 46447, - 46447, 46447, 46451, 46451, 46451, 46451, 46457, 46457, - 46457, 46457, 46457, 46457, 46471, 46471, 46471, 46471, - 46471, 46471, 46471, 46471, 46471, 46471, 46471, 46471, - 46471, 46471, 46477, 46477, 46477, 46477, 46477, 46477, - 46489, 46489, 46489, 46489, 46489, 46489, 46489, 46489, - 46489, 46489, 46489, 46489, 46499, 46499, 46499, 46499, - 46499, 46499, 46499, 46499, 46499, 46499, 46507, 46507, - 46507, 46507, 46507, 46507, 46507, 46507, 46511, 46511, - 46511, 46511, 46523, 46523, 46523, 46523, 46523, 46523, - 46523, 46523, 46523, 46523, 46523, 46523, 46549, 46549, - 46549, 46549, 46549, 46549, 46549, 46549, 46549, 46549, - 46549, 46549, 46549, 46549, 46549, 46549, 46549, 46549, - 46549, 46549, 46549, 46549, 46549, 46549, 46549, 46549, - 46559, 46559, 46559, 46559, 46559, 46559, 46559, 46559, - 46559, 46559, 46567, 46567, 46567, 46567, 46567, 46567, - 46567, 46567, 46573, 46573, 46573, 46573, 46573, 46573, - 46589, 46589, 46589, 46589, 46589, 46589, 46589, 46589, - 46589, 46589, 46589, 46589, 46589, 46589, 46589, 46589, - 46591, 46591, 46601, 46601, 46601, 46601, 46601, 46601, - 46601, 46601, 46601, 46601, 46619, 46619, 46619, 46619, - 46619, 46619, 46619, 46619, 46619, 46619, 46619, 46619, - 46619, 46619, 46619, 46619, 46619, 46619, 46633, 46633, - 46633, 46633, 46633, 46633, 46633, 46633, 46633, 46633, - 46633, 46633, 46633, 46633, 46639, 46639, 46639, 46639, - 46639, 46639, 46643, 46643, 46643, 46643, 46649, 46649, - 46649, 46649, 46649, 46649, 46663, 46663, 46663, 46663, - 46663, 46663, 46663, 46663, 46663, 46663, 46663, 46663, - 46663, 46663, 46679, 46679, 46679, 46679, 46679, 46679, - 46679, 46679, 46679, 46679, 46679, 46679, 46679, 46679, - 46679, 46679, 46681, 46681, 46687, 46687, 46687, 46687, - 46687, 46687, 46691, 46691, 46691, 46691, 46703, 46703, - 46703, 46703, 46703, 46703, 46703, 46703, 46703, 46703, - 46703, 46703, 46723, 46723, 46723, 46723, 46723, 46723, - 46723, 46723, 46723, 46723, 46723, 46723, 46723, 46723, - 46723, 46723, 46723, 46723, 46723, 46723, 46727, 46727, - 46727, 46727, 46747, 46747, 46747, 46747, 46747, 46747, - 46747, 46747, 46747, 46747, 46747, 46747, 46747, 46747, - 46747, 46747, 46747, 46747, 46747, 46747, 46751, 46751, - 46751, 46751, 46757, 46757, 46757, 46757, 46757, 46757, - 46769, 46769, 46769, 46769, 46769, 46769, 46769, 46769, - 46769, 46769, 46769, 46769, 46771, 46771, 46807, 46807, - 46807, 46807, 46807, 46807, 46807, 46807, 46807, 46807, - 46807, 46807, 46807, 46807, 46807, 46807, 46807, 46807, - 46807, 46807, 46807, 46807, 46807, 46807, 46807, 46807, - 46807, 46807, 46807, 46807, 46807, 46807, 46807, 46807, - 46807, 46807, 46811, 46811, 46811, 46811, 46817, 46817, - 46817, 46817, 46817, 46817, 46819, 46819, 46829, 46829, - 46829, 46829, 46829, 46829, 46829, 46829, 46829, 46829, - 46831, 46831, 46853, 46853, 46853, 46853, 46853, 46853, - 46853, 46853, 46853, 46853, 46853, 46853, 46853, 46853, - 46853, 46853, 46853, 46853, 46853, 46853, 46853, 46853, - 46861, 46861, 46861, 46861, 46861, 46861, 46861, 46861, - 46867, 46867, 46867, 46867, 46867, 46867, 46877, 46877, - 46877, 46877, 46877, 46877, 46877, 46877, 46877, 46877, - 46889, 46889, 46889, 46889, 46889, 46889, 46889, 46889, - 46889, 46889, 46889, 46889, 46901, 46901, 46901, 46901, - 46901, 46901, 46901, 46901, 46901, 46901, 46901, 46901, - 46919, 46919, 46919, 46919, 46919, 46919, 46919, 46919, - 46919, 46919, 46919, 46919, 46919, 46919, 46919, 46919, - 46919, 46919, 46933, 46933, 46933, 46933, 46933, 46933, - 46933, 46933, 46933, 46933, 46933, 46933, 46933, 46933, - 46957, 46957, 46957, 46957, 46957, 46957, 46957, 46957, - 46957, 46957, 46957, 46957, 46957, 46957, 46957, 46957, - 46957, 46957, 46957, 46957, 46957, 46957, 46957, 46957, - 46993, 46993, 46993, 46993, 46993, 46993, 46993, 46993, - 46993, 46993, 46993, 46993, 46993, 46993, 46993, 46993, - 46993, 46993, 46993, 46993, 46993, 46993, 46993, 46993, - 46993, 46993, 46993, 46993, 46993, 46993, 46993, 46993, - 46993, 46993, 46993, 46993, 46997, 46997, 46997, 46997, - 47017, 47017, 47017, 47017, 47017, 47017, 47017, 47017, - 47017, 47017, 47017, 47017, 47017, 47017, 47017, 47017, - 47017, 47017, 47017, 47017, 47041, 47041, 47041, 47041, - 47041, 47041, 47041, 47041, 47041, 47041, 47041, 47041, - 47041, 47041, 47041, 47041, 47041, 47041, 47041, 47041, - 47041, 47041, 47041, 47041, 47051, 47051, 47051, 47051, - 47051, 47051, 47051, 47051, 47051, 47051, 47057, 47057, - 47057, 47057, 47057, 47057, 47059, 47059, 47087, 47087, - 47087, 47087, 47087, 47087, 47087, 47087, 47087, 47087, - 47087, 47087, 47087, 47087, 47087, 47087, 47087, 47087, - 47087, 47087, 47087, 47087, 47087, 47087, 47087, 47087, - 47087, 47087, 47093, 47093, 47093, 47093, 47093, 47093, - 47111, 47111, 47111, 47111, 47111, 47111, 47111, 47111, - 47111, 47111, 47111, 47111, 47111, 47111, 47111, 47111, - 47111, 47111, 47119, 47119, 47119, 47119, 47119, 47119, - 47119, 47119, 47123, 47123, 47123, 47123, 47129, 47129, - 47129, 47129, 47129, 47129, 47137, 47137, 47137, 47137, - 47137, 47137, 47137, 47137, 47143, 47143, 47143, 47143, - 47143, 47143, 47147, 47147, 47147, 47147, 47149, 47149, - 47161, 47161, 47161, 47161, 47161, 47161, 47161, 47161, - 47161, 47161, 47161, 47161, 47189, 47189, 47189, 47189, - 47189, 47189, 47189, 47189, 47189, 47189, 47189, 47189, - 47189, 47189, 47189, 47189, 47189, 47189, 47189, 47189, - 47189, 47189, 47189, 47189, 47189, 47189, 47189, 47189, - 47207, 47207, 47207, 47207, 47207, 47207, 47207, 47207, - 47207, 47207, 47207, 47207, 47207, 47207, 47207, 47207, - 47207, 47207, 47221, 47221, 47221, 47221, 47221, 47221, - 47221, 47221, 47221, 47221, 47221, 47221, 47221, 47221, - 47237, 47237, 47237, 47237, 47237, 47237, 47237, 47237, - 47237, 47237, 47237, 47237, 47237, 47237, 47237, 47237, - 47251, 47251, 47251, 47251, 47251, 47251, 47251, 47251, - 47251, 47251, 47251, 47251, 47251, 47251, 47269, 47269, - 47269, 47269, 47269, 47269, 47269, 47269, 47269, 47269, - 47269, 47269, 47269, 47269, 47269, 47269, 47269, 47269, - 47279, 47279, 47279, 47279, 47279, 47279, 47279, 47279, - 47279, 47279, 47287, 47287, 47287, 47287, 47287, 47287, - 47287, 47287, 47293, 47293, 47293, 47293, 47293, 47293, - 47297, 47297, 47297, 47297, 47303, 47303, 47303, 47303, - 47303, 47303, 47309, 47309, 47309, 47309, 47309, 47309, - 47317, 47317, 47317, 47317, 47317, 47317, 47317, 47317, - 47339, 47339, 47339, 47339, 47339, 47339, 47339, 47339, - 47339, 47339, 47339, 47339, 47339, 47339, 47339, 47339, - 47339, 47339, 47339, 47339, 47339, 47339, 47351, 47351, - 47351, 47351, 47351, 47351, 47351, 47351, 47351, 47351, - 47351, 47351, 47353, 47353, 47363, 47363, 47363, 47363, - 47363, 47363, 47363, 47363, 47363, 47363, 47381, 47381, - 47381, 47381, 47381, 47381, 47381, 47381, 47381, 47381, - 47381, 47381, 47381, 47381, 47381, 47381, 47381, 47381, - 47387, 47387, 47387, 47387, 47387, 47387, 47389, 47389, - 47407, 47407, 47407, 47407, 47407, 47407, 47407, 47407, - 47407, 47407, 47407, 47407, 47407, 47407, 47407, 47407, - 47407, 47407, 47417, 47417, 47417, 47417, 47417, 47417, - 47417, 47417, 47417, 47417, 47419, 47419, 47431, 47431, - 47431, 47431, 47431, 47431, 47431, 47431, 47431, 47431, - 47431, 47431, 47441, 47441, 47441, 47441, 47441, 47441, - 47441, 47441, 47441, 47441, 47459, 47459, 47459, 47459, - 47459, 47459, 47459, 47459, 47459, 47459, 47459, 47459, - 47459, 47459, 47459, 47459, 47459, 47459, 47491, 47491, - 47491, 47491, 47491, 47491, 47491, 47491, 47491, 47491, - 47491, 47491, 47491, 47491, 47491, 47491, 47491, 47491, - 47491, 47491, 47491, 47491, 47491, 47491, 47491, 47491, - 47491, 47491, 47491, 47491, 47491, 47491, 47497, 47497, - 47497, 47497, 47497, 47497, 47501, 47501, 47501, 47501, - 47507, 47507, 47507, 47507, 47507, 47507, 47513, 47513, - 47513, 47513, 47513, 47513, 47521, 47521, 47521, 47521, - 47521, 47521, 47521, 47521, 47527, 47527, 47527, 47527, - 47527, 47527, 47533, 47533, 47533, 47533, 47533, 47533, - 47543, 47543, 47543, 47543, 47543, 47543, 47543, 47543, - 47543, 47543, 47563, 47563, 47563, 47563, 47563, 47563, - 47563, 47563, 47563, 47563, 47563, 47563, 47563, 47563, - 47563, 47563, 47563, 47563, 47563, 47563, 47569, 47569, - 47569, 47569, 47569, 47569, 47581, 47581, 47581, 47581, - 47581, 47581, 47581, 47581, 47581, 47581, 47581, 47581, - 47591, 47591, 47591, 47591, 47591, 47591, 47591, 47591, - 47591, 47591, 47599, 47599, 47599, 47599, 47599, 47599, - 47599, 47599, 47609, 47609, 47609, 47609, 47609, 47609, - 47609, 47609, 47609, 47609, 47623, 47623, 47623, 47623, - 47623, 47623, 47623, 47623, 47623, 47623, 47623, 47623, - 47623, 47623, 47629, 47629, 47629, 47629, 47629, 47629, - 47639, 47639, 47639, 47639, 47639, 47639, 47639, 47639, - 47639, 47639, 47653, 47653, 47653, 47653, 47653, 47653, - 47653, 47653, 47653, 47653, 47653, 47653, 47653, 47653, - 47657, 47657, 47657, 47657, 47659, 47659, 47681, 47681, - 47681, 47681, 47681, 47681, 47681, 47681, 47681, 47681, - 47681, 47681, 47681, 47681, 47681, 47681, 47681, 47681, - 47681, 47681, 47681, 47681, 47699, 47699, 47699, 47699, - 47699, 47699, 47699, 47699, 47699, 47699, 47699, 47699, - 47699, 47699, 47699, 47699, 47699, 47699, 47701, 47701, - 47711, 47711, 47711, 47711, 47711, 47711, 47711, 47711, - 47711, 47711, 47713, 47713, 47717, 47717, 47717, 47717, - 47737, 47737, 47737, 47737, 47737, 47737, 47737, 47737, - 47737, 47737, 47737, 47737, 47737, 47737, 47737, 47737, - 47737, 47737, 47737, 47737, 47741, 47741, 47741, 47741, - 47743, 47743, 47777, 47777, 47777, 47777, 47777, 47777, - 47777, 47777, 47777, 47777, 47777, 47777, 47777, 47777, - 47777, 47777, 47777, 47777, 47777, 47777, 47777, 47777, - 47777, 47777, 47777, 47777, 47777, 47777, 47777, 47777, - 47777, 47777, 47777, 47777, 47779, 47779, 47791, 47791, - 47791, 47791, 47791, 47791, 47791, 47791, 47791, 47791, - 47791, 47791, 47797, 47797, 47797, 47797, 47797, 47797, - 47807, 47807, 47807, 47807, 47807, 47807, 47807, 47807, - 47807, 47807, 47809, 47809, 47819, 47819, 47819, 47819, - 47819, 47819, 47819, 47819, 47819, 47819, 47837, 47837, - 47837, 47837, 47837, 47837, 47837, 47837, 47837, 47837, - 47837, 47837, 47837, 47837, 47837, 47837, 47837, 47837, - 47843, 47843, 47843, 47843, 47843, 47843, 47857, 47857, - 47857, 47857, 47857, 47857, 47857, 47857, 47857, 47857, - 47857, 47857, 47857, 47857, 47869, 47869, 47869, 47869, - 47869, 47869, 47869, 47869, 47869, 47869, 47869, 47869, - 47881, 47881, 47881, 47881, 47881, 47881, 47881, 47881, - 47881, 47881, 47881, 47881, 47903, 47903, 47903, 47903, - 47903, 47903, 47903, 47903, 47903, 47903, 47903, 47903, - 47903, 47903, 47903, 47903, 47903, 47903, 47903, 47903, - 47903, 47903, 47911, 47911, 47911, 47911, 47911, 47911, - 47911, 47911, 47917, 47917, 47917, 47917, 47917, 47917, - 47933, 47933, 47933, 47933, 47933, 47933, 47933, 47933, - 47933, 47933, 47933, 47933, 47933, 47933, 47933, 47933, - 47939, 47939, 47939, 47939, 47939, 47939, 47947, 47947, - 47947, 47947, 47947, 47947, 47947, 47947, 47951, 47951, - 47951, 47951, 47963, 47963, 47963, 47963, 47963, 47963, - 47963, 47963, 47963, 47963, 47963, 47963, 47969, 47969, - 47969, 47969, 47969, 47969, 47977, 47977, 47977, 47977, - 47977, 47977, 47977, 47977, 47981, 47981, 47981, 47981, - 48017, 48017, 48017, 48017, 48017, 48017, 48017, 48017, - 48017, 48017, 48017, 48017, 48017, 48017, 48017, 48017, - 48017, 48017, 48017, 48017, 48017, 48017, 48017, 48017, - 48017, 48017, 48017, 48017, 48017, 48017, 48017, 48017, - 48017, 48017, 48017, 48017, 48023, 48023, 48023, 48023, - 48023, 48023, 48029, 48029, 48029, 48029, 48029, 48029, - 48049, 48049, 48049, 48049, 48049, 48049, 48049, 48049, - 48049, 48049, 48049, 48049, 48049, 48049, 48049, 48049, - 48049, 48049, 48049, 48049, 48073, 48073, 48073, 48073, - 48073, 48073, 48073, 48073, 48073, 48073, 48073, 48073, - 48073, 48073, 48073, 48073, 48073, 48073, 48073, 48073, - 48073, 48073, 48073, 48073, 48079, 48079, 48079, 48079, - 48079, 48079, 48091, 48091, 48091, 48091, 48091, 48091, - 48091, 48091, 48091, 48091, 48091, 48091, 48109, 48109, - 48109, 48109, 48109, 48109, 48109, 48109, 48109, 48109, - 48109, 48109, 48109, 48109, 48109, 48109, 48109, 48109, - 48119, 48119, 48119, 48119, 48119, 48119, 48119, 48119, - 48119, 48119, 48121, 48121, 48131, 48131, 48131, 48131, - 48131, 48131, 48131, 48131, 48131, 48131, 48157, 48157, - 48157, 48157, 48157, 48157, 48157, 48157, 48157, 48157, - 48157, 48157, 48157, 48157, 48157, 48157, 48157, 48157, - 48157, 48157, 48157, 48157, 48157, 48157, 48157, 48157, - 48163, 48163, 48163, 48163, 48163, 48163, 48179, 48179, - 48179, 48179, 48179, 48179, 48179, 48179, 48179, 48179, - 48179, 48179, 48179, 48179, 48179, 48179, 48187, 48187, - 48187, 48187, 48187, 48187, 48187, 48187, 48193, 48193, - 48193, 48193, 48193, 48193, 48197, 48197, 48197, 48197, - 48221, 48221, 48221, 48221, 48221, 48221, 48221, 48221, - 48221, 48221, 48221, 48221, 48221, 48221, 48221, 48221, - 48221, 48221, 48221, 48221, 48221, 48221, 48221, 48221, - 48239, 48239, 48239, 48239, 48239, 48239, 48239, 48239, - 48239, 48239, 48239, 48239, 48239, 48239, 48239, 48239, - 48239, 48239, 48247, 48247, 48247, 48247, 48247, 48247, - 48247, 48247, 48259, 48259, 48259, 48259, 48259, 48259, - 48259, 48259, 48259, 48259, 48259, 48259, 48271, 48271, - 48271, 48271, 48271, 48271, 48271, 48271, 48271, 48271, - 48271, 48271, 48281, 48281, 48281, 48281, 48281, 48281, - 48281, 48281, 48281, 48281, 48299, 48299, 48299, 48299, - 48299, 48299, 48299, 48299, 48299, 48299, 48299, 48299, - 48299, 48299, 48299, 48299, 48299, 48299, 48311, 48311, - 48311, 48311, 48311, 48311, 48311, 48311, 48311, 48311, - 48311, 48311, 48313, 48313, 48337, 48337, 48337, 48337, - 48337, 48337, 48337, 48337, 48337, 48337, 48337, 48337, - 48337, 48337, 48337, 48337, 48337, 48337, 48337, 48337, - 48337, 48337, 48337, 48337, 48341, 48341, 48341, 48341, - 48353, 48353, 48353, 48353, 48353, 48353, 48353, 48353, - 48353, 48353, 48353, 48353, 48371, 48371, 48371, 48371, - 48371, 48371, 48371, 48371, 48371, 48371, 48371, 48371, - 48371, 48371, 48371, 48371, 48371, 48371, 48383, 48383, - 48383, 48383, 48383, 48383, 48383, 48383, 48383, 48383, - 48383, 48383, 48397, 48397, 48397, 48397, 48397, 48397, - 48397, 48397, 48397, 48397, 48397, 48397, 48397, 48397, - 48407, 48407, 48407, 48407, 48407, 48407, 48407, 48407, - 48407, 48407, 48409, 48409, 48413, 48413, 48413, 48413, - 48437, 48437, 48437, 48437, 48437, 48437, 48437, 48437, - 48437, 48437, 48437, 48437, 48437, 48437, 48437, 48437, - 48437, 48437, 48437, 48437, 48437, 48437, 48437, 48437, - 48449, 48449, 48449, 48449, 48449, 48449, 48449, 48449, - 48449, 48449, 48449, 48449, 48463, 48463, 48463, 48463, - 48463, 48463, 48463, 48463, 48463, 48463, 48463, 48463, - 48463, 48463, 48473, 48473, 48473, 48473, 48473, 48473, - 48473, 48473, 48473, 48473, 48479, 48479, 48479, 48479, - 48479, 48479, 48481, 48481, 48487, 48487, 48487, 48487, - 48487, 48487, 48491, 48491, 48491, 48491, 48497, 48497, - 48497, 48497, 48497, 48497, 48523, 48523, 48523, 48523, - 48523, 48523, 48523, 48523, 48523, 48523, 48523, 48523, - 48523, 48523, 48523, 48523, 48523, 48523, 48523, 48523, - 48523, 48523, 48523, 48523, 48523, 48523, 48527, 48527, - 48527, 48527, 48533, 48533, 48533, 48533, 48533, 48533, - 48539, 48539, 48539, 48539, 48539, 48539, 48541, 48541, - 48563, 48563, 48563, 48563, 48563, 48563, 48563, 48563, - 48563, 48563, 48563, 48563, 48563, 48563, 48563, 48563, - 48563, 48563, 48563, 48563, 48563, 48563, 48571, 48571, - 48571, 48571, 48571, 48571, 48571, 48571, 48589, 48589, - 48589, 48589, 48589, 48589, 48589, 48589, 48589, 48589, - 48589, 48589, 48589, 48589, 48589, 48589, 48589, 48589, - 48593, 48593, 48593, 48593, 48611, 48611, 48611, 48611, - 48611, 48611, 48611, 48611, 48611, 48611, 48611, 48611, - 48611, 48611, 48611, 48611, 48611, 48611, 48619, 48619, - 48619, 48619, 48619, 48619, 48619, 48619, 48623, 48623, - 48623, 48623, 48647, 48647, 48647, 48647, 48647, 48647, - 48647, 48647, 48647, 48647, 48647, 48647, 48647, 48647, - 48647, 48647, 48647, 48647, 48647, 48647, 48647, 48647, - 48647, 48647, 48649, 48649, 48661, 48661, 48661, 48661, - 48661, 48661, 48661, 48661, 48661, 48661, 48661, 48661, - 48673, 48673, 48673, 48673, 48673, 48673, 48673, 48673, - 48673, 48673, 48673, 48673, 48677, 48677, 48677, 48677, - 48679, 48679, 48731, 48731, 48731, 48731, 48731, 48731, - 48731, 48731, 48731, 48731, 48731, 48731, 48731, 48731, - 48731, 48731, 48731, 48731, 48731, 48731, 48731, 48731, - 48731, 48731, 48731, 48731, 48731, 48731, 48731, 48731, - 48731, 48731, 48731, 48731, 48731, 48731, 48731, 48731, - 48731, 48731, 48731, 48731, 48731, 48731, 48731, 48731, - 48731, 48731, 48731, 48731, 48731, 48731, 48733, 48733, - 48751, 48751, 48751, 48751, 48751, 48751, 48751, 48751, - 48751, 48751, 48751, 48751, 48751, 48751, 48751, 48751, - 48751, 48751, 48757, 48757, 48757, 48757, 48757, 48757, - 48761, 48761, 48761, 48761, 48767, 48767, 48767, 48767, - 48767, 48767, 48779, 48779, 48779, 48779, 48779, 48779, - 48779, 48779, 48779, 48779, 48779, 48779, 48781, 48781, - 48787, 48787, 48787, 48787, 48787, 48787, 48799, 48799, - 48799, 48799, 48799, 48799, 48799, 48799, 48799, 48799, - 48799, 48799, 48809, 48809, 48809, 48809, 48809, 48809, - 48809, 48809, 48809, 48809, 48817, 48817, 48817, 48817, - 48817, 48817, 48817, 48817, 48821, 48821, 48821, 48821, - 48823, 48823, 48847, 48847, 48847, 48847, 48847, 48847, - 48847, 48847, 48847, 48847, 48847, 48847, 48847, 48847, - 48847, 48847, 48847, 48847, 48847, 48847, 48847, 48847, - 48847, 48847, 48857, 48857, 48857, 48857, 48857, 48857, - 48857, 48857, 48857, 48857, 48859, 48859, 48869, 48869, - 48869, 48869, 48869, 48869, 48869, 48869, 48869, 48869, - 48871, 48871, 48883, 48883, 48883, 48883, 48883, 48883, - 48883, 48883, 48883, 48883, 48883, 48883, 48889, 48889, - 48889, 48889, 48889, 48889, 48907, 48907, 48907, 48907, - 48907, 48907, 48907, 48907, 48907, 48907, 48907, 48907, - 48907, 48907, 48907, 48907, 48907, 48907, 48947, 48947, - 48947, 48947, 48947, 48947, 48947, 48947, 48947, 48947, - 48947, 48947, 48947, 48947, 48947, 48947, 48947, 48947, - 48947, 48947, 48947, 48947, 48947, 48947, 48947, 48947, - 48947, 48947, 48947, 48947, 48947, 48947, 48947, 48947, - 48947, 48947, 48947, 48947, 48947, 48947, 48953, 48953, - 48953, 48953, 48953, 48953, 48973, 48973, 48973, 48973, - 48973, 48973, 48973, 48973, 48973, 48973, 48973, 48973, - 48973, 48973, 48973, 48973, 48973, 48973, 48973, 48973, - 48989, 48989, 48989, 48989, 48989, 48989, 48989, 48989, - 48989, 48989, 48989, 48989, 48989, 48989, 48989, 48989, - 48991, 48991, 49003, 49003, 49003, 49003, 49003, 49003, - 49003, 49003, 49003, 49003, 49003, 49003, 49009, 49009, - 49009, 49009, 49009, 49009, 49019, 49019, 49019, 49019, - 49019, 49019, 49019, 49019, 49019, 49019, 49031, 49031, - 49031, 49031, 49031, 49031, 49031, 49031, 49031, 49031, - 49031, 49031, 49033, 49033, 49037, 49037, 49037, 49037, - 49043, 49043, 49043, 49043, 49043, 49043, 49057, 49057, - 49057, 49057, 49057, 49057, 49057, 49057, 49057, 49057, - 49057, 49057, 49057, 49057, 49069, 49069, 49069, 49069, - 49069, 49069, 49069, 49069, 49069, 49069, 49069, 49069, - 49081, 49081, 49081, 49081, 49081, 49081, 49081, 49081, - 49081, 49081, 49081, 49081, 49103, 49103, 49103, 49103, - 49103, 49103, 49103, 49103, 49103, 49103, 49103, 49103, - 49103, 49103, 49103, 49103, 49103, 49103, 49103, 49103, - 49103, 49103, 49109, 49109, 49109, 49109, 49109, 49109, - 49117, 49117, 49117, 49117, 49117, 49117, 49117, 49117, - 49121, 49121, 49121, 49121, 49123, 49123, 49139, 49139, - 49139, 49139, 49139, 49139, 49139, 49139, 49139, 49139, - 49139, 49139, 49139, 49139, 49139, 49139, 49157, 49157, - 49157, 49157, 49157, 49157, 49157, 49157, 49157, 49157, - 49157, 49157, 49157, 49157, 49157, 49157, 49157, 49157, - 49169, 49169, 49169, 49169, 49169, 49169, 49169, 49169, - 49169, 49169, 49169, 49169, 49171, 49171, 49177, 49177, - 49177, 49177, 49177, 49177, 49193, 49193, 49193, 49193, - 49193, 49193, 49193, 49193, 49193, 49193, 49193, 49193, - 49193, 49193, 49193, 49193, 49199, 49199, 49199, 49199, - 49199, 49199, 49201, 49201, 49207, 49207, 49207, 49207, - 49207, 49207, 49211, 49211, 49211, 49211, 49223, 49223, - 49223, 49223, 49223, 49223, 49223, 49223, 49223, 49223, - 49223, 49223, 49253, 49253, 49253, 49253, 49253, 49253, - 49253, 49253, 49253, 49253, 49253, 49253, 49253, 49253, - 49253, 49253, 49253, 49253, 49253, 49253, 49253, 49253, - 49253, 49253, 49253, 49253, 49253, 49253, 49253, 49253, - 49261, 49261, 49261, 49261, 49261, 49261, 49261, 49261, - 49277, 49277, 49277, 49277, 49277, 49277, 49277, 49277, - 49277, 49277, 49277, 49277, 49277, 49277, 49277, 49277, - 49279, 49279, 49297, 49297, 49297, 49297, 49297, 49297, - 49297, 49297, 49297, 49297, 49297, 49297, 49297, 49297, - 49297, 49297, 49297, 49297, 49307, 49307, 49307, 49307, - 49307, 49307, 49307, 49307, 49307, 49307, 49331, 49331, - 49331, 49331, 49331, 49331, 49331, 49331, 49331, 49331, - 49331, 49331, 49331, 49331, 49331, 49331, 49331, 49331, - 49331, 49331, 49331, 49331, 49331, 49331, 49333, 49333, - 49339, 49339, 49339, 49339, 49339, 49339, 49363, 49363, - 49363, 49363, 49363, 49363, 49363, 49363, 49363, 49363, - 49363, 49363, 49363, 49363, 49363, 49363, 49363, 49363, - 49363, 49363, 49363, 49363, 49363, 49363, 49367, 49367, - 49367, 49367, 49369, 49369, 49391, 49391, 49391, 49391, - 49391, 49391, 49391, 49391, 49391, 49391, 49391, 49391, - 49391, 49391, 49391, 49391, 49391, 49391, 49391, 49391, - 49391, 49391, 49393, 49393, 49409, 49409, 49409, 49409, - 49409, 49409, 49409, 49409, 49409, 49409, 49409, 49409, - 49409, 49409, 49409, 49409, 49411, 49411, 49417, 49417, - 49417, 49417, 49417, 49417, 49429, 49429, 49429, 49429, - 49429, 49429, 49429, 49429, 49429, 49429, 49429, 49429, - 49433, 49433, 49433, 49433, 49451, 49451, 49451, 49451, - 49451, 49451, 49451, 49451, 49451, 49451, 49451, 49451, - 49451, 49451, 49451, 49451, 49451, 49451, 49459, 49459, - 49459, 49459, 49459, 49459, 49459, 49459, 49463, 49463, - 49463, 49463, 49477, 49477, 49477, 49477, 49477, 49477, - 49477, 49477, 49477, 49477, 49477, 49477, 49477, 49477, - 49481, 49481, 49481, 49481, 49499, 49499, 49499, 49499, - 49499, 49499, 49499, 49499, 49499, 49499, 49499, 49499, - 49499, 49499, 49499, 49499, 49499, 49499, 49523, 49523, - 49523, 49523, 49523, 49523, 49523, 49523, 49523, 49523, - 49523, 49523, 49523, 49523, 49523, 49523, 49523, 49523, - 49523, 49523, 49523, 49523, 49523, 49523, 49529, 49529, - 49529, 49529, 49529, 49529, 49531, 49531, 49537, 49537, - 49537, 49537, 49537, 49537, 49547, 49547, 49547, 49547, - 49547, 49547, 49547, 49547, 49547, 49547, 49549, 49549, - 49559, 49559, 49559, 49559, 49559, 49559, 49559, 49559, - 49559, 49559, 49597, 49597, 49597, 49597, 49597, 49597, - 49597, 49597, 49597, 49597, 49597, 49597, 49597, 49597, - 49597, 49597, 49597, 49597, 49597, 49597, 49597, 49597, - 49597, 49597, 49597, 49597, 49597, 49597, 49597, 49597, - 49597, 49597, 49597, 49597, 49597, 49597, 49597, 49597, - 49603, 49603, 49603, 49603, 49603, 49603, 49613, 49613, - 49613, 49613, 49613, 49613, 49613, 49613, 49613, 49613, - 49627, 49627, 49627, 49627, 49627, 49627, 49627, 49627, - 49627, 49627, 49627, 49627, 49627, 49627, 49633, 49633, - 49633, 49633, 49633, 49633, 49639, 49639, 49639, 49639, - 49639, 49639, 49663, 49663, 49663, 49663, 49663, 49663, - 49663, 49663, 49663, 49663, 49663, 49663, 49663, 49663, - 49663, 49663, 49663, 49663, 49663, 49663, 49663, 49663, - 49663, 49663, 49667, 49667, 49667, 49667, 49669, 49669, - 49681, 49681, 49681, 49681, 49681, 49681, 49681, 49681, - 49681, 49681, 49681, 49681, 49697, 49697, 49697, 49697, - 49697, 49697, 49697, 49697, 49697, 49697, 49697, 49697, - 49697, 49697, 49697, 49697, 49711, 49711, 49711, 49711, - 49711, 49711, 49711, 49711, 49711, 49711, 49711, 49711, - 49711, 49711, 49727, 49727, 49727, 49727, 49727, 49727, - 49727, 49727, 49727, 49727, 49727, 49727, 49727, 49727, - 49727, 49727, 49739, 49739, 49739, 49739, 49739, 49739, - 49739, 49739, 49739, 49739, 49739, 49739, 49741, 49741, - 49747, 49747, 49747, 49747, 49747, 49747, 49757, 49757, - 49757, 49757, 49757, 49757, 49757, 49757, 49757, 49757, - 49783, 49783, 49783, 49783, 49783, 49783, 49783, 49783, - 49783, 49783, 49783, 49783, 49783, 49783, 49783, 49783, - 49783, 49783, 49783, 49783, 49783, 49783, 49783, 49783, - 49783, 49783, 49787, 49787, 49787, 49787, 49789, 49789, - 49801, 49801, 49801, 49801, 49801, 49801, 49801, 49801, - 49801, 49801, 49801, 49801, 49807, 49807, 49807, 49807, - 49807, 49807, 49811, 49811, 49811, 49811, 49823, 49823, - 49823, 49823, 49823, 49823, 49823, 49823, 49823, 49823, - 49823, 49823, 49831, 49831, 49831, 49831, 49831, 49831, - 49831, 49831, 49843, 49843, 49843, 49843, 49843, 49843, - 49843, 49843, 49843, 49843, 49843, 49843, 49853, 49853, - 49853, 49853, 49853, 49853, 49853, 49853, 49853, 49853, - 49871, 49871, 49871, 49871, 49871, 49871, 49871, 49871, - 49871, 49871, 49871, 49871, 49871, 49871, 49871, 49871, - 49871, 49871, 49877, 49877, 49877, 49877, 49877, 49877, - 49891, 49891, 49891, 49891, 49891, 49891, 49891, 49891, - 49891, 49891, 49891, 49891, 49891, 49891, 49919, 49919, - 49919, 49919, 49919, 49919, 49919, 49919, 49919, 49919, - 49919, 49919, 49919, 49919, 49919, 49919, 49919, 49919, - 49919, 49919, 49919, 49919, 49919, 49919, 49919, 49919, - 49919, 49919, 49921, 49921, 49927, 49927, 49927, 49927, - 49927, 49927, 49937, 49937, 49937, 49937, 49937, 49937, - 49937, 49937, 49937, 49937, 49939, 49939, 49943, 49943, - 49943, 49943, 49957, 49957, 49957, 49957, 49957, 49957, - 49957, 49957, 49957, 49957, 49957, 49957, 49957, 49957, - 49991, 49991, 49991, 49991, 49991, 49991, 49991, 49991, - 49991, 49991, 49991, 49991, 49991, 49991, 49991, 49991, - 49991, 49991, 49991, 49991, 49991, 49991, 49991, 49991, - 49991, 49991, 49991, 49991, 49991, 49991, 49991, 49991, - 49991, 49991, 49993, 49993, 49999, 49999, 49999, 49999, - 49999, 49999, 50021, 50021, 50021, 50021, 50021, 50021, - 50021, 50021, 50021, 50021, 50021, 50021, 50021, 50021, - 50021, 50021, 50021, 50021, 50021, 50021, 50021, 50021, - 50023, 50023, 50033, 50033, 50033, 50033, 50033, 50033, - 50033, 50033, 50033, 50033, 50047, 50047, 50047, 50047, - 50047, 50047, 50047, 50047, 50047, 50047, 50047, 50047, - 50047, 50047, 50051, 50051, 50051, 50051, 50053, 50053, - 50069, 50069, 50069, 50069, 50069, 50069, 50069, 50069, - 50069, 50069, 50069, 50069, 50069, 50069, 50069, 50069, - 50077, 50077, 50077, 50077, 50077, 50077, 50077, 50077, - 50087, 50087, 50087, 50087, 50087, 50087, 50087, 50087, - 50087, 50087, 50093, 50093, 50093, 50093, 50093, 50093, - 50101, 50101, 50101, 50101, 50101, 50101, 50101, 50101, - 50111, 50111, 50111, 50111, 50111, 50111, 50111, 50111, - 50111, 50111, 50119, 50119, 50119, 50119, 50119, 50119, - 50119, 50119, 50123, 50123, 50123, 50123, 50129, 50129, - 50129, 50129, 50129, 50129, 50131, 50131, 50147, 50147, - 50147, 50147, 50147, 50147, 50147, 50147, 50147, 50147, - 50147, 50147, 50147, 50147, 50147, 50147, 50153, 50153, - 50153, 50153, 50153, 50153, 50159, 50159, 50159, 50159, - 50159, 50159, 50177, 50177, 50177, 50177, 50177, 50177, - 50177, 50177, 50177, 50177, 50177, 50177, 50177, 50177, - 50177, 50177, 50177, 50177, 50207, 50207, 50207, 50207, - 50207, 50207, 50207, 50207, 50207, 50207, 50207, 50207, - 50207, 50207, 50207, 50207, 50207, 50207, 50207, 50207, - 50207, 50207, 50207, 50207, 50207, 50207, 50207, 50207, - 50207, 50207, 50221, 50221, 50221, 50221, 50221, 50221, - 50221, 50221, 50221, 50221, 50221, 50221, 50221, 50221, - 50227, 50227, 50227, 50227, 50227, 50227, 50231, 50231, - 50231, 50231, 50261, 50261, 50261, 50261, 50261, 50261, - 50261, 50261, 50261, 50261, 50261, 50261, 50261, 50261, - 50261, 50261, 50261, 50261, 50261, 50261, 50261, 50261, - 50261, 50261, 50261, 50261, 50261, 50261, 50261, 50261, - 50263, 50263, 50273, 50273, 50273, 50273, 50273, 50273, - 50273, 50273, 50273, 50273, 50287, 50287, 50287, 50287, - 50287, 50287, 50287, 50287, 50287, 50287, 50287, 50287, - 50287, 50287, 50291, 50291, 50291, 50291, 50311, 50311, - 50311, 50311, 50311, 50311, 50311, 50311, 50311, 50311, - 50311, 50311, 50311, 50311, 50311, 50311, 50311, 50311, - 50311, 50311, 50321, 50321, 50321, 50321, 50321, 50321, - 50321, 50321, 50321, 50321, 50329, 50329, 50329, 50329, - 50329, 50329, 50329, 50329, 50333, 50333, 50333, 50333, - 50341, 50341, 50341, 50341, 50341, 50341, 50341, 50341, - 50359, 50359, 50359, 50359, 50359, 50359, 50359, 50359, - 50359, 50359, 50359, 50359, 50359, 50359, 50359, 50359, - 50359, 50359, 50363, 50363, 50363, 50363, 50377, 50377, - 50377, 50377, 50377, 50377, 50377, 50377, 50377, 50377, - 50377, 50377, 50377, 50377, 50383, 50383, 50383, 50383, - 50383, 50383, 50387, 50387, 50387, 50387, 50411, 50411, - 50411, 50411, 50411, 50411, 50411, 50411, 50411, 50411, - 50411, 50411, 50411, 50411, 50411, 50411, 50411, 50411, - 50411, 50411, 50411, 50411, 50411, 50411, 50417, 50417, - 50417, 50417, 50417, 50417, 50423, 50423, 50423, 50423, - 50423, 50423, 50441, 50441, 50441, 50441, 50441, 50441, - 50441, 50441, 50441, 50441, 50441, 50441, 50441, 50441, - 50441, 50441, 50441, 50441, 50459, 50459, 50459, 50459, - 50459, 50459, 50459, 50459, 50459, 50459, 50459, 50459, - 50459, 50459, 50459, 50459, 50459, 50459, 50461, 50461, - 50497, 50497, 50497, 50497, 50497, 50497, 50497, 50497, - 50497, 50497, 50497, 50497, 50497, 50497, 50497, 50497, - 50497, 50497, 50497, 50497, 50497, 50497, 50497, 50497, - 50497, 50497, 50497, 50497, 50497, 50497, 50497, 50497, - 50497, 50497, 50497, 50497, 50503, 50503, 50503, 50503, - 50503, 50503, 50513, 50513, 50513, 50513, 50513, 50513, - 50513, 50513, 50513, 50513, 50527, 50527, 50527, 50527, - 50527, 50527, 50527, 50527, 50527, 50527, 50527, 50527, - 50527, 50527, 50539, 50539, 50539, 50539, 50539, 50539, - 50539, 50539, 50539, 50539, 50539, 50539, 50543, 50543, - 50543, 50543, 50549, 50549, 50549, 50549, 50549, 50549, - 50551, 50551, 50581, 50581, 50581, 50581, 50581, 50581, - 50581, 50581, 50581, 50581, 50581, 50581, 50581, 50581, - 50581, 50581, 50581, 50581, 50581, 50581, 50581, 50581, - 50581, 50581, 50581, 50581, 50581, 50581, 50581, 50581, - 50587, 50587, 50587, 50587, 50587, 50587, 50591, 50591, - 50591, 50591, 50593, 50593, 50599, 50599, 50599, 50599, - 50599, 50599, 50627, 50627, 50627, 50627, 50627, 50627, - 50627, 50627, 50627, 50627, 50627, 50627, 50627, 50627, - 50627, 50627, 50627, 50627, 50627, 50627, 50627, 50627, - 50627, 50627, 50627, 50627, 50627, 50627, 50647, 50647, - 50647, 50647, 50647, 50647, 50647, 50647, 50647, 50647, - 50647, 50647, 50647, 50647, 50647, 50647, 50647, 50647, - 50647, 50647, 50651, 50651, 50651, 50651, 50671, 50671, - 50671, 50671, 50671, 50671, 50671, 50671, 50671, 50671, - 50671, 50671, 50671, 50671, 50671, 50671, 50671, 50671, - 50671, 50671, 50683, 50683, 50683, 50683, 50683, 50683, - 50683, 50683, 50683, 50683, 50683, 50683, 50707, 50707, - 50707, 50707, 50707, 50707, 50707, 50707, 50707, 50707, - 50707, 50707, 50707, 50707, 50707, 50707, 50707, 50707, - 50707, 50707, 50707, 50707, 50707, 50707, 50723, 50723, - 50723, 50723, 50723, 50723, 50723, 50723, 50723, 50723, - 50723, 50723, 50723, 50723, 50723, 50723, 50741, 50741, - 50741, 50741, 50741, 50741, 50741, 50741, 50741, 50741, - 50741, 50741, 50741, 50741, 50741, 50741, 50741, 50741, - 50753, 50753, 50753, 50753, 50753, 50753, 50753, 50753, - 50753, 50753, 50753, 50753, 50767, 50767, 50767, 50767, - 50767, 50767, 50767, 50767, 50767, 50767, 50767, 50767, - 50767, 50767, 50773, 50773, 50773, 50773, 50773, 50773, - 50777, 50777, 50777, 50777, 50789, 50789, 50789, 50789, - 50789, 50789, 50789, 50789, 50789, 50789, 50789, 50789, - 50821, 50821, 50821, 50821, 50821, 50821, 50821, 50821, - 50821, 50821, 50821, 50821, 50821, 50821, 50821, 50821, - 50821, 50821, 50821, 50821, 50821, 50821, 50821, 50821, - 50821, 50821, 50821, 50821, 50821, 50821, 50821, 50821, - 50833, 50833, 50833, 50833, 50833, 50833, 50833, 50833, - 50833, 50833, 50833, 50833, 50839, 50839, 50839, 50839, - 50839, 50839, 50849, 50849, 50849, 50849, 50849, 50849, - 50849, 50849, 50849, 50849, 50857, 50857, 50857, 50857, - 50857, 50857, 50857, 50857, 50867, 50867, 50867, 50867, - 50867, 50867, 50867, 50867, 50867, 50867, 50873, 50873, - 50873, 50873, 50873, 50873, 50891, 50891, 50891, 50891, - 50891, 50891, 50891, 50891, 50891, 50891, 50891, 50891, - 50891, 50891, 50891, 50891, 50891, 50891, 50893, 50893, - 50909, 50909, 50909, 50909, 50909, 50909, 50909, 50909, - 50909, 50909, 50909, 50909, 50909, 50909, 50909, 50909, - 50923, 50923, 50923, 50923, 50923, 50923, 50923, 50923, - 50923, 50923, 50923, 50923, 50923, 50923, 50929, 50929, - 50929, 50929, 50929, 50929, 50951, 50951, 50951, 50951, - 50951, 50951, 50951, 50951, 50951, 50951, 50951, 50951, - 50951, 50951, 50951, 50951, 50951, 50951, 50951, 50951, - 50951, 50951, 50957, 50957, 50957, 50957, 50957, 50957, - 50969, 50969, 50969, 50969, 50969, 50969, 50969, 50969, - 50969, 50969, 50969, 50969, 50971, 50971, 50989, 50989, - 50989, 50989, 50989, 50989, 50989, 50989, 50989, 50989, - 50989, 50989, 50989, 50989, 50989, 50989, 50989, 50989, - 50993, 50993, 50993, 50993, 51001, 51001, 51001, 51001, - 51001, 51001, 51001, 51001, 51031, 51031, 51031, 51031, - 51031, 51031, 51031, 51031, 51031, 51031, 51031, 51031, - 51031, 51031, 51031, 51031, 51031, 51031, 51031, 51031, - 51031, 51031, 51031, 51031, 51031, 51031, 51031, 51031, - 51031, 51031, 51043, 51043, 51043, 51043, 51043, 51043, - 51043, 51043, 51043, 51043, 51043, 51043, 51047, 51047, - 51047, 51047, 51059, 51059, 51059, 51059, 51059, 51059, - 51059, 51059, 51059, 51059, 51059, 51059, 51061, 51061, - 51071, 51071, 51071, 51071, 51071, 51071, 51071, 51071, - 51071, 51071, 51109, 51109, 51109, 51109, 51109, 51109, - 51109, 51109, 51109, 51109, 51109, 51109, 51109, 51109, - 51109, 51109, 51109, 51109, 51109, 51109, 51109, 51109, - 51109, 51109, 51109, 51109, 51109, 51109, 51109, 51109, - 51109, 51109, 51109, 51109, 51109, 51109, 51109, 51109, - 51131, 51131, 51131, 51131, 51131, 51131, 51131, 51131, - 51131, 51131, 51131, 51131, 51131, 51131, 51131, 51131, - 51131, 51131, 51131, 51131, 51131, 51131, 51133, 51133, - 51137, 51137, 51137, 51137, 51151, 51151, 51151, 51151, - 51151, 51151, 51151, 51151, 51151, 51151, 51151, 51151, - 51151, 51151, 51157, 51157, 51157, 51157, 51157, 51157, - 51169, 51169, 51169, 51169, 51169, 51169, 51169, 51169, - 51169, 51169, 51169, 51169, 51193, 51193, 51193, 51193, - 51193, 51193, 51193, 51193, 51193, 51193, 51193, 51193, - 51193, 51193, 51193, 51193, 51193, 51193, 51193, 51193, - 51193, 51193, 51193, 51193, 51197, 51197, 51197, 51197, - 51199, 51199, 51203, 51203, 51203, 51203, 51217, 51217, - 51217, 51217, 51217, 51217, 51217, 51217, 51217, 51217, - 51217, 51217, 51217, 51217, 51229, 51229, 51229, 51229, - 51229, 51229, 51229, 51229, 51229, 51229, 51229, 51229, - 51239, 51239, 51239, 51239, 51239, 51239, 51239, 51239, - 51239, 51239, 51241, 51241, 51257, 51257, 51257, 51257, - 51257, 51257, 51257, 51257, 51257, 51257, 51257, 51257, - 51257, 51257, 51257, 51257, 51263, 51263, 51263, 51263, - 51263, 51263, 51283, 51283, 51283, 51283, 51283, 51283, - 51283, 51283, 51283, 51283, 51283, 51283, 51283, 51283, - 51283, 51283, 51283, 51283, 51283, 51283, 51287, 51287, - 51287, 51287, 51307, 51307, 51307, 51307, 51307, 51307, - 51307, 51307, 51307, 51307, 51307, 51307, 51307, 51307, - 51307, 51307, 51307, 51307, 51307, 51307, 51329, 51329, - 51329, 51329, 51329, 51329, 51329, 51329, 51329, 51329, - 51329, 51329, 51329, 51329, 51329, 51329, 51329, 51329, - 51329, 51329, 51329, 51329, 51341, 51341, 51341, 51341, - 51341, 51341, 51341, 51341, 51341, 51341, 51341, 51341, - 51343, 51343, 51347, 51347, 51347, 51347, 51349, 51349, - 51361, 51361, 51361, 51361, 51361, 51361, 51361, 51361, - 51361, 51361, 51361, 51361, 51383, 51383, 51383, 51383, - 51383, 51383, 51383, 51383, 51383, 51383, 51383, 51383, - 51383, 51383, 51383, 51383, 51383, 51383, 51383, 51383, - 51383, 51383, 51407, 51407, 51407, 51407, 51407, 51407, - 51407, 51407, 51407, 51407, 51407, 51407, 51407, 51407, - 51407, 51407, 51407, 51407, 51407, 51407, 51407, 51407, - 51407, 51407, 51413, 51413, 51413, 51413, 51413, 51413, - 51419, 51419, 51419, 51419, 51419, 51419, 51421, 51421, - 51427, 51427, 51427, 51427, 51427, 51427, 51431, 51431, - 51431, 51431, 51437, 51437, 51437, 51437, 51437, 51437, - 51439, 51439, 51449, 51449, 51449, 51449, 51449, 51449, - 51449, 51449, 51449, 51449, 51461, 51461, 51461, 51461, - 51461, 51461, 51461, 51461, 51461, 51461, 51461, 51461, - 51473, 51473, 51473, 51473, 51473, 51473, 51473, 51473, - 51473, 51473, 51473, 51473, 51479, 51479, 51479, 51479, - 51479, 51479, 51481, 51481, 51487, 51487, 51487, 51487, - 51487, 51487, 51503, 51503, 51503, 51503, 51503, 51503, - 51503, 51503, 51503, 51503, 51503, 51503, 51503, 51503, - 51503, 51503, 51511, 51511, 51511, 51511, 51511, 51511, - 51511, 51511, 51517, 51517, 51517, 51517, 51517, 51517, - 51521, 51521, 51521, 51521, 51539, 51539, 51539, 51539, - 51539, 51539, 51539, 51539, 51539, 51539, 51539, 51539, - 51539, 51539, 51539, 51539, 51539, 51539, 51551, 51551, - 51551, 51551, 51551, 51551, 51551, 51551, 51551, 51551, - 51551, 51551, 51563, 51563, 51563, 51563, 51563, 51563, - 51563, 51563, 51563, 51563, 51563, 51563, 51577, 51577, - 51577, 51577, 51577, 51577, 51577, 51577, 51577, 51577, - 51577, 51577, 51577, 51577, 51581, 51581, 51581, 51581, - 51593, 51593, 51593, 51593, 51593, 51593, 51593, 51593, - 51593, 51593, 51593, 51593, 51599, 51599, 51599, 51599, - 51599, 51599, 51607, 51607, 51607, 51607, 51607, 51607, - 51607, 51607, 51613, 51613, 51613, 51613, 51613, 51613, - 51631, 51631, 51631, 51631, 51631, 51631, 51631, 51631, - 51631, 51631, 51631, 51631, 51631, 51631, 51631, 51631, - 51631, 51631, 51637, 51637, 51637, 51637, 51637, 51637, - 51647, 51647, 51647, 51647, 51647, 51647, 51647, 51647, - 51647, 51647, 51659, 51659, 51659, 51659, 51659, 51659, - 51659, 51659, 51659, 51659, 51659, 51659, 51673, 51673, - 51673, 51673, 51673, 51673, 51673, 51673, 51673, 51673, - 51673, 51673, 51673, 51673, 51679, 51679, 51679, 51679, - 51679, 51679, 51683, 51683, 51683, 51683, 51691, 51691, - 51691, 51691, 51691, 51691, 51691, 51691, 51713, 51713, - 51713, 51713, 51713, 51713, 51713, 51713, 51713, 51713, - 51713, 51713, 51713, 51713, 51713, 51713, 51713, 51713, - 51713, 51713, 51713, 51713, 51719, 51719, 51719, 51719, - 51719, 51719, 51721, 51721, 51749, 51749, 51749, 51749, - 51749, 51749, 51749, 51749, 51749, 51749, 51749, 51749, - 51749, 51749, 51749, 51749, 51749, 51749, 51749, 51749, - 51749, 51749, 51749, 51749, 51749, 51749, 51749, 51749, - 51767, 51767, 51767, 51767, 51767, 51767, 51767, 51767, - 51767, 51767, 51767, 51767, 51767, 51767, 51767, 51767, - 51767, 51767, 51769, 51769, 51787, 51787, 51787, 51787, - 51787, 51787, 51787, 51787, 51787, 51787, 51787, 51787, - 51787, 51787, 51787, 51787, 51787, 51787, 51797, 51797, - 51797, 51797, 51797, 51797, 51797, 51797, 51797, 51797, - 51803, 51803, 51803, 51803, 51803, 51803, 51817, 51817, - 51817, 51817, 51817, 51817, 51817, 51817, 51817, 51817, - 51817, 51817, 51817, 51817, 51827, 51827, 51827, 51827, - 51827, 51827, 51827, 51827, 51827, 51827, 51829, 51829, - 51839, 51839, 51839, 51839, 51839, 51839, 51839, 51839, - 51839, 51839, 51853, 51853, 51853, 51853, 51853, 51853, - 51853, 51853, 51853, 51853, 51853, 51853, 51853, 51853, - 51859, 51859, 51859, 51859, 51859, 51859, 51869, 51869, - 51869, 51869, 51869, 51869, 51869, 51869, 51869, 51869, - 51871, 51871, 51893, 51893, 51893, 51893, 51893, 51893, - 51893, 51893, 51893, 51893, 51893, 51893, 51893, 51893, - 51893, 51893, 51893, 51893, 51893, 51893, 51893, 51893, - 51899, 51899, 51899, 51899, 51899, 51899, 51907, 51907, - 51907, 51907, 51907, 51907, 51907, 51907, 51913, 51913, - 51913, 51913, 51913, 51913, 51929, 51929, 51929, 51929, - 51929, 51929, 51929, 51929, 51929, 51929, 51929, 51929, - 51929, 51929, 51929, 51929, 51941, 51941, 51941, 51941, - 51941, 51941, 51941, 51941, 51941, 51941, 51941, 51941, - 51949, 51949, 51949, 51949, 51949, 51949, 51949, 51949, - 51971, 51971, 51971, 51971, 51971, 51971, 51971, 51971, - 51971, 51971, 51971, 51971, 51971, 51971, 51971, 51971, - 51971, 51971, 51971, 51971, 51971, 51971, 51973, 51973, - 51977, 51977, 51977, 51977, 51991, 51991, 51991, 51991, - 51991, 51991, 51991, 51991, 51991, 51991, 51991, 51991, - 51991, 51991, 52009, 52009, 52009, 52009, 52009, 52009, - 52009, 52009, 52009, 52009, 52009, 52009, 52009, 52009, - 52009, 52009, 52009, 52009, 52021, 52021, 52021, 52021, - 52021, 52021, 52021, 52021, 52021, 52021, 52021, 52021, - 52027, 52027, 52027, 52027, 52027, 52027, 52051, 52051, - 52051, 52051, 52051, 52051, 52051, 52051, 52051, 52051, - 52051, 52051, 52051, 52051, 52051, 52051, 52051, 52051, - 52051, 52051, 52051, 52051, 52051, 52051, 52057, 52057, - 52057, 52057, 52057, 52057, 52067, 52067, 52067, 52067, - 52067, 52067, 52067, 52067, 52067, 52067, 52069, 52069, - 52081, 52081, 52081, 52081, 52081, 52081, 52081, 52081, - 52081, 52081, 52081, 52081, 52103, 52103, 52103, 52103, - 52103, 52103, 52103, 52103, 52103, 52103, 52103, 52103, - 52103, 52103, 52103, 52103, 52103, 52103, 52103, 52103, - 52103, 52103, 52121, 52121, 52121, 52121, 52121, 52121, - 52121, 52121, 52121, 52121, 52121, 52121, 52121, 52121, - 52121, 52121, 52121, 52121, 52127, 52127, 52127, 52127, - 52127, 52127, 52147, 52147, 52147, 52147, 52147, 52147, - 52147, 52147, 52147, 52147, 52147, 52147, 52147, 52147, - 52147, 52147, 52147, 52147, 52147, 52147, 52153, 52153, - 52153, 52153, 52153, 52153, 52163, 52163, 52163, 52163, - 52163, 52163, 52163, 52163, 52163, 52163, 52177, 52177, - 52177, 52177, 52177, 52177, 52177, 52177, 52177, 52177, - 52177, 52177, 52177, 52177, 52181, 52181, 52181, 52181, - 52183, 52183, 52189, 52189, 52189, 52189, 52189, 52189, - 52201, 52201, 52201, 52201, 52201, 52201, 52201, 52201, - 52201, 52201, 52201, 52201, 52223, 52223, 52223, 52223, - 52223, 52223, 52223, 52223, 52223, 52223, 52223, 52223, - 52223, 52223, 52223, 52223, 52223, 52223, 52223, 52223, - 52223, 52223, 52237, 52237, 52237, 52237, 52237, 52237, - 52237, 52237, 52237, 52237, 52237, 52237, 52237, 52237, - 52249, 52249, 52249, 52249, 52249, 52249, 52249, 52249, - 52249, 52249, 52249, 52249, 52253, 52253, 52253, 52253, - 52259, 52259, 52259, 52259, 52259, 52259, 52267, 52267, - 52267, 52267, 52267, 52267, 52267, 52267, 52289, 52289, - 52289, 52289, 52289, 52289, 52289, 52289, 52289, 52289, - 52289, 52289, 52289, 52289, 52289, 52289, 52289, 52289, - 52289, 52289, 52289, 52289, 52291, 52291, 52301, 52301, - 52301, 52301, 52301, 52301, 52301, 52301, 52301, 52301, - 52313, 52313, 52313, 52313, 52313, 52313, 52313, 52313, - 52313, 52313, 52313, 52313, 52321, 52321, 52321, 52321, - 52321, 52321, 52321, 52321, 52361, 52361, 52361, 52361, - 52361, 52361, 52361, 52361, 52361, 52361, 52361, 52361, - 52361, 52361, 52361, 52361, 52361, 52361, 52361, 52361, - 52361, 52361, 52361, 52361, 52361, 52361, 52361, 52361, - 52361, 52361, 52361, 52361, 52361, 52361, 52361, 52361, - 52361, 52361, 52361, 52361, 52363, 52363, 52369, 52369, - 52369, 52369, 52369, 52369, 52379, 52379, 52379, 52379, - 52379, 52379, 52379, 52379, 52379, 52379, 52387, 52387, - 52387, 52387, 52387, 52387, 52387, 52387, 52391, 52391, - 52391, 52391, 52433, 52433, 52433, 52433, 52433, 52433, - 52433, 52433, 52433, 52433, 52433, 52433, 52433, 52433, - 52433, 52433, 52433, 52433, 52433, 52433, 52433, 52433, - 52433, 52433, 52433, 52433, 52433, 52433, 52433, 52433, - 52433, 52433, 52433, 52433, 52433, 52433, 52433, 52433, - 52433, 52433, 52433, 52433, 52453, 52453, 52453, 52453, - 52453, 52453, 52453, 52453, 52453, 52453, 52453, 52453, - 52453, 52453, 52453, 52453, 52453, 52453, 52453, 52453, - 52457, 52457, 52457, 52457, 52489, 52489, 52489, 52489, - 52489, 52489, 52489, 52489, 52489, 52489, 52489, 52489, - 52489, 52489, 52489, 52489, 52489, 52489, 52489, 52489, - 52489, 52489, 52489, 52489, 52489, 52489, 52489, 52489, - 52489, 52489, 52489, 52489, 52501, 52501, 52501, 52501, - 52501, 52501, 52501, 52501, 52501, 52501, 52501, 52501, - 52511, 52511, 52511, 52511, 52511, 52511, 52511, 52511, - 52511, 52511, 52517, 52517, 52517, 52517, 52517, 52517, - 52529, 52529, 52529, 52529, 52529, 52529, 52529, 52529, - 52529, 52529, 52529, 52529, 52541, 52541, 52541, 52541, - 52541, 52541, 52541, 52541, 52541, 52541, 52541, 52541, - 52543, 52543, 52553, 52553, 52553, 52553, 52553, 52553, - 52553, 52553, 52553, 52553, 52561, 52561, 52561, 52561, - 52561, 52561, 52561, 52561, 52567, 52567, 52567, 52567, - 52567, 52567, 52571, 52571, 52571, 52571, 52579, 52579, - 52579, 52579, 52579, 52579, 52579, 52579, 52583, 52583, - 52583, 52583, 52609, 52609, 52609, 52609, 52609, 52609, - 52609, 52609, 52609, 52609, 52609, 52609, 52609, 52609, - 52609, 52609, 52609, 52609, 52609, 52609, 52609, 52609, - 52609, 52609, 52609, 52609, 52627, 52627, 52627, 52627, - 52627, 52627, 52627, 52627, 52627, 52627, 52627, 52627, - 52627, 52627, 52627, 52627, 52627, 52627, 52631, 52631, - 52631, 52631, 52639, 52639, 52639, 52639, 52639, 52639, - 52639, 52639, 52667, 52667, 52667, 52667, 52667, 52667, - 52667, 52667, 52667, 52667, 52667, 52667, 52667, 52667, - 52667, 52667, 52667, 52667, 52667, 52667, 52667, 52667, - 52667, 52667, 52667, 52667, 52667, 52667, 52673, 52673, - 52673, 52673, 52673, 52673, 52691, 52691, 52691, 52691, - 52691, 52691, 52691, 52691, 52691, 52691, 52691, 52691, - 52691, 52691, 52691, 52691, 52691, 52691, 52697, 52697, - 52697, 52697, 52697, 52697, 52709, 52709, 52709, 52709, - 52709, 52709, 52709, 52709, 52709, 52709, 52709, 52709, - 52711, 52711, 52721, 52721, 52721, 52721, 52721, 52721, - 52721, 52721, 52721, 52721, 52727, 52727, 52727, 52727, - 52727, 52727, 52733, 52733, 52733, 52733, 52733, 52733, - 52747, 52747, 52747, 52747, 52747, 52747, 52747, 52747, - 52747, 52747, 52747, 52747, 52747, 52747, 52757, 52757, - 52757, 52757, 52757, 52757, 52757, 52757, 52757, 52757, - 52769, 52769, 52769, 52769, 52769, 52769, 52769, 52769, - 52769, 52769, 52769, 52769, 52783, 52783, 52783, 52783, - 52783, 52783, 52783, 52783, 52783, 52783, 52783, 52783, - 52783, 52783, 52807, 52807, 52807, 52807, 52807, 52807, - 52807, 52807, 52807, 52807, 52807, 52807, 52807, 52807, - 52807, 52807, 52807, 52807, 52807, 52807, 52807, 52807, - 52807, 52807, 52813, 52813, 52813, 52813, 52813, 52813, - 52817, 52817, 52817, 52817, 52837, 52837, 52837, 52837, - 52837, 52837, 52837, 52837, 52837, 52837, 52837, 52837, - 52837, 52837, 52837, 52837, 52837, 52837, 52837, 52837, - 52859, 52859, 52859, 52859, 52859, 52859, 52859, 52859, - 52859, 52859, 52859, 52859, 52859, 52859, 52859, 52859, - 52859, 52859, 52859, 52859, 52859, 52859, 52861, 52861, - 52879, 52879, 52879, 52879, 52879, 52879, 52879, 52879, - 52879, 52879, 52879, 52879, 52879, 52879, 52879, 52879, - 52879, 52879, 52883, 52883, 52883, 52883, 52889, 52889, - 52889, 52889, 52889, 52889, 52901, 52901, 52901, 52901, - 52901, 52901, 52901, 52901, 52901, 52901, 52901, 52901, - 52903, 52903, 52919, 52919, 52919, 52919, 52919, 52919, - 52919, 52919, 52919, 52919, 52919, 52919, 52919, 52919, - 52919, 52919, 52937, 52937, 52937, 52937, 52937, 52937, - 52937, 52937, 52937, 52937, 52937, 52937, 52937, 52937, - 52937, 52937, 52937, 52937, 52951, 52951, 52951, 52951, - 52951, 52951, 52951, 52951, 52951, 52951, 52951, 52951, - 52951, 52951, 52957, 52957, 52957, 52957, 52957, 52957, - 52963, 52963, 52963, 52963, 52963, 52963, 52967, 52967, - 52967, 52967, 52973, 52973, 52973, 52973, 52973, 52973, - 52981, 52981, 52981, 52981, 52981, 52981, 52981, 52981, - 52999, 52999, 52999, 52999, 52999, 52999, 52999, 52999, - 52999, 52999, 52999, 52999, 52999, 52999, 52999, 52999, - 52999, 52999, 53003, 53003, 53003, 53003, 53017, 53017, - 53017, 53017, 53017, 53017, 53017, 53017, 53017, 53017, - 53017, 53017, 53017, 53017, 53047, 53047, 53047, 53047, - 53047, 53047, 53047, 53047, 53047, 53047, 53047, 53047, - 53047, 53047, 53047, 53047, 53047, 53047, 53047, 53047, - 53047, 53047, 53047, 53047, 53047, 53047, 53047, 53047, - 53047, 53047, 53051, 53051, 53051, 53051, 53069, 53069, - 53069, 53069, 53069, 53069, 53069, 53069, 53069, 53069, - 53069, 53069, 53069, 53069, 53069, 53069, 53069, 53069, - 53077, 53077, 53077, 53077, 53077, 53077, 53077, 53077, - 53087, 53087, 53087, 53087, 53087, 53087, 53087, 53087, - 53087, 53087, 53089, 53089, 53093, 53093, 53093, 53093, - 53101, 53101, 53101, 53101, 53101, 53101, 53101, 53101, - 53113, 53113, 53113, 53113, 53113, 53113, 53113, 53113, - 53113, 53113, 53113, 53113, 53117, 53117, 53117, 53117, - 53129, 53129, 53129, 53129, 53129, 53129, 53129, 53129, - 53129, 53129, 53129, 53129, 53147, 53147, 53147, 53147, - 53147, 53147, 53147, 53147, 53147, 53147, 53147, 53147, - 53147, 53147, 53147, 53147, 53147, 53147, 53149, 53149, - 53161, 53161, 53161, 53161, 53161, 53161, 53161, 53161, - 53161, 53161, 53161, 53161, 53171, 53171, 53171, 53171, - 53171, 53171, 53171, 53171, 53171, 53171, 53173, 53173, - 53189, 53189, 53189, 53189, 53189, 53189, 53189, 53189, - 53189, 53189, 53189, 53189, 53189, 53189, 53189, 53189, - 53197, 53197, 53197, 53197, 53197, 53197, 53197, 53197, - 53201, 53201, 53201, 53201, 53231, 53231, 53231, 53231, - 53231, 53231, 53231, 53231, 53231, 53231, 53231, 53231, - 53231, 53231, 53231, 53231, 53231, 53231, 53231, 53231, - 53231, 53231, 53231, 53231, 53231, 53231, 53231, 53231, - 53231, 53231, 53233, 53233, 53239, 53239, 53239, 53239, - 53239, 53239, 53267, 53267, 53267, 53267, 53267, 53267, - 53267, 53267, 53267, 53267, 53267, 53267, 53267, 53267, - 53267, 53267, 53267, 53267, 53267, 53267, 53267, 53267, - 53267, 53267, 53267, 53267, 53267, 53267, 53269, 53269, - 53279, 53279, 53279, 53279, 53279, 53279, 53279, 53279, - 53279, 53279, 53281, 53281, 53299, 53299, 53299, 53299, - 53299, 53299, 53299, 53299, 53299, 53299, 53299, 53299, - 53299, 53299, 53299, 53299, 53299, 53299, 53309, 53309, - 53309, 53309, 53309, 53309, 53309, 53309, 53309, 53309, - 53323, 53323, 53323, 53323, 53323, 53323, 53323, 53323, - 53323, 53323, 53323, 53323, 53323, 53323, 53327, 53327, - 53327, 53327, 53353, 53353, 53353, 53353, 53353, 53353, - 53353, 53353, 53353, 53353, 53353, 53353, 53353, 53353, - 53353, 53353, 53353, 53353, 53353, 53353, 53353, 53353, - 53353, 53353, 53353, 53353, 53359, 53359, 53359, 53359, - 53359, 53359, 53377, 53377, 53377, 53377, 53377, 53377, - 53377, 53377, 53377, 53377, 53377, 53377, 53377, 53377, - 53377, 53377, 53377, 53377, 53381, 53381, 53381, 53381, - 53401, 53401, 53401, 53401, 53401, 53401, 53401, 53401, - 53401, 53401, 53401, 53401, 53401, 53401, 53401, 53401, - 53401, 53401, 53401, 53401, 53407, 53407, 53407, 53407, - 53407, 53407, 53411, 53411, 53411, 53411, 53419, 53419, - 53419, 53419, 53419, 53419, 53419, 53419, 53437, 53437, - 53437, 53437, 53437, 53437, 53437, 53437, 53437, 53437, - 53437, 53437, 53437, 53437, 53437, 53437, 53437, 53437, - 53441, 53441, 53441, 53441, 53453, 53453, 53453, 53453, - 53453, 53453, 53453, 53453, 53453, 53453, 53453, 53453, - 53479, 53479, 53479, 53479, 53479, 53479, 53479, 53479, - 53479, 53479, 53479, 53479, 53479, 53479, 53479, 53479, - 53479, 53479, 53479, 53479, 53479, 53479, 53479, 53479, - 53479, 53479, 53503, 53503, 53503, 53503, 53503, 53503, - 53503, 53503, 53503, 53503, 53503, 53503, 53503, 53503, - 53503, 53503, 53503, 53503, 53503, 53503, 53503, 53503, - 53503, 53503, 53507, 53507, 53507, 53507, 53527, 53527, - 53527, 53527, 53527, 53527, 53527, 53527, 53527, 53527, - 53527, 53527, 53527, 53527, 53527, 53527, 53527, 53527, - 53527, 53527, 53549, 53549, 53549, 53549, 53549, 53549, - 53549, 53549, 53549, 53549, 53549, 53549, 53549, 53549, - 53549, 53549, 53549, 53549, 53549, 53549, 53549, 53549, - 53551, 53551, 53569, 53569, 53569, 53569, 53569, 53569, - 53569, 53569, 53569, 53569, 53569, 53569, 53569, 53569, - 53569, 53569, 53569, 53569, 53591, 53591, 53591, 53591, - 53591, 53591, 53591, 53591, 53591, 53591, 53591, 53591, - 53591, 53591, 53591, 53591, 53591, 53591, 53591, 53591, - 53591, 53591, 53593, 53593, 53597, 53597, 53597, 53597, - 53609, 53609, 53609, 53609, 53609, 53609, 53609, 53609, - 53609, 53609, 53609, 53609, 53611, 53611, 53617, 53617, - 53617, 53617, 53617, 53617, 53623, 53623, 53623, 53623, - 53623, 53623, 53629, 53629, 53629, 53629, 53629, 53629, - 53633, 53633, 53633, 53633, 53639, 53639, 53639, 53639, - 53639, 53639, 53653, 53653, 53653, 53653, 53653, 53653, - 53653, 53653, 53653, 53653, 53653, 53653, 53653, 53653, - 53657, 53657, 53657, 53657, 53681, 53681, 53681, 53681, - 53681, 53681, 53681, 53681, 53681, 53681, 53681, 53681, - 53681, 53681, 53681, 53681, 53681, 53681, 53681, 53681, - 53681, 53681, 53681, 53681, 53693, 53693, 53693, 53693, - 53693, 53693, 53693, 53693, 53693, 53693, 53693, 53693, - 53699, 53699, 53699, 53699, 53699, 53699, 53717, 53717, - 53717, 53717, 53717, 53717, 53717, 53717, 53717, 53717, - 53717, 53717, 53717, 53717, 53717, 53717, 53717, 53717, - 53719, 53719, 53731, 53731, 53731, 53731, 53731, 53731, - 53731, 53731, 53731, 53731, 53731, 53731, 53759, 53759, - 53759, 53759, 53759, 53759, 53759, 53759, 53759, 53759, - 53759, 53759, 53759, 53759, 53759, 53759, 53759, 53759, - 53759, 53759, 53759, 53759, 53759, 53759, 53759, 53759, - 53759, 53759, 53773, 53773, 53773, 53773, 53773, 53773, - 53773, 53773, 53773, 53773, 53773, 53773, 53773, 53773, - 53777, 53777, 53777, 53777, 53783, 53783, 53783, 53783, - 53783, 53783, 53791, 53791, 53791, 53791, 53791, 53791, - 53791, 53791, 53813, 53813, 53813, 53813, 53813, 53813, - 53813, 53813, 53813, 53813, 53813, 53813, 53813, 53813, - 53813, 53813, 53813, 53813, 53813, 53813, 53813, 53813, - 53819, 53819, 53819, 53819, 53819, 53819, 53831, 53831, - 53831, 53831, 53831, 53831, 53831, 53831, 53831, 53831, - 53831, 53831, 53849, 53849, 53849, 53849, 53849, 53849, - 53849, 53849, 53849, 53849, 53849, 53849, 53849, 53849, - 53849, 53849, 53849, 53849, 53857, 53857, 53857, 53857, - 53857, 53857, 53857, 53857, 53861, 53861, 53861, 53861, - 53881, 53881, 53881, 53881, 53881, 53881, 53881, 53881, - 53881, 53881, 53881, 53881, 53881, 53881, 53881, 53881, - 53881, 53881, 53881, 53881, 53887, 53887, 53887, 53887, - 53887, 53887, 53891, 53891, 53891, 53891, 53897, 53897, - 53897, 53897, 53897, 53897, 53899, 53899, 53917, 53917, - 53917, 53917, 53917, 53917, 53917, 53917, 53917, 53917, - 53917, 53917, 53917, 53917, 53917, 53917, 53917, 53917, - 53923, 53923, 53923, 53923, 53923, 53923, 53927, 53927, - 53927, 53927, 53939, 53939, 53939, 53939, 53939, 53939, - 53939, 53939, 53939, 53939, 53939, 53939, 53951, 53951, - 53951, 53951, 53951, 53951, 53951, 53951, 53951, 53951, - 53951, 53951, 53959, 53959, 53959, 53959, 53959, 53959, - 53959, 53959, 53987, 53987, 53987, 53987, 53987, 53987, - 53987, 53987, 53987, 53987, 53987, 53987, 53987, 53987, - 53987, 53987, 53987, 53987, 53987, 53987, 53987, 53987, - 53987, 53987, 53987, 53987, 53987, 53987, 53993, 53993, - 53993, 53993, 53993, 53993, 54001, 54001, 54001, 54001, - 54001, 54001, 54001, 54001, 54011, 54011, 54011, 54011, - 54011, 54011, 54011, 54011, 54011, 54011, 54013, 54013, - 54037, 54037, 54037, 54037, 54037, 54037, 54037, 54037, - 54037, 54037, 54037, 54037, 54037, 54037, 54037, 54037, - 54037, 54037, 54037, 54037, 54037, 54037, 54037, 54037, - 54049, 54049, 54049, 54049, 54049, 54049, 54049, 54049, - 54049, 54049, 54049, 54049, 54059, 54059, 54059, 54059, - 54059, 54059, 54059, 54059, 54059, 54059, 54083, 54083, - 54083, 54083, 54083, 54083, 54083, 54083, 54083, 54083, - 54083, 54083, 54083, 54083, 54083, 54083, 54083, 54083, - 54083, 54083, 54083, 54083, 54083, 54083, 54091, 54091, - 54091, 54091, 54091, 54091, 54091, 54091, 54101, 54101, - 54101, 54101, 54101, 54101, 54101, 54101, 54101, 54101, - 54121, 54121, 54121, 54121, 54121, 54121, 54121, 54121, - 54121, 54121, 54121, 54121, 54121, 54121, 54121, 54121, - 54121, 54121, 54121, 54121, 54133, 54133, 54133, 54133, - 54133, 54133, 54133, 54133, 54133, 54133, 54133, 54133, - 54139, 54139, 54139, 54139, 54139, 54139, 54151, 54151, - 54151, 54151, 54151, 54151, 54151, 54151, 54151, 54151, - 54151, 54151, 54163, 54163, 54163, 54163, 54163, 54163, - 54163, 54163, 54163, 54163, 54163, 54163, 54167, 54167, - 54167, 54167, 54181, 54181, 54181, 54181, 54181, 54181, - 54181, 54181, 54181, 54181, 54181, 54181, 54181, 54181, - 54193, 54193, 54193, 54193, 54193, 54193, 54193, 54193, - 54193, 54193, 54193, 54193, 54217, 54217, 54217, 54217, - 54217, 54217, 54217, 54217, 54217, 54217, 54217, 54217, - 54217, 54217, 54217, 54217, 54217, 54217, 54217, 54217, - 54217, 54217, 54217, 54217, 54251, 54251, 54251, 54251, - 54251, 54251, 54251, 54251, 54251, 54251, 54251, 54251, - 54251, 54251, 54251, 54251, 54251, 54251, 54251, 54251, - 54251, 54251, 54251, 54251, 54251, 54251, 54251, 54251, - 54251, 54251, 54251, 54251, 54251, 54251, 54269, 54269, - 54269, 54269, 54269, 54269, 54269, 54269, 54269, 54269, - 54269, 54269, 54269, 54269, 54269, 54269, 54269, 54269, - 54277, 54277, 54277, 54277, 54277, 54277, 54277, 54277, - 54287, 54287, 54287, 54287, 54287, 54287, 54287, 54287, - 54287, 54287, 54293, 54293, 54293, 54293, 54293, 54293, - 54311, 54311, 54311, 54311, 54311, 54311, 54311, 54311, - 54311, 54311, 54311, 54311, 54311, 54311, 54311, 54311, - 54311, 54311, 54319, 54319, 54319, 54319, 54319, 54319, - 54319, 54319, 54323, 54323, 54323, 54323, 54331, 54331, - 54331, 54331, 54331, 54331, 54331, 54331, 54347, 54347, - 54347, 54347, 54347, 54347, 54347, 54347, 54347, 54347, - 54347, 54347, 54347, 54347, 54347, 54347, 54361, 54361, - 54361, 54361, 54361, 54361, 54361, 54361, 54361, 54361, - 54361, 54361, 54361, 54361, 54367, 54367, 54367, 54367, - 54367, 54367, 54371, 54371, 54371, 54371, 54377, 54377, - 54377, 54377, 54377, 54377, 54401, 54401, 54401, 54401, - 54401, 54401, 54401, 54401, 54401, 54401, 54401, 54401, - 54401, 54401, 54401, 54401, 54401, 54401, 54401, 54401, - 54401, 54401, 54401, 54401, 54403, 54403, 54409, 54409, - 54409, 54409, 54409, 54409, 54413, 54413, 54413, 54413, - 54419, 54419, 54419, 54419, 54419, 54419, 54421, 54421, - 54437, 54437, 54437, 54437, 54437, 54437, 54437, 54437, - 54437, 54437, 54437, 54437, 54437, 54437, 54437, 54437, - 54443, 54443, 54443, 54443, 54443, 54443, 54449, 54449, - 54449, 54449, 54449, 54449, 54469, 54469, 54469, 54469, - 54469, 54469, 54469, 54469, 54469, 54469, 54469, 54469, - 54469, 54469, 54469, 54469, 54469, 54469, 54469, 54469, - 54493, 54493, 54493, 54493, 54493, 54493, 54493, 54493, - 54493, 54493, 54493, 54493, 54493, 54493, 54493, 54493, - 54493, 54493, 54493, 54493, 54493, 54493, 54493, 54493, - 54497, 54497, 54497, 54497, 54499, 54499, 54503, 54503, - 54503, 54503, 54517, 54517, 54517, 54517, 54517, 54517, - 54517, 54517, 54517, 54517, 54517, 54517, 54517, 54517, - 54521, 54521, 54521, 54521, 54539, 54539, 54539, 54539, - 54539, 54539, 54539, 54539, 54539, 54539, 54539, 54539, - 54539, 54539, 54539, 54539, 54539, 54539, 54541, 54541, - 54547, 54547, 54547, 54547, 54547, 54547, 54559, 54559, - 54559, 54559, 54559, 54559, 54559, 54559, 54559, 54559, - 54559, 54559, 54563, 54563, 54563, 54563, 54577, 54577, - 54577, 54577, 54577, 54577, 54577, 54577, 54577, 54577, - 54577, 54577, 54577, 54577, 54581, 54581, 54581, 54581, - 54583, 54583, 54601, 54601, 54601, 54601, 54601, 54601, - 54601, 54601, 54601, 54601, 54601, 54601, 54601, 54601, - 54601, 54601, 54601, 54601, 54617, 54617, 54617, 54617, - 54617, 54617, 54617, 54617, 54617, 54617, 54617, 54617, - 54617, 54617, 54617, 54617, 54623, 54623, 54623, 54623, - 54623, 54623, 54629, 54629, 54629, 54629, 54629, 54629, - 54631, 54631, 54647, 54647, 54647, 54647, 54647, 54647, - 54647, 54647, 54647, 54647, 54647, 54647, 54647, 54647, - 54647, 54647, 54667, 54667, 54667, 54667, 54667, 54667, - 54667, 54667, 54667, 54667, 54667, 54667, 54667, 54667, - 54667, 54667, 54667, 54667, 54667, 54667, 54673, 54673, - 54673, 54673, 54673, 54673, 54679, 54679, 54679, 54679, - 54679, 54679, 54709, 54709, 54709, 54709, 54709, 54709, - 54709, 54709, 54709, 54709, 54709, 54709, 54709, 54709, - 54709, 54709, 54709, 54709, 54709, 54709, 54709, 54709, - 54709, 54709, 54709, 54709, 54709, 54709, 54709, 54709, - 54713, 54713, 54713, 54713, 54721, 54721, 54721, 54721, - 54721, 54721, 54721, 54721, 54727, 54727, 54727, 54727, - 54727, 54727, 54751, 54751, 54751, 54751, 54751, 54751, - 54751, 54751, 54751, 54751, 54751, 54751, 54751, 54751, - 54751, 54751, 54751, 54751, 54751, 54751, 54751, 54751, - 54751, 54751, 54767, 54767, 54767, 54767, 54767, 54767, - 54767, 54767, 54767, 54767, 54767, 54767, 54767, 54767, - 54767, 54767, 54773, 54773, 54773, 54773, 54773, 54773, - 54779, 54779, 54779, 54779, 54779, 54779, 54787, 54787, - 54787, 54787, 54787, 54787, 54787, 54787, 54799, 54799, - 54799, 54799, 54799, 54799, 54799, 54799, 54799, 54799, - 54799, 54799, 54829, 54829, 54829, 54829, 54829, 54829, - 54829, 54829, 54829, 54829, 54829, 54829, 54829, 54829, - 54829, 54829, 54829, 54829, 54829, 54829, 54829, 54829, - 54829, 54829, 54829, 54829, 54829, 54829, 54829, 54829, - 54833, 54833, 54833, 54833, 54851, 54851, 54851, 54851, - 54851, 54851, 54851, 54851, 54851, 54851, 54851, 54851, - 54851, 54851, 54851, 54851, 54851, 54851, 54869, 54869, - 54869, 54869, 54869, 54869, 54869, 54869, 54869, 54869, - 54869, 54869, 54869, 54869, 54869, 54869, 54869, 54869, - 54877, 54877, 54877, 54877, 54877, 54877, 54877, 54877, - 54881, 54881, 54881, 54881, 54907, 54907, 54907, 54907, - 54907, 54907, 54907, 54907, 54907, 54907, 54907, 54907, - 54907, 54907, 54907, 54907, 54907, 54907, 54907, 54907, - 54907, 54907, 54907, 54907, 54907, 54907, 54917, 54917, - 54917, 54917, 54917, 54917, 54917, 54917, 54917, 54917, - 54919, 54919, 54941, 54941, 54941, 54941, 54941, 54941, - 54941, 54941, 54941, 54941, 54941, 54941, 54941, 54941, - 54941, 54941, 54941, 54941, 54941, 54941, 54941, 54941, - 54949, 54949, 54949, 54949, 54949, 54949, 54949, 54949, - 54959, 54959, 54959, 54959, 54959, 54959, 54959, 54959, - 54959, 54959, 54973, 54973, 54973, 54973, 54973, 54973, - 54973, 54973, 54973, 54973, 54973, 54973, 54973, 54973, - 54979, 54979, 54979, 54979, 54979, 54979, 54983, 54983, - 54983, 54983, 55001, 55001, 55001, 55001, 55001, 55001, - 55001, 55001, 55001, 55001, 55001, 55001, 55001, 55001, - 55001, 55001, 55001, 55001, 55009, 55009, 55009, 55009, - 55009, 55009, 55009, 55009, 55021, 55021, 55021, 55021, - 55021, 55021, 55021, 55021, 55021, 55021, 55021, 55021, - 55049, 55049, 55049, 55049, 55049, 55049, 55049, 55049, - 55049, 55049, 55049, 55049, 55049, 55049, 55049, 55049, - 55049, 55049, 55049, 55049, 55049, 55049, 55049, 55049, - 55049, 55049, 55049, 55049, 55051, 55051, 55057, 55057, - 55057, 55057, 55057, 55057, 55061, 55061, 55061, 55061, - 55073, 55073, 55073, 55073, 55073, 55073, 55073, 55073, - 55073, 55073, 55073, 55073, 55079, 55079, 55079, 55079, - 55079, 55079, 55103, 55103, 55103, 55103, 55103, 55103, - 55103, 55103, 55103, 55103, 55103, 55103, 55103, 55103, - 55103, 55103, 55103, 55103, 55103, 55103, 55103, 55103, - 55103, 55103, 55109, 55109, 55109, 55109, 55109, 55109, - 55117, 55117, 55117, 55117, 55117, 55117, 55117, 55117, - 55127, 55127, 55127, 55127, 55127, 55127, 55127, 55127, - 55127, 55127, 55147, 55147, 55147, 55147, 55147, 55147, - 55147, 55147, 55147, 55147, 55147, 55147, 55147, 55147, - 55147, 55147, 55147, 55147, 55147, 55147, 55163, 55163, - 55163, 55163, 55163, 55163, 55163, 55163, 55163, 55163, - 55163, 55163, 55163, 55163, 55163, 55163, 55171, 55171, - 55171, 55171, 55171, 55171, 55171, 55171, 55201, 55201, - 55201, 55201, 55201, 55201, 55201, 55201, 55201, 55201, - 55201, 55201, 55201, 55201, 55201, 55201, 55201, 55201, - 55201, 55201, 55201, 55201, 55201, 55201, 55201, 55201, - 55201, 55201, 55201, 55201, 55207, 55207, 55207, 55207, - 55207, 55207, 55213, 55213, 55213, 55213, 55213, 55213, - 55217, 55217, 55217, 55217, 55219, 55219, 55229, 55229, - 55229, 55229, 55229, 55229, 55229, 55229, 55229, 55229, - 55243, 55243, 55243, 55243, 55243, 55243, 55243, 55243, - 55243, 55243, 55243, 55243, 55243, 55243, 55249, 55249, - 55249, 55249, 55249, 55249, 55259, 55259, 55259, 55259, - 55259, 55259, 55259, 55259, 55259, 55259, 55291, 55291, - 55291, 55291, 55291, 55291, 55291, 55291, 55291, 55291, - 55291, 55291, 55291, 55291, 55291, 55291, 55291, 55291, - 55291, 55291, 55291, 55291, 55291, 55291, 55291, 55291, - 55291, 55291, 55291, 55291, 55291, 55291, 55313, 55313, - 55313, 55313, 55313, 55313, 55313, 55313, 55313, 55313, - 55313, 55313, 55313, 55313, 55313, 55313, 55313, 55313, - 55313, 55313, 55313, 55313, 55331, 55331, 55331, 55331, - 55331, 55331, 55331, 55331, 55331, 55331, 55331, 55331, - 55331, 55331, 55331, 55331, 55331, 55331, 55333, 55333, - 55337, 55337, 55337, 55337, 55339, 55339, 55343, 55343, - 55343, 55343, 55351, 55351, 55351, 55351, 55351, 55351, - 55351, 55351, 55373, 55373, 55373, 55373, 55373, 55373, - 55373, 55373, 55373, 55373, 55373, 55373, 55373, 55373, - 55373, 55373, 55373, 55373, 55373, 55373, 55373, 55373, - 55381, 55381, 55381, 55381, 55381, 55381, 55381, 55381, - 55399, 55399, 55399, 55399, 55399, 55399, 55399, 55399, - 55399, 55399, 55399, 55399, 55399, 55399, 55399, 55399, - 55399, 55399, 55411, 55411, 55411, 55411, 55411, 55411, - 55411, 55411, 55411, 55411, 55411, 55411, 55439, 55439, - 55439, 55439, 55439, 55439, 55439, 55439, 55439, 55439, - 55439, 55439, 55439, 55439, 55439, 55439, 55439, 55439, - 55439, 55439, 55439, 55439, 55439, 55439, 55439, 55439, - 55439, 55439, 55441, 55441, 55457, 55457, 55457, 55457, - 55457, 55457, 55457, 55457, 55457, 55457, 55457, 55457, - 55457, 55457, 55457, 55457, 55469, 55469, 55469, 55469, - 55469, 55469, 55469, 55469, 55469, 55469, 55469, 55469, - 55487, 55487, 55487, 55487, 55487, 55487, 55487, 55487, - 55487, 55487, 55487, 55487, 55487, 55487, 55487, 55487, - 55487, 55487, 55501, 55501, 55501, 55501, 55501, 55501, - 55501, 55501, 55501, 55501, 55501, 55501, 55501, 55501, - 55511, 55511, 55511, 55511, 55511, 55511, 55511, 55511, - 55511, 55511, 55529, 55529, 55529, 55529, 55529, 55529, - 55529, 55529, 55529, 55529, 55529, 55529, 55529, 55529, - 55529, 55529, 55529, 55529, 55541, 55541, 55541, 55541, - 55541, 55541, 55541, 55541, 55541, 55541, 55541, 55541, - 55547, 55547, 55547, 55547, 55547, 55547, 55579, 55579, - 55579, 55579, 55579, 55579, 55579, 55579, 55579, 55579, - 55579, 55579, 55579, 55579, 55579, 55579, 55579, 55579, - 55579, 55579, 55579, 55579, 55579, 55579, 55579, 55579, - 55579, 55579, 55579, 55579, 55579, 55579, 55589, 55589, - 55589, 55589, 55589, 55589, 55589, 55589, 55589, 55589, - 55603, 55603, 55603, 55603, 55603, 55603, 55603, 55603, - 55603, 55603, 55603, 55603, 55603, 55603, 55609, 55609, - 55609, 55609, 55609, 55609, 55619, 55619, 55619, 55619, - 55619, 55619, 55619, 55619, 55619, 55619, 55621, 55621, - 55631, 55631, 55631, 55631, 55631, 55631, 55631, 55631, - 55631, 55631, 55633, 55633, 55639, 55639, 55639, 55639, - 55639, 55639, 55661, 55661, 55661, 55661, 55661, 55661, - 55661, 55661, 55661, 55661, 55661, 55661, 55661, 55661, - 55661, 55661, 55661, 55661, 55661, 55661, 55661, 55661, - 55663, 55663, 55667, 55667, 55667, 55667, 55673, 55673, - 55673, 55673, 55673, 55673, 55681, 55681, 55681, 55681, - 55681, 55681, 55681, 55681, 55691, 55691, 55691, 55691, - 55691, 55691, 55691, 55691, 55691, 55691, 55697, 55697, - 55697, 55697, 55697, 55697, 55711, 55711, 55711, 55711, - 55711, 55711, 55711, 55711, 55711, 55711, 55711, 55711, - 55711, 55711, 55717, 55717, 55717, 55717, 55717, 55717, - 55721, 55721, 55721, 55721, 55733, 55733, 55733, 55733, - 55733, 55733, 55733, 55733, 55733, 55733, 55733, 55733, - 55763, 55763, 55763, 55763, 55763, 55763, 55763, 55763, - 55763, 55763, 55763, 55763, 55763, 55763, 55763, 55763, - 55763, 55763, 55763, 55763, 55763, 55763, 55763, 55763, - 55763, 55763, 55763, 55763, 55763, 55763, 55787, 55787, - 55787, 55787, 55787, 55787, 55787, 55787, 55787, 55787, - 55787, 55787, 55787, 55787, 55787, 55787, 55787, 55787, - 55787, 55787, 55787, 55787, 55787, 55787, 55793, 55793, - 55793, 55793, 55793, 55793, 55799, 55799, 55799, 55799, - 55799, 55799, 55807, 55807, 55807, 55807, 55807, 55807, - 55807, 55807, 55813, 55813, 55813, 55813, 55813, 55813, - 55817, 55817, 55817, 55817, 55819, 55819, 55823, 55823, - 55823, 55823, 55829, 55829, 55829, 55829, 55829, 55829, - 55837, 55837, 55837, 55837, 55837, 55837, 55837, 55837, - 55843, 55843, 55843, 55843, 55843, 55843, 55849, 55849, - 55849, 55849, 55849, 55849, 55871, 55871, 55871, 55871, - 55871, 55871, 55871, 55871, 55871, 55871, 55871, 55871, - 55871, 55871, 55871, 55871, 55871, 55871, 55871, 55871, - 55871, 55871, 55889, 55889, 55889, 55889, 55889, 55889, - 55889, 55889, 55889, 55889, 55889, 55889, 55889, 55889, - 55889, 55889, 55889, 55889, 55897, 55897, 55897, 55897, - 55897, 55897, 55897, 55897, 55901, 55901, 55901, 55901, - 55903, 55903, 55921, 55921, 55921, 55921, 55921, 55921, - 55921, 55921, 55921, 55921, 55921, 55921, 55921, 55921, - 55921, 55921, 55921, 55921, 55927, 55927, 55927, 55927, - 55927, 55927, 55931, 55931, 55931, 55931, 55933, 55933, - 55949, 55949, 55949, 55949, 55949, 55949, 55949, 55949, - 55949, 55949, 55949, 55949, 55949, 55949, 55949, 55949, - 55967, 55967, 55967, 55967, 55967, 55967, 55967, 55967, - 55967, 55967, 55967, 55967, 55967, 55967, 55967, 55967, - 55967, 55967, 55987, 55987, 55987, 55987, 55987, 55987, - 55987, 55987, 55987, 55987, 55987, 55987, 55987, 55987, - 55987, 55987, 55987, 55987, 55987, 55987, 55997, 55997, - 55997, 55997, 55997, 55997, 55997, 55997, 55997, 55997, - 56003, 56003, 56003, 56003, 56003, 56003, 56009, 56009, - 56009, 56009, 56009, 56009, 56039, 56039, 56039, 56039, - 56039, 56039, 56039, 56039, 56039, 56039, 56039, 56039, - 56039, 56039, 56039, 56039, 56039, 56039, 56039, 56039, - 56039, 56039, 56039, 56039, 56039, 56039, 56039, 56039, - 56039, 56039, 56041, 56041, 56053, 56053, 56053, 56053, - 56053, 56053, 56053, 56053, 56053, 56053, 56053, 56053, - 56081, 56081, 56081, 56081, 56081, 56081, 56081, 56081, - 56081, 56081, 56081, 56081, 56081, 56081, 56081, 56081, - 56081, 56081, 56081, 56081, 56081, 56081, 56081, 56081, - 56081, 56081, 56081, 56081, 56087, 56087, 56087, 56087, - 56087, 56087, 56093, 56093, 56093, 56093, 56093, 56093, - 56099, 56099, 56099, 56099, 56099, 56099, 56101, 56101, - 56113, 56113, 56113, 56113, 56113, 56113, 56113, 56113, - 56113, 56113, 56113, 56113, 56123, 56123, 56123, 56123, - 56123, 56123, 56123, 56123, 56123, 56123, 56131, 56131, - 56131, 56131, 56131, 56131, 56131, 56131, 56149, 56149, - 56149, 56149, 56149, 56149, 56149, 56149, 56149, 56149, - 56149, 56149, 56149, 56149, 56149, 56149, 56149, 56149, - 56167, 56167, 56167, 56167, 56167, 56167, 56167, 56167, - 56167, 56167, 56167, 56167, 56167, 56167, 56167, 56167, - 56167, 56167, 56171, 56171, 56171, 56171, 56179, 56179, - 56179, 56179, 56179, 56179, 56179, 56179, 56197, 56197, - 56197, 56197, 56197, 56197, 56197, 56197, 56197, 56197, - 56197, 56197, 56197, 56197, 56197, 56197, 56197, 56197, - 56207, 56207, 56207, 56207, 56207, 56207, 56207, 56207, - 56207, 56207, 56209, 56209, 56237, 56237, 56237, 56237, - 56237, 56237, 56237, 56237, 56237, 56237, 56237, 56237, - 56237, 56237, 56237, 56237, 56237, 56237, 56237, 56237, - 56237, 56237, 56237, 56237, 56237, 56237, 56237, 56237, - 56239, 56239, 56249, 56249, 56249, 56249, 56249, 56249, - 56249, 56249, 56249, 56249, 56263, 56263, 56263, 56263, - 56263, 56263, 56263, 56263, 56263, 56263, 56263, 56263, - 56263, 56263, 56267, 56267, 56267, 56267, 56269, 56269, - 56299, 56299, 56299, 56299, 56299, 56299, 56299, 56299, - 56299, 56299, 56299, 56299, 56299, 56299, 56299, 56299, - 56299, 56299, 56299, 56299, 56299, 56299, 56299, 56299, - 56299, 56299, 56299, 56299, 56299, 56299, 56311, 56311, - 56311, 56311, 56311, 56311, 56311, 56311, 56311, 56311, - 56311, 56311, 56333, 56333, 56333, 56333, 56333, 56333, - 56333, 56333, 56333, 56333, 56333, 56333, 56333, 56333, - 56333, 56333, 56333, 56333, 56333, 56333, 56333, 56333, - 56359, 56359, 56359, 56359, 56359, 56359, 56359, 56359, - 56359, 56359, 56359, 56359, 56359, 56359, 56359, 56359, - 56359, 56359, 56359, 56359, 56359, 56359, 56359, 56359, - 56359, 56359, 56369, 56369, 56369, 56369, 56369, 56369, - 56369, 56369, 56369, 56369, 56377, 56377, 56377, 56377, - 56377, 56377, 56377, 56377, 56383, 56383, 56383, 56383, - 56383, 56383, 56393, 56393, 56393, 56393, 56393, 56393, - 56393, 56393, 56393, 56393, 56401, 56401, 56401, 56401, - 56401, 56401, 56401, 56401, 56417, 56417, 56417, 56417, - 56417, 56417, 56417, 56417, 56417, 56417, 56417, 56417, - 56417, 56417, 56417, 56417, 56431, 56431, 56431, 56431, - 56431, 56431, 56431, 56431, 56431, 56431, 56431, 56431, - 56431, 56431, 56437, 56437, 56437, 56437, 56437, 56437, - 56443, 56443, 56443, 56443, 56443, 56443, 56453, 56453, - 56453, 56453, 56453, 56453, 56453, 56453, 56453, 56453, - 56467, 56467, 56467, 56467, 56467, 56467, 56467, 56467, - 56467, 56467, 56467, 56467, 56467, 56467, 56473, 56473, - 56473, 56473, 56473, 56473, 56477, 56477, 56477, 56477, - 56479, 56479, 56489, 56489, 56489, 56489, 56489, 56489, - 56489, 56489, 56489, 56489, 56501, 56501, 56501, 56501, - 56501, 56501, 56501, 56501, 56501, 56501, 56501, 56501, - 56503, 56503, 56509, 56509, 56509, 56509, 56509, 56509, - 56519, 56519, 56519, 56519, 56519, 56519, 56519, 56519, - 56519, 56519, 56527, 56527, 56527, 56527, 56527, 56527, - 56527, 56527, 56531, 56531, 56531, 56531, 56533, 56533, - 56543, 56543, 56543, 56543, 56543, 56543, 56543, 56543, - 56543, 56543, 56569, 56569, 56569, 56569, 56569, 56569, - 56569, 56569, 56569, 56569, 56569, 56569, 56569, 56569, - 56569, 56569, 56569, 56569, 56569, 56569, 56569, 56569, - 56569, 56569, 56569, 56569, 56591, 56591, 56591, 56591, - 56591, 56591, 56591, 56591, 56591, 56591, 56591, 56591, - 56591, 56591, 56591, 56591, 56591, 56591, 56591, 56591, - 56591, 56591, 56597, 56597, 56597, 56597, 56597, 56597, - 56599, 56599, 56611, 56611, 56611, 56611, 56611, 56611, - 56611, 56611, 56611, 56611, 56611, 56611, 56629, 56629, - 56629, 56629, 56629, 56629, 56629, 56629, 56629, 56629, - 56629, 56629, 56629, 56629, 56629, 56629, 56629, 56629, - 56633, 56633, 56633, 56633, 56659, 56659, 56659, 56659, - 56659, 56659, 56659, 56659, 56659, 56659, 56659, 56659, - 56659, 56659, 56659, 56659, 56659, 56659, 56659, 56659, - 56659, 56659, 56659, 56659, 56659, 56659, 56663, 56663, - 56663, 56663, 56671, 56671, 56671, 56671, 56671, 56671, - 56671, 56671, 56681, 56681, 56681, 56681, 56681, 56681, - 56681, 56681, 56681, 56681, 56687, 56687, 56687, 56687, - 56687, 56687, 56701, 56701, 56701, 56701, 56701, 56701, - 56701, 56701, 56701, 56701, 56701, 56701, 56701, 56701, - 56711, 56711, 56711, 56711, 56711, 56711, 56711, 56711, - 56711, 56711, 56713, 56713, 56731, 56731, 56731, 56731, - 56731, 56731, 56731, 56731, 56731, 56731, 56731, 56731, - 56731, 56731, 56731, 56731, 56731, 56731, 56737, 56737, - 56737, 56737, 56737, 56737, 56747, 56747, 56747, 56747, - 56747, 56747, 56747, 56747, 56747, 56747, 56767, 56767, - 56767, 56767, 56767, 56767, 56767, 56767, 56767, 56767, - 56767, 56767, 56767, 56767, 56767, 56767, 56767, 56767, - 56767, 56767, 56773, 56773, 56773, 56773, 56773, 56773, - 56779, 56779, 56779, 56779, 56779, 56779, 56783, 56783, - 56783, 56783, 56807, 56807, 56807, 56807, 56807, 56807, - 56807, 56807, 56807, 56807, 56807, 56807, 56807, 56807, - 56807, 56807, 56807, 56807, 56807, 56807, 56807, 56807, - 56807, 56807, 56809, 56809, 56813, 56813, 56813, 56813, - 56821, 56821, 56821, 56821, 56821, 56821, 56821, 56821, - 56827, 56827, 56827, 56827, 56827, 56827, 56843, 56843, - 56843, 56843, 56843, 56843, 56843, 56843, 56843, 56843, - 56843, 56843, 56843, 56843, 56843, 56843, 56857, 56857, - 56857, 56857, 56857, 56857, 56857, 56857, 56857, 56857, - 56857, 56857, 56857, 56857, 56873, 56873, 56873, 56873, - 56873, 56873, 56873, 56873, 56873, 56873, 56873, 56873, - 56873, 56873, 56873, 56873, 56891, 56891, 56891, 56891, - 56891, 56891, 56891, 56891, 56891, 56891, 56891, 56891, - 56891, 56891, 56891, 56891, 56891, 56891, 56893, 56893, - 56897, 56897, 56897, 56897, 56909, 56909, 56909, 56909, - 56909, 56909, 56909, 56909, 56909, 56909, 56909, 56909, - 56911, 56911, 56921, 56921, 56921, 56921, 56921, 56921, - 56921, 56921, 56921, 56921, 56923, 56923, 56929, 56929, - 56929, 56929, 56929, 56929, 56941, 56941, 56941, 56941, - 56941, 56941, 56941, 56941, 56941, 56941, 56941, 56941, - 56951, 56951, 56951, 56951, 56951, 56951, 56951, 56951, - 56951, 56951, 56957, 56957, 56957, 56957, 56957, 56957, - 56963, 56963, 56963, 56963, 56963, 56963, 56983, 56983, - 56983, 56983, 56983, 56983, 56983, 56983, 56983, 56983, - 56983, 56983, 56983, 56983, 56983, 56983, 56983, 56983, - 56983, 56983, 56989, 56989, 56989, 56989, 56989, 56989, - 56993, 56993, 56993, 56993, 56999, 56999, 56999, 56999, - 56999, 56999, 57037, 57037, 57037, 57037, 57037, 57037, - 57037, 57037, 57037, 57037, 57037, 57037, 57037, 57037, - 57037, 57037, 57037, 57037, 57037, 57037, 57037, 57037, - 57037, 57037, 57037, 57037, 57037, 57037, 57037, 57037, - 57037, 57037, 57037, 57037, 57037, 57037, 57037, 57037, - 57041, 57041, 57041, 57041, 57047, 57047, 57047, 57047, - 57047, 57047, 57059, 57059, 57059, 57059, 57059, 57059, - 57059, 57059, 57059, 57059, 57059, 57059, 57073, 57073, - 57073, 57073, 57073, 57073, 57073, 57073, 57073, 57073, - 57073, 57073, 57073, 57073, 57077, 57077, 57077, 57077, - 57089, 57089, 57089, 57089, 57089, 57089, 57089, 57089, - 57089, 57089, 57089, 57089, 57097, 57097, 57097, 57097, - 57097, 57097, 57097, 57097, 57107, 57107, 57107, 57107, - 57107, 57107, 57107, 57107, 57107, 57107, 57119, 57119, - 57119, 57119, 57119, 57119, 57119, 57119, 57119, 57119, - 57119, 57119, 57131, 57131, 57131, 57131, 57131, 57131, - 57131, 57131, 57131, 57131, 57131, 57131, 57139, 57139, - 57139, 57139, 57139, 57139, 57139, 57139, 57143, 57143, - 57143, 57143, 57149, 57149, 57149, 57149, 57149, 57149, - 57163, 57163, 57163, 57163, 57163, 57163, 57163, 57163, - 57163, 57163, 57163, 57163, 57163, 57163, 57173, 57173, - 57173, 57173, 57173, 57173, 57173, 57173, 57173, 57173, - 57179, 57179, 57179, 57179, 57179, 57179, 57191, 57191, - 57191, 57191, 57191, 57191, 57191, 57191, 57191, 57191, - 57191, 57191, 57193, 57193, 57203, 57203, 57203, 57203, - 57203, 57203, 57203, 57203, 57203, 57203, 57221, 57221, - 57221, 57221, 57221, 57221, 57221, 57221, 57221, 57221, - 57221, 57221, 57221, 57221, 57221, 57221, 57221, 57221, - 57223, 57223, 57241, 57241, 57241, 57241, 57241, 57241, - 57241, 57241, 57241, 57241, 57241, 57241, 57241, 57241, - 57241, 57241, 57241, 57241, 57251, 57251, 57251, 57251, - 57251, 57251, 57251, 57251, 57251, 57251, 57259, 57259, - 57259, 57259, 57259, 57259, 57259, 57259, 57269, 57269, - 57269, 57269, 57269, 57269, 57269, 57269, 57269, 57269, - 57271, 57271, 57283, 57283, 57283, 57283, 57283, 57283, - 57283, 57283, 57283, 57283, 57283, 57283, 57287, 57287, - 57287, 57287, 57301, 57301, 57301, 57301, 57301, 57301, - 57301, 57301, 57301, 57301, 57301, 57301, 57301, 57301, - 57329, 57329, 57329, 57329, 57329, 57329, 57329, 57329, - 57329, 57329, 57329, 57329, 57329, 57329, 57329, 57329, - 57329, 57329, 57329, 57329, 57329, 57329, 57329, 57329, - 57329, 57329, 57329, 57329, 57331, 57331, 57347, 57347, - 57347, 57347, 57347, 57347, 57347, 57347, 57347, 57347, - 57347, 57347, 57347, 57347, 57347, 57347, 57349, 57349, - 57367, 57367, 57367, 57367, 57367, 57367, 57367, 57367, - 57367, 57367, 57367, 57367, 57367, 57367, 57367, 57367, - 57367, 57367, 57373, 57373, 57373, 57373, 57373, 57373, - 57383, 57383, 57383, 57383, 57383, 57383, 57383, 57383, - 57383, 57383, 57389, 57389, 57389, 57389, 57389, 57389, - 57397, 57397, 57397, 57397, 57397, 57397, 57397, 57397, - 57413, 57413, 57413, 57413, 57413, 57413, 57413, 57413, - 57413, 57413, 57413, 57413, 57413, 57413, 57413, 57413, - 57427, 57427, 57427, 57427, 57427, 57427, 57427, 57427, - 57427, 57427, 57427, 57427, 57427, 57427, 57457, 57457, - 57457, 57457, 57457, 57457, 57457, 57457, 57457, 57457, - 57457, 57457, 57457, 57457, 57457, 57457, 57457, 57457, - 57457, 57457, 57457, 57457, 57457, 57457, 57457, 57457, - 57457, 57457, 57457, 57457, 57467, 57467, 57467, 57467, - 57467, 57467, 57467, 57467, 57467, 57467, 57487, 57487, - 57487, 57487, 57487, 57487, 57487, 57487, 57487, 57487, - 57487, 57487, 57487, 57487, 57487, 57487, 57487, 57487, - 57487, 57487, 57493, 57493, 57493, 57493, 57493, 57493, - 57503, 57503, 57503, 57503, 57503, 57503, 57503, 57503, - 57503, 57503, 57527, 57527, 57527, 57527, 57527, 57527, - 57527, 57527, 57527, 57527, 57527, 57527, 57527, 57527, - 57527, 57527, 57527, 57527, 57527, 57527, 57527, 57527, - 57527, 57527, 57529, 57529, 57557, 57557, 57557, 57557, - 57557, 57557, 57557, 57557, 57557, 57557, 57557, 57557, - 57557, 57557, 57557, 57557, 57557, 57557, 57557, 57557, - 57557, 57557, 57557, 57557, 57557, 57557, 57557, 57557, - 57559, 57559, 57571, 57571, 57571, 57571, 57571, 57571, - 57571, 57571, 57571, 57571, 57571, 57571, 57587, 57587, - 57587, 57587, 57587, 57587, 57587, 57587, 57587, 57587, - 57587, 57587, 57587, 57587, 57587, 57587, 57593, 57593, - 57593, 57593, 57593, 57593, 57601, 57601, 57601, 57601, - 57601, 57601, 57601, 57601, 57637, 57637, 57637, 57637, - 57637, 57637, 57637, 57637, 57637, 57637, 57637, 57637, - 57637, 57637, 57637, 57637, 57637, 57637, 57637, 57637, - 57637, 57637, 57637, 57637, 57637, 57637, 57637, 57637, - 57637, 57637, 57637, 57637, 57637, 57637, 57637, 57637, - 57641, 57641, 57641, 57641, 57649, 57649, 57649, 57649, - 57649, 57649, 57649, 57649, 57653, 57653, 57653, 57653, - 57667, 57667, 57667, 57667, 57667, 57667, 57667, 57667, - 57667, 57667, 57667, 57667, 57667, 57667, 57679, 57679, - 57679, 57679, 57679, 57679, 57679, 57679, 57679, 57679, - 57679, 57679, 57689, 57689, 57689, 57689, 57689, 57689, - 57689, 57689, 57689, 57689, 57697, 57697, 57697, 57697, - 57697, 57697, 57697, 57697, 57709, 57709, 57709, 57709, - 57709, 57709, 57709, 57709, 57709, 57709, 57709, 57709, - 57713, 57713, 57713, 57713, 57719, 57719, 57719, 57719, - 57719, 57719, 57727, 57727, 57727, 57727, 57727, 57727, - 57727, 57727, 57731, 57731, 57731, 57731, 57737, 57737, - 57737, 57737, 57737, 57737, 57751, 57751, 57751, 57751, - 57751, 57751, 57751, 57751, 57751, 57751, 57751, 57751, - 57751, 57751, 57773, 57773, 57773, 57773, 57773, 57773, - 57773, 57773, 57773, 57773, 57773, 57773, 57773, 57773, - 57773, 57773, 57773, 57773, 57773, 57773, 57773, 57773, - 57781, 57781, 57781, 57781, 57781, 57781, 57781, 57781, - 57787, 57787, 57787, 57787, 57787, 57787, 57791, 57791, - 57791, 57791, 57793, 57793, 57803, 57803, 57803, 57803, - 57803, 57803, 57803, 57803, 57803, 57803, 57809, 57809, - 57809, 57809, 57809, 57809, 57829, 57829, 57829, 57829, - 57829, 57829, 57829, 57829, 57829, 57829, 57829, 57829, - 57829, 57829, 57829, 57829, 57829, 57829, 57829, 57829, - 57839, 57839, 57839, 57839, 57839, 57839, 57839, 57839, - 57839, 57839, 57847, 57847, 57847, 57847, 57847, 57847, - 57847, 57847, 57853, 57853, 57853, 57853, 57853, 57853, - 57859, 57859, 57859, 57859, 57859, 57859, 57881, 57881, - 57881, 57881, 57881, 57881, 57881, 57881, 57881, 57881, - 57881, 57881, 57881, 57881, 57881, 57881, 57881, 57881, - 57881, 57881, 57881, 57881, 57899, 57899, 57899, 57899, - 57899, 57899, 57899, 57899, 57899, 57899, 57899, 57899, - 57899, 57899, 57899, 57899, 57899, 57899, 57901, 57901, - 57917, 57917, 57917, 57917, 57917, 57917, 57917, 57917, - 57917, 57917, 57917, 57917, 57917, 57917, 57917, 57917, - 57923, 57923, 57923, 57923, 57923, 57923, 57943, 57943, - 57943, 57943, 57943, 57943, 57943, 57943, 57943, 57943, - 57943, 57943, 57943, 57943, 57943, 57943, 57943, 57943, - 57943, 57943, 57947, 57947, 57947, 57947, 57973, 57973, - 57973, 57973, 57973, 57973, 57973, 57973, 57973, 57973, - 57973, 57973, 57973, 57973, 57973, 57973, 57973, 57973, - 57973, 57973, 57973, 57973, 57973, 57973, 57973, 57973, - 57977, 57977, 57977, 57977, 57991, 57991, 57991, 57991, - 57991, 57991, 57991, 57991, 57991, 57991, 57991, 57991, - 57991, 57991, 58013, 58013, 58013, 58013, 58013, 58013, - 58013, 58013, 58013, 58013, 58013, 58013, 58013, 58013, - 58013, 58013, 58013, 58013, 58013, 58013, 58013, 58013, - 58027, 58027, 58027, 58027, 58027, 58027, 58027, 58027, - 58027, 58027, 58027, 58027, 58027, 58027, 58031, 58031, - 58031, 58031, 58043, 58043, 58043, 58043, 58043, 58043, - 58043, 58043, 58043, 58043, 58043, 58043, 58049, 58049, - 58049, 58049, 58049, 58049, 58057, 58057, 58057, 58057, - 58057, 58057, 58057, 58057, 58061, 58061, 58061, 58061, - 58067, 58067, 58067, 58067, 58067, 58067, 58073, 58073, - 58073, 58073, 58073, 58073, 58099, 58099, 58099, 58099, - 58099, 58099, 58099, 58099, 58099, 58099, 58099, 58099, - 58099, 58099, 58099, 58099, 58099, 58099, 58099, 58099, - 58099, 58099, 58099, 58099, 58099, 58099, 58109, 58109, - 58109, 58109, 58109, 58109, 58109, 58109, 58109, 58109, - 58111, 58111, 58129, 58129, 58129, 58129, 58129, 58129, - 58129, 58129, 58129, 58129, 58129, 58129, 58129, 58129, - 58129, 58129, 58129, 58129, 58147, 58147, 58147, 58147, - 58147, 58147, 58147, 58147, 58147, 58147, 58147, 58147, - 58147, 58147, 58147, 58147, 58147, 58147, 58151, 58151, - 58151, 58151, 58153, 58153, 58169, 58169, 58169, 58169, - 58169, 58169, 58169, 58169, 58169, 58169, 58169, 58169, - 58169, 58169, 58169, 58169, 58171, 58171, 58189, 58189, - 58189, 58189, 58189, 58189, 58189, 58189, 58189, 58189, - 58189, 58189, 58189, 58189, 58189, 58189, 58189, 58189, - 58193, 58193, 58193, 58193, 58199, 58199, 58199, 58199, - 58199, 58199, 58207, 58207, 58207, 58207, 58207, 58207, - 58207, 58207, 58211, 58211, 58211, 58211, 58217, 58217, - 58217, 58217, 58217, 58217, 58229, 58229, 58229, 58229, - 58229, 58229, 58229, 58229, 58229, 58229, 58229, 58229, - 58231, 58231, 58237, 58237, 58237, 58237, 58237, 58237, - 58243, 58243, 58243, 58243, 58243, 58243, 58271, 58271, - 58271, 58271, 58271, 58271, 58271, 58271, 58271, 58271, - 58271, 58271, 58271, 58271, 58271, 58271, 58271, 58271, - 58271, 58271, 58271, 58271, 58271, 58271, 58271, 58271, - 58271, 58271, 58309, 58309, 58309, 58309, 58309, 58309, - 58309, 58309, 58309, 58309, 58309, 58309, 58309, 58309, - 58309, 58309, 58309, 58309, 58309, 58309, 58309, 58309, - 58309, 58309, 58309, 58309, 58309, 58309, 58309, 58309, - 58309, 58309, 58309, 58309, 58309, 58309, 58309, 58309, - 58313, 58313, 58313, 58313, 58321, 58321, 58321, 58321, - 58321, 58321, 58321, 58321, 58337, 58337, 58337, 58337, - 58337, 58337, 58337, 58337, 58337, 58337, 58337, 58337, - 58337, 58337, 58337, 58337, 58363, 58363, 58363, 58363, - 58363, 58363, 58363, 58363, 58363, 58363, 58363, 58363, - 58363, 58363, 58363, 58363, 58363, 58363, 58363, 58363, - 58363, 58363, 58363, 58363, 58363, 58363, 58367, 58367, - 58367, 58367, 58369, 58369, 58379, 58379, 58379, 58379, - 58379, 58379, 58379, 58379, 58379, 58379, 58391, 58391, - 58391, 58391, 58391, 58391, 58391, 58391, 58391, 58391, - 58391, 58391, 58393, 58393, 58403, 58403, 58403, 58403, - 58403, 58403, 58403, 58403, 58403, 58403, 58411, 58411, - 58411, 58411, 58411, 58411, 58411, 58411, 58417, 58417, - 58417, 58417, 58417, 58417, 58427, 58427, 58427, 58427, - 58427, 58427, 58427, 58427, 58427, 58427, 58439, 58439, - 58439, 58439, 58439, 58439, 58439, 58439, 58439, 58439, - 58439, 58439, 58441, 58441, 58451, 58451, 58451, 58451, - 58451, 58451, 58451, 58451, 58451, 58451, 58453, 58453, - 58477, 58477, 58477, 58477, 58477, 58477, 58477, 58477, - 58477, 58477, 58477, 58477, 58477, 58477, 58477, 58477, - 58477, 58477, 58477, 58477, 58477, 58477, 58477, 58477, - 58481, 58481, 58481, 58481, 58511, 58511, 58511, 58511, - 58511, 58511, 58511, 58511, 58511, 58511, 58511, 58511, - 58511, 58511, 58511, 58511, 58511, 58511, 58511, 58511, - 58511, 58511, 58511, 58511, 58511, 58511, 58511, 58511, - 58511, 58511, 58537, 58537, 58537, 58537, 58537, 58537, - 58537, 58537, 58537, 58537, 58537, 58537, 58537, 58537, - 58537, 58537, 58537, 58537, 58537, 58537, 58537, 58537, - 58537, 58537, 58537, 58537, 58543, 58543, 58543, 58543, - 58543, 58543, 58549, 58549, 58549, 58549, 58549, 58549, - 58567, 58567, 58567, 58567, 58567, 58567, 58567, 58567, - 58567, 58567, 58567, 58567, 58567, 58567, 58567, 58567, - 58567, 58567, 58573, 58573, 58573, 58573, 58573, 58573, - 58579, 58579, 58579, 58579, 58579, 58579, 58601, 58601, - 58601, 58601, 58601, 58601, 58601, 58601, 58601, 58601, - 58601, 58601, 58601, 58601, 58601, 58601, 58601, 58601, - 58601, 58601, 58601, 58601, 58603, 58603, 58613, 58613, - 58613, 58613, 58613, 58613, 58613, 58613, 58613, 58613, - 58631, 58631, 58631, 58631, 58631, 58631, 58631, 58631, - 58631, 58631, 58631, 58631, 58631, 58631, 58631, 58631, - 58631, 58631, 58657, 58657, 58657, 58657, 58657, 58657, - 58657, 58657, 58657, 58657, 58657, 58657, 58657, 58657, - 58657, 58657, 58657, 58657, 58657, 58657, 58657, 58657, - 58657, 58657, 58657, 58657, 58661, 58661, 58661, 58661, - 58679, 58679, 58679, 58679, 58679, 58679, 58679, 58679, - 58679, 58679, 58679, 58679, 58679, 58679, 58679, 58679, - 58679, 58679, 58687, 58687, 58687, 58687, 58687, 58687, - 58687, 58687, 58693, 58693, 58693, 58693, 58693, 58693, - 58699, 58699, 58699, 58699, 58699, 58699, 58711, 58711, - 58711, 58711, 58711, 58711, 58711, 58711, 58711, 58711, - 58711, 58711, 58727, 58727, 58727, 58727, 58727, 58727, - 58727, 58727, 58727, 58727, 58727, 58727, 58727, 58727, - 58727, 58727, 58733, 58733, 58733, 58733, 58733, 58733, - 58741, 58741, 58741, 58741, 58741, 58741, 58741, 58741, - 58757, 58757, 58757, 58757, 58757, 58757, 58757, 58757, - 58757, 58757, 58757, 58757, 58757, 58757, 58757, 58757, - 58763, 58763, 58763, 58763, 58763, 58763, 58771, 58771, - 58771, 58771, 58771, 58771, 58771, 58771, 58787, 58787, - 58787, 58787, 58787, 58787, 58787, 58787, 58787, 58787, - 58787, 58787, 58787, 58787, 58787, 58787, 58789, 58789, - 58831, 58831, 58831, 58831, 58831, 58831, 58831, 58831, - 58831, 58831, 58831, 58831, 58831, 58831, 58831, 58831, - 58831, 58831, 58831, 58831, 58831, 58831, 58831, 58831, - 58831, 58831, 58831, 58831, 58831, 58831, 58831, 58831, - 58831, 58831, 58831, 58831, 58831, 58831, 58831, 58831, - 58831, 58831, 58889, 58889, 58889, 58889, 58889, 58889, - 58889, 58889, 58889, 58889, 58889, 58889, 58889, 58889, - 58889, 58889, 58889, 58889, 58889, 58889, 58889, 58889, - 58889, 58889, 58889, 58889, 58889, 58889, 58889, 58889, - 58889, 58889, 58889, 58889, 58889, 58889, 58889, 58889, - 58889, 58889, 58889, 58889, 58889, 58889, 58889, 58889, - 58889, 58889, 58889, 58889, 58889, 58889, 58889, 58889, - 58889, 58889, 58889, 58889, 58897, 58897, 58897, 58897, - 58897, 58897, 58897, 58897, 58901, 58901, 58901, 58901, - 58907, 58907, 58907, 58907, 58907, 58907, 58909, 58909, - 58913, 58913, 58913, 58913, 58921, 58921, 58921, 58921, - 58921, 58921, 58921, 58921, 58937, 58937, 58937, 58937, - 58937, 58937, 58937, 58937, 58937, 58937, 58937, 58937, - 58937, 58937, 58937, 58937, 58943, 58943, 58943, 58943, - 58943, 58943, 58963, 58963, 58963, 58963, 58963, 58963, - 58963, 58963, 58963, 58963, 58963, 58963, 58963, 58963, - 58963, 58963, 58963, 58963, 58963, 58963, 58967, 58967, - 58967, 58967, 58979, 58979, 58979, 58979, 58979, 58979, - 58979, 58979, 58979, 58979, 58979, 58979, 58991, 58991, - 58991, 58991, 58991, 58991, 58991, 58991, 58991, 58991, - 58991, 58991, 58997, 58997, 58997, 58997, 58997, 58997, - 59009, 59009, 59009, 59009, 59009, 59009, 59009, 59009, - 59009, 59009, 59009, 59009, 59011, 59011, 59021, 59021, - 59021, 59021, 59021, 59021, 59021, 59021, 59021, 59021, - 59023, 59023, 59029, 59029, 59029, 59029, 59029, 59029, - 59051, 59051, 59051, 59051, 59051, 59051, 59051, 59051, - 59051, 59051, 59051, 59051, 59051, 59051, 59051, 59051, - 59051, 59051, 59051, 59051, 59051, 59051, 59053, 59053, - 59063, 59063, 59063, 59063, 59063, 59063, 59063, 59063, - 59063, 59063, 59069, 59069, 59069, 59069, 59069, 59069, - 59077, 59077, 59077, 59077, 59077, 59077, 59077, 59077, - 59083, 59083, 59083, 59083, 59083, 59083, 59093, 59093, - 59093, 59093, 59093, 59093, 59093, 59093, 59093, 59093, - 59107, 59107, 59107, 59107, 59107, 59107, 59107, 59107, - 59107, 59107, 59107, 59107, 59107, 59107, 59113, 59113, - 59113, 59113, 59113, 59113, 59119, 59119, 59119, 59119, - 59119, 59119, 59123, 59123, 59123, 59123, 59141, 59141, - 59141, 59141, 59141, 59141, 59141, 59141, 59141, 59141, - 59141, 59141, 59141, 59141, 59141, 59141, 59141, 59141, - 59149, 59149, 59149, 59149, 59149, 59149, 59149, 59149, - 59159, 59159, 59159, 59159, 59159, 59159, 59159, 59159, - 59159, 59159, 59167, 59167, 59167, 59167, 59167, 59167, - 59167, 59167, 59183, 59183, 59183, 59183, 59183, 59183, - 59183, 59183, 59183, 59183, 59183, 59183, 59183, 59183, - 59183, 59183, 59197, 59197, 59197, 59197, 59197, 59197, - 59197, 59197, 59197, 59197, 59197, 59197, 59197, 59197, - 59207, 59207, 59207, 59207, 59207, 59207, 59207, 59207, - 59207, 59207, 59209, 59209, 59219, 59219, 59219, 59219, - 59219, 59219, 59219, 59219, 59219, 59219, 59221, 59221, - 59233, 59233, 59233, 59233, 59233, 59233, 59233, 59233, - 59233, 59233, 59233, 59233, 59239, 59239, 59239, 59239, - 59239, 59239, 59243, 59243, 59243, 59243, 59263, 59263, - 59263, 59263, 59263, 59263, 59263, 59263, 59263, 59263, - 59263, 59263, 59263, 59263, 59263, 59263, 59263, 59263, - 59263, 59263, 59273, 59273, 59273, 59273, 59273, 59273, - 59273, 59273, 59273, 59273, 59281, 59281, 59281, 59281, - 59281, 59281, 59281, 59281, 59333, 59333, 59333, 59333, - 59333, 59333, 59333, 59333, 59333, 59333, 59333, 59333, - 59333, 59333, 59333, 59333, 59333, 59333, 59333, 59333, - 59333, 59333, 59333, 59333, 59333, 59333, 59333, 59333, - 59333, 59333, 59333, 59333, 59333, 59333, 59333, 59333, - 59333, 59333, 59333, 59333, 59333, 59333, 59333, 59333, - 59333, 59333, 59333, 59333, 59333, 59333, 59333, 59333, - 59341, 59341, 59341, 59341, 59341, 59341, 59341, 59341, - 59351, 59351, 59351, 59351, 59351, 59351, 59351, 59351, - 59351, 59351, 59357, 59357, 59357, 59357, 59357, 59357, - 59359, 59359, 59369, 59369, 59369, 59369, 59369, 59369, - 59369, 59369, 59369, 59369, 59377, 59377, 59377, 59377, - 59377, 59377, 59377, 59377, 59387, 59387, 59387, 59387, - 59387, 59387, 59387, 59387, 59387, 59387, 59393, 59393, - 59393, 59393, 59393, 59393, 59399, 59399, 59399, 59399, - 59399, 59399, 59407, 59407, 59407, 59407, 59407, 59407, - 59407, 59407, 59417, 59417, 59417, 59417, 59417, 59417, - 59417, 59417, 59417, 59417, 59419, 59419, 59441, 59441, - 59441, 59441, 59441, 59441, 59441, 59441, 59441, 59441, - 59441, 59441, 59441, 59441, 59441, 59441, 59441, 59441, - 59441, 59441, 59441, 59441, 59443, 59443, 59447, 59447, - 59447, 59447, 59453, 59453, 59453, 59453, 59453, 59453, - 59467, 59467, 59467, 59467, 59467, 59467, 59467, 59467, - 59467, 59467, 59467, 59467, 59467, 59467, 59471, 59471, - 59471, 59471, 59473, 59473, 59497, 59497, 59497, 59497, - 59497, 59497, 59497, 59497, 59497, 59497, 59497, 59497, - 59497, 59497, 59497, 59497, 59497, 59497, 59497, 59497, - 59497, 59497, 59497, 59497, 59509, 59509, 59509, 59509, - 59509, 59509, 59509, 59509, 59509, 59509, 59509, 59509, - 59513, 59513, 59513, 59513, 59539, 59539, 59539, 59539, - 59539, 59539, 59539, 59539, 59539, 59539, 59539, 59539, - 59539, 59539, 59539, 59539, 59539, 59539, 59539, 59539, - 59539, 59539, 59539, 59539, 59539, 59539, 59557, 59557, - 59557, 59557, 59557, 59557, 59557, 59557, 59557, 59557, - 59557, 59557, 59557, 59557, 59557, 59557, 59557, 59557, - 59561, 59561, 59561, 59561, 59567, 59567, 59567, 59567, - 59567, 59567, 59581, 59581, 59581, 59581, 59581, 59581, - 59581, 59581, 59581, 59581, 59581, 59581, 59581, 59581, - 59611, 59611, 59611, 59611, 59611, 59611, 59611, 59611, - 59611, 59611, 59611, 59611, 59611, 59611, 59611, 59611, - 59611, 59611, 59611, 59611, 59611, 59611, 59611, 59611, - 59611, 59611, 59611, 59611, 59611, 59611, 59617, 59617, - 59617, 59617, 59617, 59617, 59621, 59621, 59621, 59621, - 59627, 59627, 59627, 59627, 59627, 59627, 59629, 59629, - 59651, 59651, 59651, 59651, 59651, 59651, 59651, 59651, - 59651, 59651, 59651, 59651, 59651, 59651, 59651, 59651, - 59651, 59651, 59651, 59651, 59651, 59651, 59659, 59659, - 59659, 59659, 59659, 59659, 59659, 59659, 59663, 59663, - 59663, 59663, 59669, 59669, 59669, 59669, 59669, 59669, - 59671, 59671, 59693, 59693, 59693, 59693, 59693, 59693, - 59693, 59693, 59693, 59693, 59693, 59693, 59693, 59693, - 59693, 59693, 59693, 59693, 59693, 59693, 59693, 59693, - 59699, 59699, 59699, 59699, 59699, 59699, 59707, 59707, - 59707, 59707, 59707, 59707, 59707, 59707, 59723, 59723, - 59723, 59723, 59723, 59723, 59723, 59723, 59723, 59723, - 59723, 59723, 59723, 59723, 59723, 59723, 59729, 59729, - 59729, 59729, 59729, 59729, 59743, 59743, 59743, 59743, - 59743, 59743, 59743, 59743, 59743, 59743, 59743, 59743, - 59743, 59743, 59747, 59747, 59747, 59747, 59753, 59753, - 59753, 59753, 59753, 59753, 59771, 59771, 59771, 59771, - 59771, 59771, 59771, 59771, 59771, 59771, 59771, 59771, - 59771, 59771, 59771, 59771, 59771, 59771, 59779, 59779, - 59779, 59779, 59779, 59779, 59779, 59779, 59791, 59791, - 59791, 59791, 59791, 59791, 59791, 59791, 59791, 59791, - 59791, 59791, 59797, 59797, 59797, 59797, 59797, 59797, - 59809, 59809, 59809, 59809, 59809, 59809, 59809, 59809, - 59809, 59809, 59809, 59809, 59833, 59833, 59833, 59833, - 59833, 59833, 59833, 59833, 59833, 59833, 59833, 59833, - 59833, 59833, 59833, 59833, 59833, 59833, 59833, 59833, - 59833, 59833, 59833, 59833, 59863, 59863, 59863, 59863, - 59863, 59863, 59863, 59863, 59863, 59863, 59863, 59863, - 59863, 59863, 59863, 59863, 59863, 59863, 59863, 59863, - 59863, 59863, 59863, 59863, 59863, 59863, 59863, 59863, - 59863, 59863, 59879, 59879, 59879, 59879, 59879, 59879, - 59879, 59879, 59879, 59879, 59879, 59879, 59879, 59879, - 59879, 59879, 59887, 59887, 59887, 59887, 59887, 59887, - 59887, 59887, 59921, 59921, 59921, 59921, 59921, 59921, - 59921, 59921, 59921, 59921, 59921, 59921, 59921, 59921, - 59921, 59921, 59921, 59921, 59921, 59921, 59921, 59921, - 59921, 59921, 59921, 59921, 59921, 59921, 59921, 59921, - 59921, 59921, 59921, 59921, 59929, 59929, 59929, 59929, - 59929, 59929, 59929, 59929, 59951, 59951, 59951, 59951, - 59951, 59951, 59951, 59951, 59951, 59951, 59951, 59951, - 59951, 59951, 59951, 59951, 59951, 59951, 59951, 59951, - 59951, 59951, 59957, 59957, 59957, 59957, 59957, 59957, - 59971, 59971, 59971, 59971, 59971, 59971, 59971, 59971, - 59971, 59971, 59971, 59971, 59971, 59971, 59981, 59981, - 59981, 59981, 59981, 59981, 59981, 59981, 59981, 59981, - 59999, 59999, 59999, 59999, 59999, 59999, 59999, 59999, - 59999, 59999, 59999, 59999, 59999, 59999, 59999, 59999, - 59999, 59999, 60013, 60013, 60013, 60013, 60013, 60013, - 60013, 60013, 60013, 60013, 60013, 60013, 60013, 60013, - 60017, 60017, 60017, 60017, 60029, 60029, 60029, 60029, - 60029, 60029, 60029, 60029, 60029, 60029, 60029, 60029, - 60037, 60037, 60037, 60037, 60037, 60037, 60037, 60037, - 60041, 60041, 60041, 60041, 60077, 60077, 60077, 60077, - 60077, 60077, 60077, 60077, 60077, 60077, 60077, 60077, - 60077, 60077, 60077, 60077, 60077, 60077, 60077, 60077, - 60077, 60077, 60077, 60077, 60077, 60077, 60077, 60077, - 60077, 60077, 60077, 60077, 60077, 60077, 60077, 60077, - 60083, 60083, 60083, 60083, 60083, 60083, 60089, 60089, - 60089, 60089, 60089, 60089, 60091, 60091, 60101, 60101, - 60101, 60101, 60101, 60101, 60101, 60101, 60101, 60101, - 60103, 60103, 60107, 60107, 60107, 60107, 60127, 60127, - 60127, 60127, 60127, 60127, 60127, 60127, 60127, 60127, - 60127, 60127, 60127, 60127, 60127, 60127, 60127, 60127, - 60127, 60127, 60133, 60133, 60133, 60133, 60133, 60133, - 60139, 60139, 60139, 60139, 60139, 60139, 60149, 60149, - 60149, 60149, 60149, 60149, 60149, 60149, 60149, 60149, - 60161, 60161, 60161, 60161, 60161, 60161, 60161, 60161, - 60161, 60161, 60161, 60161, 60167, 60167, 60167, 60167, - 60167, 60167, 60169, 60169, 60209, 60209, 60209, 60209, - 60209, 60209, 60209, 60209, 60209, 60209, 60209, 60209, - 60209, 60209, 60209, 60209, 60209, 60209, 60209, 60209, - 60209, 60209, 60209, 60209, 60209, 60209, 60209, 60209, - 60209, 60209, 60209, 60209, 60209, 60209, 60209, 60209, - 60209, 60209, 60209, 60209, 60217, 60217, 60217, 60217, - 60217, 60217, 60217, 60217, 60223, 60223, 60223, 60223, - 60223, 60223, 60251, 60251, 60251, 60251, 60251, 60251, - 60251, 60251, 60251, 60251, 60251, 60251, 60251, 60251, - 60251, 60251, 60251, 60251, 60251, 60251, 60251, 60251, - 60251, 60251, 60251, 60251, 60251, 60251, 60257, 60257, - 60257, 60257, 60257, 60257, 60259, 60259, 60271, 60271, - 60271, 60271, 60271, 60271, 60271, 60271, 60271, 60271, - 60271, 60271, 60289, 60289, 60289, 60289, 60289, 60289, - 60289, 60289, 60289, 60289, 60289, 60289, 60289, 60289, - 60289, 60289, 60289, 60289, 60293, 60293, 60293, 60293, - 60317, 60317, 60317, 60317, 60317, 60317, 60317, 60317, - 60317, 60317, 60317, 60317, 60317, 60317, 60317, 60317, - 60317, 60317, 60317, 60317, 60317, 60317, 60317, 60317, - 60331, 60331, 60331, 60331, 60331, 60331, 60331, 60331, - 60331, 60331, 60331, 60331, 60331, 60331, 60337, 60337, - 60337, 60337, 60337, 60337, 60343, 60343, 60343, 60343, - 60343, 60343, 60353, 60353, 60353, 60353, 60353, 60353, - 60353, 60353, 60353, 60353, 60373, 60373, 60373, 60373, - 60373, 60373, 60373, 60373, 60373, 60373, 60373, 60373, - 60373, 60373, 60373, 60373, 60373, 60373, 60373, 60373, - 60383, 60383, 60383, 60383, 60383, 60383, 60383, 60383, - 60383, 60383, 60397, 60397, 60397, 60397, 60397, 60397, - 60397, 60397, 60397, 60397, 60397, 60397, 60397, 60397, - 60413, 60413, 60413, 60413, 60413, 60413, 60413, 60413, - 60413, 60413, 60413, 60413, 60413, 60413, 60413, 60413, - 60427, 60427, 60427, 60427, 60427, 60427, 60427, 60427, - 60427, 60427, 60427, 60427, 60427, 60427, 60443, 60443, - 60443, 60443, 60443, 60443, 60443, 60443, 60443, 60443, - 60443, 60443, 60443, 60443, 60443, 60443, 60449, 60449, - 60449, 60449, 60449, 60449, 60457, 60457, 60457, 60457, - 60457, 60457, 60457, 60457, 60493, 60493, 60493, 60493, - 60493, 60493, 60493, 60493, 60493, 60493, 60493, 60493, - 60493, 60493, 60493, 60493, 60493, 60493, 60493, 60493, - 60493, 60493, 60493, 60493, 60493, 60493, 60493, 60493, - 60493, 60493, 60493, 60493, 60493, 60493, 60493, 60493, - 60497, 60497, 60497, 60497, 60509, 60509, 60509, 60509, - 60509, 60509, 60509, 60509, 60509, 60509, 60509, 60509, - 60521, 60521, 60521, 60521, 60521, 60521, 60521, 60521, - 60521, 60521, 60521, 60521, 60527, 60527, 60527, 60527, - 60527, 60527, 60539, 60539, 60539, 60539, 60539, 60539, - 60539, 60539, 60539, 60539, 60539, 60539, 60589, 60589, - 60589, 60589, 60589, 60589, 60589, 60589, 60589, 60589, - 60589, 60589, 60589, 60589, 60589, 60589, 60589, 60589, - 60589, 60589, 60589, 60589, 60589, 60589, 60589, 60589, - 60589, 60589, 60589, 60589, 60589, 60589, 60589, 60589, - 60589, 60589, 60589, 60589, 60589, 60589, 60589, 60589, - 60589, 60589, 60589, 60589, 60589, 60589, 60589, 60589, - 60601, 60601, 60601, 60601, 60601, 60601, 60601, 60601, - 60601, 60601, 60601, 60601, 60607, 60607, 60607, 60607, - 60607, 60607, 60611, 60611, 60611, 60611, 60617, 60617, - 60617, 60617, 60617, 60617, 60623, 60623, 60623, 60623, - 60623, 60623, 60631, 60631, 60631, 60631, 60631, 60631, - 60631, 60631, 60637, 60637, 60637, 60637, 60637, 60637, - 60647, 60647, 60647, 60647, 60647, 60647, 60647, 60647, - 60647, 60647, 60649, 60649, 60659, 60659, 60659, 60659, - 60659, 60659, 60659, 60659, 60659, 60659, 60661, 60661, - 60679, 60679, 60679, 60679, 60679, 60679, 60679, 60679, - 60679, 60679, 60679, 60679, 60679, 60679, 60679, 60679, - 60679, 60679, 60689, 60689, 60689, 60689, 60689, 60689, - 60689, 60689, 60689, 60689, 60703, 60703, 60703, 60703, - 60703, 60703, 60703, 60703, 60703, 60703, 60703, 60703, - 60703, 60703, 60719, 60719, 60719, 60719, 60719, 60719, - 60719, 60719, 60719, 60719, 60719, 60719, 60719, 60719, - 60719, 60719, 60727, 60727, 60727, 60727, 60727, 60727, - 60727, 60727, 60733, 60733, 60733, 60733, 60733, 60733, - 60737, 60737, 60737, 60737, 60757, 60757, 60757, 60757, - 60757, 60757, 60757, 60757, 60757, 60757, 60757, 60757, - 60757, 60757, 60757, 60757, 60757, 60757, 60757, 60757, - 60761, 60761, 60761, 60761, 60763, 60763, 60773, 60773, - 60773, 60773, 60773, 60773, 60773, 60773, 60773, 60773, - 60779, 60779, 60779, 60779, 60779, 60779, 60793, 60793, - 60793, 60793, 60793, 60793, 60793, 60793, 60793, 60793, - 60793, 60793, 60793, 60793, 60811, 60811, 60811, 60811, - 60811, 60811, 60811, 60811, 60811, 60811, 60811, 60811, - 60811, 60811, 60811, 60811, 60811, 60811, 60821, 60821, - 60821, 60821, 60821, 60821, 60821, 60821, 60821, 60821, - 60859, 60859, 60859, 60859, 60859, 60859, 60859, 60859, - 60859, 60859, 60859, 60859, 60859, 60859, 60859, 60859, - 60859, 60859, 60859, 60859, 60859, 60859, 60859, 60859, - 60859, 60859, 60859, 60859, 60859, 60859, 60859, 60859, - 60859, 60859, 60859, 60859, 60859, 60859, 60869, 60869, - 60869, 60869, 60869, 60869, 60869, 60869, 60869, 60869, - 60887, 60887, 60887, 60887, 60887, 60887, 60887, 60887, - 60887, 60887, 60887, 60887, 60887, 60887, 60887, 60887, - 60887, 60887, 60889, 60889, 60899, 60899, 60899, 60899, - 60899, 60899, 60899, 60899, 60899, 60899, 60901, 60901, - 60913, 60913, 60913, 60913, 60913, 60913, 60913, 60913, - 60913, 60913, 60913, 60913, 60917, 60917, 60917, 60917, - 60919, 60919, 60923, 60923, 60923, 60923, 60937, 60937, - 60937, 60937, 60937, 60937, 60937, 60937, 60937, 60937, - 60937, 60937, 60937, 60937, 60943, 60943, 60943, 60943, - 60943, 60943, 60953, 60953, 60953, 60953, 60953, 60953, - 60953, 60953, 60953, 60953, 60961, 60961, 60961, 60961, - 60961, 60961, 60961, 60961, 61001, 61001, 61001, 61001, - 61001, 61001, 61001, 61001, 61001, 61001, 61001, 61001, - 61001, 61001, 61001, 61001, 61001, 61001, 61001, 61001, - 61001, 61001, 61001, 61001, 61001, 61001, 61001, 61001, - 61001, 61001, 61001, 61001, 61001, 61001, 61001, 61001, - 61001, 61001, 61001, 61001, 61007, 61007, 61007, 61007, - 61007, 61007, 61027, 61027, 61027, 61027, 61027, 61027, - 61027, 61027, 61027, 61027, 61027, 61027, 61027, 61027, - 61027, 61027, 61027, 61027, 61027, 61027, 61031, 61031, - 61031, 61031, 61043, 61043, 61043, 61043, 61043, 61043, - 61043, 61043, 61043, 61043, 61043, 61043, 61051, 61051, - 61051, 61051, 61051, 61051, 61051, 61051, 61057, 61057, - 61057, 61057, 61057, 61057, 61091, 61091, 61091, 61091, - 61091, 61091, 61091, 61091, 61091, 61091, 61091, 61091, - 61091, 61091, 61091, 61091, 61091, 61091, 61091, 61091, - 61091, 61091, 61091, 61091, 61091, 61091, 61091, 61091, - 61091, 61091, 61091, 61091, 61091, 61091, 61099, 61099, - 61099, 61099, 61099, 61099, 61099, 61099, 61121, 61121, - 61121, 61121, 61121, 61121, 61121, 61121, 61121, 61121, - 61121, 61121, 61121, 61121, 61121, 61121, 61121, 61121, - 61121, 61121, 61121, 61121, 61129, 61129, 61129, 61129, - 61129, 61129, 61129, 61129, 61141, 61141, 61141, 61141, - 61141, 61141, 61141, 61141, 61141, 61141, 61141, 61141, - 61151, 61151, 61151, 61151, 61151, 61151, 61151, 61151, - 61151, 61151, 61153, 61153, 61169, 61169, 61169, 61169, - 61169, 61169, 61169, 61169, 61169, 61169, 61169, 61169, - 61169, 61169, 61169, 61169, 61211, 61211, 61211, 61211, - 61211, 61211, 61211, 61211, 61211, 61211, 61211, 61211, - 61211, 61211, 61211, 61211, 61211, 61211, 61211, 61211, - 61211, 61211, 61211, 61211, 61211, 61211, 61211, 61211, - 61211, 61211, 61211, 61211, 61211, 61211, 61211, 61211, - 61211, 61211, 61211, 61211, 61211, 61211, 61223, 61223, - 61223, 61223, 61223, 61223, 61223, 61223, 61223, 61223, - 61223, 61223, 61231, 61231, 61231, 61231, 61231, 61231, - 61231, 61231, 61253, 61253, 61253, 61253, 61253, 61253, - 61253, 61253, 61253, 61253, 61253, 61253, 61253, 61253, - 61253, 61253, 61253, 61253, 61253, 61253, 61253, 61253, - 61261, 61261, 61261, 61261, 61261, 61261, 61261, 61261, - 61283, 61283, 61283, 61283, 61283, 61283, 61283, 61283, - 61283, 61283, 61283, 61283, 61283, 61283, 61283, 61283, - 61283, 61283, 61283, 61283, 61283, 61283, 61291, 61291, - 61291, 61291, 61291, 61291, 61291, 61291, 61297, 61297, - 61297, 61297, 61297, 61297, 61331, 61331, 61331, 61331, - 61331, 61331, 61331, 61331, 61331, 61331, 61331, 61331, - 61331, 61331, 61331, 61331, 61331, 61331, 61331, 61331, - 61331, 61331, 61331, 61331, 61331, 61331, 61331, 61331, - 61331, 61331, 61331, 61331, 61331, 61331, 61333, 61333, - 61339, 61339, 61339, 61339, 61339, 61339, 61343, 61343, - 61343, 61343, 61357, 61357, 61357, 61357, 61357, 61357, - 61357, 61357, 61357, 61357, 61357, 61357, 61357, 61357, - 61363, 61363, 61363, 61363, 61363, 61363, 61379, 61379, - 61379, 61379, 61379, 61379, 61379, 61379, 61379, 61379, - 61379, 61379, 61379, 61379, 61379, 61379, 61381, 61381, - 61403, 61403, 61403, 61403, 61403, 61403, 61403, 61403, - 61403, 61403, 61403, 61403, 61403, 61403, 61403, 61403, - 61403, 61403, 61403, 61403, 61403, 61403, 61409, 61409, - 61409, 61409, 61409, 61409, 61417, 61417, 61417, 61417, - 61417, 61417, 61417, 61417, 61441, 61441, 61441, 61441, - 61441, 61441, 61441, 61441, 61441, 61441, 61441, 61441, - 61441, 61441, 61441, 61441, 61441, 61441, 61441, 61441, - 61441, 61441, 61441, 61441, 61463, 61463, 61463, 61463, - 61463, 61463, 61463, 61463, 61463, 61463, 61463, 61463, - 61463, 61463, 61463, 61463, 61463, 61463, 61463, 61463, - 61463, 61463, 61469, 61469, 61469, 61469, 61469, 61469, - 61471, 61471, 61483, 61483, 61483, 61483, 61483, 61483, - 61483, 61483, 61483, 61483, 61483, 61483, 61487, 61487, - 61487, 61487, 61493, 61493, 61493, 61493, 61493, 61493, - 61507, 61507, 61507, 61507, 61507, 61507, 61507, 61507, - 61507, 61507, 61507, 61507, 61507, 61507, 61511, 61511, - 61511, 61511, 61519, 61519, 61519, 61519, 61519, 61519, - 61519, 61519, 61543, 61543, 61543, 61543, 61543, 61543, - 61543, 61543, 61543, 61543, 61543, 61543, 61543, 61543, - 61543, 61543, 61543, 61543, 61543, 61543, 61543, 61543, - 61543, 61543, 61547, 61547, 61547, 61547, 61553, 61553, - 61553, 61553, 61553, 61553, 61559, 61559, 61559, 61559, - 61559, 61559, 61561, 61561, 61583, 61583, 61583, 61583, - 61583, 61583, 61583, 61583, 61583, 61583, 61583, 61583, - 61583, 61583, 61583, 61583, 61583, 61583, 61583, 61583, - 61583, 61583, 61603, 61603, 61603, 61603, 61603, 61603, - 61603, 61603, 61603, 61603, 61603, 61603, 61603, 61603, - 61603, 61603, 61603, 61603, 61603, 61603, 61609, 61609, - 61609, 61609, 61609, 61609, 61613, 61613, 61613, 61613, - 61627, 61627, 61627, 61627, 61627, 61627, 61627, 61627, - 61627, 61627, 61627, 61627, 61627, 61627, 61631, 61631, - 61631, 61631, 61637, 61637, 61637, 61637, 61637, 61637, - 61643, 61643, 61643, 61643, 61643, 61643, 61651, 61651, - 61651, 61651, 61651, 61651, 61651, 61651, 61657, 61657, - 61657, 61657, 61657, 61657, 61667, 61667, 61667, 61667, - 61667, 61667, 61667, 61667, 61667, 61667, 61673, 61673, - 61673, 61673, 61673, 61673, 61681, 61681, 61681, 61681, - 61681, 61681, 61681, 61681, 61687, 61687, 61687, 61687, - 61687, 61687, 61703, 61703, 61703, 61703, 61703, 61703, - 61703, 61703, 61703, 61703, 61703, 61703, 61703, 61703, - 61703, 61703, 61717, 61717, 61717, 61717, 61717, 61717, - 61717, 61717, 61717, 61717, 61717, 61717, 61717, 61717, - 61723, 61723, 61723, 61723, 61723, 61723, 61729, 61729, - 61729, 61729, 61729, 61729, 61751, 61751, 61751, 61751, - 61751, 61751, 61751, 61751, 61751, 61751, 61751, 61751, - 61751, 61751, 61751, 61751, 61751, 61751, 61751, 61751, - 61751, 61751, 61757, 61757, 61757, 61757, 61757, 61757, - 61781, 61781, 61781, 61781, 61781, 61781, 61781, 61781, - 61781, 61781, 61781, 61781, 61781, 61781, 61781, 61781, - 61781, 61781, 61781, 61781, 61781, 61781, 61781, 61781, - 61813, 61813, 61813, 61813, 61813, 61813, 61813, 61813, - 61813, 61813, 61813, 61813, 61813, 61813, 61813, 61813, - 61813, 61813, 61813, 61813, 61813, 61813, 61813, 61813, - 61813, 61813, 61813, 61813, 61813, 61813, 61813, 61813, - 61819, 61819, 61819, 61819, 61819, 61819, 61837, 61837, - 61837, 61837, 61837, 61837, 61837, 61837, 61837, 61837, - 61837, 61837, 61837, 61837, 61837, 61837, 61837, 61837, - 61843, 61843, 61843, 61843, 61843, 61843, 61861, 61861, - 61861, 61861, 61861, 61861, 61861, 61861, 61861, 61861, - 61861, 61861, 61861, 61861, 61861, 61861, 61861, 61861, - 61871, 61871, 61871, 61871, 61871, 61871, 61871, 61871, - 61871, 61871, 61879, 61879, 61879, 61879, 61879, 61879, - 61879, 61879, 61909, 61909, 61909, 61909, 61909, 61909, - 61909, 61909, 61909, 61909, 61909, 61909, 61909, 61909, - 61909, 61909, 61909, 61909, 61909, 61909, 61909, 61909, - 61909, 61909, 61909, 61909, 61909, 61909, 61909, 61909, - 61927, 61927, 61927, 61927, 61927, 61927, 61927, 61927, - 61927, 61927, 61927, 61927, 61927, 61927, 61927, 61927, - 61927, 61927, 61933, 61933, 61933, 61933, 61933, 61933, - 61949, 61949, 61949, 61949, 61949, 61949, 61949, 61949, - 61949, 61949, 61949, 61949, 61949, 61949, 61949, 61949, - 61961, 61961, 61961, 61961, 61961, 61961, 61961, 61961, - 61961, 61961, 61961, 61961, 61967, 61967, 61967, 61967, - 61967, 61967, 61979, 61979, 61979, 61979, 61979, 61979, - 61979, 61979, 61979, 61979, 61979, 61979, 61981, 61981, - 61987, 61987, 61987, 61987, 61987, 61987, 61991, 61991, - 61991, 61991, 62003, 62003, 62003, 62003, 62003, 62003, - 62003, 62003, 62003, 62003, 62003, 62003, 62011, 62011, - 62011, 62011, 62011, 62011, 62011, 62011, 62017, 62017, - 62017, 62017, 62017, 62017, 62039, 62039, 62039, 62039, - 62039, 62039, 62039, 62039, 62039, 62039, 62039, 62039, - 62039, 62039, 62039, 62039, 62039, 62039, 62039, 62039, - 62039, 62039, 62047, 62047, 62047, 62047, 62047, 62047, - 62047, 62047, 62053, 62053, 62053, 62053, 62053, 62053, - 62057, 62057, 62057, 62057, 62071, 62071, 62071, 62071, - 62071, 62071, 62071, 62071, 62071, 62071, 62071, 62071, - 62071, 62071, 62081, 62081, 62081, 62081, 62081, 62081, - 62081, 62081, 62081, 62081, 62099, 62099, 62099, 62099, - 62099, 62099, 62099, 62099, 62099, 62099, 62099, 62099, - 62099, 62099, 62099, 62099, 62099, 62099, 62119, 62119, - 62119, 62119, 62119, 62119, 62119, 62119, 62119, 62119, - 62119, 62119, 62119, 62119, 62119, 62119, 62119, 62119, - 62119, 62119, 62129, 62129, 62129, 62129, 62129, 62129, - 62129, 62129, 62129, 62129, 62131, 62131, 62137, 62137, - 62137, 62137, 62137, 62137, 62141, 62141, 62141, 62141, - 62143, 62143, 62171, 62171, 62171, 62171, 62171, 62171, - 62171, 62171, 62171, 62171, 62171, 62171, 62171, 62171, - 62171, 62171, 62171, 62171, 62171, 62171, 62171, 62171, - 62171, 62171, 62171, 62171, 62171, 62171, 62189, 62189, - 62189, 62189, 62189, 62189, 62189, 62189, 62189, 62189, - 62189, 62189, 62189, 62189, 62189, 62189, 62189, 62189, - 62191, 62191, 62201, 62201, 62201, 62201, 62201, 62201, - 62201, 62201, 62201, 62201, 62207, 62207, 62207, 62207, - 62207, 62207, 62213, 62213, 62213, 62213, 62213, 62213, - 62219, 62219, 62219, 62219, 62219, 62219, 62233, 62233, - 62233, 62233, 62233, 62233, 62233, 62233, 62233, 62233, - 62233, 62233, 62233, 62233, 62273, 62273, 62273, 62273, - 62273, 62273, 62273, 62273, 62273, 62273, 62273, 62273, - 62273, 62273, 62273, 62273, 62273, 62273, 62273, 62273, - 62273, 62273, 62273, 62273, 62273, 62273, 62273, 62273, - 62273, 62273, 62273, 62273, 62273, 62273, 62273, 62273, - 62273, 62273, 62273, 62273, 62297, 62297, 62297, 62297, - 62297, 62297, 62297, 62297, 62297, 62297, 62297, 62297, - 62297, 62297, 62297, 62297, 62297, 62297, 62297, 62297, - 62297, 62297, 62297, 62297, 62299, 62299, 62303, 62303, - 62303, 62303, 62311, 62311, 62311, 62311, 62311, 62311, - 62311, 62311, 62323, 62323, 62323, 62323, 62323, 62323, - 62323, 62323, 62323, 62323, 62323, 62323, 62327, 62327, - 62327, 62327, 62347, 62347, 62347, 62347, 62347, 62347, - 62347, 62347, 62347, 62347, 62347, 62347, 62347, 62347, - 62347, 62347, 62347, 62347, 62347, 62347, 62351, 62351, - 62351, 62351, 62383, 62383, 62383, 62383, 62383, 62383, - 62383, 62383, 62383, 62383, 62383, 62383, 62383, 62383, - 62383, 62383, 62383, 62383, 62383, 62383, 62383, 62383, - 62383, 62383, 62383, 62383, 62383, 62383, 62383, 62383, - 62383, 62383, 62401, 62401, 62401, 62401, 62401, 62401, - 62401, 62401, 62401, 62401, 62401, 62401, 62401, 62401, - 62401, 62401, 62401, 62401, 62417, 62417, 62417, 62417, - 62417, 62417, 62417, 62417, 62417, 62417, 62417, 62417, - 62417, 62417, 62417, 62417, 62423, 62423, 62423, 62423, - 62423, 62423, 62459, 62459, 62459, 62459, 62459, 62459, - 62459, 62459, 62459, 62459, 62459, 62459, 62459, 62459, - 62459, 62459, 62459, 62459, 62459, 62459, 62459, 62459, - 62459, 62459, 62459, 62459, 62459, 62459, 62459, 62459, - 62459, 62459, 62459, 62459, 62459, 62459, 62467, 62467, - 62467, 62467, 62467, 62467, 62467, 62467, 62473, 62473, - 62473, 62473, 62473, 62473, 62477, 62477, 62477, 62477, - 62483, 62483, 62483, 62483, 62483, 62483, 62497, 62497, - 62497, 62497, 62497, 62497, 62497, 62497, 62497, 62497, - 62497, 62497, 62497, 62497, 62501, 62501, 62501, 62501, - 62507, 62507, 62507, 62507, 62507, 62507, 62533, 62533, - 62533, 62533, 62533, 62533, 62533, 62533, 62533, 62533, - 62533, 62533, 62533, 62533, 62533, 62533, 62533, 62533, - 62533, 62533, 62533, 62533, 62533, 62533, 62533, 62533, - 62539, 62539, 62539, 62539, 62539, 62539, 62549, 62549, - 62549, 62549, 62549, 62549, 62549, 62549, 62549, 62549, - 62563, 62563, 62563, 62563, 62563, 62563, 62563, 62563, - 62563, 62563, 62563, 62563, 62563, 62563, 62581, 62581, - 62581, 62581, 62581, 62581, 62581, 62581, 62581, 62581, - 62581, 62581, 62581, 62581, 62581, 62581, 62581, 62581, - 62591, 62591, 62591, 62591, 62591, 62591, 62591, 62591, - 62591, 62591, 62597, 62597, 62597, 62597, 62597, 62597, - 62603, 62603, 62603, 62603, 62603, 62603, 62617, 62617, - 62617, 62617, 62617, 62617, 62617, 62617, 62617, 62617, - 62617, 62617, 62617, 62617, 62627, 62627, 62627, 62627, - 62627, 62627, 62627, 62627, 62627, 62627, 62633, 62633, - 62633, 62633, 62633, 62633, 62639, 62639, 62639, 62639, - 62639, 62639, 62653, 62653, 62653, 62653, 62653, 62653, - 62653, 62653, 62653, 62653, 62653, 62653, 62653, 62653, - 62659, 62659, 62659, 62659, 62659, 62659, 62683, 62683, - 62683, 62683, 62683, 62683, 62683, 62683, 62683, 62683, - 62683, 62683, 62683, 62683, 62683, 62683, 62683, 62683, - 62683, 62683, 62683, 62683, 62683, 62683, 62687, 62687, - 62687, 62687, 62701, 62701, 62701, 62701, 62701, 62701, - 62701, 62701, 62701, 62701, 62701, 62701, 62701, 62701, - 62723, 62723, 62723, 62723, 62723, 62723, 62723, 62723, - 62723, 62723, 62723, 62723, 62723, 62723, 62723, 62723, - 62723, 62723, 62723, 62723, 62723, 62723, 62731, 62731, - 62731, 62731, 62731, 62731, 62731, 62731, 62743, 62743, - 62743, 62743, 62743, 62743, 62743, 62743, 62743, 62743, - 62743, 62743, 62753, 62753, 62753, 62753, 62753, 62753, - 62753, 62753, 62753, 62753, 62761, 62761, 62761, 62761, - 62761, 62761, 62761, 62761, 62773, 62773, 62773, 62773, - 62773, 62773, 62773, 62773, 62773, 62773, 62773, 62773, - 62791, 62791, 62791, 62791, 62791, 62791, 62791, 62791, - 62791, 62791, 62791, 62791, 62791, 62791, 62791, 62791, - 62791, 62791, 62801, 62801, 62801, 62801, 62801, 62801, - 62801, 62801, 62801, 62801, 62819, 62819, 62819, 62819, - 62819, 62819, 62819, 62819, 62819, 62819, 62819, 62819, - 62819, 62819, 62819, 62819, 62819, 62819, 62827, 62827, - 62827, 62827, 62827, 62827, 62827, 62827, 62851, 62851, - 62851, 62851, 62851, 62851, 62851, 62851, 62851, 62851, - 62851, 62851, 62851, 62851, 62851, 62851, 62851, 62851, - 62851, 62851, 62851, 62851, 62851, 62851, 62861, 62861, - 62861, 62861, 62861, 62861, 62861, 62861, 62861, 62861, - 62869, 62869, 62869, 62869, 62869, 62869, 62869, 62869, - 62873, 62873, 62873, 62873, 62897, 62897, 62897, 62897, - 62897, 62897, 62897, 62897, 62897, 62897, 62897, 62897, - 62897, 62897, 62897, 62897, 62897, 62897, 62897, 62897, - 62897, 62897, 62897, 62897, 62903, 62903, 62903, 62903, - 62903, 62903, 62921, 62921, 62921, 62921, 62921, 62921, - 62921, 62921, 62921, 62921, 62921, 62921, 62921, 62921, - 62921, 62921, 62921, 62921, 62927, 62927, 62927, 62927, - 62927, 62927, 62929, 62929, 62939, 62939, 62939, 62939, - 62939, 62939, 62939, 62939, 62939, 62939, 62969, 62969, - 62969, 62969, 62969, 62969, 62969, 62969, 62969, 62969, - 62969, 62969, 62969, 62969, 62969, 62969, 62969, 62969, - 62969, 62969, 62969, 62969, 62969, 62969, 62969, 62969, - 62969, 62969, 62969, 62969, 62971, 62971, 62981, 62981, - 62981, 62981, 62981, 62981, 62981, 62981, 62981, 62981, - 62983, 62983, 62987, 62987, 62987, 62987, 62989, 62989, - 63029, 63029, 63029, 63029, 63029, 63029, 63029, 63029, - 63029, 63029, 63029, 63029, 63029, 63029, 63029, 63029, - 63029, 63029, 63029, 63029, 63029, 63029, 63029, 63029, - 63029, 63029, 63029, 63029, 63029, 63029, 63029, 63029, - 63029, 63029, 63029, 63029, 63029, 63029, 63029, 63029, - 63031, 63031, 63059, 63059, 63059, 63059, 63059, 63059, - 63059, 63059, 63059, 63059, 63059, 63059, 63059, 63059, - 63059, 63059, 63059, 63059, 63059, 63059, 63059, 63059, - 63059, 63059, 63059, 63059, 63059, 63059, 63067, 63067, - 63067, 63067, 63067, 63067, 63067, 63067, 63073, 63073, - 63073, 63073, 63073, 63073, 63079, 63079, 63079, 63079, - 63079, 63079, 63097, 63097, 63097, 63097, 63097, 63097, - 63097, 63097, 63097, 63097, 63097, 63097, 63097, 63097, - 63097, 63097, 63097, 63097, 63103, 63103, 63103, 63103, - 63103, 63103, 63113, 63113, 63113, 63113, 63113, 63113, - 63113, 63113, 63113, 63113, 63127, 63127, 63127, 63127, - 63127, 63127, 63127, 63127, 63127, 63127, 63127, 63127, - 63127, 63127, 63131, 63131, 63131, 63131, 63149, 63149, - 63149, 63149, 63149, 63149, 63149, 63149, 63149, 63149, - 63149, 63149, 63149, 63149, 63149, 63149, 63149, 63149, - 63179, 63179, 63179, 63179, 63179, 63179, 63179, 63179, - 63179, 63179, 63179, 63179, 63179, 63179, 63179, 63179, - 63179, 63179, 63179, 63179, 63179, 63179, 63179, 63179, - 63179, 63179, 63179, 63179, 63179, 63179, 63197, 63197, - 63197, 63197, 63197, 63197, 63197, 63197, 63197, 63197, - 63197, 63197, 63197, 63197, 63197, 63197, 63197, 63197, - 63199, 63199, 63211, 63211, 63211, 63211, 63211, 63211, - 63211, 63211, 63211, 63211, 63211, 63211, 63241, 63241, - 63241, 63241, 63241, 63241, 63241, 63241, 63241, 63241, - 63241, 63241, 63241, 63241, 63241, 63241, 63241, 63241, - 63241, 63241, 63241, 63241, 63241, 63241, 63241, 63241, - 63241, 63241, 63241, 63241, 63247, 63247, 63247, 63247, - 63247, 63247, 63277, 63277, 63277, 63277, 63277, 63277, - 63277, 63277, 63277, 63277, 63277, 63277, 63277, 63277, - 63277, 63277, 63277, 63277, 63277, 63277, 63277, 63277, - 63277, 63277, 63277, 63277, 63277, 63277, 63277, 63277, - 63281, 63281, 63281, 63281, 63299, 63299, 63299, 63299, - 63299, 63299, 63299, 63299, 63299, 63299, 63299, 63299, - 63299, 63299, 63299, 63299, 63299, 63299, 63311, 63311, - 63311, 63311, 63311, 63311, 63311, 63311, 63311, 63311, - 63311, 63311, 63313, 63313, 63317, 63317, 63317, 63317, - 63331, 63331, 63331, 63331, 63331, 63331, 63331, 63331, - 63331, 63331, 63331, 63331, 63331, 63331, 63337, 63337, - 63337, 63337, 63337, 63337, 63347, 63347, 63347, 63347, - 63347, 63347, 63347, 63347, 63347, 63347, 63353, 63353, - 63353, 63353, 63353, 63353, 63361, 63361, 63361, 63361, - 63361, 63361, 63361, 63361, 63367, 63367, 63367, 63367, - 63367, 63367, 63377, 63377, 63377, 63377, 63377, 63377, - 63377, 63377, 63377, 63377, 63389, 63389, 63389, 63389, - 63389, 63389, 63389, 63389, 63389, 63389, 63389, 63389, - 63391, 63391, 63397, 63397, 63397, 63397, 63397, 63397, - 63409, 63409, 63409, 63409, 63409, 63409, 63409, 63409, - 63409, 63409, 63409, 63409, 63419, 63419, 63419, 63419, - 63419, 63419, 63419, 63419, 63419, 63419, 63421, 63421, - 63439, 63439, 63439, 63439, 63439, 63439, 63439, 63439, - 63439, 63439, 63439, 63439, 63439, 63439, 63439, 63439, - 63439, 63439, 63443, 63443, 63443, 63443, 63463, 63463, - 63463, 63463, 63463, 63463, 63463, 63463, 63463, 63463, - 63463, 63463, 63463, 63463, 63463, 63463, 63463, 63463, - 63463, 63463, 63467, 63467, 63467, 63467, 63473, 63473, - 63473, 63473, 63473, 63473, 63487, 63487, 63487, 63487, - 63487, 63487, 63487, 63487, 63487, 63487, 63487, 63487, - 63487, 63487, 63493, 63493, 63493, 63493, 63493, 63493, - 63499, 63499, 63499, 63499, 63499, 63499, 63521, 63521, - 63521, 63521, 63521, 63521, 63521, 63521, 63521, 63521, - 63521, 63521, 63521, 63521, 63521, 63521, 63521, 63521, - 63521, 63521, 63521, 63521, 63527, 63527, 63527, 63527, - 63527, 63527, 63533, 63533, 63533, 63533, 63533, 63533, - 63541, 63541, 63541, 63541, 63541, 63541, 63541, 63541, - 63559, 63559, 63559, 63559, 63559, 63559, 63559, 63559, - 63559, 63559, 63559, 63559, 63559, 63559, 63559, 63559, - 63559, 63559, 63577, 63577, 63577, 63577, 63577, 63577, - 63577, 63577, 63577, 63577, 63577, 63577, 63577, 63577, - 63577, 63577, 63577, 63577, 63587, 63587, 63587, 63587, - 63587, 63587, 63587, 63587, 63587, 63587, 63589, 63589, - 63599, 63599, 63599, 63599, 63599, 63599, 63599, 63599, - 63599, 63599, 63601, 63601, 63607, 63607, 63607, 63607, - 63607, 63607, 63611, 63611, 63611, 63611, 63617, 63617, - 63617, 63617, 63617, 63617, 63629, 63629, 63629, 63629, - 63629, 63629, 63629, 63629, 63629, 63629, 63629, 63629, - 63647, 63647, 63647, 63647, 63647, 63647, 63647, 63647, - 63647, 63647, 63647, 63647, 63647, 63647, 63647, 63647, - 63647, 63647, 63649, 63649, 63659, 63659, 63659, 63659, - 63659, 63659, 63659, 63659, 63659, 63659, 63667, 63667, - 63667, 63667, 63667, 63667, 63667, 63667, 63671, 63671, - 63671, 63671, 63689, 63689, 63689, 63689, 63689, 63689, - 63689, 63689, 63689, 63689, 63689, 63689, 63689, 63689, - 63689, 63689, 63689, 63689, 63691, 63691, 63697, 63697, - 63697, 63697, 63697, 63697, 63703, 63703, 63703, 63703, - 63703, 63703, 63709, 63709, 63709, 63709, 63709, 63709, - 63719, 63719, 63719, 63719, 63719, 63719, 63719, 63719, - 63719, 63719, 63727, 63727, 63727, 63727, 63727, 63727, - 63727, 63727, 63737, 63737, 63737, 63737, 63737, 63737, - 63737, 63737, 63737, 63737, 63743, 63743, 63743, 63743, - 63743, 63743, 63761, 63761, 63761, 63761, 63761, 63761, - 63761, 63761, 63761, 63761, 63761, 63761, 63761, 63761, - 63761, 63761, 63761, 63761, 63773, 63773, 63773, 63773, - 63773, 63773, 63773, 63773, 63773, 63773, 63773, 63773, - 63781, 63781, 63781, 63781, 63781, 63781, 63781, 63781, - 63793, 63793, 63793, 63793, 63793, 63793, 63793, 63793, - 63793, 63793, 63793, 63793, 63799, 63799, 63799, 63799, - 63799, 63799, 63803, 63803, 63803, 63803, 63809, 63809, - 63809, 63809, 63809, 63809, 63823, 63823, 63823, 63823, - 63823, 63823, 63823, 63823, 63823, 63823, 63823, 63823, - 63823, 63823, 63839, 63839, 63839, 63839, 63839, 63839, - 63839, 63839, 63839, 63839, 63839, 63839, 63839, 63839, - 63839, 63839, 63841, 63841, 63853, 63853, 63853, 63853, - 63853, 63853, 63853, 63853, 63853, 63853, 63853, 63853, - 63857, 63857, 63857, 63857, 63863, 63863, 63863, 63863, - 63863, 63863, 63901, 63901, 63901, 63901, 63901, 63901, - 63901, 63901, 63901, 63901, 63901, 63901, 63901, 63901, - 63901, 63901, 63901, 63901, 63901, 63901, 63901, 63901, - 63901, 63901, 63901, 63901, 63901, 63901, 63901, 63901, - 63901, 63901, 63901, 63901, 63901, 63901, 63901, 63901, - 63907, 63907, 63907, 63907, 63907, 63907, 63913, 63913, - 63913, 63913, 63913, 63913, 63929, 63929, 63929, 63929, - 63929, 63929, 63929, 63929, 63929, 63929, 63929, 63929, - 63929, 63929, 63929, 63929, 63949, 63949, 63949, 63949, - 63949, 63949, 63949, 63949, 63949, 63949, 63949, 63949, - 63949, 63949, 63949, 63949, 63949, 63949, 63949, 63949, - 63977, 63977, 63977, 63977, 63977, 63977, 63977, 63977, - 63977, 63977, 63977, 63977, 63977, 63977, 63977, 63977, - 63977, 63977, 63977, 63977, 63977, 63977, 63977, 63977, - 63977, 63977, 63977, 63977, 63997, 63997, 63997, 63997, - 63997, 63997, 63997, 63997, 63997, 63997, 63997, 63997, - 63997, 63997, 63997, 63997, 63997, 63997, 63997, 63997, - 64007, 64007, 64007, 64007, 64007, 64007, 64007, 64007, - 64007, 64007, 64013, 64013, 64013, 64013, 64013, 64013, - 64019, 64019, 64019, 64019, 64019, 64019, 64033, 64033, - 64033, 64033, 64033, 64033, 64033, 64033, 64033, 64033, - 64033, 64033, 64033, 64033, 64037, 64037, 64037, 64037, - 64063, 64063, 64063, 64063, 64063, 64063, 64063, 64063, - 64063, 64063, 64063, 64063, 64063, 64063, 64063, 64063, - 64063, 64063, 64063, 64063, 64063, 64063, 64063, 64063, - 64063, 64063, 64067, 64067, 64067, 64067, 64081, 64081, - 64081, 64081, 64081, 64081, 64081, 64081, 64081, 64081, - 64081, 64081, 64081, 64081, 64091, 64091, 64091, 64091, - 64091, 64091, 64091, 64091, 64091, 64091, 64109, 64109, - 64109, 64109, 64109, 64109, 64109, 64109, 64109, 64109, - 64109, 64109, 64109, 64109, 64109, 64109, 64109, 64109, - 64123, 64123, 64123, 64123, 64123, 64123, 64123, 64123, - 64123, 64123, 64123, 64123, 64123, 64123, 64151, 64151, - 64151, 64151, 64151, 64151, 64151, 64151, 64151, 64151, - 64151, 64151, 64151, 64151, 64151, 64151, 64151, 64151, - 64151, 64151, 64151, 64151, 64151, 64151, 64151, 64151, - 64151, 64151, 64153, 64153, 64157, 64157, 64157, 64157, - 64171, 64171, 64171, 64171, 64171, 64171, 64171, 64171, - 64171, 64171, 64171, 64171, 64171, 64171, 64187, 64187, - 64187, 64187, 64187, 64187, 64187, 64187, 64187, 64187, - 64187, 64187, 64187, 64187, 64187, 64187, 64189, 64189, - 64217, 64217, 64217, 64217, 64217, 64217, 64217, 64217, - 64217, 64217, 64217, 64217, 64217, 64217, 64217, 64217, - 64217, 64217, 64217, 64217, 64217, 64217, 64217, 64217, - 64217, 64217, 64217, 64217, 64223, 64223, 64223, 64223, - 64223, 64223, 64231, 64231, 64231, 64231, 64231, 64231, - 64231, 64231, 64237, 64237, 64237, 64237, 64237, 64237, - 64271, 64271, 64271, 64271, 64271, 64271, 64271, 64271, - 64271, 64271, 64271, 64271, 64271, 64271, 64271, 64271, - 64271, 64271, 64271, 64271, 64271, 64271, 64271, 64271, - 64271, 64271, 64271, 64271, 64271, 64271, 64271, 64271, - 64271, 64271, 64279, 64279, 64279, 64279, 64279, 64279, - 64279, 64279, 64283, 64283, 64283, 64283, 64301, 64301, - 64301, 64301, 64301, 64301, 64301, 64301, 64301, 64301, - 64301, 64301, 64301, 64301, 64301, 64301, 64301, 64301, - 64303, 64303, 64319, 64319, 64319, 64319, 64319, 64319, - 64319, 64319, 64319, 64319, 64319, 64319, 64319, 64319, - 64319, 64319, 64327, 64327, 64327, 64327, 64327, 64327, - 64327, 64327, 64333, 64333, 64333, 64333, 64333, 64333, - 64373, 64373, 64373, 64373, 64373, 64373, 64373, 64373, - 64373, 64373, 64373, 64373, 64373, 64373, 64373, 64373, - 64373, 64373, 64373, 64373, 64373, 64373, 64373, 64373, - 64373, 64373, 64373, 64373, 64373, 64373, 64373, 64373, - 64373, 64373, 64373, 64373, 64373, 64373, 64373, 64373, - 64381, 64381, 64381, 64381, 64381, 64381, 64381, 64381, - 64399, 64399, 64399, 64399, 64399, 64399, 64399, 64399, - 64399, 64399, 64399, 64399, 64399, 64399, 64399, 64399, - 64399, 64399, 64403, 64403, 64403, 64403, 64433, 64433, - 64433, 64433, 64433, 64433, 64433, 64433, 64433, 64433, - 64433, 64433, 64433, 64433, 64433, 64433, 64433, 64433, - 64433, 64433, 64433, 64433, 64433, 64433, 64433, 64433, - 64433, 64433, 64433, 64433, 64439, 64439, 64439, 64439, - 64439, 64439, 64451, 64451, 64451, 64451, 64451, 64451, - 64451, 64451, 64451, 64451, 64451, 64451, 64453, 64453, - 64483, 64483, 64483, 64483, 64483, 64483, 64483, 64483, - 64483, 64483, 64483, 64483, 64483, 64483, 64483, 64483, - 64483, 64483, 64483, 64483, 64483, 64483, 64483, 64483, - 64483, 64483, 64483, 64483, 64483, 64483, 64489, 64489, - 64489, 64489, 64489, 64489, 64499, 64499, 64499, 64499, - 64499, 64499, 64499, 64499, 64499, 64499, 64513, 64513, - 64513, 64513, 64513, 64513, 64513, 64513, 64513, 64513, - 64513, 64513, 64513, 64513, 64553, 64553, 64553, 64553, - 64553, 64553, 64553, 64553, 64553, 64553, 64553, 64553, - 64553, 64553, 64553, 64553, 64553, 64553, 64553, 64553, - 64553, 64553, 64553, 64553, 64553, 64553, 64553, 64553, - 64553, 64553, 64553, 64553, 64553, 64553, 64553, 64553, - 64553, 64553, 64553, 64553, 64567, 64567, 64567, 64567, - 64567, 64567, 64567, 64567, 64567, 64567, 64567, 64567, - 64567, 64567, 64577, 64577, 64577, 64577, 64577, 64577, - 64577, 64577, 64577, 64577, 64579, 64579, 64591, 64591, - 64591, 64591, 64591, 64591, 64591, 64591, 64591, 64591, - 64591, 64591, 64601, 64601, 64601, 64601, 64601, 64601, - 64601, 64601, 64601, 64601, 64609, 64609, 64609, 64609, - 64609, 64609, 64609, 64609, 64613, 64613, 64613, 64613, - 64621, 64621, 64621, 64621, 64621, 64621, 64621, 64621, - 64627, 64627, 64627, 64627, 64627, 64627, 64633, 64633, - 64633, 64633, 64633, 64633, 64661, 64661, 64661, 64661, - 64661, 64661, 64661, 64661, 64661, 64661, 64661, 64661, - 64661, 64661, 64661, 64661, 64661, 64661, 64661, 64661, - 64661, 64661, 64661, 64661, 64661, 64661, 64661, 64661, - 64663, 64663, 64667, 64667, 64667, 64667, 64679, 64679, - 64679, 64679, 64679, 64679, 64679, 64679, 64679, 64679, - 64679, 64679, 64693, 64693, 64693, 64693, 64693, 64693, - 64693, 64693, 64693, 64693, 64693, 64693, 64693, 64693, - 64709, 64709, 64709, 64709, 64709, 64709, 64709, 64709, - 64709, 64709, 64709, 64709, 64709, 64709, 64709, 64709, - 64717, 64717, 64717, 64717, 64717, 64717, 64717, 64717, - 64747, 64747, 64747, 64747, 64747, 64747, 64747, 64747, - 64747, 64747, 64747, 64747, 64747, 64747, 64747, 64747, - 64747, 64747, 64747, 64747, 64747, 64747, 64747, 64747, - 64747, 64747, 64747, 64747, 64747, 64747, 64763, 64763, - 64763, 64763, 64763, 64763, 64763, 64763, 64763, 64763, - 64763, 64763, 64763, 64763, 64763, 64763, 64781, 64781, - 64781, 64781, 64781, 64781, 64781, 64781, 64781, 64781, - 64781, 64781, 64781, 64781, 64781, 64781, 64781, 64781, - 64783, 64783, 64793, 64793, 64793, 64793, 64793, 64793, - 64793, 64793, 64793, 64793, 64811, 64811, 64811, 64811, - 64811, 64811, 64811, 64811, 64811, 64811, 64811, 64811, - 64811, 64811, 64811, 64811, 64811, 64811, 64817, 64817, - 64817, 64817, 64817, 64817, 64849, 64849, 64849, 64849, - 64849, 64849, 64849, 64849, 64849, 64849, 64849, 64849, - 64849, 64849, 64849, 64849, 64849, 64849, 64849, 64849, - 64849, 64849, 64849, 64849, 64849, 64849, 64849, 64849, - 64849, 64849, 64849, 64849, 64853, 64853, 64853, 64853, - 64871, 64871, 64871, 64871, 64871, 64871, 64871, 64871, - 64871, 64871, 64871, 64871, 64871, 64871, 64871, 64871, - 64871, 64871, 64877, 64877, 64877, 64877, 64877, 64877, - 64879, 64879, 64891, 64891, 64891, 64891, 64891, 64891, - 64891, 64891, 64891, 64891, 64891, 64891, 64901, 64901, - 64901, 64901, 64901, 64901, 64901, 64901, 64901, 64901, - 64919, 64919, 64919, 64919, 64919, 64919, 64919, 64919, - 64919, 64919, 64919, 64919, 64919, 64919, 64919, 64919, - 64919, 64919, 64921, 64921, 64927, 64927, 64927, 64927, - 64927, 64927, 64937, 64937, 64937, 64937, 64937, 64937, - 64937, 64937, 64937, 64937, 64951, 64951, 64951, 64951, - 64951, 64951, 64951, 64951, 64951, 64951, 64951, 64951, - 64951, 64951, 64969, 64969, 64969, 64969, 64969, 64969, - 64969, 64969, 64969, 64969, 64969, 64969, 64969, 64969, - 64969, 64969, 64969, 64969, 64997, 64997, 64997, 64997, - 64997, 64997, 64997, 64997, 64997, 64997, 64997, 64997, - 64997, 64997, 64997, 64997, 64997, 64997, 64997, 64997, - 64997, 64997, 64997, 64997, 64997, 64997, 64997, 64997, - 65003, 65003, 65003, 65003, 65003, 65003, 65011, 65011, - 65011, 65011, 65011, 65011, 65011, 65011, 65027, 65027, - 65027, 65027, 65027, 65027, 65027, 65027, 65027, 65027, - 65027, 65027, 65027, 65027, 65027, 65027, 65029, 65029, - 65033, 65033, 65033, 65033, 65053, 65053, 65053, 65053, - 65053, 65053, 65053, 65053, 65053, 65053, 65053, 65053, - 65053, 65053, 65053, 65053, 65053, 65053, 65053, 65053, - 65063, 65063, 65063, 65063, 65063, 65063, 65063, 65063, - 65063, 65063, 65071, 65071, 65071, 65071, 65071, 65071, - 65071, 65071, 65089, 65089, 65089, 65089, 65089, 65089, - 65089, 65089, 65089, 65089, 65089, 65089, 65089, 65089, - 65089, 65089, 65089, 65089, 65099, 65099, 65099, 65099, - 65099, 65099, 65099, 65099, 65099, 65099, 65101, 65101, - 65111, 65111, 65111, 65111, 65111, 65111, 65111, 65111, - 65111, 65111, 65119, 65119, 65119, 65119, 65119, 65119, - 65119, 65119, 65123, 65123, 65123, 65123, 65129, 65129, - 65129, 65129, 65129, 65129, 65141, 65141, 65141, 65141, - 65141, 65141, 65141, 65141, 65141, 65141, 65141, 65141, - 65147, 65147, 65147, 65147, 65147, 65147, 65167, 65167, - 65167, 65167, 65167, 65167, 65167, 65167, 65167, 65167, - 65167, 65167, 65167, 65167, 65167, 65167, 65167, 65167, - 65167, 65167, 65171, 65171, 65171, 65171, 65173, 65173, - 65179, 65179, 65179, 65179, 65179, 65179, 65183, 65183, - 65183, 65183, 65203, 65203, 65203, 65203, 65203, 65203, - 65203, 65203, 65203, 65203, 65203, 65203, 65203, 65203, - 65203, 65203, 65203, 65203, 65203, 65203, 65213, 65213, - 65213, 65213, 65213, 65213, 65213, 65213, 65213, 65213, - 65239, 65239, 65239, 65239, 65239, 65239, 65239, 65239, - 65239, 65239, 65239, 65239, 65239, 65239, 65239, 65239, - 65239, 65239, 65239, 65239, 65239, 65239, 65239, 65239, - 65239, 65239, 65257, 65257, 65257, 65257, 65257, 65257, - 65257, 65257, 65257, 65257, 65257, 65257, 65257, 65257, - 65257, 65257, 65257, 65257, 65267, 65267, 65267, 65267, - 65267, 65267, 65267, 65267, 65267, 65267, 65269, 65269, - 65287, 65287, 65287, 65287, 65287, 65287, 65287, 65287, - 65287, 65287, 65287, 65287, 65287, 65287, 65287, 65287, - 65287, 65287, 65293, 65293, 65293, 65293, 65293, 65293, - 65309, 65309, 65309, 65309, 65309, 65309, 65309, 65309, - 65309, 65309, 65309, 65309, 65309, 65309, 65309, 65309, - 65323, 65323, 65323, 65323, 65323, 65323, 65323, 65323, - 65323, 65323, 65323, 65323, 65323, 65323, 65327, 65327, - 65327, 65327, 65353, 65353, 65353, 65353, 65353, 65353, - 65353, 65353, 65353, 65353, 65353, 65353, 65353, 65353, - 65353, 65353, 65353, 65353, 65353, 65353, 65353, 65353, - 65353, 65353, 65353, 65353, 65357, 65357, 65357, 65357, - 65371, 65371, 65371, 65371, 65371, 65371, 65371, 65371, - 65371, 65371, 65371, 65371, 65371, 65371, 65381, 65381, - 65381, 65381, 65381, 65381, 65381, 65381, 65381, 65381, - 65393, 65393, 65393, 65393, 65393, 65393, 65393, 65393, - 65393, 65393, 65393, 65393, 65407, 65407, 65407, 65407, - 65407, 65407, 65407, 65407, 65407, 65407, 65407, 65407, - 65407, 65407, 65413, 65413, 65413, 65413, 65413, 65413, - 65419, 65419, 65419, 65419, 65419, 65419, 65423, 65423, - 65423, 65423, 65437, 65437, 65437, 65437, 65437, 65437, - 65437, 65437, 65437, 65437, 65437, 65437, 65437, 65437, - 65447, 65447, 65447, 65447, 65447, 65447, 65447, 65447, - 65447, 65447, 65449, 65449, 65479, 65479, 65479, 65479, - 65479, 65479, 65479, 65479, 65479, 65479, 65479, 65479, - 65479, 65479, 65479, 65479, 65479, 65479, 65479, 65479, - 65479, 65479, 65479, 65479, 65479, 65479, 65479, 65479, - 65479, 65479, 65497, 65497, 65497, 65497, 65497, 65497, - 65497, 65497, 65497, 65497, 65497, 65497, 65497, 65497, - 65497, 65497, 65497, 65497, 65519, 65519, 65519, 65519, - 65519, 65519, 65519, 65519, 65519, 65519, 65519, 65519, - 65519, 65519, 65519, 65519, 65519, 65519, 65519, 65519, - 65519, 65519, 65521, 65521, 65537, 65537, 65537, 65537, - 65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537, - 65537, 65537 -}; diff --git a/hieroglyph/hgfile.c b/hieroglyph/hgfile.c deleted file mode 100644 index 6c3ad8d..0000000 --- a/hieroglyph/hgfile.c +++ /dev/null @@ -1,330 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgfile.c - * Copyright (C) 2006-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <fcntl.h> -#include <string.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <unistd.h> -#include <glib/gstrfuncs.h> -#include <hieroglyph/hgobject.h> -#include <hieroglyph/vm.h> -#include "hgfile.h" - - -/* - * private functions - */ -static hg_filetype_t -_hg_object_file_get_io_type(const gchar *filename) -{ - if (strcmp(filename, "%stdin") == 0) { - return HG_FILE_TYPE_STDIN; - } else if (strcmp(filename, "%stdout") == 0) { - return HG_FILE_TYPE_STDOUT; - } else if (strcmp(filename, "%stderr") == 0) { - return HG_FILE_TYPE_STDERR; - } else if (strcmp(filename, "%lineedit") == 0) { - return HG_FILE_TYPE_LINEEDIT; - } else if (strcmp(filename, "%statementedit") == 0) { - return HG_FILE_TYPE_STATEMENTEDIT; - } - - return HG_FILE_TYPE_FILE_IO; -} - -static int -_hg_object_file_get_open_mode(hg_filemode_t mode) -{ - return 0; -} - -/* - * public functions - */ -hg_object_t * -hg_object_file_new(hg_vm_t *vm, - const gchar *filename, - hg_filemode_t mode) -{ - hg_object_t *retval, *obj, *string; - gsize len, buflen = 0; - struct stat st; - hg_filetype_t iotype; - hg_filedata_t *data; - int fd; - gpointer buffer = NULL; - gboolean set_io = FALSE; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (filename != NULL, NULL); - - len = strlen(filename); - iotype = _hg_object_file_get_io_type(filename); - switch (iotype) { - case HG_FILE_TYPE_FILE_IO: - if (stat(filename, &st) == -1) { - hg_object_file_notify_error(vm, errno); - - return NULL; - } - buflen = st.st_size; - if ((fd = open(filename, _hg_object_file_get_open_mode(mode))) == -1) { - hg_object_file_notify_error(vm, errno); - - return NULL; - } - if ((buffer = mmap(NULL, buflen, PROT_READ, MAP_PRIVATE, fd, 0)) != MAP_FAILED) { - iotype = HG_FILE_TYPE_MMAPPED_IO; - } - break; - case HG_FILE_TYPE_STDIN: - if ((mode & ~HG_FILE_MODE_READ) != 0) { - hg_object_file_notify_error(vm, EIO); - - return NULL; - } - if ((retval = hg_vm_get_io(vm, iotype)) != NULL) - return retval; - fd = dup(0); - set_io = TRUE; - break; - case HG_FILE_TYPE_STDOUT: - if ((mode & ~HG_FILE_MODE_WRITE) != 0) { - hg_object_file_notify_error(vm, EIO); - - return NULL; - } - if ((retval = hg_vm_get_io(vm, iotype)) != NULL) - return retval; - fd = dup(1); - set_io = TRUE; - break; - case HG_FILE_TYPE_STDERR: - if ((mode & ~HG_FILE_MODE_WRITE) != 0) { - hg_object_file_notify_error(vm, EIO); - - return NULL; - } - if ((retval = hg_vm_get_io(vm, iotype)) != NULL) - return retval; - fd = dup(2); - set_io = TRUE; - break; - case HG_FILE_TYPE_LINEEDIT: - case HG_FILE_TYPE_STATEMENTEDIT: - if ((mode & ~HG_FILE_MODE_READ) != 0) { - hg_object_file_notify_error(vm, EIO); - - return NULL; - } - if ((obj = hg_vm_get_io(vm, iotype)) == NULL) { - hg_object_file_notify_error(vm, EIO); - - return NULL; - } - /* XXX */ - return hg_object_file_new_from_string(vm, string, HG_FILE_MODE_READ); - default: - g_warning("Unknown file type `%d' in creating file object", iotype); - return NULL; - } - retval = hg_object_sized_new(vm, hg_n_alignof (sizeof (hg_filedata_t) + sizeof (gchar) * (len + 1))); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_FILE; - data = HG_OBJECT_FILE_DATA (retval); - memset(data, 0, sizeof (hg_filedata_t) + sizeof (gchar) * (len + 1)); - data->v.buffer = buffer; - data->fd = fd; - data->filesize = buflen; - data->current_position = 0; - data->current_line = 0; - data->iotype = iotype; - data->mode = mode; - data->filename_length = len; - memcpy(data->filename, filename, len); - if (set_io) - hg_vm_set_io(vm, retval); - } else { - if (buffer) - munmap(buffer, buflen); - close(fd); - } - - return retval; -} - -hg_object_t * -hg_object_file_new_from_string(hg_vm_t *vm, - hg_object_t *string, - hg_filemode_t mode) -{ - hg_object_t *retval; - static gchar name[] = "%file buffer"; - gsize len = strlen(name); - hg_filedata_t *data; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (string != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_STRING (string), NULL); - - retval = hg_object_sized_new(vm, hg_n_alignof (sizeof (hg_filedata_t) + sizeof (gchar) * (len + 1))); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_FILE; - data = HG_OBJECT_FILE_DATA (retval); - data->v.buffer = string; - data->fd = -1; - data->filesize = HG_OBJECT_STRING (string)->real_length; - data->current_position = 0; - data->current_line = 0; - data->iotype = HG_FILE_TYPE_BUFFER; - data->mode = mode; - data->filename_length = len; - memcpy(data->filename, name, len); - data->filename[len] = 0; - } - - return retval; -} - -hg_object_t * -hg_object_file_new_with_custom(hg_vm_t *vm, - hg_filetable_t *table, - hg_filemode_t mode) -{ - hg_object_t *retval; - static gchar name[] = "%custom file object"; - gsize len = strlen(name); - hg_filedata_t *data; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (table != NULL, NULL); - - retval = hg_object_sized_new(vm, hg_n_alignof (sizeof (hg_filedata_t) + sizeof (gchar) * (len + 1))); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_FILE; - data = HG_OBJECT_FILE_DATA (retval); - memset(data, 0, sizeof (hg_filedata_t) + sizeof (gchar) * (len + 1)); - data->v.table = table; - data->filesize = 0; - data->current_position = 0; - data->current_line = 0; - data->iotype = HG_FILE_TYPE_CALLBACK; - data->mode = mode; - data->filename_length = len; - memcpy(data->filename, name, len); - } - - return retval; -} - -void -hg_object_file_free(hg_vm_t *vm, - hg_object_t *object) -{ - hg_return_if_fail (vm != NULL); - hg_return_if_fail (object != NULL); - hg_return_if_fail (HG_OBJECT_IS_FILE (object)); - - switch (HG_OBJECT_FILE_DATA (object)->iotype) { - default: - break; - } -} - -void -hg_object_file_notify_error(hg_vm_t *vm, - error_t _errno) -{ - hg_error_t error = 0; - gchar buffer[4096]; - - hg_return_if_fail (vm != NULL); - - switch (_errno) { - case 0: - break; - case EACCES: - case EBADF: - case EEXIST: - case ENOTDIR: - case ENOTEMPTY: - case EPERM: - case EROFS: - error = HG_e_invalidfileaccess; - break; - case EAGAIN: - case EBUSY: - case EIO: - case ENOSPC: - error = HG_e_ioerror; - break; - case EMFILE: - error = HG_e_limitcheck; - break; - case ENAMETOOLONG: - case ENODEV: - case ENOENT: - error = HG_e_undefinedfilename; - break; - case ENOMEM: - error = HG_e_VMerror; - break; - default: - strerror_r(_errno, buffer, 4096); - g_warning("%s: need to support errno %d\n %s\n", - __PRETTY_FUNCTION__, _errno, buffer); - break; - } - if (error != 0) - hg_vm_set_error(vm, error); -} - -gboolean -hg_object_file_compare(hg_object_t *object1, - hg_object_t *object2) -{ - hg_return_val_if_fail (object1 != NULL, FALSE); - hg_return_val_if_fail (object2 != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_FILE (object1), FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_FILE (object2), FALSE); - - /* XXX: no copy and dup functionalities are available so far. - * so just comparing a pointer should works enough - */ - return object1 == object2; -} - -gchar * -hg_object_file_dump(hg_object_t *object, - gboolean verbose) -{ - hg_return_val_if_fail (object != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_FILE (object), NULL); - - return g_strdup("--file--"); -} diff --git a/hieroglyph/hgfile.h b/hieroglyph/hgfile.h deleted file mode 100644 index b99d266..0000000 --- a/hieroglyph/hgfile.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgfile.h - * Copyright (C) 2006-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH_HGFILE_H__ -#define __HIEROGLYPH_HGFILE_H__ - -#include <hieroglyph/hgtypes.h> - - -G_BEGIN_DECLS - -hg_object_t *hg_object_file_new (hg_vm_t *vm, - const gchar *filename, - hg_filemode_t mode) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_file_new_from_string(hg_vm_t *vm, - hg_object_t *string, - hg_filemode_t mode) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_file_new_with_custom(hg_vm_t *vm, - hg_filetable_t *table, - hg_filemode_t mode) G_GNUC_WARN_UNUSED_RESULT; -void hg_object_file_free (hg_vm_t *vm, - hg_object_t *object); -void hg_object_file_notify_error (hg_vm_t *vm, - error_t _errno); -gboolean hg_object_file_compare (hg_object_t *object1, - hg_object_t *object2); -gchar *hg_object_file_dump (hg_object_t *object, - gboolean verbose) G_GNUC_MALLOC; - - -G_END_DECLS - -#endif /* __HIEROGLYPH_HGFILE_H__ */ diff --git a/hieroglyph/hgmacros.h b/hieroglyph/hgmacros.h deleted file mode 100644 index be06ec7..0000000 --- a/hieroglyph/hgmacros.h +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgmacros.h - * Copyright (C) 2006-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH__HGMACROS_H__ -#define __HIEROGLYPH__HGMACROS_H__ - -#include <stdio.h> -#include <glib/gmacros.h> -#include <glib/gtypes.h> -#include <glib/gmem.h> -#include <glib/gmessages.h> -#include <hieroglyph/utils.h> - - -G_BEGIN_DECLS - -#define hg_n_alignof(_hg_n_) \ - ((((_hg_n_) / ALIGNOF_VOID_P) + (((_hg_n_) % ALIGNOF_VOID_P) ? 1 : 0)) * ALIGNOF_VOID_P) -#ifdef DEBUG -#define hg_stacktrace() \ - G_STMT_START { \ - if (hg_is_stacktrace_enabled()) { \ - gchar *__stacktrace__ = hg_get_stacktrace(); \ - \ - fprintf(stderr, "Stacktraces:\n%s\n", __stacktrace__); \ - g_free(__stacktrace__); \ - } \ - } G_STMT_END -#else /* !DEBUG */ -#define hg_stacktrace() -#endif /* DEBUG */ -#ifdef __GNUC__ -#define _hg_return_if_fail_warning(__domain__,__func__,__expr__) \ - G_STMT_START { \ - if (hg_allow_warning_messages()) { \ - g_return_if_fail_warning(__domain__, \ - __func__, \ - __expr__); \ - } \ - } G_STMT_END -#define _hg_return_after_eval_if_fail(__expr__,__eval__) \ - G_STMT_START { \ - if (G_LIKELY(__expr__)) { \ - } else { \ - _hg_return_if_fail_warning(G_LOG_DOMAIN, \ - __PRETTY_FUNCTION__, \ - #__expr__); \ - __eval__; \ - return; \ - } \ - } G_STMT_END -#define _hg_return_val_after_eval_if_fail(__expr__,__val__,__eval__) \ - G_STMT_START { \ - if (G_LIKELY(__expr__)) { \ - } else { \ - _hg_return_if_fail_warning(G_LOG_DOMAIN, \ - __PRETTY_FUNCTION__, \ - #__expr__); \ - __eval__; \ - return (__val__); \ - } \ - } G_STMT_END -#else /* !__GNUC__ */ -#define _hg_return_after_eval_if_fail(__expr__,__eval__) \ - G_STMT_START { \ - if (__expr__) { \ - } else { \ - g_log(G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: assertion `%s' failed", \ - __FILE__, \ - __LINE__, \ - #__expr__); \ - __eval__; \ - return; \ - } \ - } G_STMT_END -#define _hg_return_val_after_eval_if_fail(__expr__,__val__,__eval__) \ - G_STMT_START { \ - if (__expr__) { \ - } else { \ - g_log(G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: assertion `%s' failed", \ - __FILE__, \ - __LINE__, \ - #__expr__); \ - __eval__; \ - return (__val__); \ - } \ - } G_STMT_END -#endif /* __GNUC__ */ - -#define hg_return_if_fail(__expr__) \ - _hg_return_after_eval_if_fail(__expr__,hg_stacktrace()) -#define hg_return_val_if_fail(__expr__,__val__) \ - _hg_return_val_after_eval_if_fail(__expr__,__val__,hg_stacktrace()) -#define hg_return_after_eval_if_fail(__expr__,__eval__) \ - _hg_return_after_eval_if_fail(__expr__,hg_stacktrace();__eval__) -#define hg_return_val_after_eval_if_fail(__expr__,__val__,__eval__) \ - _hg_return_val_after_eval_if_fail(__expr__,__val__,hg_stacktrace();__eval__) - - -G_END_DECLS - -#endif /* __HIEROGLYPH_HGMACROS_H__ */ diff --git a/hieroglyph/hgobject.c b/hieroglyph/hgobject.c deleted file mode 100644 index 1cbc743..0000000 --- a/hieroglyph/hgobject.c +++ /dev/null @@ -1,618 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgobject.c - * Copyright (C) 2005-2009 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <math.h> -#include <string.h> -#include <glib/gstring.h> -#include <hieroglyph/hgarray.h> -#include <hieroglyph/hgdict.h> -#include <hieroglyph/hgfile.h> -#include <hieroglyph/hgoperator.h> -#include <hieroglyph/hgstring.h> -#include <hieroglyph/vm.h> -#include "hgobject.h" - - -/* - * Private functions - */ -static hg_object_t * -_hg_object_new(hg_vm_t *vm, - gsize data_size) -{ - hg_object_t *retval; - guint32 total_size = hg_n_alignof (hg_n_alignof (sizeof (hg_object_header_t) + sizeof (_hg_object_t)) + data_size); - hg_attribute_t attr; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_vm_malloc(vm, total_size); - if (retval != NULL) { -#ifdef DEBUG - /* We don't ensure whether or not the allocated object is sane - * to be used in C. any classes must have their own initializer - * as needed - */ - memset(HG_OBJECT_OBJECT (retval), -1, sizeof (_hg_object_t) + data_size); -#endif /* DEBUG */ - hg_vm_get_attributes(vm, &attr); - HG_OBJECT_HEADER (retval)->token_type = hg_vm_get_object_format(vm); - HG_OBJECT_HEADER (retval)->n_objects = 0xff; - HG_OBJECT_HEADER (retval)->total_length = total_size; - HG_OBJECT_OBJECT (retval)->attr.attributes = attr.attributes; - HG_OBJECT_GET_TYPE (retval) = -1; - } else { - hg_vm_set_error(vm, HG_e_VMerror); - } - - return retval; -} - -/* name */ -static gboolean -_hg_object_name_compare(const hg_object_t *object1, - const hg_object_t *object2) -{ - guint16 i; - gchar *p1, *p2; - - if (HG_OBJECT_ENCODING_NAME (object1)->representation == -1 && - HG_OBJECT_ENCODING_NAME (object2)->representation == -1) { - return HG_OBJECT_ENCODING_NAME (object1)->index == HG_OBJECT_ENCODING_NAME (object2)->index; - } else if (HG_OBJECT_NAME (object1)->reserved1 == 0 && - HG_OBJECT_NAME (object2)->reserved1 == 0) { - if (HG_OBJECT_NAME (object1)->length != HG_OBJECT_NAME (object2)->length) - return FALSE; - - p1 = HG_OBJECT_NAME_DATA (object1); - p2 = HG_OBJECT_NAME_DATA (object2); - for (i = 0; i < HG_OBJECT_NAME (object1)->length; i++) { - if (p1[i] != p2[i]) - return FALSE; - } - return TRUE; - } - - return FALSE; -} - -/* - * Public functions - */ -hg_object_t * -hg_object_new(hg_vm_t *vm, - guint16 n_objects) -{ - hg_object_t *retval; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (n_objects > 0, NULL); - - retval = _hg_object_new(vm, sizeof (_hg_object_t) * (n_objects - 1)); - if (retval != NULL) { - /* initialize header */ - HG_OBJECT_HEADER (retval)->n_objects = n_objects; - } - - return retval; -} - -hg_object_t * -hg_object_sized_new(hg_vm_t *vm, - gsize size) -{ - hg_object_t *retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = _hg_object_new(vm, size); - if (retval != NULL) { - /* initialize header */ - HG_OBJECT_HEADER (retval)->n_objects = 1; - } - - return retval; -} - -void -hg_object_free(hg_vm_t *vm, - hg_object_t *object) -{ - hg_return_if_fail (vm != NULL); - hg_return_if_fail (object != NULL); - - switch (HG_OBJECT_GET_TYPE (object)) { - case HG_OBJECT_TYPE_NULL: - case HG_OBJECT_TYPE_INTEGER: - case HG_OBJECT_TYPE_REAL: - case HG_OBJECT_TYPE_NAME: - case HG_OBJECT_TYPE_BOOLEAN: - case HG_OBJECT_TYPE_STRING: - case HG_OBJECT_TYPE_EVAL: - case HG_OBJECT_TYPE_ARRAY: - case HG_OBJECT_TYPE_MARK: - case HG_OBJECT_TYPE_DICT: - case HG_OBJECT_TYPE_OPERATOR: - case HG_OBJECT_TYPE_END: /* uninitialized object */ - hg_vm_mfree(vm, object); - break; - case HG_OBJECT_TYPE_FILE: - hg_object_file_free(vm, object); - break; - default: - g_warning("[BUG] Unknown object type `%d' during destroying", HG_OBJECT_GET_TYPE (object)); - } -} - -hg_object_t * -hg_object_dup(hg_vm_t *vm, - hg_object_t *object) -{ - hg_object_t *retval = NULL; - gsize length; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (object != NULL, NULL); - - switch (HG_OBJECT_GET_TYPE (object)) { - case HG_OBJECT_TYPE_NULL: - case HG_OBJECT_TYPE_INTEGER: - case HG_OBJECT_TYPE_REAL: - case HG_OBJECT_TYPE_NAME: - case HG_OBJECT_TYPE_BOOLEAN: - case HG_OBJECT_TYPE_EVAL: - case HG_OBJECT_TYPE_MARK: - length = HG_OBJECT_HEADER (object)->total_length - sizeof (hg_object_header_t) - sizeof (_hg_object_t); - retval = hg_object_sized_new(vm, length); - if (retval != NULL) { - memcpy(retval, object, HG_OBJECT_HEADER (object)->total_length); - } - break; - case HG_OBJECT_TYPE_STRING: - retval = hg_object_string_substring_new(vm, object, 0, HG_OBJECT_STRING (object)->real_length); - break; - case HG_OBJECT_TYPE_ARRAY: - retval = hg_object_array_subarray_new(vm, object, 0, HG_OBJECT_ARRAY (object)->real_length); - break; - case HG_OBJECT_TYPE_DICT: - case HG_OBJECT_TYPE_FILE: - case HG_OBJECT_TYPE_OPERATOR: - /* XXX: perhaps we may want to create another container? */ - retval = object; - break; - default: - g_warning("[BUG] Unknown object type `%d' during duplicating", HG_OBJECT_GET_TYPE (object)); - break; - } - - return retval; -} - -hg_object_t * -hg_object_copy(hg_vm_t *vm, - hg_object_t *object) -{ - hg_object_t *retval; - gsize length; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (object != NULL, NULL); - - length = HG_OBJECT_HEADER (object)->total_length - sizeof (hg_object_header_t) - sizeof (_hg_object_t); - retval = hg_object_sized_new(vm, length); - if (retval != NULL) { - memcpy(retval, object, HG_OBJECT_HEADER (object)->total_length); - } - - return retval; -} - -gboolean -hg_object_compare(hg_object_t *object1, - hg_object_t *object2) -{ - hg_return_val_if_fail (object1 != NULL, FALSE); - hg_return_val_if_fail (object2 != NULL, FALSE); - - if (HG_OBJECT_GET_TYPE (object1) != HG_OBJECT_GET_TYPE (object2)) - return FALSE; - if (object1 == object2) - return TRUE; - - switch (HG_OBJECT_GET_TYPE (object1)) { - case HG_OBJECT_TYPE_NULL: - case HG_OBJECT_TYPE_MARK: - return TRUE; - case HG_OBJECT_TYPE_INTEGER: - return HG_OBJECT_INTEGER (object1) == HG_OBJECT_INTEGER (object2); - case HG_OBJECT_TYPE_REAL: - return HG_OBJECT_REAL_IS_EQUAL (object1, object2); - case HG_OBJECT_TYPE_NAME: - case HG_OBJECT_TYPE_EVAL: - return _hg_object_name_compare(object1, object2); - case HG_OBJECT_TYPE_BOOLEAN: - return HG_OBJECT_BOOLEAN (object1) == HG_OBJECT_BOOLEAN (object2); - case HG_OBJECT_TYPE_STRING: - return hg_object_string_compare(object1, object2); - case HG_OBJECT_TYPE_ARRAY: - return hg_object_array_compare(object1, object2); - case HG_OBJECT_TYPE_DICT: - return hg_object_dict_compare(object1, object2); - case HG_OBJECT_TYPE_FILE: - return hg_object_file_compare(object1, object2); - case HG_OBJECT_TYPE_OPERATOR: - return hg_object_operator_compare(object1, object2); - default: - g_warning("Unknown object type `%d' during comparing", HG_OBJECT_GET_TYPE (object1)); - } - - return FALSE; -} - -gchar * -hg_object_dump(hg_object_t *object, - gboolean verbose) -{ - GString *string; - gsize i; - gchar *p; - hg_stringdata_t *sdata; - static gchar nostringval[] = "--nostringval--"; - - hg_return_val_if_fail (object != NULL, NULL); - - string = g_string_new(NULL); - switch (HG_OBJECT_GET_TYPE (object)) { - case HG_OBJECT_TYPE_NULL: - if (verbose) { - g_string_append(string, "null"); - } else { - g_string_append(string, nostringval); - } - break; - case HG_OBJECT_TYPE_MARK: - if (verbose) { - g_string_append(string, "-mark-"); - } else { - g_string_append(string, nostringval); - } - break; - case HG_OBJECT_TYPE_INTEGER: - g_string_append_printf(string, "%d", HG_OBJECT_INTEGER (object)); - break; - case HG_OBJECT_TYPE_REAL: - g_string_append_printf(string, "%.8f", HG_OBJECT_REAL (object)); - break; - case HG_OBJECT_TYPE_EVAL: - if (verbose) - g_string_append_c(string, '/'); - case HG_OBJECT_TYPE_NAME: - if (verbose) - g_string_append_c(string, '/'); - if (HG_OBJECT_ENCODING_NAME (object)->representation == -1) { - g_string_append(string, hg_object_operator_get_name(HG_OBJECT_ENCODING_NAME (object)->index)); - } else { - p = HG_OBJECT_NAME_DATA (object); - - for (i = 0; i < HG_OBJECT_NAME (object)->length; i++) { - g_string_append_c(string, p[i]); - } - } - break; - case HG_OBJECT_TYPE_BOOLEAN: - g_string_append_printf(string, "%s", (HG_OBJECT_BOOLEAN (object) ? "true" : "false")); - break; - case HG_OBJECT_TYPE_STRING: - if (verbose) - g_string_append_c(string, '('); - sdata = HG_OBJECT_STRING_DATA (object); - for (i = 0; i < HG_OBJECT_STRING (object)->real_length; i++) { - g_string_append_c(string, ((gchar *)sdata->string)[i]); - } - if (verbose) - g_string_append_c(string, ')'); - break; - case HG_OBJECT_TYPE_ARRAY: - return hg_object_array_dump(object, verbose); - case HG_OBJECT_TYPE_DICT: - return hg_object_dict_dump(object, verbose); - case HG_OBJECT_TYPE_FILE: - return hg_object_file_dump(object, verbose); - case HG_OBJECT_TYPE_OPERATOR: - return hg_object_operator_dump(object, verbose); - default: - g_warning("Unknown object type `%d' during dumping", HG_OBJECT_GET_TYPE (object)); - } - - return g_string_free(string, FALSE); -} - -gsize -hg_object_get_hash(hg_object_t *object) -{ - gsize retval = 0; - - hg_return_val_if_fail (object != NULL, 0); - - switch (HG_OBJECT_GET_TYPE (object)) { - case HG_OBJECT_TYPE_NULL: - retval = 0; - break; - case HG_OBJECT_TYPE_INTEGER: - retval = HG_OBJECT_INTEGER (object); - break; - case HG_OBJECT_TYPE_REAL: - retval = HG_OBJECT_REAL (object); - break; - case HG_OBJECT_TYPE_NAME: - case HG_OBJECT_TYPE_EVAL: - G_STMT_START { - guint16 i, length; - const gchar *p; - - if (HG_OBJECT_ENCODING_NAME (object)->representation == -1) { - p = hg_object_operator_get_name(HG_OBJECT_ENCODING_NAME (object)->index); - length = strlen(p); - } else { - p = HG_OBJECT_NAME_DATA (object); - length = HG_OBJECT_NAME (object)->length; - } - for (i = 0; i < length; i++) { - retval = (retval << 5) - retval + p[i]; - } - } G_STMT_END; - break; - case HG_OBJECT_TYPE_BOOLEAN: - retval = HG_OBJECT_BOOLEAN (object); - break; - case HG_OBJECT_TYPE_STRING: - G_STMT_START { - guint16 i, length = HG_OBJECT_STRING (object)->real_length; - gchar *p = HG_OBJECT_STRING_DATA (object)->string; - - for (i = 0; i < length; i++) { - retval = (retval << 5) - retval + p[i]; - } - } G_STMT_END; - break; - case HG_OBJECT_TYPE_ARRAY: - case HG_OBJECT_TYPE_MARK: - case HG_OBJECT_TYPE_DICT: - case HG_OBJECT_TYPE_FILE: - case HG_OBJECT_TYPE_OPERATOR: - /* XXX */ - default: - g_warning("Unknown object type `%d' during getting a hash", HG_OBJECT_GET_TYPE (object)); - break; - } - - return retval; -} - -/* null */ -hg_object_t * -hg_object_null_new(hg_vm_t *vm) -{ - hg_object_t *retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_object_new(vm, 1); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_NULL; - } - - return retval; -} - -/* integer */ -hg_object_t * -hg_object_integer_new(hg_vm_t *vm, - gint32 value) -{ - hg_object_t *retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_object_new(vm, 1); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_INTEGER; - HG_OBJECT_INTEGER (retval) = value; - } - - return retval; -} - -/* real */ -hg_object_t * -hg_object_real_new(hg_vm_t *vm, - gfloat value) -{ - hg_object_t *retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_object_new(vm, 1); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_REAL; - HG_OBJECT_REAL (retval) = value; - } - - return retval; -} - -/* name */ -hg_object_t * -hg_object_name_new(hg_vm_t *vm, - const gchar *value, - gboolean is_evaluated) -{ - hg_object_t *retval; - gsize size; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (value != NULL, NULL); - - size = strlen(value); - retval = hg_object_sized_new(vm, size + 1); - if (retval != NULL) { - if (is_evaluated) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_EVAL; - } else { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_NAME; - } - /* initialize the reserved area to not confuse between - * the encoding named object and the named object. - */ - HG_OBJECT_NAME (retval)->reserved1 = 0; - HG_OBJECT_NAME (retval)->length = size; - memcpy(HG_OBJECT_DATA (retval), value, size); - } - - return retval; -} - -gboolean -hg_object_name_compare_with_raw(hg_object_t *object, - const gchar *name) -{ - gssize length1, length2; - guint16 i; - const gchar *p; - - hg_return_val_if_fail (object != NULL, FALSE); - hg_return_val_if_fail (name != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_NAME (object) || HG_OBJECT_IS_EVAL (object), FALSE); - - length2 = strlen(name); - if (HG_OBJECT_ENCODING_NAME (object)->representation == -1) { - p = hg_object_operator_get_name(HG_OBJECT_ENCODING_NAME (object)->index); - length1 = strlen(p); - } else { - p = HG_OBJECT_NAME_DATA (object); - length1 = HG_OBJECT_NAME (object)->length; - } - if (length1 != length2) - return FALSE; - - for (i = 0; i < length2; i++) { - if (p[i] != name[i]) - return FALSE; - } - - return TRUE; -} - -gboolean -hg_object_name_n_compare_with_raw(hg_object_t *object, - const gchar *name, - gssize length) -{ - gssize length1; - guint16 i; - const gchar *p; - - hg_return_val_if_fail (object != NULL, FALSE); - hg_return_val_if_fail (name != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_NAME (object) || HG_OBJECT_IS_EVAL (object), FALSE); - - if (length < 0) - length = strlen(name); - if (HG_OBJECT_ENCODING_NAME (object)->representation == -1) { - p = hg_object_operator_get_name(HG_OBJECT_ENCODING_NAME (object)->index); - length1 = strlen(p); - } else { - p = HG_OBJECT_NAME_DATA (object); - length1 = HG_OBJECT_NAME (object)->length; - } - if (length1 < length) - return FALSE; - - for (i = 0; i < length; i++) { - if (p[i] != name[i]) - return FALSE; - } - - return TRUE; -} - -hg_object_t * -hg_object_system_encoding_new(hg_vm_t *vm, - guint32 index, - gboolean is_evaluated) -{ - hg_object_t *retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_object_new(vm, 1); - if (retval != NULL) { - if (is_evaluated) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_EVAL; - } else { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_NAME; - } - HG_OBJECT_ENCODING_NAME (retval)->representation = -1; - HG_OBJECT_ENCODING_NAME (retval)->index = index; - } - - return retval; -} - -/* boolean */ -hg_object_t * -hg_object_boolean_new(hg_vm_t *vm, - gboolean value) -{ - hg_object_t *retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_object_new(vm, 1); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_BOOLEAN; - HG_OBJECT_BOOLEAN (retval) = value; - } - - return retval; -} - -/* mark */ -hg_object_t * -hg_object_mark_new(hg_vm_t *vm) -{ - hg_object_t *retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_object_new(vm, 1); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_MARK; - } - - return retval; -} diff --git a/hieroglyph/hgobject.h b/hieroglyph/hgobject.h deleted file mode 100644 index 132406e..0000000 --- a/hieroglyph/hgobject.h +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgobject.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH__HGOBJECT_H__ -#define __HIEROGLYPH__HGOBJECT_H__ - -#include <math.h> -#include <hieroglyph/hgtypes.h> - - -G_BEGIN_DECLS - -#define HG_OBJECT_OBJECT(_hg_o_) (&((_hg_o_)->object)) -#define HG_OBJECT_HEADER(_hg_o_) (&((_hg_o_)->header)) -#define HG_OBJECT_DATA(_hg_o_) (&(_hg_o_)->data) -#define HG_OBJECT_GET_TYPE(_hg_o_) (HG_OBJECT_OBJECT (_hg_o_)->t.v.object_type) -#define HG_OBJECT_IS(_hg_o_,_hg_t_) (HG_OBJECT_GET_TYPE (_hg_o_) == HG_OBJECT_TYPE_ ## _hg_t_) -#define HG_OBJECT_IS_NULL(_hg_o_) HG_OBJECT_IS (_hg_o_, NULL) -#define HG_OBJECT_IS_INTEGER(_hg_o_) HG_OBJECT_IS (_hg_o_, INTEGER) -#define HG_OBJECT_IS_REAL(_hg_o_) HG_OBJECT_IS (_hg_o_, REAL) -#define HG_OBJECT_IS_NAME(_hg_o_) HG_OBJECT_IS (_hg_o_, NAME) -#define HG_OBJECT_IS_BOOLEAN(_hg_o_) HG_OBJECT_IS (_hg_o_, BOOLEAN) -#define HG_OBJECT_IS_STRING(_hg_o_) HG_OBJECT_IS (_hg_o_, STRING) -#define HG_OBJECT_IS_EVAL(_hg_o_) HG_OBJECT_IS (_hg_o_, EVAL) -#define HG_OBJECT_IS_ARRAY(_hg_o_) HG_OBJECT_IS (_hg_o_, ARRAY) -#define HG_OBJECT_IS_MARK(_hg_o_) HG_OBJECT_IS (_hg_o_, MARK) -#define HG_OBJECT_IS_DICT(_hg_o_) HG_OBJECT_IS (_hg_o_, DICT) -#define HG_OBJECT_IS_FILE(_hg_o_) HG_OBJECT_IS (_hg_o_, FILE) -#define HG_OBJECT_IS_OPERATOR(_hg_o_) HG_OBJECT_IS (_hg_o_, OPERATOR) -#define HG_OBJECT_IS_COMPLEX(_hg_o_) (HG_OBJECT_IS_ARRAY (_hg_o_) || \ - HG_OBJECT_IS_STRING (_hg_o_) || \ - HG_OBJECT_IS_DICT (_hg_o_) || \ - HG_OBJECT_IS_FILE (_hg_o_) || \ - HG_OBJECT_IS_OPERATOR (_hg_o_)) -#define HG_OBJECT_ATTR_IS(_hg_o_,_hg_a_) ((HG_OBJECT_OBJECT (_hg_o_)->attr.bit.is_ ## _hg_a_) == TRUE) -#define HG_OBJECT_ATTR_IS_ACCESSIBLE(_hg_o_) HG_OBJECT_ATTR_IS (_hg_o_, accessible) -#define HG_OBJECT_ATTR_IS_READABLE(_hg_o_) HG_OBJECT_ATTR_IS (_hg_o_, readable) -#define HG_OBJECT_ATTR_IS_EXECUTEONLY(_hg_o_) HG_OBJECT_ATTR_IS (_hg_o_, executeonly) -#define HG_OBJECT_ATTR_IS_GLOBAL(_hg_o_) HG_OBJECT_ATTR_IS (_hg_o_, global) -#define HG_OBJECT_ATTR_IS_EXECUTABLE(_hg_o_) (HG_OBJECT_OBJECT (_hg_o_)->t.v.is_executable) -#define HG_OBJECT_GET_N_OBJECTS(_hg_o_) HG_OBJECT_HEADER (_hg_o_)->n_objects -#define HG_OBJECT_CHECK_N_OBJECTS(_hg_o_,_hg_n_) \ - (_hg_n_ < HG_OBJECT_GET_N_OBJECTS (_hg_o_)) -#define HG_OBJECT_INTEGER(_hg_o_) (HG_OBJECT_OBJECT (_hg_o_)->v.integer) -#define HG_OBJECT_REAL(_hg_o_) (HG_OBJECT_OBJECT (_hg_o_)->v.real) -#define HG_OBJECT_REAL_IS_EQUAL(_hg_o_1,_hg_o_2) \ - (fabsf(HG_OBJECT_REAL (_hg_o_1) - HG_OBJECT_REAL (_hg_o_2)) <= FLT_EPSILON) -#define HG_OBJECT_REAL_IS_EQUAL_TO(_hg_o_,_hg_r_) \ - (fabsf(HG_OBJECT_REAL (_hg_o_) - (_hg_r_)) <= FLT_EPSILON) -#define HG_OBJECT_REAL_IS_ZERO(_hg_o_) (fabsf(HG_OBJECT_REAL (_hg_o_)) <= FLT_EPSILON) -#define HG_OBJECT_NAME(_hg_o_) (&(HG_OBJECT_OBJECT (_hg_o_)->v.name)) -#define HG_OBJECT_NAME_DATA(_hg_o_) (gchar *)(HG_OBJECT_DATA (_hg_o_)) -#define HG_OBJECT_ENCODING_NAME(_hg_o_) (&(HG_OBJECT_OBJECT (_hg_o_)->v.encoding)) -#define HG_OBJECT_BOOLEAN(_hg_o_) (HG_OBJECT_OBJECT (_hg_o_)->v.boolean) -#define HG_OBJECT_STRING(_hg_o_) (&(HG_OBJECT_OBJECT (_hg_o_)->v.string)) -#define HG_OBJECT_STRING_DATA(_hg_o_) ((hg_stringdata_t *)HG_OBJECT_DATA (_hg_o_)) -#define HG_OBJECT_ARRAY(_hg_o_) (&(HG_OBJECT_OBJECT (_hg_o_)->v.array)) -#define HG_OBJECT_ARRAY_DATA(_hg_o_) ((hg_arraydata_t *)HG_OBJECT_DATA (_hg_o_)) -#define HG_OBJECT_DICT(_hg_o_) (&(HG_OBJECT_OBJECT (_hg_o_)->v.dict)) -#define HG_OBJECT_DICT_DATA(_hg_o_) ((hg_dictdata_t *)HG_OBJECT_DATA (_hg_o_)) -#define HG_OBJECT_FILE(_hg_o_) (&(HG_OBJECT_OBJECT (_hg_o_)->v.file)) -#define HG_OBJECT_FILE_DATA(_hg_o_) ((hg_filedata_t *)HG_OBJECT_DATA (_hg_o_)) -#define HG_OBJECT_OPERATOR(_hg_o_) (&(HG_OBJECT_OBJECT (_hg_o_)->v.operator)) -#define HG_OBJECT_OPERATOR_DATA(_hg_o_) ((hg_operatordata_t *)HG_OBJECT_DATA (_hg_o_)) - - -hg_object_t *hg_object_new (hg_vm_t *vm, - guint16 n_objects) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_sized_new (hg_vm_t *vm, - gsize size) G_GNUC_WARN_UNUSED_RESULT; -void hg_object_free (hg_vm_t *vm, - hg_object_t *object); -hg_object_t *hg_object_dup (hg_vm_t *vm, - hg_object_t *object) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_copy (hg_vm_t *vm, - hg_object_t *object) G_GNUC_WARN_UNUSED_RESULT; -gboolean hg_object_compare (hg_object_t *object1, - hg_object_t *object2); -gchar *hg_object_dump (hg_object_t *object, - gboolean verbose) G_GNUC_MALLOC; -gsize hg_object_get_hash (hg_object_t *object); -hg_object_t *hg_object_null_new (hg_vm_t *vm) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_integer_new (hg_vm_t *vm, - gint32 value) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_real_new (hg_vm_t *vm, - gfloat value) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_name_new (hg_vm_t *vm, - const gchar *value, - gboolean is_evaluated) G_GNUC_WARN_UNUSED_RESULT; -gboolean hg_object_name_compare_with_raw (hg_object_t *object, - const gchar *name); -gboolean hg_object_name_n_compare_with_raw(hg_object_t *object, - const gchar *name, - gssize length); -hg_object_t *hg_object_system_encoding_new (hg_vm_t *vm, - guint32 index, - gboolean is_evaluated) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_boolean_new (hg_vm_t *vm, - gboolean value) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_mark_new (hg_vm_t *vm) G_GNUC_WARN_UNUSED_RESULT; - - -G_END_DECLS - -#endif /* __HIEROGLYPH__HGOBJECT_H__ */ diff --git a/hieroglyph/hgoperator-private.h b/hieroglyph/hgoperator-private.h deleted file mode 100644 index 0c18ea9..0000000 --- a/hieroglyph/hgoperator-private.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgoperator-private.h - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH_HGOPERATOR_PRIVATE_H__ -#define __HIEROGLYPH_HGOPERATOR_PRIVATE_H__ - -#include <hieroglyph/hgtypes.h> - -G_BEGIN_DECLS - - -#define HG_DEFUNC_BEGIN_OPER(name) \ - static gboolean \ - _hg_object_operator_ ## name ## _cb(hg_vm_t *vm, \ - hg_object_t *object) \ - { \ - gboolean retval = FALSE; -#define HG_DEFUNC_END_OPER \ - return retval; \ - } -#define HG_DEFUNC_UNIMPLEMENTED_OPER(name) \ - static gboolean \ - _hg_object_operator_ ## name ## _cb(hg_vm_t *vm, \ - hg_object_t *object) \ - { \ - g_warning("%s isn't yet implemented.", __PRETTY_FUNCTION__); \ - \ - return FALSE; \ - } -#define _hg_object_operator_build(_hg_v_,_hg_i_,_hg_n_) \ - G_STMT_START { \ - hg_object_t *_hg_o_, *_hg_d_, *_hg_on_; \ - \ - if (__hg_system_encoding_names[HG_enc_ ## _hg_i_] != NULL) \ - g_free(__hg_system_encoding_names[HG_enc_ ## _hg_i_]); \ - __hg_system_encoding_names[HG_enc_ ## _hg_i_] = g_strdup(# _hg_n_); \ - _hg_o_ = hg_object_operator_new((_hg_v_), HG_enc_ ## _hg_i_, _hg_object_operator_ ## _hg_i_ ## _cb); \ - if (_hg_o_) { \ - _hg_d_ = hg_vm_get_currentdict(_hg_v_); \ - _hg_on_ = hg_vm_name_lookup((_hg_v_), # _hg_n_); \ - if (!hg_object_dict_insert(_hg_d_, _hg_on_, _hg_o_)) { \ - retval = FALSE; \ - } \ - } else { \ - retval = FALSE; \ - } \ - } G_STMT_END -#define _hg_object_operator_priv_build(_hg_v_,_hg_n_, _hg_fn_) \ - G_STMT_START { \ - hg_object_t *_hg_o_, *_hg_d_, *_hg_on_; \ - \ - _hg_o_ = hg_object_operator_new_with_custom((_hg_v_), # _hg_n_, _hg_object_operator_ ## _hg_fn_ ## _cb); \ - if (_hg_o_) { \ - _hg_d_ = hg_vm_get_currentdict(_hg_v_); \ - _hg_on_ = hg_vm_name_lookup((_hg_v_), # _hg_n_); \ - if (!hg_object_dict_insert(_hg_d_, _hg_on_, _hg_o_)) { \ - retval = FALSE; \ - } \ - } else { \ - retval = FALSE; \ - } \ - } G_STMT_END -#define _hg_object_operator_unbuild(_hg_v_,_hg_n_) \ - G_STMT_START { \ - if (!hg_vm_dict_remove((_hg_v_), # _hg_n_, TRUE)) { \ - retval = FALSE; \ - } \ - } G_STMT_END - -G_END_DECLS - -#endif /* __HIEROGLYPH_HGOPERATOR_PRIVATE_H__ */ diff --git a/hieroglyph/hgoperator.c b/hieroglyph/hgoperator.c deleted file mode 100644 index b629b9c..0000000 --- a/hieroglyph/hgoperator.c +++ /dev/null @@ -1,1283 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgoperator.c - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <string.h> -#include <glib/gstrfuncs.h> -#include <hieroglyph/hgdict.h> -#include <hieroglyph/hgobject.h> -#include <hieroglyph/vm.h> -#include "hgoperator.h" -#include "hgoperator-private.h" - - -static gchar *__hg_system_encoding_names[HG_enc_END]; -static gboolean __hg_operator_initialized = FALSE; - - -/* - * private functions - */ -HG_DEFUNC_UNIMPLEMENTED_OPER (private_arraytomark); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_dicttomark); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_for_pos_int_continue); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_for_pos_real_continue); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_forall_array_continue); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_forall_dict_continue); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_forall_string_continue); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_loop_continue); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_repeat_continue); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_stopped_continue); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_findfont); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_definefont); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_stringcvs); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_undefinefont); -HG_DEFUNC_UNIMPLEMENTED_OPER (private_write_eqeq_only); -HG_DEFUNC_UNIMPLEMENTED_OPER (abs); -HG_DEFUNC_UNIMPLEMENTED_OPER (add); -HG_DEFUNC_UNIMPLEMENTED_OPER (aload); -HG_DEFUNC_UNIMPLEMENTED_OPER (and); -HG_DEFUNC_UNIMPLEMENTED_OPER (arc); -HG_DEFUNC_UNIMPLEMENTED_OPER (arcn); -HG_DEFUNC_UNIMPLEMENTED_OPER (arcto); -HG_DEFUNC_UNIMPLEMENTED_OPER (array); -HG_DEFUNC_UNIMPLEMENTED_OPER (ashow); -HG_DEFUNC_UNIMPLEMENTED_OPER (astore); -HG_DEFUNC_UNIMPLEMENTED_OPER (atan); -HG_DEFUNC_UNIMPLEMENTED_OPER (awidthshow); -HG_DEFUNC_UNIMPLEMENTED_OPER (begin); -HG_DEFUNC_UNIMPLEMENTED_OPER (bind); -HG_DEFUNC_UNIMPLEMENTED_OPER (bitshift); -HG_DEFUNC_UNIMPLEMENTED_OPER (bytesavailable); -HG_DEFUNC_UNIMPLEMENTED_OPER (cachestatus); -HG_DEFUNC_UNIMPLEMENTED_OPER (ceiling); -HG_DEFUNC_UNIMPLEMENTED_OPER (charpath); -HG_DEFUNC_UNIMPLEMENTED_OPER (clear); -HG_DEFUNC_UNIMPLEMENTED_OPER (cleardictstack); -HG_DEFUNC_UNIMPLEMENTED_OPER (cleartomark); -HG_DEFUNC_UNIMPLEMENTED_OPER (clip); -HG_DEFUNC_UNIMPLEMENTED_OPER (clippath); -HG_DEFUNC_UNIMPLEMENTED_OPER (closefile); -HG_DEFUNC_UNIMPLEMENTED_OPER (closepath); -HG_DEFUNC_UNIMPLEMENTED_OPER (concat); -HG_DEFUNC_UNIMPLEMENTED_OPER (concatmatrix); -HG_DEFUNC_UNIMPLEMENTED_OPER (copy); -HG_DEFUNC_UNIMPLEMENTED_OPER (copypage); -HG_DEFUNC_UNIMPLEMENTED_OPER (cos); -HG_DEFUNC_UNIMPLEMENTED_OPER (count); -HG_DEFUNC_UNIMPLEMENTED_OPER (countdictstack); -HG_DEFUNC_UNIMPLEMENTED_OPER (countexecstack); -HG_DEFUNC_UNIMPLEMENTED_OPER (counttomark); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentdash); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentdict); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentfile); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentflat); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentfont); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentgray); -HG_DEFUNC_UNIMPLEMENTED_OPER (currenthsbcolor); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentlinecap); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentlinejoin); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentlinewidth); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentmatrix); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentmiterlimit); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentpoint); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentrgbcolor); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentscreen); -HG_DEFUNC_UNIMPLEMENTED_OPER (currenttransfer); -HG_DEFUNC_UNIMPLEMENTED_OPER (curveto); -HG_DEFUNC_UNIMPLEMENTED_OPER (cvi); -HG_DEFUNC_UNIMPLEMENTED_OPER (cvlit); -HG_DEFUNC_UNIMPLEMENTED_OPER (cvn); -HG_DEFUNC_UNIMPLEMENTED_OPER (cvr); -HG_DEFUNC_UNIMPLEMENTED_OPER (cvrs); -HG_DEFUNC_UNIMPLEMENTED_OPER (cvx); -HG_DEFUNC_UNIMPLEMENTED_OPER (def); -HG_DEFUNC_UNIMPLEMENTED_OPER (defaultmatrix); -HG_DEFUNC_UNIMPLEMENTED_OPER (dict); -HG_DEFUNC_UNIMPLEMENTED_OPER (dictstack); -HG_DEFUNC_UNIMPLEMENTED_OPER (div); -HG_DEFUNC_UNIMPLEMENTED_OPER (dtransform); -HG_DEFUNC_UNIMPLEMENTED_OPER (dup); -HG_DEFUNC_UNIMPLEMENTED_OPER (echo); -HG_DEFUNC_UNIMPLEMENTED_OPER (eexec); -HG_DEFUNC_UNIMPLEMENTED_OPER (end); -HG_DEFUNC_UNIMPLEMENTED_OPER (eoclip); -HG_DEFUNC_UNIMPLEMENTED_OPER (eofill); -HG_DEFUNC_UNIMPLEMENTED_OPER (eq); -HG_DEFUNC_UNIMPLEMENTED_OPER (erasepage); -HG_DEFUNC_UNIMPLEMENTED_OPER (exch); -HG_DEFUNC_UNIMPLEMENTED_OPER (exec); -HG_DEFUNC_UNIMPLEMENTED_OPER (execstack); -HG_DEFUNC_UNIMPLEMENTED_OPER (executeonly); -HG_DEFUNC_UNIMPLEMENTED_OPER (exit); -HG_DEFUNC_UNIMPLEMENTED_OPER (exp); -HG_DEFUNC_UNIMPLEMENTED_OPER (file); -HG_DEFUNC_UNIMPLEMENTED_OPER (fill); -HG_DEFUNC_UNIMPLEMENTED_OPER (flattenpath); -HG_DEFUNC_UNIMPLEMENTED_OPER (flush); -HG_DEFUNC_UNIMPLEMENTED_OPER (flushfile); -HG_DEFUNC_UNIMPLEMENTED_OPER (FontDirectory); -HG_DEFUNC_UNIMPLEMENTED_OPER (for); -HG_DEFUNC_UNIMPLEMENTED_OPER (forall); -HG_DEFUNC_UNIMPLEMENTED_OPER (ge); -HG_DEFUNC_UNIMPLEMENTED_OPER (get); -HG_DEFUNC_UNIMPLEMENTED_OPER (getinterval); -HG_DEFUNC_UNIMPLEMENTED_OPER (grestore); -HG_DEFUNC_UNIMPLEMENTED_OPER (grestoreall); -HG_DEFUNC_UNIMPLEMENTED_OPER (gsave); -HG_DEFUNC_UNIMPLEMENTED_OPER (gt); -HG_DEFUNC_UNIMPLEMENTED_OPER (identmatrix); -HG_DEFUNC_UNIMPLEMENTED_OPER (idiv); -HG_DEFUNC_UNIMPLEMENTED_OPER (idtransform); -HG_DEFUNC_UNIMPLEMENTED_OPER (if); -HG_DEFUNC_UNIMPLEMENTED_OPER (ifelse); -HG_DEFUNC_UNIMPLEMENTED_OPER (image); -HG_DEFUNC_UNIMPLEMENTED_OPER (imagemask); -HG_DEFUNC_UNIMPLEMENTED_OPER (index); -HG_DEFUNC_UNIMPLEMENTED_OPER (initclip); -HG_DEFUNC_UNIMPLEMENTED_OPER (initgraphics); -HG_DEFUNC_UNIMPLEMENTED_OPER (initmatrix); -HG_DEFUNC_UNIMPLEMENTED_OPER (internaldict); -HG_DEFUNC_UNIMPLEMENTED_OPER (invertmatrix); -HG_DEFUNC_UNIMPLEMENTED_OPER (itransform); -HG_DEFUNC_UNIMPLEMENTED_OPER (known); -HG_DEFUNC_UNIMPLEMENTED_OPER (kshow); -HG_DEFUNC_UNIMPLEMENTED_OPER (le); -HG_DEFUNC_UNIMPLEMENTED_OPER (length); -HG_DEFUNC_UNIMPLEMENTED_OPER (lineto); -HG_DEFUNC_UNIMPLEMENTED_OPER (ln); -HG_DEFUNC_UNIMPLEMENTED_OPER (log); -HG_DEFUNC_UNIMPLEMENTED_OPER (loop); -HG_DEFUNC_UNIMPLEMENTED_OPER (lt); -HG_DEFUNC_UNIMPLEMENTED_OPER (makefont); -HG_DEFUNC_UNIMPLEMENTED_OPER (maxlength); -HG_DEFUNC_UNIMPLEMENTED_OPER (mod); -HG_DEFUNC_UNIMPLEMENTED_OPER (moveto); -HG_DEFUNC_UNIMPLEMENTED_OPER (mul); -HG_DEFUNC_UNIMPLEMENTED_OPER (ne); -HG_DEFUNC_UNIMPLEMENTED_OPER (neg); -HG_DEFUNC_UNIMPLEMENTED_OPER (newpath); -HG_DEFUNC_UNIMPLEMENTED_OPER (noaccess); -HG_DEFUNC_UNIMPLEMENTED_OPER (not); -HG_DEFUNC_UNIMPLEMENTED_OPER (nulldevice); -HG_DEFUNC_UNIMPLEMENTED_OPER (or); -HG_DEFUNC_UNIMPLEMENTED_OPER (pathbbox); -HG_DEFUNC_UNIMPLEMENTED_OPER (pathforall); -HG_DEFUNC_UNIMPLEMENTED_OPER (pop); -HG_DEFUNC_UNIMPLEMENTED_OPER (print); -HG_DEFUNC_UNIMPLEMENTED_OPER (put); -HG_DEFUNC_UNIMPLEMENTED_OPER (rand); -HG_DEFUNC_UNIMPLEMENTED_OPER (rcheck); -HG_DEFUNC_UNIMPLEMENTED_OPER (rcurveto); -HG_DEFUNC_UNIMPLEMENTED_OPER (read); -HG_DEFUNC_UNIMPLEMENTED_OPER (readhexstring); -HG_DEFUNC_UNIMPLEMENTED_OPER (readline); -HG_DEFUNC_UNIMPLEMENTED_OPER (readonly); -HG_DEFUNC_UNIMPLEMENTED_OPER (readstring); -HG_DEFUNC_UNIMPLEMENTED_OPER (repeat); -HG_DEFUNC_UNIMPLEMENTED_OPER (resetfile); -HG_DEFUNC_UNIMPLEMENTED_OPER (restore); -HG_DEFUNC_UNIMPLEMENTED_OPER (reversepath); -HG_DEFUNC_UNIMPLEMENTED_OPER (rlineto); -HG_DEFUNC_UNIMPLEMENTED_OPER (rmoveto); -HG_DEFUNC_UNIMPLEMENTED_OPER (roll); -HG_DEFUNC_UNIMPLEMENTED_OPER (rotate); -HG_DEFUNC_UNIMPLEMENTED_OPER (round); -HG_DEFUNC_UNIMPLEMENTED_OPER (rrand); -HG_DEFUNC_UNIMPLEMENTED_OPER (save); -HG_DEFUNC_UNIMPLEMENTED_OPER (scale); -HG_DEFUNC_UNIMPLEMENTED_OPER (scalefont); -HG_DEFUNC_UNIMPLEMENTED_OPER (search); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcachedevice); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcachelimit); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcharwidth); -HG_DEFUNC_UNIMPLEMENTED_OPER (setdash); -HG_DEFUNC_UNIMPLEMENTED_OPER (setflat); -HG_DEFUNC_UNIMPLEMENTED_OPER (setfont); -HG_DEFUNC_UNIMPLEMENTED_OPER (setgray); -HG_DEFUNC_UNIMPLEMENTED_OPER (sethsbcolor); -HG_DEFUNC_UNIMPLEMENTED_OPER (setlinecap); -HG_DEFUNC_UNIMPLEMENTED_OPER (setlinejoin); -HG_DEFUNC_UNIMPLEMENTED_OPER (setlinewidth); -HG_DEFUNC_UNIMPLEMENTED_OPER (setmatrix); -HG_DEFUNC_UNIMPLEMENTED_OPER (setmiterlimit); -HG_DEFUNC_UNIMPLEMENTED_OPER (setrgbcolor); -HG_DEFUNC_UNIMPLEMENTED_OPER (setscreen); -HG_DEFUNC_UNIMPLEMENTED_OPER (settransfer); -HG_DEFUNC_UNIMPLEMENTED_OPER (show); -HG_DEFUNC_UNIMPLEMENTED_OPER (showpage); -HG_DEFUNC_UNIMPLEMENTED_OPER (sin); -HG_DEFUNC_UNIMPLEMENTED_OPER (sqrt); -HG_DEFUNC_UNIMPLEMENTED_OPER (srand); -HG_DEFUNC_UNIMPLEMENTED_OPER (status); -HG_DEFUNC_UNIMPLEMENTED_OPER (stop); -HG_DEFUNC_UNIMPLEMENTED_OPER (stopped); -HG_DEFUNC_UNIMPLEMENTED_OPER (string); -HG_DEFUNC_UNIMPLEMENTED_OPER (stringwidth); -HG_DEFUNC_UNIMPLEMENTED_OPER (stroke); -HG_DEFUNC_UNIMPLEMENTED_OPER (strokepath); -HG_DEFUNC_UNIMPLEMENTED_OPER (sub); -HG_DEFUNC_UNIMPLEMENTED_OPER (token); -HG_DEFUNC_UNIMPLEMENTED_OPER (transform); -HG_DEFUNC_UNIMPLEMENTED_OPER (translate); -HG_DEFUNC_UNIMPLEMENTED_OPER (truncate); -HG_DEFUNC_UNIMPLEMENTED_OPER (type); -HG_DEFUNC_UNIMPLEMENTED_OPER (usertime); -HG_DEFUNC_UNIMPLEMENTED_OPER (vmstatus); -HG_DEFUNC_UNIMPLEMENTED_OPER (wcheck); -HG_DEFUNC_UNIMPLEMENTED_OPER (where); -HG_DEFUNC_UNIMPLEMENTED_OPER (widthshow); -HG_DEFUNC_UNIMPLEMENTED_OPER (write); -HG_DEFUNC_UNIMPLEMENTED_OPER (writehexstring); -HG_DEFUNC_UNIMPLEMENTED_OPER (writestring); -HG_DEFUNC_UNIMPLEMENTED_OPER (xcheck); -HG_DEFUNC_UNIMPLEMENTED_OPER (xor); - -HG_DEFUNC_UNIMPLEMENTED_OPER (arct); -HG_DEFUNC_UNIMPLEMENTED_OPER (colorimage); -HG_DEFUNC_UNIMPLEMENTED_OPER (cshow); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentblackgeneration); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentcacheparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentcmykcolor); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentcolor); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentcolorrendering); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentcolorscreen); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentcolorspace); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentcolortransfer); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentdevparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentgstate); -HG_DEFUNC_UNIMPLEMENTED_OPER (currenthalftone); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentobjectformat); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentoverprint); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentpacking); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentpagedevice); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentshared); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentstrokeadjust); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentsystemparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentundercolorremoval); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentuserparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (defineresource); -HG_DEFUNC_UNIMPLEMENTED_OPER (defineuserobject); -HG_DEFUNC_UNIMPLEMENTED_OPER (deletefile); -HG_DEFUNC_UNIMPLEMENTED_OPER (execform); -HG_DEFUNC_UNIMPLEMENTED_OPER (execuserobject); -HG_DEFUNC_UNIMPLEMENTED_OPER (filenameforall); -HG_DEFUNC_UNIMPLEMENTED_OPER (fileposition); -HG_DEFUNC_UNIMPLEMENTED_OPER (filter); -HG_DEFUNC_UNIMPLEMENTED_OPER (findencoding); -HG_DEFUNC_UNIMPLEMENTED_OPER (findresource); -HG_DEFUNC_UNIMPLEMENTED_OPER (gcheck); -HG_DEFUNC_UNIMPLEMENTED_OPER (GlobalFontDirectory); -HG_DEFUNC_UNIMPLEMENTED_OPER (glyphshow); -HG_DEFUNC_UNIMPLEMENTED_OPER (gstate); -HG_DEFUNC_UNIMPLEMENTED_OPER (ineofill); -HG_DEFUNC_UNIMPLEMENTED_OPER (infill); -HG_DEFUNC_UNIMPLEMENTED_OPER (instroke); -HG_DEFUNC_UNIMPLEMENTED_OPER (inueofill); -HG_DEFUNC_UNIMPLEMENTED_OPER (inufill); -HG_DEFUNC_UNIMPLEMENTED_OPER (inustroke); -HG_DEFUNC_UNIMPLEMENTED_OPER (ISOLatin1Encoding); -HG_DEFUNC_UNIMPLEMENTED_OPER (languagelevel); -HG_DEFUNC_UNIMPLEMENTED_OPER (makepattern); -HG_DEFUNC_UNIMPLEMENTED_OPER (packedarray); -HG_DEFUNC_UNIMPLEMENTED_OPER (printobject); -HG_DEFUNC_UNIMPLEMENTED_OPER (realtime); -HG_DEFUNC_UNIMPLEMENTED_OPER (rectclip); -HG_DEFUNC_UNIMPLEMENTED_OPER (rectfill); -HG_DEFUNC_UNIMPLEMENTED_OPER (rectstroke); -HG_DEFUNC_UNIMPLEMENTED_OPER (renamefile); -HG_DEFUNC_UNIMPLEMENTED_OPER (resourceforall); -HG_DEFUNC_UNIMPLEMENTED_OPER (resourcestatus); -HG_DEFUNC_UNIMPLEMENTED_OPER (rootfont); -HG_DEFUNC_UNIMPLEMENTED_OPER (scheck); -HG_DEFUNC_UNIMPLEMENTED_OPER (selectfont); -HG_DEFUNC_UNIMPLEMENTED_OPER (serialnumber); -HG_DEFUNC_UNIMPLEMENTED_OPER (setbbox); -HG_DEFUNC_UNIMPLEMENTED_OPER (setblackgeneration); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcachedevice2); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcacheparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcmykcolor); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcolor); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcolorrendering); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcolorscreen); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcolorspace); -HG_DEFUNC_UNIMPLEMENTED_OPER (setcolortransfer); -HG_DEFUNC_UNIMPLEMENTED_OPER (setdevparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (setfileposition); -HG_DEFUNC_UNIMPLEMENTED_OPER (setgstate); -HG_DEFUNC_UNIMPLEMENTED_OPER (sethalftone); -HG_DEFUNC_UNIMPLEMENTED_OPER (setobjectformat); -HG_DEFUNC_UNIMPLEMENTED_OPER (setoverprint); -HG_DEFUNC_UNIMPLEMENTED_OPER (setpacking); -HG_DEFUNC_UNIMPLEMENTED_OPER (setpagedevice); -HG_DEFUNC_UNIMPLEMENTED_OPER (setpattern); -HG_DEFUNC_UNIMPLEMENTED_OPER (setshared); -HG_DEFUNC_UNIMPLEMENTED_OPER (setstrokeadjust); -HG_DEFUNC_UNIMPLEMENTED_OPER (setsystemparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (setucacheparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (setundercolorremoval); -HG_DEFUNC_UNIMPLEMENTED_OPER (setuserparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (setvmthreshold); -HG_DEFUNC_UNIMPLEMENTED_OPER (shareddict); -HG_DEFUNC_UNIMPLEMENTED_OPER (SharedFontDirectory); -HG_DEFUNC_UNIMPLEMENTED_OPER (startjob); -HG_DEFUNC_UNIMPLEMENTED_OPER (uappend); -HG_DEFUNC_UNIMPLEMENTED_OPER (ucache); -HG_DEFUNC_UNIMPLEMENTED_OPER (ucachestatus); -HG_DEFUNC_UNIMPLEMENTED_OPER (ueofill); -HG_DEFUNC_UNIMPLEMENTED_OPER (ufill); -HG_DEFUNC_UNIMPLEMENTED_OPER (undef); -HG_DEFUNC_UNIMPLEMENTED_OPER (undefineresource); -HG_DEFUNC_UNIMPLEMENTED_OPER (undefineuserobject); -HG_DEFUNC_UNIMPLEMENTED_OPER (upath); -HG_DEFUNC_UNIMPLEMENTED_OPER (UserObjects); -HG_DEFUNC_UNIMPLEMENTED_OPER (ustroke); -HG_DEFUNC_UNIMPLEMENTED_OPER (ustrokepath); -HG_DEFUNC_UNIMPLEMENTED_OPER (vmreclaim); -HG_DEFUNC_UNIMPLEMENTED_OPER (writeobject); -HG_DEFUNC_UNIMPLEMENTED_OPER (xshow); -HG_DEFUNC_UNIMPLEMENTED_OPER (xyshow); -HG_DEFUNC_UNIMPLEMENTED_OPER (yshow); - -HG_DEFUNC_UNIMPLEMENTED_OPER (addglyph); -HG_DEFUNC_UNIMPLEMENTED_OPER (beginbfchar); -HG_DEFUNC_UNIMPLEMENTED_OPER (beginbfrange); -HG_DEFUNC_UNIMPLEMENTED_OPER (begincidchar); -HG_DEFUNC_UNIMPLEMENTED_OPER (begincidrange); -HG_DEFUNC_UNIMPLEMENTED_OPER (begincmap); -HG_DEFUNC_UNIMPLEMENTED_OPER (begincodespacerange); -HG_DEFUNC_UNIMPLEMENTED_OPER (beginnotdefchar); -HG_DEFUNC_UNIMPLEMENTED_OPER (beginnotdefrange); -HG_DEFUNC_UNIMPLEMENTED_OPER (beginrearrangedfont); -HG_DEFUNC_UNIMPLEMENTED_OPER (beginusematrix); -HG_DEFUNC_UNIMPLEMENTED_OPER (cliprestore); -HG_DEFUNC_UNIMPLEMENTED_OPER (clipsave); -HG_DEFUNC_UNIMPLEMENTED_OPER (composefont); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentsmoothness); -HG_DEFUNC_UNIMPLEMENTED_OPER (currentrapparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (endbfchar); -HG_DEFUNC_UNIMPLEMENTED_OPER (endbfrange); -HG_DEFUNC_UNIMPLEMENTED_OPER (endcidchar); -HG_DEFUNC_UNIMPLEMENTED_OPER (endcidrange); -HG_DEFUNC_UNIMPLEMENTED_OPER (endcmap); -HG_DEFUNC_UNIMPLEMENTED_OPER (endcodespacerange); -HG_DEFUNC_UNIMPLEMENTED_OPER (endnotdefchar); -HG_DEFUNC_UNIMPLEMENTED_OPER (endnotdefrange); -HG_DEFUNC_UNIMPLEMENTED_OPER (endrearrangedfont); -HG_DEFUNC_UNIMPLEMENTED_OPER (endusematrix); -HG_DEFUNC_UNIMPLEMENTED_OPER (findcolorrendering); -HG_DEFUNC_UNIMPLEMENTED_OPER (gethalftonename); -HG_DEFUNC_UNIMPLEMENTED_OPER (getpagedevicename); -HG_DEFUNC_UNIMPLEMENTED_OPER (getsubstitutecrd); -HG_DEFUNC_UNIMPLEMENTED_OPER (removeall); -HG_DEFUNC_UNIMPLEMENTED_OPER (removeglyphs); -HG_DEFUNC_UNIMPLEMENTED_OPER (setsmoothness); -HG_DEFUNC_UNIMPLEMENTED_OPER (settrapparams); -HG_DEFUNC_UNIMPLEMENTED_OPER (settrapzone); -HG_DEFUNC_UNIMPLEMENTED_OPER (shfill); -HG_DEFUNC_UNIMPLEMENTED_OPER (startdata); -HG_DEFUNC_UNIMPLEMENTED_OPER (usecmap); -HG_DEFUNC_UNIMPLEMENTED_OPER (usefont); - -/* - * public functions - */ -hg_object_t * -hg_object_operator_new(hg_vm_t *vm, - hg_system_encoding_t enc, - hg_operator_func_t func) -{ - hg_object_t *retval; - gint16 length; - hg_operatordata_t *data; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (__hg_system_encoding_names[enc] != NULL, NULL); - - length = strlen(__hg_system_encoding_names[enc]); - retval = hg_object_sized_new(vm, hg_n_alignof (sizeof (hg_operatordata_t) + sizeof (gchar) * (length + 1))); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_OPERATOR; - HG_OBJECT_OPERATOR (retval)->length = length; - data = HG_OBJECT_OPERATOR_DATA (retval); - data->func = func; - memcpy(data->name, __hg_system_encoding_names[enc], length); - } - - return retval; -} - -hg_object_t * -hg_object_operator_new_with_custom(hg_vm_t *vm, - gchar *name, - hg_operator_func_t func) -{ - hg_object_t *retval; - gint16 length; - hg_operatordata_t *data; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (name != NULL, NULL); - - length = strlen(name); - retval = hg_object_sized_new(vm, hg_n_alignof (sizeof (hg_operatordata_t) + sizeof (gchar) * (length + 1))); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_OPERATOR; - HG_OBJECT_OPERATOR (retval)->length = length; - data = HG_OBJECT_OPERATOR_DATA (retval); - data->func = func; - memcpy(data->name, name, length); - } - - return retval; -} - -gboolean -hg_object_operator_initialize(hg_vm_t *vm, - hg_emulationtype_t level) -{ - gboolean retval = TRUE; - hg_emulationtype_t current; - - hg_return_val_if_fail (vm != NULL, FALSE); - hg_return_val_if_fail (level < HG_EMU_END, FALSE); - - /* just set a flag to lock up */ - __hg_operator_initialized = TRUE; - - current = hg_vm_get_emulation_level(vm); - if (level >= HG_EMU_PS_LEVEL_1 && current < level) { - _hg_object_operator_priv_build(vm, %arraytomark, private_arraytomark); - _hg_object_operator_priv_build(vm, %dicttomark, private_dicttomark); - _hg_object_operator_priv_build(vm, %for_pos_int_continue, private_for_pos_int_continue); - _hg_object_operator_priv_build(vm, %for_pos_real_continue, private_for_pos_real_continue); - _hg_object_operator_priv_build(vm, %forall_array_continue, private_forall_array_continue); - _hg_object_operator_priv_build(vm, %forall_dict_continue, private_forall_dict_continue); - _hg_object_operator_priv_build(vm, %forall_string_continue, private_forall_string_continue); - _hg_object_operator_priv_build(vm, %loop_continue, private_loop_continue); - _hg_object_operator_priv_build(vm, %repeat_continue, private_repeat_continue); - _hg_object_operator_priv_build(vm, %stopped_continue, private_stopped_continue); - _hg_object_operator_priv_build(vm, .findfont, private_findfont); - _hg_object_operator_priv_build(vm, .definefont, private_definefont); - _hg_object_operator_priv_build(vm, .stringcvs, private_stringcvs); - _hg_object_operator_priv_build(vm, .undefinefont, private_undefinefont); - _hg_object_operator_priv_build(vm, .write==only, private_write_eqeq_only); - _hg_object_operator_build(vm, abs, abs); - _hg_object_operator_build(vm, add, add); - _hg_object_operator_build(vm, aload, aload); - _hg_object_operator_build(vm, and, and); - _hg_object_operator_build(vm, arc, arc); - _hg_object_operator_build(vm, arcn, arcn); - _hg_object_operator_build(vm, arcto, arcto); - _hg_object_operator_build(vm, array, array); - _hg_object_operator_build(vm, ashow, ashow); - _hg_object_operator_build(vm, astore, astore); - _hg_object_operator_build(vm, atan, atan); - _hg_object_operator_build(vm, awidthshow, awidthshow); - _hg_object_operator_build(vm, begin, begin); - _hg_object_operator_build(vm, bind, bind); - _hg_object_operator_build(vm, bitshift, bitshift); - _hg_object_operator_build(vm, bytesavailable, bytesavailable); - _hg_object_operator_build(vm, cachestatus, cachestatus); - _hg_object_operator_build(vm, ceiling, ceiling); - _hg_object_operator_build(vm, charpath, charpath); - _hg_object_operator_build(vm, clear, clear); - _hg_object_operator_build(vm, cleardictstack, cleardictstack); - _hg_object_operator_build(vm, cleartomark, cleartomark); - _hg_object_operator_build(vm, clip, clip); - _hg_object_operator_build(vm, clippath, clippath); - _hg_object_operator_build(vm, closefile, closefile); - _hg_object_operator_build(vm, closepath, closepath); - _hg_object_operator_build(vm, concat, concat); - _hg_object_operator_build(vm, concatmatrix, concatmatrix); - _hg_object_operator_build(vm, copy, copy); - _hg_object_operator_build(vm, copypage, copypage); - _hg_object_operator_build(vm, cos, cos); - _hg_object_operator_build(vm, count, count); - _hg_object_operator_build(vm, countdictstack, countdictstack); - _hg_object_operator_build(vm, countexecstack, countexecstack); - _hg_object_operator_build(vm, counttomark, counttomark); - _hg_object_operator_build(vm, currentdash, currentdash); - _hg_object_operator_build(vm, currentdict, currentdict); - _hg_object_operator_build(vm, currentfile, currentfile); - _hg_object_operator_build(vm, currentflat, currentflat); - _hg_object_operator_build(vm, currentfont, currentfont); - _hg_object_operator_build(vm, currentgray, currentgray); - _hg_object_operator_build(vm, currenthsbcolor, currenthsbcolor); - _hg_object_operator_build(vm, currentlinecap, currentlinecap); - _hg_object_operator_build(vm, currentlinejoin, currentlinejoin); - _hg_object_operator_build(vm, currentlinewidth, currentlinewidth); - _hg_object_operator_build(vm, currentmatrix, currentmatrix); - _hg_object_operator_build(vm, currentmiterlimit, currentmiterlimit); - _hg_object_operator_build(vm, currentpoint, currentpoint); - _hg_object_operator_build(vm, currentrgbcolor, currentrgbcolor); - _hg_object_operator_build(vm, currentscreen, currentscreen); - _hg_object_operator_build(vm, currenttransfer, currenttransfer); - _hg_object_operator_build(vm, curveto, curveto); - _hg_object_operator_build(vm, cvi, cvi); - _hg_object_operator_build(vm, cvlit, cvlit); - _hg_object_operator_build(vm, cvn, cvn); - _hg_object_operator_build(vm, cvr, cvr); - _hg_object_operator_build(vm, cvrs, cvrs); - _hg_object_operator_build(vm, cvx, cvx); - _hg_object_operator_build(vm, def, def); - _hg_object_operator_build(vm, defaultmatrix, defaultmatrix); - _hg_object_operator_build(vm, dict, dict); - _hg_object_operator_build(vm, dictstack, dictstack); - _hg_object_operator_build(vm, div, div); - _hg_object_operator_build(vm, dtransform, dtransform); - _hg_object_operator_build(vm, dup, dup); - _hg_object_operator_build(vm, echo, echo); - _hg_object_operator_priv_build(vm, eexec, eexec); - _hg_object_operator_build(vm, end, end); - _hg_object_operator_build(vm, eoclip, eoclip); - _hg_object_operator_build(vm, eofill, eofill); - _hg_object_operator_build(vm, eq, eq); - _hg_object_operator_build(vm, erasepage, erasepage); - _hg_object_operator_build(vm, exch, exch); - _hg_object_operator_build(vm, exec, exec); - _hg_object_operator_build(vm, execstack, execstack); - _hg_object_operator_build(vm, executeonly, executeonly); - _hg_object_operator_build(vm, exit, exit); - _hg_object_operator_build(vm, exp, exp); - _hg_object_operator_build(vm, file, file); - _hg_object_operator_build(vm, fill, fill); - _hg_object_operator_build(vm, flattenpath, flattenpath); - _hg_object_operator_build(vm, flush, flush); - _hg_object_operator_build(vm, flushfile, flushfile); - _hg_object_operator_build(vm, FontDirectory, fontdirectory); - _hg_object_operator_build(vm, for, for); - _hg_object_operator_build(vm, forall, forall); - _hg_object_operator_build(vm, ge, ge); - _hg_object_operator_build(vm, get, get); - _hg_object_operator_build(vm, getinterval, getinterval); - _hg_object_operator_build(vm, grestore, grestore); - _hg_object_operator_build(vm, grestoreall, grestoreall); - _hg_object_operator_build(vm, gsave, gsave); - _hg_object_operator_build(vm, gt, gt); - _hg_object_operator_build(vm, identmatrix, identmatrix); - _hg_object_operator_build(vm, idiv, idiv); - _hg_object_operator_build(vm, idtransform, idtransform); - _hg_object_operator_build(vm, if, if); - _hg_object_operator_build(vm, ifelse, ifelse); - _hg_object_operator_build(vm, image, image); - _hg_object_operator_build(vm, imagemask, imagemask); - _hg_object_operator_build(vm, index, index); - _hg_object_operator_build(vm, initclip, initclip); - _hg_object_operator_build(vm, initgraphics, initgraphics); - _hg_object_operator_build(vm, initmatrix, initmatrix); - _hg_object_operator_priv_build(vm, internaldict, internaldict); - _hg_object_operator_build(vm, invertmatrix, invertmatrix); - _hg_object_operator_build(vm, itransform, itransform); - _hg_object_operator_build(vm, known, known); - _hg_object_operator_build(vm, kshow, kshow); - _hg_object_operator_build(vm, le, le); - _hg_object_operator_build(vm, length, length); - _hg_object_operator_build(vm, lineto, lineto); - _hg_object_operator_build(vm, ln, ln); - _hg_object_operator_build(vm, log, log); - _hg_object_operator_build(vm, loop, loop); - _hg_object_operator_build(vm, lt, lt); - _hg_object_operator_build(vm, makefont, makefont); - _hg_object_operator_build(vm, maxlength, maxlength); - _hg_object_operator_build(vm, mod, mod); - _hg_object_operator_build(vm, moveto, moveto); - _hg_object_operator_build(vm, mul, mul); - _hg_object_operator_build(vm, ne, ne); - _hg_object_operator_build(vm, neg, neg); - _hg_object_operator_build(vm, newpath, newpath); - _hg_object_operator_build(vm, noaccess, noaccess); - _hg_object_operator_build(vm, not, not); - _hg_object_operator_build(vm, nulldevice, nulldevice); - _hg_object_operator_build(vm, or, or); - _hg_object_operator_build(vm, pathbbox, pathbbox); - _hg_object_operator_build(vm, pathforall, pathforall); - _hg_object_operator_build(vm, pop, pop); - _hg_object_operator_build(vm, print, print); - _hg_object_operator_build(vm, put, put); - _hg_object_operator_build(vm, rand, rand); - _hg_object_operator_build(vm, rcheck, rcheck); - _hg_object_operator_build(vm, rcurveto, rcurveto); - _hg_object_operator_build(vm, read, read); - _hg_object_operator_build(vm, readhexstring, readhexstring); - _hg_object_operator_build(vm, readline, readline); - _hg_object_operator_build(vm, readonly, readonly); - _hg_object_operator_build(vm, readstring, readstring); - _hg_object_operator_build(vm, repeat, repeat); - _hg_object_operator_build(vm, resetfile, resetfile); - _hg_object_operator_build(vm, restore, restore); - _hg_object_operator_build(vm, reversepath, reversepath); - _hg_object_operator_build(vm, rlineto, rlineto); - _hg_object_operator_build(vm, rmoveto, rmoveto); - _hg_object_operator_build(vm, roll, roll); - _hg_object_operator_build(vm, rotate, rotate); - _hg_object_operator_build(vm, round, round); - _hg_object_operator_build(vm, rrand, rrand); - _hg_object_operator_build(vm, save, save); - _hg_object_operator_build(vm, scale, scale); - _hg_object_operator_build(vm, scalefont, scalefont); - _hg_object_operator_build(vm, search, search); - _hg_object_operator_build(vm, setcachedevice, setcachedevice); - _hg_object_operator_build(vm, setcachelimit, setcachelimit); - _hg_object_operator_build(vm, setcharwidth, setcharwidth); - _hg_object_operator_build(vm, setdash, setdash); - _hg_object_operator_build(vm, setflat, setflat); - _hg_object_operator_build(vm, setfont, setfont); - _hg_object_operator_build(vm, setgray, setgray); - _hg_object_operator_build(vm, sethsbcolor, sethsbcolor); - _hg_object_operator_build(vm, setlinecap, setlinecap); - _hg_object_operator_build(vm, setlinejoin, setlinejoin); - _hg_object_operator_build(vm, setlinewidth, setlinewidth); - _hg_object_operator_build(vm, setmatrix, setmatrix); - _hg_object_operator_build(vm, setmiterlimit, setmiterlimit); - _hg_object_operator_build(vm, setrgbcolor, setrgbcolor); - _hg_object_operator_build(vm, setscreen, setscreen); - _hg_object_operator_build(vm, settransfer, settransfer); - _hg_object_operator_build(vm, show, show); - _hg_object_operator_build(vm, showpage, showpage); - _hg_object_operator_build(vm, sin, sin); - _hg_object_operator_build(vm, sqrt, sqrt); - _hg_object_operator_build(vm, srand, srand); - _hg_object_operator_build(vm, status, status); - _hg_object_operator_build(vm, stop, stop); - _hg_object_operator_build(vm, stopped, stopped); - _hg_object_operator_build(vm, string, string); - _hg_object_operator_build(vm, stringwidth, stringwidth); - _hg_object_operator_build(vm, stroke, stroke); - _hg_object_operator_build(vm, strokepath, strokepath); - _hg_object_operator_build(vm, sub, sub); - _hg_object_operator_build(vm, token, token); - _hg_object_operator_build(vm, transform, transform); - _hg_object_operator_build(vm, translate, translate); - _hg_object_operator_build(vm, truncate, truncate); - _hg_object_operator_build(vm, type, type); - _hg_object_operator_build(vm, usertime, usertime); - _hg_object_operator_build(vm, vmstatus, vmstatus); - _hg_object_operator_build(vm, wcheck, wcheck); - _hg_object_operator_build(vm, where, where); - _hg_object_operator_build(vm, widthshow, widthshow); - _hg_object_operator_build(vm, write, write); - _hg_object_operator_build(vm, writehexstring, writehexstring); - _hg_object_operator_build(vm, writestring, writestring); - _hg_object_operator_build(vm, xcheck, xcheck); - _hg_object_operator_build(vm, xor, xor); - } - - if (level >= HG_EMU_PS_LEVEL_2 && current < level) { - _hg_object_operator_build(vm, arct, arct); - _hg_object_operator_build(vm, colorimage, colorimage); - _hg_object_operator_build(vm, cshow, cshow); - _hg_object_operator_build(vm, currentblackgeneration, currentblackgeneration); - _hg_object_operator_build(vm, currentcacheparams, currentcacheparams); - _hg_object_operator_build(vm, currentcmykcolor, currentcmykcolor); - _hg_object_operator_build(vm, currentcolor, currentcolor); - _hg_object_operator_build(vm, currentcolorrendering, currentcolorrendering); - _hg_object_operator_build(vm, currentcolorscreen, currentcolorscreen); - _hg_object_operator_build(vm, currentcolorspace, currentcolorspace); - _hg_object_operator_build(vm, currentcolortransfer, currentcolortransfer); - _hg_object_operator_build(vm, currentdevparams, currentdevparams); - _hg_object_operator_build(vm, currentgstate, currentgstate); - _hg_object_operator_build(vm, currenthalftone, currenthalftone); - _hg_object_operator_build(vm, currentobjectformat, currentobjectformat); - _hg_object_operator_build(vm, currentoverprint, currentoverprint); - _hg_object_operator_build(vm, currentpacking, currentpacking); - _hg_object_operator_build(vm, currentpagedevice, currentpagedevice); - _hg_object_operator_build(vm, currentshared, currentshared); - _hg_object_operator_build(vm, currentstrokeadjust, currentstrokeadjust); - _hg_object_operator_build(vm, currentsystemparams, currentsystemparams); - _hg_object_operator_build(vm, currentundercolorremoval, currentundercolorremoval); - _hg_object_operator_build(vm, currentuserparams, currentuserparams); - _hg_object_operator_build(vm, defineresource, defineresource); - _hg_object_operator_build(vm, defineuserobject, defineuserobject); - _hg_object_operator_build(vm, deletefile, deletefile); - _hg_object_operator_build(vm, execform, execform); - _hg_object_operator_build(vm, execuserobject, execuserobject); - _hg_object_operator_build(vm, filenameforall, filenameforall); - _hg_object_operator_build(vm, fileposition, fileposition); - _hg_object_operator_build(vm, filter, filter); - _hg_object_operator_build(vm, findencoding, findencoding); - _hg_object_operator_build(vm, findresource, findresource); - _hg_object_operator_build(vm, gcheck, gcheck); - _hg_object_operator_build(vm, GlobalFontDirectory, globalfontdirectory); - _hg_object_operator_build(vm, glyphshow, glyphshow); - _hg_object_operator_build(vm, gstate, gstate); - _hg_object_operator_build(vm, ineofill, ineofill); - _hg_object_operator_build(vm, infill, infill); - _hg_object_operator_build(vm, instroke, instroke); - _hg_object_operator_build(vm, inueofill, inueofill); - _hg_object_operator_build(vm, inufill, inufill); - _hg_object_operator_build(vm, inustroke, inustroke); - _hg_object_operator_build(vm, ISOLatin1Encoding, isolatin1encoding); - _hg_object_operator_build(vm, languagelevel, languagelevel); - _hg_object_operator_build(vm, makepattern, makepattern); - _hg_object_operator_build(vm, packedarray, packedarray); - _hg_object_operator_build(vm, printobject, printobject); - _hg_object_operator_build(vm, realtime, realtime); - _hg_object_operator_build(vm, rectclip, rectclip); - _hg_object_operator_build(vm, rectfill, rectfill); - _hg_object_operator_build(vm, rectstroke, rectstroke); - _hg_object_operator_build(vm, renamefile, renamefile); - _hg_object_operator_build(vm, resourceforall, resourceforall); - _hg_object_operator_build(vm, resourcestatus, resourcestatus); - _hg_object_operator_build(vm, rootfont, rootfont); - _hg_object_operator_build(vm, scheck, scheck); - _hg_object_operator_build(vm, selectfont, selectfont); - _hg_object_operator_build(vm, serialnumber, serialnumber); - _hg_object_operator_build(vm, setbbox, setbbox); - _hg_object_operator_build(vm, setblackgeneration, setblackgeneration); - _hg_object_operator_build(vm, setcachedevice2, setcachedevice2); - _hg_object_operator_build(vm, setcacheparams, setcacheparams); - _hg_object_operator_build(vm, setcmykcolor, setcmykcolor); - _hg_object_operator_build(vm, setcolor, setcolor); - _hg_object_operator_build(vm, setcolorrendering, setcolorrendering); - _hg_object_operator_build(vm, setcolorscreen, setcolorscreen); - _hg_object_operator_build(vm, setcolorspace, setcolorspace); - _hg_object_operator_build(vm, setcolortransfer, setcolortransfer); - _hg_object_operator_build(vm, setdevparams, setdevparams); - _hg_object_operator_build(vm, setfileposition, setfileposition); - _hg_object_operator_build(vm, setgstate, setgstate); - _hg_object_operator_build(vm, sethalftone, sethalftone); - _hg_object_operator_build(vm, setobjectformat, setobjectformat); - _hg_object_operator_build(vm, setoverprint, setoverprint); - _hg_object_operator_build(vm, setpacking, setpacking); - _hg_object_operator_build(vm, setpagedevice, setpagedevice); - _hg_object_operator_build(vm, setpattern, setpattern); - _hg_object_operator_build(vm, setshared, setshared); - _hg_object_operator_build(vm, setstrokeadjust, setstrokeadjust); - _hg_object_operator_build(vm, setsystemparams, setsystemparams); - _hg_object_operator_build(vm, setucacheparams, setucacheparams); - _hg_object_operator_build(vm, setundercolorremoval, setundercoloremoval); - _hg_object_operator_build(vm, setuserparams, setuserparams); - _hg_object_operator_build(vm, setvmthreshold, setvmthreshold); - _hg_object_operator_build(vm, shareddict, shareddict); - _hg_object_operator_build(vm, SharedFontDirectory, sharedfontdirectory); - _hg_object_operator_build(vm, startjob, startjob); - _hg_object_operator_build(vm, uappend, uappend); - _hg_object_operator_build(vm, ucache, ucache); - _hg_object_operator_build(vm, ucachestatus, ucachestatus); - _hg_object_operator_build(vm, ueofill, ueofill); - _hg_object_operator_build(vm, ufill, ufill); - _hg_object_operator_build(vm, undef, undef); - _hg_object_operator_build(vm, undefineresource, undefineresource); - _hg_object_operator_build(vm, undefineuserobject, undefineuserobject); - _hg_object_operator_build(vm, upath, upath); - _hg_object_operator_build(vm, UserObjects, userobjects); - _hg_object_operator_build(vm, ustroke, ustroke); - _hg_object_operator_build(vm, ustrokepath, ustrokepath); - _hg_object_operator_build(vm, vmreclaim, vmreclaim); - _hg_object_operator_build(vm, writeobject, writeobject); - _hg_object_operator_build(vm, xshow, xshow); - _hg_object_operator_build(vm, xyshow, xyshow); - _hg_object_operator_build(vm, yshow, yshow); - } - - if (level >= HG_EMU_PS_LEVEL_3 && current < level) { - _hg_object_operator_priv_build(vm, addglyph, addglyph); - _hg_object_operator_priv_build(vm, beginbfchar, beginbfchar); - _hg_object_operator_priv_build(vm, beginbfrange, beginbfrange); - _hg_object_operator_priv_build(vm, begincidchar, begincidchar); - _hg_object_operator_priv_build(vm, begincidrange, begincidrange); - _hg_object_operator_priv_build(vm, begincmap, begincmap); - _hg_object_operator_priv_build(vm, begincodespacerange, begincodespacerange); - _hg_object_operator_priv_build(vm, beginnotdefchar, beginnotdefchar); - _hg_object_operator_priv_build(vm, beginnotdefrange, beginnotdefrange); - _hg_object_operator_priv_build(vm, beginrearrangedfont, beginrearrangedfont); - _hg_object_operator_priv_build(vm, beginusematrix, beginusematrix); - _hg_object_operator_priv_build(vm, cliprestore, cliprestore); - _hg_object_operator_priv_build(vm, clipsave, clipsave); - _hg_object_operator_priv_build(vm, composefont, composefont); - _hg_object_operator_priv_build(vm, currentsmoothness, currentsmoothness); - _hg_object_operator_priv_build(vm, currentrapparams, currentrapparams); - _hg_object_operator_priv_build(vm, endbfchar, endbfchar); - _hg_object_operator_priv_build(vm, endbfrange, endbfrange); - _hg_object_operator_priv_build(vm, endcidchar, endcidchar); - _hg_object_operator_priv_build(vm, endcidrange, endcidrange); - _hg_object_operator_priv_build(vm, endcmap, endcmap); - _hg_object_operator_priv_build(vm, endcodespacerange, endcodespacerange); - _hg_object_operator_priv_build(vm, endnotdefchar, endnotdefchar); - _hg_object_operator_priv_build(vm, endnotdefrange, endnotdefrange); - _hg_object_operator_priv_build(vm, endrearrangedfont, endrearrangedfont); - _hg_object_operator_priv_build(vm, endusematrix, endusematrix); - _hg_object_operator_priv_build(vm, findcolorrendering, findcolorrendering); - _hg_object_operator_priv_build(vm, GetHalftoneName, gethalftonename); - _hg_object_operator_priv_build(vm, GetPageDeviceName, getpagedevicename); - _hg_object_operator_priv_build(vm, GetSubstituteCRD, getsubstitutecrd); - _hg_object_operator_priv_build(vm, removeall, removeall); - _hg_object_operator_priv_build(vm, removeglyphs, removeglyphs); - _hg_object_operator_priv_build(vm, setsmoothness, setsmoothness); - _hg_object_operator_priv_build(vm, settrapparams, settrapparams); - _hg_object_operator_priv_build(vm, settrapzone, settrapzone); - _hg_object_operator_priv_build(vm, shfill, shfill); - _hg_object_operator_priv_build(vm, StartData, startdata); - _hg_object_operator_priv_build(vm, usecmap, usecmap); - _hg_object_operator_priv_build(vm, usefont, usefont); - } - - /* reflect to the result */ - __hg_operator_initialized = retval; - - return retval; -} - -gboolean -hg_object_operator_finalize(hg_vm_t *vm, - hg_emulationtype_t level) -{ - gboolean retval = TRUE; - - hg_return_val_if_fail (vm != NULL, FALSE); - hg_return_val_if_fail (__hg_operator_initialized, FALSE); - hg_return_val_if_fail (level < HG_EMU_END, FALSE); - - if (level < HG_EMU_PS_LEVEL_3) { - _hg_object_operator_unbuild(vm, addglyph); - _hg_object_operator_unbuild(vm, beginbfchar); - _hg_object_operator_unbuild(vm, beginbfrange); - _hg_object_operator_unbuild(vm, begincidchar); - _hg_object_operator_unbuild(vm, begincidrange); - _hg_object_operator_unbuild(vm, begincmap); - _hg_object_operator_unbuild(vm, begincodespacerange); - _hg_object_operator_unbuild(vm, beginnotdefchar); - _hg_object_operator_unbuild(vm, beginnotdefrange); - _hg_object_operator_unbuild(vm, beginrearrangedfont); - _hg_object_operator_unbuild(vm, beginusematrix); - _hg_object_operator_unbuild(vm, cliprestore); - _hg_object_operator_unbuild(vm, clipsave); - _hg_object_operator_unbuild(vm, composefont); - _hg_object_operator_unbuild(vm, currentsmoothness); - _hg_object_operator_unbuild(vm, currentrapparams); - _hg_object_operator_unbuild(vm, endbfchar); - _hg_object_operator_unbuild(vm, endbfrange); - _hg_object_operator_unbuild(vm, endcidchar); - _hg_object_operator_unbuild(vm, endcidrange); - _hg_object_operator_unbuild(vm, endcmap); - _hg_object_operator_unbuild(vm, endcodespacerange); - _hg_object_operator_unbuild(vm, endnotdefchar); - _hg_object_operator_unbuild(vm, endnotdefrange); - _hg_object_operator_unbuild(vm, endrearrangedfont); - _hg_object_operator_unbuild(vm, endusematrix); - _hg_object_operator_unbuild(vm, findcolorrendering); - _hg_object_operator_unbuild(vm, GetHalftoneName); - _hg_object_operator_unbuild(vm, GetPageDeviceName); - _hg_object_operator_unbuild(vm, GetSubstituteCRD); - _hg_object_operator_unbuild(vm, removeall); - _hg_object_operator_unbuild(vm, removeglyphs); - _hg_object_operator_unbuild(vm, setsmoothness); - _hg_object_operator_unbuild(vm, settrapparams); - _hg_object_operator_unbuild(vm, settrapzone); - _hg_object_operator_unbuild(vm, shfill); - _hg_object_operator_unbuild(vm, StartData); - _hg_object_operator_unbuild(vm, usecmap); - _hg_object_operator_unbuild(vm, usefont); - } - if (level < HG_EMU_PS_LEVEL_2) { - _hg_object_operator_unbuild(vm, arct); - _hg_object_operator_unbuild(vm, colorimage); - _hg_object_operator_unbuild(vm, cshow); - _hg_object_operator_unbuild(vm, currentblackgeneration); - _hg_object_operator_unbuild(vm, currentcacheparams); - _hg_object_operator_unbuild(vm, currentcmykcolor); - _hg_object_operator_unbuild(vm, currentcolor); - _hg_object_operator_unbuild(vm, currentcolorrendering); - _hg_object_operator_unbuild(vm, currentcolorscreen); - _hg_object_operator_unbuild(vm, currentcolorspace); - _hg_object_operator_unbuild(vm, currentcolortransfer); - _hg_object_operator_unbuild(vm, currentdevparams); - _hg_object_operator_unbuild(vm, currentgstate); - _hg_object_operator_unbuild(vm, currenthalftone); - _hg_object_operator_unbuild(vm, currentobjectformat); - _hg_object_operator_unbuild(vm, currentoverprint); - _hg_object_operator_unbuild(vm, currentpacking); - _hg_object_operator_unbuild(vm, currentpagedevice); - _hg_object_operator_unbuild(vm, currentshared); - _hg_object_operator_unbuild(vm, currentstrokeadjust); - _hg_object_operator_unbuild(vm, currentsystemparams); - _hg_object_operator_unbuild(vm, currentundercolorremoval); - _hg_object_operator_unbuild(vm, currentuserparams); - _hg_object_operator_unbuild(vm, defineresource); - _hg_object_operator_unbuild(vm, defineuserobject); - _hg_object_operator_unbuild(vm, deletefile); - _hg_object_operator_unbuild(vm, execform); - _hg_object_operator_unbuild(vm, execuserobject); - _hg_object_operator_unbuild(vm, filenameforall); - _hg_object_operator_unbuild(vm, fileposition); - _hg_object_operator_unbuild(vm, filter); - _hg_object_operator_unbuild(vm, findencoding); - _hg_object_operator_unbuild(vm, findresource); - _hg_object_operator_unbuild(vm, gcheck); - _hg_object_operator_unbuild(vm, GlobalFontDirectory); - _hg_object_operator_unbuild(vm, glyphshow); - _hg_object_operator_unbuild(vm, gstate); - _hg_object_operator_unbuild(vm, ineofill); - _hg_object_operator_unbuild(vm, infill); - _hg_object_operator_unbuild(vm, instroke); - _hg_object_operator_unbuild(vm, inueofill); - _hg_object_operator_unbuild(vm, inufill); - _hg_object_operator_unbuild(vm, inustroke); - _hg_object_operator_unbuild(vm, ISOLatin1Encoding); - _hg_object_operator_unbuild(vm, languagelevel); - _hg_object_operator_unbuild(vm, makepattern); - _hg_object_operator_unbuild(vm, packedarray); - _hg_object_operator_unbuild(vm, printobject); - _hg_object_operator_unbuild(vm, realtime); - _hg_object_operator_unbuild(vm, rectclip); - _hg_object_operator_unbuild(vm, rectfill); - _hg_object_operator_unbuild(vm, rectstroke); - _hg_object_operator_unbuild(vm, renamefile); - _hg_object_operator_unbuild(vm, resourceforall); - _hg_object_operator_unbuild(vm, resourcestatus); - _hg_object_operator_unbuild(vm, rootfont); - _hg_object_operator_unbuild(vm, scheck); - _hg_object_operator_unbuild(vm, selectfont); - _hg_object_operator_unbuild(vm, serialnumber); - _hg_object_operator_unbuild(vm, setbbox); - _hg_object_operator_unbuild(vm, setblackgeneration); - _hg_object_operator_unbuild(vm, setcachedevice2); - _hg_object_operator_unbuild(vm, setcacheparams); - _hg_object_operator_unbuild(vm, setcmykcolor); - _hg_object_operator_unbuild(vm, setcolor); - _hg_object_operator_unbuild(vm, setcolorrendering); - _hg_object_operator_unbuild(vm, setcolorscreen); - _hg_object_operator_unbuild(vm, setcolorspace); - _hg_object_operator_unbuild(vm, setcolortransfer); - _hg_object_operator_unbuild(vm, setdevparams); - _hg_object_operator_unbuild(vm, setfileposition); - _hg_object_operator_unbuild(vm, setgstate); - _hg_object_operator_unbuild(vm, sethalftone); - _hg_object_operator_unbuild(vm, setobjectformat); - _hg_object_operator_unbuild(vm, setoverprint); - _hg_object_operator_unbuild(vm, setpacking); - _hg_object_operator_unbuild(vm, setpagedevice); - _hg_object_operator_unbuild(vm, setpattern); - _hg_object_operator_unbuild(vm, setshared); - _hg_object_operator_unbuild(vm, setstrokeadjust); - _hg_object_operator_unbuild(vm, setsystemparams); - _hg_object_operator_unbuild(vm, setucacheparams); - _hg_object_operator_unbuild(vm, setundercolorremoval); - _hg_object_operator_unbuild(vm, setuserparams); - _hg_object_operator_unbuild(vm, setvmthreshold); - _hg_object_operator_unbuild(vm, shareddict); - _hg_object_operator_unbuild(vm, SharedFontDirectory); - _hg_object_operator_unbuild(vm, startjob); - _hg_object_operator_unbuild(vm, uappend); - _hg_object_operator_unbuild(vm, ucache); - _hg_object_operator_unbuild(vm, ucachestatus); - _hg_object_operator_unbuild(vm, ueofill); - _hg_object_operator_unbuild(vm, ufill); - _hg_object_operator_unbuild(vm, undef); - _hg_object_operator_unbuild(vm, undefineresource); - _hg_object_operator_unbuild(vm, undefineuserobject); - _hg_object_operator_unbuild(vm, upath); - _hg_object_operator_unbuild(vm, UserObjects); - _hg_object_operator_unbuild(vm, ustroke); - _hg_object_operator_unbuild(vm, ustrokepath); - _hg_object_operator_unbuild(vm, vmreclaim); - _hg_object_operator_unbuild(vm, writeobject); - _hg_object_operator_unbuild(vm, xshow); - _hg_object_operator_unbuild(vm, xyshow); - _hg_object_operator_unbuild(vm, yshow); - } - if (level < HG_EMU_PS_LEVEL_1) { - _hg_object_operator_unbuild(vm, %arraytomark); - _hg_object_operator_unbuild(vm, %dicttomark); - _hg_object_operator_unbuild(vm, %for_pos_int_continue); - _hg_object_operator_unbuild(vm, %for_pos_real_continue); - _hg_object_operator_unbuild(vm, %forall_array_continue); - _hg_object_operator_unbuild(vm, %forall_dict_continue); - _hg_object_operator_unbuild(vm, %forall_string_continue); - _hg_object_operator_unbuild(vm, %loop_continue); - _hg_object_operator_unbuild(vm, %repeat_continue); - _hg_object_operator_unbuild(vm, %stopped_continue); - _hg_object_operator_unbuild(vm, .findfont); - _hg_object_operator_unbuild(vm, .definefont); - _hg_object_operator_unbuild(vm, .stringcvs); - _hg_object_operator_unbuild(vm, .undefinefont); - _hg_object_operator_unbuild(vm, .write==only); - _hg_object_operator_unbuild(vm, abs); - _hg_object_operator_unbuild(vm, add); - _hg_object_operator_unbuild(vm, aload); - _hg_object_operator_unbuild(vm, and); - _hg_object_operator_unbuild(vm, arc); - _hg_object_operator_unbuild(vm, arcn); - _hg_object_operator_unbuild(vm, arcto); - _hg_object_operator_unbuild(vm, array); - _hg_object_operator_unbuild(vm, ashow); - _hg_object_operator_unbuild(vm, astore); - _hg_object_operator_unbuild(vm, atan); - _hg_object_operator_unbuild(vm, awidthshow); - _hg_object_operator_unbuild(vm, begin); - _hg_object_operator_unbuild(vm, bind); - _hg_object_operator_unbuild(vm, bitshift); - _hg_object_operator_unbuild(vm, bytesavailable); - _hg_object_operator_unbuild(vm, cachestatus); - _hg_object_operator_unbuild(vm, ceiling); - _hg_object_operator_unbuild(vm, charpath); - _hg_object_operator_unbuild(vm, clear); - _hg_object_operator_unbuild(vm, cleardictstack); - _hg_object_operator_unbuild(vm, cleartomark); - _hg_object_operator_unbuild(vm, clip); - _hg_object_operator_unbuild(vm, clippath); - _hg_object_operator_unbuild(vm, closefile); - _hg_object_operator_unbuild(vm, closepath); - _hg_object_operator_unbuild(vm, concat); - _hg_object_operator_unbuild(vm, concatmatrix); - _hg_object_operator_unbuild(vm, copy); - _hg_object_operator_unbuild(vm, copypage); - _hg_object_operator_unbuild(vm, cos); - _hg_object_operator_unbuild(vm, count); - _hg_object_operator_unbuild(vm, countdictstack); - _hg_object_operator_unbuild(vm, countexecstack); - _hg_object_operator_unbuild(vm, counttomark); - _hg_object_operator_unbuild(vm, currentdash); - _hg_object_operator_unbuild(vm, currentdict); - _hg_object_operator_unbuild(vm, currentfile); - _hg_object_operator_unbuild(vm, currentflat); - _hg_object_operator_unbuild(vm, currentfont); - _hg_object_operator_unbuild(vm, currentgray); - _hg_object_operator_unbuild(vm, currenthsbcolor); - _hg_object_operator_unbuild(vm, currentlinecap); - _hg_object_operator_unbuild(vm, currentlinejoin); - _hg_object_operator_unbuild(vm, currentlinewidth); - _hg_object_operator_unbuild(vm, currentmatrix); - _hg_object_operator_unbuild(vm, currentmiterlimit); - _hg_object_operator_unbuild(vm, currentpoint); - _hg_object_operator_unbuild(vm, currentrgbcolor); - _hg_object_operator_unbuild(vm, currentscreen); - _hg_object_operator_unbuild(vm, currenttransfer); - _hg_object_operator_unbuild(vm, curveto); - _hg_object_operator_unbuild(vm, cvi); - _hg_object_operator_unbuild(vm, cvlit); - _hg_object_operator_unbuild(vm, cvn); - _hg_object_operator_unbuild(vm, cvr); - _hg_object_operator_unbuild(vm, cvrs); - _hg_object_operator_unbuild(vm, cvx); - _hg_object_operator_unbuild(vm, def); - _hg_object_operator_unbuild(vm, defaultmatrix); - _hg_object_operator_unbuild(vm, dict); - _hg_object_operator_unbuild(vm, dictstack); - _hg_object_operator_unbuild(vm, div); - _hg_object_operator_unbuild(vm, dtransform); - _hg_object_operator_unbuild(vm, dup); - _hg_object_operator_unbuild(vm, echo); - _hg_object_operator_unbuild(vm, eexec); - _hg_object_operator_unbuild(vm, end); - _hg_object_operator_unbuild(vm, eoclip); - _hg_object_operator_unbuild(vm, eofill); - _hg_object_operator_unbuild(vm, eq); - _hg_object_operator_unbuild(vm, erasepage); - _hg_object_operator_unbuild(vm, exch); - _hg_object_operator_unbuild(vm, exec); - _hg_object_operator_unbuild(vm, execstack); - _hg_object_operator_unbuild(vm, executeonly); - _hg_object_operator_unbuild(vm, exit); - _hg_object_operator_unbuild(vm, exp); - _hg_object_operator_unbuild(vm, file); - _hg_object_operator_unbuild(vm, fill); - _hg_object_operator_unbuild(vm, flattenpath); - _hg_object_operator_unbuild(vm, flush); - _hg_object_operator_unbuild(vm, flushfile); - _hg_object_operator_unbuild(vm, FontDirectory); - _hg_object_operator_unbuild(vm, for); - _hg_object_operator_unbuild(vm, forall); - _hg_object_operator_unbuild(vm, ge); - _hg_object_operator_unbuild(vm, get); - _hg_object_operator_unbuild(vm, getinterval); - _hg_object_operator_unbuild(vm, grestore); - _hg_object_operator_unbuild(vm, grestoreall); - _hg_object_operator_unbuild(vm, gsave); - _hg_object_operator_unbuild(vm, gt); - _hg_object_operator_unbuild(vm, identmatrix); - _hg_object_operator_unbuild(vm, idiv); - _hg_object_operator_unbuild(vm, idtransform); - _hg_object_operator_unbuild(vm, if); - _hg_object_operator_unbuild(vm, ifelse); - _hg_object_operator_unbuild(vm, image); - _hg_object_operator_unbuild(vm, imagemask); - _hg_object_operator_unbuild(vm, index); - _hg_object_operator_unbuild(vm, initclip); - _hg_object_operator_unbuild(vm, initgraphics); - _hg_object_operator_unbuild(vm, initmatrix); - _hg_object_operator_unbuild(vm, internaldict); - _hg_object_operator_unbuild(vm, invertmatrix); - _hg_object_operator_unbuild(vm, itransform); - _hg_object_operator_unbuild(vm, known); - _hg_object_operator_unbuild(vm, kshow); - _hg_object_operator_unbuild(vm, le); - _hg_object_operator_unbuild(vm, length); - _hg_object_operator_unbuild(vm, lineto); - _hg_object_operator_unbuild(vm, ln); - _hg_object_operator_unbuild(vm, log); - _hg_object_operator_unbuild(vm, loop); - _hg_object_operator_unbuild(vm, lt); - _hg_object_operator_unbuild(vm, makefont); - _hg_object_operator_unbuild(vm, maxlength); - _hg_object_operator_unbuild(vm, mod); - _hg_object_operator_unbuild(vm, moveto); - _hg_object_operator_unbuild(vm, mul); - _hg_object_operator_unbuild(vm, ne); - _hg_object_operator_unbuild(vm, neg); - _hg_object_operator_unbuild(vm, newpath); - _hg_object_operator_unbuild(vm, noaccess); - _hg_object_operator_unbuild(vm, not); - _hg_object_operator_unbuild(vm, nulldevice); - _hg_object_operator_unbuild(vm, or); - _hg_object_operator_unbuild(vm, pathbbox); - _hg_object_operator_unbuild(vm, pathforall); - _hg_object_operator_unbuild(vm, pop); - _hg_object_operator_unbuild(vm, print); - _hg_object_operator_unbuild(vm, put); - _hg_object_operator_unbuild(vm, rand); - _hg_object_operator_unbuild(vm, rcheck); - _hg_object_operator_unbuild(vm, rcurveto); - _hg_object_operator_unbuild(vm, read); - _hg_object_operator_unbuild(vm, readhexstring); - _hg_object_operator_unbuild(vm, readline); - _hg_object_operator_unbuild(vm, readonly); - _hg_object_operator_unbuild(vm, readstring); - _hg_object_operator_unbuild(vm, repeat); - _hg_object_operator_unbuild(vm, resetfile); - _hg_object_operator_unbuild(vm, restore); - _hg_object_operator_unbuild(vm, reversepath); - _hg_object_operator_unbuild(vm, rlineto); - _hg_object_operator_unbuild(vm, rmoveto); - _hg_object_operator_unbuild(vm, roll); - _hg_object_operator_unbuild(vm, rotate); - _hg_object_operator_unbuild(vm, round); - _hg_object_operator_unbuild(vm, rrand); - _hg_object_operator_unbuild(vm, save); - _hg_object_operator_unbuild(vm, scale); - _hg_object_operator_unbuild(vm, scalefont); - _hg_object_operator_unbuild(vm, search); - _hg_object_operator_unbuild(vm, setcachedevice); - _hg_object_operator_unbuild(vm, setcachelimit); - _hg_object_operator_unbuild(vm, setcharwidth); - _hg_object_operator_unbuild(vm, setdash); - _hg_object_operator_unbuild(vm, setflat); - _hg_object_operator_unbuild(vm, setfont); - _hg_object_operator_unbuild(vm, setgray); - _hg_object_operator_unbuild(vm, sethsbcolor); - _hg_object_operator_unbuild(vm, setlinecap); - _hg_object_operator_unbuild(vm, setlinejoin); - _hg_object_operator_unbuild(vm, setlinewidth); - _hg_object_operator_unbuild(vm, setmatrix); - _hg_object_operator_unbuild(vm, setmiterlimit); - _hg_object_operator_unbuild(vm, setrgbcolor); - _hg_object_operator_unbuild(vm, setscreen); - _hg_object_operator_unbuild(vm, settransfer); - _hg_object_operator_unbuild(vm, show); - _hg_object_operator_unbuild(vm, showpage); - _hg_object_operator_unbuild(vm, sin); - _hg_object_operator_unbuild(vm, sqrt); - _hg_object_operator_unbuild(vm, srand); - _hg_object_operator_unbuild(vm, status); - _hg_object_operator_unbuild(vm, stop); - _hg_object_operator_unbuild(vm, stopped); - _hg_object_operator_unbuild(vm, string); - _hg_object_operator_unbuild(vm, stringwidth); - _hg_object_operator_unbuild(vm, stroke); - _hg_object_operator_unbuild(vm, strokepath); - _hg_object_operator_unbuild(vm, sub); - _hg_object_operator_unbuild(vm, token); - _hg_object_operator_unbuild(vm, transform); - _hg_object_operator_unbuild(vm, translate); - _hg_object_operator_unbuild(vm, truncate); - _hg_object_operator_unbuild(vm, type); - _hg_object_operator_unbuild(vm, usertime); - _hg_object_operator_unbuild(vm, vmstatus); - _hg_object_operator_unbuild(vm, wcheck); - _hg_object_operator_unbuild(vm, where); - _hg_object_operator_unbuild(vm, widthshow); - _hg_object_operator_unbuild(vm, write); - _hg_object_operator_unbuild(vm, writehexstring); - _hg_object_operator_unbuild(vm, writestring); - _hg_object_operator_unbuild(vm, xcheck); - _hg_object_operator_unbuild(vm, xor); - } - - __hg_operator_initialized = FALSE; - - return retval; -} - -gboolean -hg_object_operator_invoke(hg_vm_t *vm, - hg_object_t *object) -{ - hg_operatordata_t *data; - - hg_return_val_if_fail (vm != NULL, FALSE); - hg_return_val_if_fail (object != NULL, FALSE); - hg_return_val_if_fail (__hg_operator_initialized, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_OPERATOR (object), FALSE); - - data = HG_OBJECT_OPERATOR_DATA (object); - - return data->func(vm, object); -} - -gboolean -hg_object_operator_compare(hg_object_t *object1, - hg_object_t *object2) -{ - hg_return_val_if_fail (object1 != NULL, FALSE); - hg_return_val_if_fail (object2 != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_OPERATOR (object1), FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_OPERATOR (object2), FALSE); - - /* XXX: no copy and dup functionalities are available so far. - * so just comparing a pointer should works enough - */ - return object1 == object2; -} - -gchar * -hg_object_operator_dump(hg_object_t *object, - gboolean verbose) -{ - hg_operatordata_t *data; - - hg_return_val_if_fail (object != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_OPERATOR (object), NULL); - - data = HG_OBJECT_OPERATOR_DATA (object); - - return g_strndup((gchar *)data->name, HG_OBJECT_OPERATOR (object)->length); -} - -const gchar * -hg_object_operator_get_name(hg_system_encoding_t encoding) -{ - const gchar *retval; - - hg_return_val_if_fail (encoding < HG_enc_END, NULL); - hg_return_val_if_fail (__hg_operator_initialized, NULL); - - retval = __hg_system_encoding_names[encoding]; - - hg_return_val_if_fail (retval != NULL, NULL); - - return retval; -} diff --git a/hieroglyph/hgoperator.h b/hieroglyph/hgoperator.h deleted file mode 100644 index 7b9b891..0000000 --- a/hieroglyph/hgoperator.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgoperator.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH_HGOPERATOR_H__ -#define __HIEROGLYPH_HGOPERATOR_H__ - -#include <hieroglyph/hgtypes.h> - - -G_BEGIN_DECLS - -hg_object_t *hg_object_operator_new (hg_vm_t *vm, - hg_system_encoding_t enc, - hg_operator_func_t func) G_GNUC_WARN_UNUSED_RESULT; -hg_object_t *hg_object_operator_new_with_custom(hg_vm_t *vm, - gchar *name, - hg_operator_func_t func) G_GNUC_WARN_UNUSED_RESULT; -gboolean hg_object_operator_initialize (hg_vm_t *vm, - hg_emulationtype_t level); -gboolean hg_object_operator_finalize (hg_vm_t *vm, - hg_emulationtype_t level); -gboolean hg_object_operator_invoke (hg_vm_t *vm, - hg_object_t *object); -gboolean hg_object_operator_compare (hg_object_t *object1, - hg_object_t *object2); -gchar *hg_object_operator_dump (hg_object_t *object, - gboolean verbose) G_GNUC_MALLOC; -const gchar *hg_object_operator_get_name (hg_system_encoding_t encoding) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __HIEROGLYPH_HGOPERATOR_H__ */ diff --git a/hieroglyph/hgstack.c b/hieroglyph/hgstack.c deleted file mode 100644 index 4be7d59..0000000 --- a/hieroglyph/hgstack.c +++ /dev/null @@ -1,218 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgstack.c - * Copyright (C) 2005-2009 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdlib.h> -#include <string.h> -#include <hieroglyph/hgobject.h> -#include <hieroglyph/vm.h> -#include "hgstack.h" - - -/* - * private functions - */ - -/* - * public functions - */ -hg_stack_t * -hg_stack_new(hg_vm_t *vm, - gsize depth) -{ - hg_stack_t *retval; - hg_stackdata_t *data; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (depth > 0, NULL); - - retval = hg_vm_malloc(vm, hg_n_alignof (sizeof (hg_stack_t) + sizeof (hg_stackdata_t) * (depth + 1))); - if (retval != NULL) { - retval->stack_depth = depth; - retval->current_depth = depth; - data = (hg_stackdata_t *)retval->data; - memset(data, 0, sizeof (hg_stackdata_t) * (depth + 1)); - data[depth].next = &data[depth-1]; - retval->stack_top = &data[depth]; - } - - return retval; -} - -void -hg_stack_free(hg_vm_t *vm, - hg_stack_t *stack) -{ - hg_return_if_fail (stack != NULL); - - hg_vm_mfree(vm, stack); -} - -gboolean -hg_stack_push(hg_stack_t *stack, - hg_object_t *object) -{ - hg_stackdata_t *data, *prev; - - hg_return_val_if_fail (stack != NULL, FALSE); - hg_return_val_if_fail (object != NULL, FALSE); - - if (stack->current_depth == 0) - return FALSE; - prev = data = stack->stack_top; - hg_return_val_if_fail (data->next != NULL, FALSE); - - stack->current_depth--; - data = data->next; - data->data = object; - if (data->prev == NULL) - data->prev = prev; - if (stack->current_depth > 0) { - if (data->next == NULL) - data->next = &data[-1]; - } else { - data->next = NULL; - } - stack->stack_top = data; - - return TRUE; -} - -hg_object_t * -hg_stack_pop(hg_stack_t *stack) -{ - hg_object_t *retval; - hg_stackdata_t *data; - - hg_return_val_if_fail (stack != NULL, NULL); - hg_return_val_if_fail (stack->stack_depth > stack->current_depth, NULL); - - data = stack->stack_top; - retval = data->data; - stack->stack_top = data->prev; - stack->current_depth++; - - return retval; -} - -void -hg_stack_clear(hg_stack_t *stack) -{ - hg_stackdata_t *data; - - hg_return_if_fail (stack != NULL); - - stack->current_depth = stack->stack_depth; - data = (hg_stackdata_t *)stack->data; - stack->stack_top = &data[stack->stack_depth]; -} - -gsize -hg_stack_length(hg_stack_t *stack) -{ - hg_return_val_if_fail (stack != NULL, 0); - - return stack->stack_depth - stack->current_depth; -} - -hg_object_t * -hg_stack_index(hg_stack_t *stack, - gsize index) -{ - hg_stackdata_t *data; - - hg_return_val_if_fail (stack != NULL, NULL); - hg_return_val_if_fail (index < (stack->stack_depth - stack->current_depth), NULL); - - for (data = stack->stack_top; index > 0; data = data->prev, index--); - - return data->data; -} - -gboolean -hg_stack_roll(hg_stack_t *stack, - gsize n_block, - gssize n_times) -{ - hg_stackdata_t *before, *after, *beginning, *ending; - gsize n, i; - - hg_return_val_if_fail (stack != NULL, FALSE); - hg_return_val_if_fail (n_block <= (stack->stack_depth - stack->current_depth), FALSE); - - if (n_block == 0 || - n_times == 0) { - /* This case is the same to do nothing */ - return TRUE; - } - n = abs(n_times) % n_block; - if (n == 0) { - /* This case is the same to do nothing */ - return TRUE; - } - - /* find a place where isn't targetted for roll */ - for (before = stack->stack_top, i = n_block; - i > 0; - before = before->prev, i--); - after = before->next; - /* try to find the place where cutting off */ - if (n_times > 0) { - for (beginning = stack->stack_top; n > 1; beginning = beginning->prev, n--); - ending = beginning->prev; - } else { - for (ending = after; n > 1; ending = ending->next, n--); - beginning = ending->next; - } - ending->next = stack->stack_top->next; - stack->stack_top->next = after; - stack->stack_top->next->prev = stack->stack_top; - before->next = beginning; - before->next->prev = before; - stack->stack_top = ending; - - return TRUE; -} - -void -hg_stack_dump(hg_vm_t *vm, - hg_stack_t *stack) -{ - gsize i; - hg_stackdata_t *data; - gchar *p; - - hg_return_if_fail (vm != NULL); - hg_return_if_fail (stack != NULL); - - for (i = 0, data = stack->stack_top; - i < (stack->stack_depth - stack->current_depth); - i++, data = data->prev) { - p = hg_object_dump(data->data, TRUE); - printf("%" G_GSIZE_FORMAT ": %s\n", i + 1, p); - g_free(p); - } -} diff --git a/hieroglyph/hgstack.h b/hieroglyph/hgstack.h deleted file mode 100644 index ef09b18..0000000 --- a/hieroglyph/hgstack.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgstack.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH_HGSTACK_H__ -#define __HIEROGLYPH_HGSTACK_H__ - -#include <hieroglyph/hgtypes.h> - - -G_BEGIN_DECLS - -hg_stack_t *hg_stack_new (hg_vm_t *vm, - gsize depth) G_GNUC_WARN_UNUSED_RESULT; -void hg_stack_free (hg_vm_t *vm, - hg_stack_t *stack); -gboolean hg_stack_push (hg_stack_t *stack, - hg_object_t *object); -hg_object_t *hg_stack_pop (hg_stack_t *stack); -void hg_stack_clear (hg_stack_t *stack); -gsize hg_stack_length(hg_stack_t *stack); -hg_object_t *hg_stack_index (hg_stack_t *stack, - gsize index); -gboolean hg_stack_roll (hg_stack_t *stack, - gsize n_block, - gssize n_times); -void hg_stack_dump (hg_vm_t *vm, - hg_stack_t *stack); - -G_END_DECLS - -#endif /* __HIEROGLYPH_HGSTACK_H__ */ diff --git a/hieroglyph/hgstring.c b/hieroglyph/hgstring.c deleted file mode 100644 index 8171e21..0000000 --- a/hieroglyph/hgstring.c +++ /dev/null @@ -1,133 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgstring.c - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <string.h> -#include <hieroglyph/hgobject.h> -#include "hgstring.h" - - -/* - * private functions - */ - -/* - * public functions - */ -hg_object_t * -hg_object_string_sized_new(hg_vm_t *vm, - guint16 length) -{ - hg_object_t *retval; - hg_stringdata_t *data; - - hg_return_val_if_fail (vm != NULL, NULL); - - retval = hg_object_sized_new(vm, hg_n_alignof (sizeof (hg_stringdata_t) + length + 1)); - if (retval != NULL) { - HG_OBJECT_GET_TYPE (retval) = HG_OBJECT_TYPE_STRING; - HG_OBJECT_STRING (retval)->length = length; - HG_OBJECT_STRING (retval)->real_length = length; - data = HG_OBJECT_STRING_DATA (retval); - if (length > 0) - data->string = (gpointer)data->data; - else - data->string = NULL; - } - - return retval; -} - -hg_object_t * -hg_object_string_new(hg_vm_t *vm, - const gchar *value) -{ - hg_object_t *retval; - gchar *string; - gsize size; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (value != NULL, NULL); - - size = strlen(value); - retval = hg_object_string_sized_new(vm, size); - if (retval != NULL) { - string = HG_OBJECT_STRING_DATA (retval)->string; - memcpy(string, value, size); - } - - return retval; -} - -hg_object_t * -hg_object_string_substring_new(hg_vm_t *vm, - hg_object_t *object, - guint16 start_index, - guint16 length) -{ - hg_object_t *retval; - gchar *p; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (object != NULL, NULL); - hg_return_val_if_fail (HG_OBJECT_IS_STRING (object), NULL); - hg_return_val_if_fail (HG_OBJECT_STRING (object)->real_length > start_index, NULL); - hg_return_val_if_fail (HG_OBJECT_STRING (object)->real_length >= (start_index + length), NULL); - - retval = hg_object_string_sized_new(vm, 0); - if (retval != NULL) { - p = HG_OBJECT_STRING_DATA (object)->string; - HG_OBJECT_STRING_DATA (retval)->string = &p[start_index]; - HG_OBJECT_STRING (retval)->real_length = length; - } - - return retval; -} - -gboolean -hg_object_string_compare(hg_object_t *object1, - hg_object_t *object2) -{ - guint16 i; - gchar *p1, *p2; - - hg_return_val_if_fail (object1 != NULL, FALSE); - hg_return_val_if_fail (object2 != NULL, FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_STRING (object1), FALSE); - hg_return_val_if_fail (HG_OBJECT_IS_STRING (object2), FALSE); - - if (HG_OBJECT_STRING (object1)->real_length != HG_OBJECT_STRING (object2)->real_length) - return FALSE; - - p1 = HG_OBJECT_STRING_DATA (object1)->string; - p2 = HG_OBJECT_STRING_DATA (object2)->string; - for (i = 0; i < HG_OBJECT_STRING (object1)->real_length; i++) { - if (p1[i] != p2[i]) - return FALSE; - } - - return TRUE; -} diff --git a/hieroglyph/hgstring.h b/hieroglyph/hgstring.h deleted file mode 100644 index b062573..0000000 --- a/hieroglyph/hgstring.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgstring.h - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH_HGSTRING_H__ -#define __HIEROGLYPH_HGSTRING_H__ - -#include <hieroglyph/hgtypes.h> - - -G_BEGIN_DECLS - -hg_object_t *hg_object_string_sized_new (hg_vm_t *vm, - guint16 length); -hg_object_t *hg_object_string_new (hg_vm_t *vm, - const gchar *value); -hg_object_t *hg_object_string_substring_new(hg_vm_t *vm, - hg_object_t *object, - guint16 start_index, - guint16 length); -gboolean hg_object_string_compare (hg_object_t *object1, - hg_object_t *object2); - -G_END_DECLS - -#endif /* __HIEROGLYPH_HGSTRING_H__ */ diff --git a/hieroglyph/hgtypes.h b/hieroglyph/hgtypes.h deleted file mode 100644 index a49b268..0000000 --- a/hieroglyph/hgtypes.h +++ /dev/null @@ -1,812 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgtypes.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH__HGTYPES_H__ -#define __HIEROGLYPH__HGTYPES_H__ - -#include <errno.h> -#include <hieroglyph/hgmacros.h> - - -G_BEGIN_DECLS - -/** - * typedefs - */ -typedef struct hg_object_header_s hg_object_header_t; -typedef gint32 hg_integer_t; -typedef gfloat hg_real_t; -typedef struct hg_name_s hg_name_t; -typedef struct hg_encoding_name_s hg_encoding_name_t; -typedef gboolean hg_boolean_t; -typedef struct hg_string_s hg_string_t; -typedef struct hg_stringdata_s hg_stringdata_t; -typedef struct hg_array_s hg_array_t; -typedef struct hg_arraydata_s hg_arraydata_t; -typedef struct hg_dict_s hg_dict_t; -typedef struct hg_dictdata_s hg_dictdata_t; -typedef struct hg_file_s hg_file_t; -typedef struct hg_filedata_s hg_filedata_t; -typedef struct hg_filetable_s hg_filetable_t; -typedef enum hg_filetype_e hg_filetype_t; -typedef enum hg_filemode_e hg_filemode_t; -typedef enum hg_filepos_e hg_filepos_t; -typedef struct hg_operator_s hg_operator_t; -typedef struct hg_operatordata_s hg_operatordata_t; -typedef union hg_attribute_u hg_attribute_t; -typedef struct _hg_object_s _hg_object_t; -typedef struct hg_object_s hg_object_t; -typedef enum hg_objecttype_e hg_objecttype_t; -typedef enum hg_stacktype_e hg_stacktype_t; -typedef struct hg_stackdata_s hg_stackdata_t; -typedef struct hg_stack_s hg_stack_t; -typedef enum hg_error_e hg_error_t; -typedef enum hg_system_encoding_e hg_system_encoding_t; -typedef enum hg_emulationtype_e hg_emulationtype_t; -typedef struct hg_vm_s hg_vm_t; - -typedef gboolean (* hg_operator_func_t) (hg_vm_t *vm, - hg_object_t *data); - - -/** - * Structures - */ -struct hg_object_header_s { - guchar token_type; - guint16 n_objects; - guint32 total_length; -}; -struct hg_name_s { - guint16 reserved1; - guint16 length; -}; -struct hg_encoding_name_s { - gint16 representation; - guint16 index; -}; -struct hg_string_s { - guint16 length; - guint16 real_length; -}; -struct hg_array_s { - guint16 length; - guint16 real_length; -}; -struct hg_dict_s { - guint16 length; - guint16 used; -}; -struct hg_file_s { - guint16 reserved1; - guint16 reserved2; -}; -struct hg_operator_s { - guint16 length; - guint16 reserved1; -}; -struct hg_operatordata_s { - hg_operator_func_t func; - gchar *name[]; -}; -union hg_attribute_u { - struct { - guint8 is_accessible:1; /* flagging off this bit means noaccess */ - guint8 is_readable:1; /* flagging off this bit means readonly */ - guint8 is_executeonly:1; /* flagging on this bit means executeonly */ - guint8 is_locked:1; /* flagging on this bit means the object is locked. */ - guint8 reserved4:1; - guint8 reserved5:1; - guint8 is_global:1; /* flagging on this bit means the object was allocated at the global memory */ - guint8 is_checked:1; /* for checking the circular reference */ - } bit; - guint8 attributes; -}; -struct _hg_object_s { - hg_attribute_t attr; - union { - struct { - guint is_executable:1; - guint object_type:7; - } v; - guchar type; - } t; - union { - hg_integer_t integer; - hg_real_t real; - hg_name_t name; - hg_encoding_name_t encoding; - hg_boolean_t boolean; - hg_string_t string; - hg_array_t array; - hg_dict_t dict; - hg_file_t file; - hg_operator_t operator; - } v; -}; -struct hg_object_s { - hg_object_header_t header; - _hg_object_t object; - gpointer data[]; -}; - -struct hg_arraydata_s { - gchar name[256]; - gpointer array; - gpointer data[]; -}; -struct hg_stringdata_s { - gpointer string; - gpointer data[]; -}; -struct hg_dictdata_s { - hg_object_t *key; - hg_object_t *value; -}; -enum hg_filetype_e { - HG_FILE_TYPE_FILE_IO = 1, - HG_FILE_TYPE_MMAPPED_IO, - HG_FILE_TYPE_BUFFER, - HG_FILE_TYPE_STDIN, - HG_FILE_TYPE_STDOUT, - HG_FILE_TYPE_STDERR, - HG_FILE_TYPE_LINEEDIT, - HG_FILE_TYPE_STATEMENTEDIT, - HG_FILE_TYPE_CALLBACK, - HG_FILE_TYPE_END -}; -enum hg_filemode_e { - HG_FILE_MODE_READ = 1 << 0, - HG_FILE_MODE_WRITE = 1 << 1, - HG_FILE_MODE_READWRITE = 1 << 2 -}; -enum hg_filepos_e { - HG_FILE_SEEK_SET = SEEK_SET, - HG_FILE_SEEK_CUR = SEEK_CUR, - HG_FILE_SEEK_END = SEEK_END -}; -struct hg_filetable_s { - gboolean (* open) (gpointer user_data, - error_t *error); - gsize (* read) (gpointer user_data, - gpointer buffer, - gsize size, - gsize n, - error_t *error); - gsize (* write) (gpointer user_data, - gconstpointer buffer, - gsize size, - gsize n, - error_t *error); - gboolean (* flush) (gpointer user_data, - error_t *error); - gssize (* seek) (gpointer user_data, - gssize offset, - hg_filepos_t whence, - error_t *error); - void (* close) (gpointer user_data, - error_t *error); - gboolean (* is_closed) (gpointer user_data); - gboolean (* is_eof) (gpointer user_data); - void (* clear_eof) (gpointer user_data); -}; -struct hg_filedata_s { - union { - gpointer buffer; - hg_filetable_t *table; - } v; - gint fd; - gsize filesize; - gsize current_position; - gsize current_line; - hg_filetype_t iotype; - hg_filemode_t mode; - gsize filename_length; - gchar *filename[]; -}; - -enum hg_objecttype_e { - HG_OBJECT_TYPE_NULL = 0, - HG_OBJECT_TYPE_INTEGER, - HG_OBJECT_TYPE_REAL, - HG_OBJECT_TYPE_NAME, - HG_OBJECT_TYPE_BOOLEAN, - HG_OBJECT_TYPE_STRING, - HG_OBJECT_TYPE_EVAL, - HG_OBJECT_TYPE_ARRAY = 9, - HG_OBJECT_TYPE_MARK, - /* extended for hieroglyph */ - HG_OBJECT_TYPE_DICT = 65, - HG_OBJECT_TYPE_FILE, - HG_OBJECT_TYPE_OPERATOR, - HG_OBJECT_TYPE_END = (1 << 7) - 1 -}; - -enum hg_stacktype_e { - HG_STACK_TYPE_OSTACK, - HG_STACK_TYPE_ESTACK, - HG_STACK_TYPE_DSTACK, - HG_STACK_TYPE_END -}; -struct hg_stackdata_s { - gpointer data; - hg_stackdata_t *next; - hg_stackdata_t *prev; -}; -struct hg_stack_s { - hg_stackdata_t *stack_top; - gsize stack_depth; - gsize current_depth; - gpointer data[]; -}; - -enum hg_error_e { - HG_e_dictfull = 1, - HG_e_dictstackoverflow, - HG_e_dictstackunderflow, - HG_e_execstackoverflow, - HG_e_handleerror, - HG_e_interrupt, - HG_e_invalidaccess, - HG_e_invalidexit, - HG_e_invalidfileaccess, - HG_e_invalidfont, - HG_e_invalidrestore, - HG_e_ioerror, - HG_e_limitcheck, - HG_e_nocurrentpoint, - HG_e_rangecheck, - HG_e_stackoverflow, - HG_e_stackunderflow, - HG_e_syntaxerror, - HG_e_timeout, - HG_e_typecheck, - HG_e_undefined, - HG_e_undefinedfilename, - HG_e_undefinedresult, - HG_e_unmatchedmark, - HG_e_unregistered, - HG_e_VMerror, - HG_e_configurationerror, - HG_e_undefinedresource, - HG_e_END, -}; - -enum hg_system_encoding_e { - HG_enc_abs = 0, - HG_enc_add, - HG_enc_aload, - HG_enc_anchorsearch, - HG_enc_and, - HG_enc_arc, - HG_enc_arcn, - HG_enc_arct, - HG_enc_arcto, - HG_enc_array, - - HG_enc_ashow, - HG_enc_astore, - HG_enc_awidthshow, - HG_enc_begin, - HG_enc_bind, - HG_enc_bitshift, - HG_enc_ceiling, - HG_enc_charpath, - HG_enc_clear, - HG_enc_cleartomark, - - HG_enc_clip, - HG_enc_clippath, - HG_enc_closepath, - HG_enc_concat, - HG_enc_concatmatrix, - HG_enc_copy, - HG_enc_count, - HG_enc_counttomark, - HG_enc_currentcmykcolor, - HG_enc_currentdash, - - HG_enc_currentdict, - HG_enc_currentfile, - HG_enc_currentfont, - HG_enc_currentgray, - HG_enc_currentgstate, - HG_enc_currenthsbcolor, - HG_enc_currentlinecap, - HG_enc_currentlinejoin, - HG_enc_currentlinewidth, - HG_enc_currentmatrix, - - HG_enc_currentpoint, - HG_enc_currentrgbcolor, - HG_enc_currentshared, - HG_enc_curveto, - HG_enc_cvi, - HG_enc_cvlit, - HG_enc_cvn, - HG_enc_cvr, - HG_enc_cvrs, - HG_enc_cvs, - - HG_enc_cvx, - HG_enc_def, - HG_enc_defineusername, - HG_enc_dict, - HG_enc_div, - HG_enc_dtransform, - HG_enc_dup, - HG_enc_end, - HG_enc_eoclip, - HG_enc_eofill, - - HG_enc_eoviewclip, - HG_enc_eq, - HG_enc_exch, - HG_enc_exec, - HG_enc_exit, - HG_enc_file, - HG_enc_fill, - HG_enc_findfont, - HG_enc_flattenpath, - HG_enc_floor, - - HG_enc_flush, - HG_enc_flushfile, - HG_enc_for, - HG_enc_forall, - HG_enc_ge, - HG_enc_get, - HG_enc_getinterval, - HG_enc_grestore, - HG_enc_gsave, - HG_enc_gstate, - - HG_enc_gt, - HG_enc_identmatrix, - HG_enc_idiv, - HG_enc_idtransform, - HG_enc_if, - HG_enc_ifelse, - HG_enc_image, - HG_enc_imagemask, - HG_enc_index, - HG_enc_ineofill, - - HG_enc_infill, - HG_enc_initviewclip, - HG_enc_inueofill, - HG_enc_inufill, - HG_enc_invertmatrix, - HG_enc_itransform, - HG_enc_known, - HG_enc_le, - HG_enc_length, - HG_enc_lineto, - - HG_enc_load, - HG_enc_loop, - HG_enc_lt, - HG_enc_makefont, - HG_enc_matrix, - HG_enc_maxlength, - HG_enc_mod, - HG_enc_moveto, - HG_enc_mul, - HG_enc_ne, - - HG_enc_neg, - HG_enc_newpath, - HG_enc_not, - HG_enc_null, - HG_enc_or, - HG_enc_pathbbox, - HG_enc_pathforall, - HG_enc_pop, - HG_enc_print, - HG_enc_printobject, - - HG_enc_put, - HG_enc_putinterval, - HG_enc_rcurveto, - HG_enc_read, - HG_enc_readhexstring, - HG_enc_readline, - HG_enc_readstring, - HG_enc_rectclip, - HG_enc_rectfill, - HG_enc_rectstroke, - - HG_enc_rectviewclip, - HG_enc_repeat, - HG_enc_restore, - HG_enc_rlineto, - HG_enc_rmoveto, - HG_enc_roll, - HG_enc_rotate, - HG_enc_round, - HG_enc_save, - HG_enc_scale, - - HG_enc_scalefont, - HG_enc_search, - HG_enc_selectfont, - HG_enc_setbbox, - HG_enc_setcachedevice, - HG_enc_setcachedevice2, - HG_enc_setcharwidth, - HG_enc_setcmykcolor, - HG_enc_setdash, - HG_enc_setfont, - - HG_enc_setgray, - HG_enc_setgstate, - HG_enc_sethsbcolor, - HG_enc_setlinecap, - HG_enc_setlinejoin, - HG_enc_setlinewidth, - HG_enc_setmatrix, - HG_enc_setrgbcolor, - HG_enc_setshared, - HG_enc_shareddict, - - HG_enc_show, - HG_enc_showpage, - HG_enc_stop, - HG_enc_stopped, - HG_enc_store, - HG_enc_string, - HG_enc_stringwidth, - HG_enc_stroke, - HG_enc_strokepath, - HG_enc_sub, - - HG_enc_systemdict, - HG_enc_token, - HG_enc_transform, - HG_enc_translate, - HG_enc_truncate, - HG_enc_type, - HG_enc_uappend, - HG_enc_ucache, - HG_enc_ueofill, - HG_enc_ufill, - - HG_enc_undef, - HG_enc_upath, - HG_enc_userdict, - HG_enc_ustroke, - HG_enc_viewclip, - HG_enc_viewclippath, - HG_enc_where, - HG_enc_widthshow, - HG_enc_write, - HG_enc_writehexstring, - - HG_enc_writeobject, - HG_enc_writestring, - HG_enc_wtranslation, - HG_enc_xor, - HG_enc_xshow, - HG_enc_xyshow, - HG_enc_yshow, - HG_enc_FontDirectory, - HG_enc_SharedFontDirectory, - HG_enc_Courier, - - HG_enc_Courier_Bold, - HG_enc_Courier_BoldOblique, - HG_enc_Courier_Oblique, - HG_enc_Helvetica, - HG_enc_Helvetica_Bold, - HG_enc_Helvetica_BoldOblique, - HG_enc_Helvetica_Oblique, - HG_enc_Symbol, - HG_enc_Times_Bold, - HG_enc_Times_BoldItalic, - - HG_enc_Times_Italic, - HG_enc_Times_Roman, - HG_enc_execuserobject, - HG_enc_currentcolor, - HG_enc_currentcolorspace, - HG_enc_currentglobal, - HG_enc_execform, - HG_enc_filter, - HG_enc_findresource, - HG_enc_globaldict, - - HG_enc_makepattern, - HG_enc_setcolor, - HG_enc_setcolorspace, - HG_enc_setglobal, - HG_enc_setpagedevice, - HG_enc_setpattern, - - HG_enc_sym_eq = 256, - HG_enc_sym_eqeq, - HG_enc_ISOLatin1Encoding, - HG_enc_StandardEncoding, - - HG_enc_sym_left_square_bracket, - HG_enc_sym_right_square_bracket, - HG_enc_atan, - HG_enc_banddevice, - HG_enc_bytesavailable, - HG_enc_cachestatus, - HG_enc_closefile, - HG_enc_colorimage, - HG_enc_condition, - HG_enc_copypage, - - HG_enc_cos, - HG_enc_countdictstack, - HG_enc_countexecstack, - HG_enc_cshow, - HG_enc_currentblackgeneration, - HG_enc_currentcacheparams, - HG_enc_currentcolorscreen, - HG_enc_currentcolortransfer, - HG_enc_currentcontext, - HG_enc_currentflat, - - HG_enc_currenthalftone, - HG_enc_currenthalftonephase, - HG_enc_currentmiterlimit, - HG_enc_currentobjectformat, - HG_enc_currentpacking, - HG_enc_currentscreen, - HG_enc_currentstrokeadjust, - HG_enc_currenttransfer, - HG_enc_currentundercolorremoval, - HG_enc_defaultmatrix, - - HG_enc_definefont, - HG_enc_deletefile, - HG_enc_detach, - HG_enc_deviceinfo, - HG_enc_dictstack, - HG_enc_echo, - HG_enc_erasepage, - HG_enc_errordict, - HG_enc_execstack, - HG_enc_executeonly, - - HG_enc_exp, - HG_enc_false, - HG_enc_filenameforall, - HG_enc_fileposition, - HG_enc_fork, - HG_enc_framedevice, - HG_enc_grestoreall, - HG_enc_handleerror, - HG_enc_initclip, - HG_enc_initgraphics, - - HG_enc_initmatrix, - HG_enc_instroke, - HG_enc_inustroke, - HG_enc_join, - HG_enc_kshow, - HG_enc_ln, - HG_enc_lock, - HG_enc_log, - HG_enc_mark, - HG_enc_monitor, - - HG_enc_noaccess, - HG_enc_notify, - HG_enc_nulldevice, - HG_enc_packedarray, - HG_enc_quit, - HG_enc_rand, - HG_enc_rcheck, - HG_enc_readonly, - HG_enc_realtime, - HG_enc_renamefile, - - HG_enc_renderbands, - HG_enc_resetfile, - HG_enc_reversepath, - HG_enc_rootfont, - HG_enc_rrand, - HG_enc_run, - HG_enc_scheck, - HG_enc_setblackgeneration, - HG_enc_setcachelimit, - HG_enc_setcacheparams, - - HG_enc_setcolorscreen, - HG_enc_setcolortransfer, - HG_enc_setfileposition, - HG_enc_setflat, - HG_enc_sethalftone, - HG_enc_sethalftonephase, - HG_enc_setmiterlimit, - HG_enc_setobjectformat, - HG_enc_setpacking, - HG_enc_setscreen, - - HG_enc_setstrokeadjust, - HG_enc_settransfer, - HG_enc_setucacheparams, - HG_enc_setundercolorremoval, - HG_enc_sin, - HG_enc_sqrt, - HG_enc_srand, - HG_enc_stack, - HG_enc_status, - HG_enc_statusdict, - - HG_enc_true, - HG_enc_ucachestatus, - HG_enc_undefinefont, - HG_enc_usertime, - HG_enc_ustrokepath, - HG_enc_version, - HG_enc_vmreclaim, - HG_enc_vmstatus, - HG_enc_wait, - HG_enc_wcheck, - - HG_enc_xcheck, - HG_enc_yield, - HG_enc_defineuserobject, - HG_enc_undefineuserobject, - HG_enc_UserObjects, - HG_enc_cleardictstack, - HG_enc_A, - HG_enc_B, - HG_enc_C, - HG_enc_D, - - HG_enc_E, - HG_enc_F, - HG_enc_G, - HG_enc_H, - HG_enc_I, - HG_enc_J, - HG_enc_K, - HG_enc_L, - HG_enc_M, - HG_enc_N, - - HG_enc_O, - HG_enc_P, - HG_enc_Q, - HG_enc_R, - HG_enc_S, - HG_enc_T, - HG_enc_U, - HG_enc_V, - HG_enc_W, - HG_enc_X, - - HG_enc_Y, - HG_enc_Z, - HG_enc_a, - HG_enc_b, - HG_enc_c, - HG_enc_d, - HG_enc_e, - HG_enc_f, - HG_enc_g, - HG_enc_h, - - HG_enc_i, - HG_enc_j, - HG_enc_k, - HG_enc_l, - HG_enc_m, - HG_enc_n, - HG_enc_o, - HG_enc_p, - HG_enc_q, - HG_enc_r, - - HG_enc_s, - HG_enc_t, - HG_enc_u, - HG_enc_v, - HG_enc_w, - HG_enc_x, - HG_enc_y, - HG_enc_z, - HG_enc_setvmthreshold, - HG_enc_sym_begin_dict_mark, - - HG_enc_sym_end_dict_mark, - HG_enc_currentcolorrendering, - HG_enc_currentdevparams, - HG_enc_currentoverprint, - HG_enc_currentpagedevice, - HG_enc_currentsystemparams, - HG_enc_currentuserparams, - HG_enc_defineresource, - HG_enc_findencoding, - HG_enc_gcheck, - - HG_enc_glyphshow, - HG_enc_languagelevel, - HG_enc_product, - HG_enc_pstack, - HG_enc_resourceforall, - HG_enc_resourcestatus, - HG_enc_revision, - HG_enc_serialnumber, - HG_enc_setcolorrendering, - HG_enc_setdevparams, - - HG_enc_setoverprint, - HG_enc_setsystemparams, - HG_enc_setuserparams, - HG_enc_startjob, - HG_enc_undefineresource, - HG_enc_GlobalFontDirectory, - HG_enc_ASCII85Decode, - HG_enc_ASCII85Encode, - HG_enc_ASCIIHexDecode, - HG_enc_ASCIIHexEncode, - - HG_enc_CCITTFaxDecode, - HG_enc_CCITTFaxEncode, - HG_enc_DCTDecode, - HG_enc_DCTEncode, - HG_enc_LZWDecode, - HG_enc_LZWEncode, - HG_enc_NullEncode, - HG_enc_RunLengthDecode, - HG_enc_RunLengthEncode, - HG_enc_SubFileDecode, - - HG_enc_CIEBasedA, - HG_enc_CIEBasedABC, - HG_enc_DeviceCMYK, - HG_enc_DeviceGray, - HG_enc_DeviceRGB, - HG_enc_Indexed, - HG_enc_Pattern, - HG_enc_Separation, - HG_enc_CIEBasedDEF, - HG_enc_CIEBasedDEFG, - - HG_enc_DeviceN, - - HG_enc_POSTSCRIPT_RESERVED_END, - - HG_enc_END -}; -enum hg_emulationtype_e { - HG_EMU_BEGIN, - HG_EMU_PS_LEVEL_1, - HG_EMU_PS_LEVEL_2, - HG_EMU_PS_LEVEL_3, - HG_EMU_END -}; - -struct hg_vm_s { - gboolean is_global; -}; - -G_END_DECLS - -#endif /* __HIEROGLYPH__HGTYPES_H__ */ diff --git a/hieroglyph/utils.c b/hieroglyph/utils.c deleted file mode 100644 index 18f0970..0000000 --- a/hieroglyph/utils.c +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * utils.c - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <execinfo.h> -#include <stdlib.h> -#include <glib/gstrfuncs.h> -#include <glib/gstring.h> -#include "utils.h" - - -static gboolean __hg_stacktrace_feature = TRUE; -static gboolean __hg_warning_message_feature = TRUE; - -/* - * private functions - */ - -/* - * public functions - */ -gchar * -hg_get_stacktrace(void) -{ - void *traces[256]; - int size, i; - char **strings; - GString *retval = g_string_new(NULL); - - if (__hg_stacktrace_feature == FALSE) - return g_strdup(""); - - size = backtrace(traces, 256); - strings = backtrace_symbols(traces, size); - - for (i = 0; i < size; i++) { - g_string_append(retval, strings[i]); - g_string_append_c(retval, '\n'); - } - free(strings); - - return g_string_free(retval, FALSE); -} - -void -hg_use_stacktrace(gboolean flag) -{ -#ifdef DEBUG - __hg_stacktrace_feature = flag; -#else - g_warning("The stacktrace feature are entirely disabled at the build time."); -#endif -} - -#ifdef DEBUG -gboolean -hg_is_stacktrace_enabled(void) -{ - return __hg_stacktrace_feature; -} -#endif - -void -hg_quiet_warning_messages(gboolean flag) -{ - __hg_warning_message_feature = !flag; -} - -gboolean -hg_allow_warning_messages(void) -{ - return __hg_warning_message_feature; -} diff --git a/hieroglyph/utils.h b/hieroglyph/utils.h deleted file mode 100644 index c9856e3..0000000 --- a/hieroglyph/utils.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * utils.h - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH__UTILS_H__ -#define __HIEROGLYPH__UTILS_H__ - -#include <hieroglyph/hgtypes.h> - - -G_BEGIN_DECLS - -gchar *hg_get_stacktrace (void) G_GNUC_MALLOC; -void hg_use_stacktrace (gboolean flag); -gboolean hg_is_stacktrace_enabled (void) __attribute__ ((weak)); -void hg_quiet_warning_messages(gboolean flag); -gboolean hg_allow_warning_messages(void); - -G_END_DECLS - -#endif /* __HIEROGLYPH__UTILS_H__ */ diff --git a/hieroglyph/version.h.in b/hieroglyph/version.h.in deleted file mode 100644 index 4001dad..0000000 --- a/hieroglyph/version.h.in +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * version.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH__VERSION_H__ -#define __HIEROGLYPH__VERSION_H__ - -#include <glib/gmacros.h> - - -G_BEGIN_DECLS - -#define HIEROGLYPH_VERSION "@VERSION@" -#define HIEROGLYPH_UUID "07ce2f56-f7d0-4a99-8d96-ba44e827a3d5" - -const char *__hg_rcsid G_GNUC_UNUSED = "$Rev$"; - -G_END_DECLS - -#endif /* __HIEROGLYPH__VERSION_H__ */ diff --git a/hieroglyph/version.h.in.in b/hieroglyph/version.h.in.in deleted file mode 100644 index 0c3a799..0000000 --- a/hieroglyph/version.h.in.in +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * version.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH__VERSION_H__ -#define __HIEROGLYPH__VERSION_H__ - -#include <glib/gmacros.h> - - -G_BEGIN_DECLS - -#define HIEROGLYPH_VERSION "@VERSION@" -#define HIEROGLYPH_UUID "%%HIEROGLYPH%%" - -const char *__hg_rcsid G_GNUC_UNUSED = "$Rev$"; - -G_END_DECLS - -#endif /* __HIEROGLYPH__VERSION_H__ */ diff --git a/hieroglyph/vm.c b/hieroglyph/vm.c deleted file mode 100644 index 0fe0737..0000000 --- a/hieroglyph/vm.c +++ /dev/null @@ -1,746 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * vm.c - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <glib/gmem.h> -#include <hieroglyph/hgdict.h> -#include <hieroglyph/hgfile.h> -#include <hieroglyph/hgobject.h> -#include <hieroglyph/hgoperator.h> -#include <hieroglyph/hgstack.h> -#include "vm.h" - - -typedef struct hg_vm_private_s hg_vm_private_t; - -struct hg_vm_private_s { - hg_vm_t instance; - gboolean is_initialized; - hg_error_t error; - hg_emulationtype_t current_level; - hg_object_t *io[HG_FILE_TYPE_END]; - hg_stack_t *stack[HG_STACK_TYPE_END]; - hg_object_t *dict; -}; - - -static gboolean _hg_vm_lineedit_open (gpointer user_data, - error_t *error); -static gsize _hg_vm_lineedit_read (gpointer user_data, - gpointer buffer, - gsize size, - gsize n, - error_t *error); -static gsize _hg_vm_lineedit_write (gpointer user_data, - gconstpointer buffer, - gsize size, - gsize n, - error_t *error); -static gboolean _hg_vm_lineedit_flush (gpointer user_data, - error_t *error); -static gssize _hg_vm_lineedit_seek (gpointer user_data, - gssize offset, - hg_filepos_t whence, - error_t *error); -static void _hg_vm_lineedit_close (gpointer user_data, - error_t *error); -static gboolean _hg_vm_lineedit_is_closed (gpointer user_data); -static gboolean _hg_vm_lineedit_is_eof (gpointer user_data); -static void _hg_vm_lineedit_clear_eof (gpointer user_data); -static gboolean _hg_vm_statementedit_open (gpointer user_data, - error_t *error); -static gsize _hg_vm_statementedit_read (gpointer user_data, - gpointer buffer, - gsize size, - gsize n, - error_t *error); -static gsize _hg_vm_statementedit_write (gpointer user_data, - gconstpointer buffer, - gsize size, - gsize n, - error_t *error); -static gboolean _hg_vm_statementedit_flush (gpointer user_data, - error_t *error); -static gssize _hg_vm_statementedit_seek (gpointer user_data, - gssize offset, - hg_filepos_t whence, - error_t *error); -static void _hg_vm_statementedit_close (gpointer user_data, - error_t *error); -static gboolean _hg_vm_statementedit_is_closed(gpointer user_data); -static gboolean _hg_vm_statementedit_is_eof (gpointer user_data); -static void _hg_vm_statementedit_clear_eof(gpointer user_data); - - -static hg_filetable_t _hg_vm_lineedit_table = { - .open = _hg_vm_lineedit_open, - .read = _hg_vm_lineedit_read, - .write = _hg_vm_lineedit_write, - .flush = _hg_vm_lineedit_flush, - .seek = _hg_vm_lineedit_seek, - .close = _hg_vm_lineedit_close, - .is_closed = _hg_vm_lineedit_is_closed, - .is_eof = _hg_vm_lineedit_is_eof, - .clear_eof = _hg_vm_lineedit_clear_eof, -}; -static hg_filetable_t _hg_vm_statementedit_table = { - .open = _hg_vm_statementedit_open, - .read = _hg_vm_statementedit_read, - .write = _hg_vm_statementedit_write, - .flush = _hg_vm_statementedit_flush, - .seek = _hg_vm_statementedit_seek, - .close = _hg_vm_statementedit_close, - .is_closed = _hg_vm_statementedit_is_closed, - .is_eof = _hg_vm_statementedit_is_eof, - .clear_eof = _hg_vm_statementedit_clear_eof, -}; - -/* - * Private functions - */ -static gboolean -_hg_vm_lineedit_open(gpointer user_data, - error_t *error) -{ - /* XXX */ - return FALSE; -} - -static gsize -_hg_vm_lineedit_read(gpointer user_data, - gpointer buffer, - gsize size, - gsize n, - error_t *error) -{ - /* XXX */ - return 0; -} - -static gsize -_hg_vm_lineedit_write(gpointer user_data, - gconstpointer buffer, - gsize size, - gsize n, - error_t *error) -{ - /* XXX */ - return 0; -} - -static gboolean -_hg_vm_lineedit_flush(gpointer user_data, - error_t *error) -{ - /* XXX */ - return FALSE; -} - -static gssize -_hg_vm_lineedit_seek(gpointer user_data, - gssize offset, - hg_filepos_t whence, - error_t *error) -{ - /* XXX */ - return 0; -} - -static void -_hg_vm_lineedit_close(gpointer user_data, - error_t *error) -{ - /* XXX */ -} - -static gboolean -_hg_vm_lineedit_is_closed(gpointer user_data) -{ - /* XXX */ - return FALSE; -} - -static gboolean -_hg_vm_lineedit_is_eof(gpointer user_data) -{ - /* XXX */ - return FALSE; -} - -static void -_hg_vm_lineedit_clear_eof(gpointer user_data) -{ - /* XXX */ -} - -static gboolean -_hg_vm_statementedit_open(gpointer user_data, - error_t *error) -{ - /* XXX */ - return FALSE; -} - -static gsize -_hg_vm_statementedit_read(gpointer user_data, - gpointer buffer, - gsize size, - gsize n, - error_t *error) -{ - /* XXX */ - return 0; -} - -static gsize -_hg_vm_statementedit_write(gpointer user_data, - gconstpointer buffer, - gsize size, - gsize n, - error_t *error) -{ - /* XXX */ - return 0; -} - -static gboolean -_hg_vm_statementedit_flush(gpointer user_data, - error_t *error) -{ - /* XXX */ - return FALSE; -} - -static gssize -_hg_vm_statementedit_seek(gpointer user_data, - gssize offset, - hg_filepos_t whence, - error_t *error) -{ - /* XXX */ - return FALSE; -} - -static void -_hg_vm_statementedit_close(gpointer user_data, - error_t *error) -{ - /* XXX */ -} - -static gboolean -_hg_vm_statementedit_is_closed(gpointer user_data) -{ - /* XXX */ - return FALSE; -} - -static gboolean -_hg_vm_statementedit_is_eof(gpointer user_data) -{ - /* XXX */ - return FALSE; -} - -static void -_hg_vm_statementedit_clear_eof(gpointer user_data) -{ - /* XXX */ -} - -/* - * Public functions - */ -hg_vm_t * -hg_vm_new(void) -{ - hg_vm_private_t *retval = g_new0(hg_vm_private_t, 1); - hg_stacktype_t i; - - /* initialize VM */ - retval->is_initialized = FALSE; - retval->current_level = HG_EMU_BEGIN; - for (i = HG_STACK_TYPE_OSTACK; i < HG_STACK_TYPE_END; i++) - retval->stack[i] = NULL; - retval->dict = NULL; - - /* complete the initialization here */ - retval->io[HG_FILE_TYPE_STDIN] = hg_object_file_new((hg_vm_t *)retval, - "%stdin", - HG_FILE_MODE_READ); - retval->io[HG_FILE_TYPE_STDOUT] = hg_object_file_new((hg_vm_t *)retval, - "%stdout", - HG_FILE_MODE_WRITE); - retval->io[HG_FILE_TYPE_STDERR] = hg_object_file_new((hg_vm_t *)retval, - "%stderr", - HG_FILE_MODE_WRITE); - retval->io[HG_FILE_TYPE_LINEEDIT] = hg_object_file_new_with_custom((hg_vm_t *)retval, - &_hg_vm_lineedit_table, - HG_FILE_MODE_READ); - retval->io[HG_FILE_TYPE_STATEMENTEDIT] = hg_object_file_new_with_custom((hg_vm_t *)retval, - &_hg_vm_statementedit_table, - HG_FILE_MODE_READ); - - return (hg_vm_t *)retval; -} - -void -hg_vm_destroy(hg_vm_t *vm) -{ - hg_vm_private_t *priv; - hg_filetype_t i; - - hg_return_if_fail (vm != NULL); - - priv = (hg_vm_private_t *)vm; - - if (priv->is_initialized) - hg_vm_finalize(vm); - for (i = 0; i < HG_FILE_TYPE_END; i++) { - if (priv->io[i]) - hg_object_free(vm, priv->io[i]); - } - - g_free(vm); -} - -gpointer -hg_vm_malloc(hg_vm_t *vm, - gsize size) -{ - gpointer retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - /* XXX */ - retval = g_malloc(size); - - return retval; -} - -gpointer -hg_vm_realloc(hg_vm_t *vm, - gpointer object, - gsize size) -{ - gpointer retval; - - hg_return_val_if_fail (vm != NULL, NULL); - - /* XXX */ - retval = g_realloc(object, size); - - return retval; -} - -void -hg_vm_mfree(hg_vm_t *vm, - gpointer data) -{ - hg_return_if_fail (vm != NULL); - - /* XXX */ - g_free(data); -} - -guchar -hg_vm_get_object_format(hg_vm_t *vm) -{ - hg_return_val_if_fail (vm != NULL, 0); - - /* XXX */ - return 0; -} - -gboolean -hg_vm_get_current_allocation_mode(hg_vm_t *vm) -{ - return vm->is_global; -} - -void -hg_vm_set_current_allocation_mode(hg_vm_t *vm, - gboolean is_global) -{ - vm->is_global = is_global; -} - -void -hg_vm_get_attributes(hg_vm_t *vm, - hg_attribute_t *attr) -{ - hg_return_if_fail (vm != NULL); - hg_return_if_fail (attr != NULL); - - /* XXX */ - attr->bit.is_accessible = TRUE; - attr->bit.is_readable = TRUE; - attr->bit.is_executeonly = FALSE; - attr->bit.is_locked = FALSE; - attr->bit.reserved4 = FALSE; - attr->bit.reserved5 = FALSE; - attr->bit.is_global = hg_vm_get_current_allocation_mode(vm); - attr->bit.is_checked = FALSE; -} - -void -hg_vm_set_error(hg_vm_t *vm, - hg_error_t error) -{ - hg_vm_private_t *priv; - - hg_return_if_fail (vm != NULL); - - priv = (hg_vm_private_t *)vm; - if (priv->error == 0) { - priv->error = error; - } else { - /* XXX */ - } -} - -hg_error_t -hg_vm_get_error(hg_vm_t *vm) -{ - hg_vm_private_t *priv; - - hg_return_val_if_fail (vm != NULL, HG_e_VMerror); - - priv = (hg_vm_private_t *)vm; - - return priv->error; -} - -void -hg_vm_clear_error(hg_vm_t *vm) -{ - hg_vm_private_t *priv; - - hg_return_if_fail (vm != NULL); - - priv = (hg_vm_private_t *)vm; - priv->error = 0; -} - -hg_object_t * -hg_vm_get_io(hg_vm_t *vm, - hg_filetype_t iotype) -{ - hg_vm_private_t *priv; - - hg_return_val_if_fail (vm != NULL, NULL); - - priv = (hg_vm_private_t *)vm; - - return priv->io[iotype]; -} - -void -hg_vm_set_io(hg_vm_t *vm, - hg_object_t *object) -{ - hg_vm_private_t *priv; - - hg_return_if_fail (vm != NULL); - hg_return_if_fail (object != NULL); - hg_return_if_fail (HG_OBJECT_IS_FILE (object)); - - priv = (hg_vm_private_t *)vm; - priv->io[HG_OBJECT_FILE_DATA (object)->iotype] = object; -} - -gboolean -hg_vm_initialize(hg_vm_t *vm) -{ - hg_vm_private_t *priv; - gboolean retval; - - hg_return_val_if_fail (vm != NULL, FALSE); - - priv = (hg_vm_private_t *)vm; - if (priv->is_initialized) - return FALSE; - - priv->is_initialized = TRUE; - priv->stack[HG_STACK_TYPE_OSTACK] = hg_stack_new(vm, 65535); - priv->stack[HG_STACK_TYPE_ESTACK] = hg_stack_new(vm, 65535); - priv->stack[HG_STACK_TYPE_DSTACK] = hg_stack_new(vm, 65535); - priv->dict = hg_object_dict_new(vm, 65535); - - /* push globaldict to dstack */ - hg_stack_push(priv->stack[HG_STACK_TYPE_DSTACK], priv->dict); - - /* initialize operators */ - retval = hg_object_operator_initialize(vm, HG_EMU_PS_LEVEL_3); - - return TRUE; -} - -gboolean -hg_vm_finalize(hg_vm_t *vm) -{ - hg_vm_private_t *priv; - hg_stacktype_t j; - - hg_return_val_if_fail (vm != NULL, FALSE); - - priv = (hg_vm_private_t *)vm; - - hg_return_val_if_fail (priv->is_initialized, FALSE); - - hg_object_operator_finalize(vm, HG_EMU_BEGIN); - if (priv->dict) - hg_object_free(vm, priv->dict); - for (j = 0; j < HG_STACK_TYPE_END; j++) { - if (priv->stack[j]) - hg_stack_free(vm, priv->stack[j]); - } - /* XXX */ - - priv->is_initialized = FALSE; - - return TRUE; -} - -hg_emulationtype_t -hg_vm_get_emulation_level(hg_vm_t *vm) -{ - hg_vm_private_t *priv; - - hg_return_val_if_fail (vm != NULL, HG_EMU_BEGIN); - - priv = (hg_vm_private_t *)vm; - - return priv->current_level; -} - -gboolean -hg_vm_set_emulation_level(hg_vm_t *vm, - hg_emulationtype_t level) -{ - hg_vm_private_t *priv; - - hg_return_val_if_fail (vm != NULL, FALSE); - - priv = (hg_vm_private_t *)vm; - - if (hg_object_operator_finalize(vm, level - 1) == FALSE) - return FALSE; - - if (hg_object_operator_initialize(vm, level) == FALSE) - return FALSE; - - priv->current_level = level; - - return TRUE; -} - -gboolean -hg_vm_stepi(hg_vm_t *vm, - gboolean *is_proceeded) -{ - hg_vm_private_t *priv; - hg_stack_t *estack, *ostack; - hg_object_t *object, *result; - gboolean retval = TRUE; - gsize index; - - hg_return_val_if_fail (vm != NULL, FALSE); - hg_return_val_if_fail (is_proceeded != NULL, FALSE); - - priv = (hg_vm_private_t *)vm; - estack = priv->stack[HG_STACK_TYPE_ESTACK]; - ostack = priv->stack[HG_STACK_TYPE_OSTACK]; - object = hg_stack_index(estack, 0); - - *is_proceeded = FALSE; - evaluate: - switch (HG_OBJECT_GET_TYPE (object)) { - case HG_OBJECT_TYPE_ARRAY: - case HG_OBJECT_TYPE_NAME: - if (HG_OBJECT_ATTR_IS_EXECUTABLE (object)) { - if (HG_OBJECT_GET_TYPE (object) == HG_OBJECT_TYPE_NAME) { - result = hg_vm_dict_lookup(vm, object); - if (result == NULL) { - hg_vm_set_error(vm, HG_e_undefined); - return FALSE; - } - } else { - result = object; - *is_proceeded = TRUE; - } - if (!hg_stack_push(estack, result)) { - hg_vm_set_error(vm, HG_e_execstackoverflow); - return FALSE; - } - hg_stack_roll(estack, 2, 1); - hg_stack_pop(estack); - break; - } - case HG_OBJECT_TYPE_NULL: - case HG_OBJECT_TYPE_INTEGER: - case HG_OBJECT_TYPE_REAL: - case HG_OBJECT_TYPE_BOOLEAN: - case HG_OBJECT_TYPE_STRING: - case HG_OBJECT_TYPE_DICT: - case HG_OBJECT_TYPE_MARK: - if (hg_stack_push(ostack, object) == FALSE) { - hg_vm_set_error(vm, HG_e_stackoverflow); - retval = FALSE; - } - hg_stack_pop(estack); - *is_proceeded = TRUE; - break; - case HG_OBJECT_TYPE_EVAL: - result = hg_vm_dict_lookup(vm, object); - if (result == NULL) { - hg_vm_set_error(vm, HG_e_undefined); - return FALSE; - } - object = result; - goto evaluate; - case HG_OBJECT_TYPE_FILE: - /* XXX: read a token and push to estack */ - break; - case HG_OBJECT_TYPE_OPERATOR: - index = hg_stack_length(estack); - retval = hg_object_operator_invoke(vm, object); - hg_stack_roll(estack, hg_stack_length(estack) - index + 1, 1); - hg_stack_pop(estack); - *is_proceeded = TRUE; - break; - default: - g_warning("[BUG] Unknown object type `%d'", HG_OBJECT_GET_TYPE (object)); - break; - } - - return retval; -} - -gboolean -hg_vm_step(hg_vm_t *vm) -{ - gboolean retval, is_proceeded; - - while ((retval = hg_vm_stepi(vm, &is_proceeded))) { - if (is_proceeded) - break; - } - - return retval; -} - -hg_object_t * -hg_vm_get_dict(hg_vm_t *vm) -{ - hg_vm_private_t *priv; - - hg_return_val_if_fail (vm != NULL, NULL); - - priv = (hg_vm_private_t *)vm; - - return priv->dict; -} - -hg_object_t * -hg_vm_dict_lookup(hg_vm_t *vm, - hg_object_t *object) -{ - hg_vm_private_t *priv; - hg_stack_t *dstack; - hg_object_t *dict, *retval; - gsize i, length; - - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (object != NULL, NULL); - - priv = (hg_vm_private_t *)vm; - dstack = priv->stack[HG_STACK_TYPE_DSTACK]; - length = hg_stack_length(dstack); - for (i = 0; i < length; i++) { - dict = hg_stack_index(dstack, i); - if ((retval = hg_object_dict_lookup(dict, object)) != NULL) - return retval; - } - - return NULL; -} - -gboolean -hg_vm_dict_remove(hg_vm_t *vm, - const gchar *name, - gboolean remove_all) -{ - hg_vm_private_t *priv; - hg_stack_t *dstack; - hg_object_t *dict, *nobject; - gsize i, length; - gboolean retval = FALSE; - - hg_return_val_if_fail (vm != NULL, FALSE); - hg_return_val_if_fail (name != NULL, FALSE); - - priv = (hg_vm_private_t *)vm; - dstack = priv->stack[HG_STACK_TYPE_DSTACK]; - length = hg_stack_length(dstack); - for (i = 0; i < length; i++) { - dict = hg_stack_index(dstack, i); - nobject = hg_vm_name_lookup(vm, name); - retval |= hg_object_dict_remove(dict, nobject); - if (retval && remove_all == FALSE) - break; - } - - return retval; -} - -hg_object_t * -hg_vm_get_currentdict(hg_vm_t *vm) -{ - hg_vm_private_t *priv; - hg_object_t *retval; - hg_stack_t *dstack; - - hg_return_val_if_fail (vm != NULL, NULL); - - priv = (hg_vm_private_t *)vm; - dstack = priv->stack[HG_STACK_TYPE_DSTACK]; - retval = hg_stack_index(dstack, 0); - - return retval; -} - -hg_object_t * -hg_vm_name_lookup(hg_vm_t *vm, - const gchar *name) -{ - hg_return_val_if_fail (vm != NULL, NULL); - hg_return_val_if_fail (name != NULL, NULL); - - /* XXX */ - - return hg_object_name_new(vm, name, FALSE); -} diff --git a/hieroglyph/vm.h b/hieroglyph/vm.h deleted file mode 100644 index b04199e..0000000 --- a/hieroglyph/vm.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * vm.h - * Copyright (C) 2005-2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH__VM_H__ -#define __HIEROGLYPH__VM_H__ - -#include <hieroglyph/hgtypes.h> - - -hg_vm_t *hg_vm_new (void) G_GNUC_WARN_UNUSED_RESULT; -void hg_vm_destroy (hg_vm_t *vm); -gpointer hg_vm_malloc (hg_vm_t *vm, - gsize size) G_GNUC_WARN_UNUSED_RESULT; -gpointer hg_vm_realloc (hg_vm_t *vm, - gpointer object, - gsize size) G_GNUC_WARN_UNUSED_RESULT; -void hg_vm_mfree (hg_vm_t *vm, - gpointer data); -guchar hg_vm_get_object_format (hg_vm_t *vm); -gboolean hg_vm_get_current_allocation_mode(hg_vm_t *vm); -void hg_vm_set_current_allocation_mode(hg_vm_t *vm, - gboolean is_global); -void hg_vm_get_attributes (hg_vm_t *vm, - hg_attribute_t *attr); -void hg_vm_set_error (hg_vm_t *vm, - hg_error_t error); -hg_error_t hg_vm_get_error (hg_vm_t *vm); -void hg_vm_clear_error (hg_vm_t *vm); -hg_object_t *hg_vm_get_io (hg_vm_t *vm, - hg_filetype_t iotype); -void hg_vm_set_io (hg_vm_t *vm, - hg_object_t *object); -gboolean hg_vm_initialize (hg_vm_t *vm); -gboolean hg_vm_finalize (hg_vm_t *vm); -hg_emulationtype_t hg_vm_get_emulation_level (hg_vm_t *vm); -gboolean hg_vm_set_emulation_level (hg_vm_t *vm, - hg_emulationtype_t level); -gboolean hg_vm_stepi (hg_vm_t *vm, - gboolean *is_proceeded); -gboolean hg_vm_step (hg_vm_t *vm); -hg_object_t *hg_vm_get_dict (hg_vm_t *vm); -hg_object_t *hg_vm_dict_lookup (hg_vm_t *vm, - hg_object_t *object); -gboolean hg_vm_dict_remove (hg_vm_t *vm, - const gchar *name, - gboolean remove_all); -hg_object_t *hg_vm_get_currentdict (hg_vm_t *vm); -hg_object_t *hg_vm_name_lookup (hg_vm_t *vm, - const gchar *name) G_GNUC_WARN_UNUSED_RESULT; - - -#endif /* __HIEROGLYPH__VM_H__ */ diff --git a/lib/Makefile.am b/lib/Makefile.am deleted file mode 100644 index ec8d027..0000000 --- a/lib/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -NULL = - -hgpslibdir = $(HIEROGLYPH_LIBDIR) -hgpslib_DATA = \ - hg_init.ps \ - hg_init_lv2.ps \ - hg_init_lv3.ps \ - $(NULL) - -EXTRA_DIST = \ - $(hgpslib_DATA) \ - $(NULL) diff --git a/lib/hg_init.ps b/lib/hg_init.ps deleted file mode 100644 index 8a8236f..0000000 --- a/lib/hg_init.ps +++ /dev/null @@ -1,463 +0,0 @@ -%!PS-Adobe-1.0 - -%% NOTE: don't use "end" operator until initialization is finished -%% NOTE: and push userdict into the dictionary stack. -%% NOTE: otherwise all initialization will fails due to invalid -%% NOTE: dictionary stack. at this time, systemdict is only in -%% NOTE: the dictionary stack. - -% create userdict if it's not defined -false .setglobal -systemdict /userdict known not { - systemdict /userdict 200 dict .forceput % need to avoid the object sanity check. -} if - -% change an allocation mode to global -true .setglobal - -%% -%% Define procedures -%% - -%%% -%%% pre-required operators -% key any odef - -/odef { - { - % prepare for error recovery - count copy count 2 idiv array astore - $error /.ostack 3 -1 roll put - null stopped { - $error /command null put - clear $error /.ostack get aload pop - stop - } if - } % -key- -any- -proc- - dup 13 4 -1 roll .forceput % -key- -proc- - dup 15 get % -key- -proc- -proc- - 2 3 index .forceput - .odef -} bind .odef -%% disable .forceput for security reason -systemdict /.forceput .undef -systemdict /.odef .undef - -%%% -%%% these aren't official operators/procedures for PostScript -% -string- runlibfile - -/runlibfile { - .findlibfile { - run - } { - errordict /undefinedfilename get exec - } ifelse -} bind def -% -file- any write=only - -/write=only { - .stringcvs writestring -} bind odef -% -file- any write==only - -/write==only { - .write==only -} bind odef -% any =only - -/=only { - (%stdout) (w) file exch write=only -} bind odef -% any ==only - -/==only { - (%stdout) (w) file exch write==only -} bind odef -% -string- -string- .concatstring -string- -/.concatstring { - exch dup length 2 index length add string - dup dup 4 2 roll copy - length 4 -1 roll putinterval -} bind def -% - .printversion - -/.printversion { - .product print .revision dup 1000000 idiv exch 1000000 mod dup 1000 idiv exch 1000 mod - ( ) print 3 -1 roll ==only (.) print exch ==only (.) print ==only - ( \(r) print .hgrevision ==only (\)\n\n) print -} bind def -% - .promptmsg -string- -/.promptmsg { - count mark (PS) 3 -1 roll dup 0 ne { - ([) exch 4 string cvs (]) - counttomark 1 sub { - .concatstring - } repeat - } { - pop - } ifelse - (>) .concatstring - exch pop -} bind def -systemdict /.statementedit known { - /..statementedit { - % null isn't exactly used. it's just pushed to align the depth of the stack. - .promptmsg //null exch .statementedit exch pop - } bind def -} { - /..statementedit { - prompt (%statementedit) (r) file - } bind def -} ifelse - -%%% -%%% Level 1 operators -% string seek anchorsearch post match true | string false -/anchorsearch { - {1 index 3 1 roll} stopped { - $error /newerror get { - $error /errorname get /rangecheck eq { - $error /errorname /stackunderflow put - } if - stop - } if - } if - search { - length 0 eq { - 3 -1 roll pop true - } { - pop pop false - } ifelse - } { - pop false - } ifelse -} bind odef -% any -string- cvs -substring- -/cvs { - count 2 lt { - /cvs errordict /stackunderflow get exec - } if - dup type /stringtype ne { - /cvs errordict /typecheck get exec - } { - exch .stringcvs exch copy - } ifelse -} bind odef -% key font|cidfont definefont font|cidfont -/definefont { - .definefont -} bind odef -% - executive - -/executive { - { - { - {..statementedit} stopped { - % need to detect an empty line separately to take care of /undefinedfilename. - $error /newerror get { - $error /errorname get /undefinedfilename eq { - pop pop .clearerror .exit - } { - % we don't care of this error here. - stop - } ifelse - } if - } if - dup type /filetype eq {cvx exec} if - } stopped { - $error /newerror get { - errordict /handleerror get exec - .clearerror - } if - } if - } loop -} bind def -% key findfont -dict- -/findfont { - .findfont -} bind odef -% num floor num -/floor { - dup cvi - 1 index 1 index sub - 0 lt { - 1 sub - } if - exch type /realtype eq {cvr} if -} bind odef -% -key- load -value- -/load { - dup where { - exch get - } { - /load errordict /undefined get exec - } ifelse -} bind odef -% matrix -matrix- -/matrix { - 6 array identmatrix -} bind odef -% pstack - -/pstack { - 0 1 count 3 sub {index ==} for -} bind odef -% - prompt - -/prompt { - .promptmsg print flush -} bind odef -% -array- index -array- putinterval - -% -string- index -string- putinterval - -/putinterval { - dup length - 2 index add - 3 index length gt { - /putinterval cvx - errordict /rangecheck get exec - } if - {2 index 2 index 3 -1 roll put 1 add} forall - pop pop -} bind odef -% - quit - -/quit { - 0 .quit -} bind odef -% -string- run - -/run { - (r) file cvx exec -} bind odef -% stack - -/stack { - 0 1 count 3 sub {index =} for -} bind odef -% - start - -/start { - executive -} bind odef -% key value store - -/store { - 1 index where { - } { - currentdict - } ifelse - 3 1 roll put -} bind odef -% key undefinefont - -/undefinefont { - .undefinefont -} bind odef -% - version -string- -/version { - (1000) -} odef -% any = - -/= { - =only (\n) print -} bind odef -% any == - -/== { - ==only (\n) print -} bind odef - -%% Initialize error procedures -% <command> <error> .seterror - -/.seterror { - $error /newerror true put - $error exch /errorname exch put - $error exch /command exch put - $error /.isstop true put - $error /recordstacks known { - $error /recordstacks get - } { - true - } ifelse { - % record stacks - count copy count 2 idiv array astore $error /ostack 3 -1 roll put - countexecstack array execstack $error /estack 3 -1 roll % -dict- /estack -array- - % modify estack to make a correct stack when an error actually happened - dup length 1 sub 0 exch getinterval % -dict- /estack -array- - dup length array copy % -dict- /estack -array- - dup dup length 1 sub $error /command get put put - countdictstack array dictstack $error /dstack 3 -1 roll put - } if -} bind def -% <command> <error> .defaulterrorhandler - -/.defaulterrorhandler { - % enter the local allocation mode in advance to avoid /invalidaccess again. - false .setglobal - .seterror - stop -} bind def -% - handleerror - -/handleerror { - errordict /handleerror get exec -} bind odef -% - .printerror - -/.printerror { - % stacking $error and evaluate the value doesn't work. - % because the executable object may be in the dictionary. - % it will does into the estack directly then. - $error /newerror get { - (Error: ) print $error /errorname get ==only - ( in ) print $error /command get ==only - (\n) print - % save objects in current ostack - count array astore - $error /ostack known { - $error /ostack get dup length - (Operand Stack[) print =only (]:\n) print - {( ) print ==only} forall - (\n) print - } if - $error /estack known { - $error /estack get dup length - (Execution Stack[) print =only (]:\n) print - {( ) print ==only} forall - (\n) print - } if - $error /dstack known { - $error /dstack get dup length - (Dictionary stack[) print =only (]:\n) print - { - ( ) print - dup type /dicttype eq { - (--dict:) print - dup length ==only (/) print dup maxlength ==only - dup wcheck not { - ((ro)) print - } if - /gcheck where { - pop gcheck { - ((G)) - } { - ((L)) - } ifelse print - } { - pop - } ifelse (--) print - } { - ==only - } ifelse - } forall - (\n) print - } if - % restore objects - aload pop - } if -} bind def - -mark /dictfull /dictstackoverflow /dictstackunderflow /execstackoverflow -/interrupt /invalidaccess /invalidexit /invalidfileaccess /invalidfont -/invalidrestore /ioerror /limitcheck /nocurrentpoint /rangecheck -/stackoverflow /stackunderflow /syntaxerror /timeout /typecheck /undefined -/undefinedfilename /undefinedresult /unmatchedmark /unregistered /VMerror -counttomark { - dup [exch {.defaulterrorhandler} /exec load] cvx bind errordict 3 1 roll put -} repeat -cleartomark - -% create StandardEncoding vector table -/StandardEncoding [ - % \00x - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \01x - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \02x - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \03x - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \04x - /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright - % \05x - /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash - % \06x - /zero /one /two /three /four /five /six /seven - % \07x - /eight /nine /colon /semicolon /less /equal /greater /question - % \10x - /at /A /B /C /D /E /F /G - % \11x - /H /I /J /K /L /M /N /O - % \12x - /P /Q /R /S /T /U /V /W - % \13x - /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore - % \14x - /quoteleft /a /b /c /d /e /f /g - % \15x - /h /i /j /k /l /m /n /o - % \16x - /p /q /r /s /t /u /v /w - % \17x - /x /y /z /braceleft /bar /braceright /asciitilde /.notdef - % \20x - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \21x - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \22x - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \23x - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \24x - /.notdef /exclamdown /cent /sterling /fraction /yen /florin /section - % \25x - /currency /quotesingle /quotedblleft /guillemotleft /guilsingleft /guilsinglright /fi /fl - % \26x - /.notdef /endash /dagger /daggerdbl /periodcentered /.notdef /paragraph /bullet - % \27x - /.quotesinglbase /quotedblbase /quotedblright /guillemotright /ellipsis /perthousand /.notdef /questiondown - % \30x - /.notdef /grave /acute /circumflex /tilde /macron /breve /dotaccent - % \31x - /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron - % \32x - /emdash /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \33x - /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef - % \34x - /.notdef /AE /.notdef /ordfeminine /.notdef /.notdef /.notdef /.notdef - % \35x - /Lslash /Oslash /OE /ordmasculine /.notdef /.notdef /.notdef /.notdef - % \36x - /.notdef /ae /.notdef /.notdef /.notdef /dotlessi /.notdef /.notdef - % \37x - /lslash /oslash /oe /germandbls /.notdef /.notdef /.notdef /.notdef] def - -% initialize PostScript Level specific things. -systemdict /languagelevel known { - languagelevel 2 gt { - (hg_init_lv2.ps) run - } if -} if - -false .setglobal -userdict begin - -%% -%% almost initialization finished here -%% and allows 'end' operator to be described now. -%% - -%% initialize $error dictionary -% $error is a built-in dictionary on hieroglyph. -$error begin - /newerror false def - /command null def -end -%% initialize handleerror in errordict -errordict begin - /handleerror /.printerror load def -end -%% initialize serverdict -serverdict begin - /exitserver { } def -end - -%% -%% Initialize the plugins -%% -.initplugins - -%% -%% Set the default value for system parapeters -%% -/QUIET where not {/QUIET false def} {pop} ifelse - -%% -%% ready to go -%% -QUIET not {.printversion} if - -% /start will be invoked. diff --git a/lib/hg_init_lv2.ps b/lib/hg_init_lv2.ps deleted file mode 100644 index 54f070c..0000000 --- a/lib/hg_init_lv2.ps +++ /dev/null @@ -1,55 +0,0 @@ -%!PS-Adobe-2.0 - -%% NOTE: don't use "end" operator until initialization is finished -%% NOTE: and push userdict into the dictionary stack. -%% NOTE: otherwise all initialization will fails due to invalid -%% NOTE: dictionary stack. at this time, systemdict is only in -%% NOTE: the dictionary stack. - -% change an allocation mode to global. -true .setglobal - -% create globaldict if it's not defined -/globaldict known not { - /globaldict 200 dict def -} if - -% - currentglobal bool -/currentglobal /.currentglobal load def -% key font|cidfont definefont font|cidfont -/definefont { - /Font defineresource -} bind odef -% key findfont -dict- -/findfont { - /Font findresource -} bind odef -/product /.product load def -/revision /.revision load def -% bool setglobal - -/setglobal /.setglobal load def -% dict key undef - -/undef /.undef load def -% key undefinefont - -/undefinefont { - /Font undefineresource -} bind odef - -%% -%% Initialize error procedures on PS Level2 -%% -mark /configurationerror /undefinedresource -counttomark { - dup [exch {.defaulterrorhandler} /exec cvx] cvx bind errordict 3 1 roll put -} repeat -cleartomark - -% initialize $error dictionary -$error /recordstacks true put % this parameter are available on PS2 or later. - -% initialize PostScript Level specific things -languagelevel 3 gt { - (hg_init_lv3.ps) run -} if - -globaldict begin diff --git a/lib/hg_init_lv3.ps b/lib/hg_init_lv3.ps deleted file mode 100644 index 9ab0384..0000000 --- a/lib/hg_init_lv3.ps +++ /dev/null @@ -1,7 +0,0 @@ -%!PS-Adobe-3.0 - -%% NOTE: don't use "end" operator until initialization is finished -%% NOTE: and push userdict into the dictionary stack. -%% NOTE: otherwise all initialization will fails due to invalid -%% NOTE: dictionary stack. at this time, systemdict is only in -%% NOTE: the dictionary stack. diff --git a/plugins/Makefile.am b/plugins/Makefile.am deleted file mode 100644 index 0d79d52..0000000 --- a/plugins/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -NULL = -SUBDIRS = debug test - -if ENABLE_LIBEDIT -SUBDIRS += libedit -endif - -EXTRA_DIST = \ - $(NULL) diff --git a/plugins/debug/Makefile.am b/plugins/debug/Makefile.am deleted file mode 100644 index b0f97e1..0000000 --- a/plugins/debug/Makefile.am +++ /dev/null @@ -1,35 +0,0 @@ -NULL = - -INCLUDES = \ - $(HG_CFLAGS) \ - $(NULL) - -LIBS = \ - @LDFLAGS@ \ - -export-dynamic \ - $(HG_LIBS) \ - $(NULL) -LDADDS = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) - -plugindir = $(HIEROGLYPH_PLUGINDIR) -plugin_LTLIBRARIES = \ - libext-debug.la \ - $(NULL) - -libext_debug_la_SOURCES = \ - debug-main.c \ - $(NULL) -libext_debug_la_CFLAGS = \ - -DHG_LOG_DOMAIN="\"Debug-Extension\"" \ - $(CFLAGS) \ - $(NULL) -libext_debug_la_LDFLAGS = \ - -avoid-version \ - -module \ - $(LDFLAGS) \ - $(NULL) -libext_debug_la_LIBADD = \ - $(LDADDS) \ - $(NULL) diff --git a/plugins/debug/debug-main.c b/plugins/debug/debug-main.c deleted file mode 100644 index 02f6c0d..0000000 --- a/plugins/debug/debug-main.c +++ /dev/null @@ -1,223 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * debug-main.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <hieroglyph/hgdict.h> -#include <hieroglyph/hglog.h> -#include <hieroglyph/hgmem.h> -#include <hieroglyph/hgplugins.h> -#include <hieroglyph/hgstack.h> -#include <hieroglyph/hgvaluenode.h> -#include <hieroglyph/operator.h> -#include <hieroglyph/vm.h> - -#define BUILD_OP(vm, pool, sdict, name, func) \ - G_STMT_START { \ - HgOperator *__hg_op; \ - \ - hg_operator_build_operator__inline(_debug_op_, vm, pool, sdict, name, func, __hg_op); \ - if (__hg_op != NULL) { \ - __debug_operator_list[HG_debug_op_##func] = __hg_op; \ - hg_mem_pool_add_root_node(pool, __hg_op); \ - } \ - } G_STMT_END -#define REMOVE_OP(pool, sdict, name, func) \ - G_STMT_START { \ - HgValueNode *__hg_node, *__hg_key; \ - HgOperator *__hg_op; \ - \ - HG_VALUE_MAKE_NAME_STATIC (pool, __hg_key, #name); \ - if ((__hg_node = hg_dict_lookup(sdict, __hg_key)) != NULL) { \ - __hg_op = HG_VALUE_GET_OPERATOR (__hg_node); \ - if (__hg_op == __debug_operator_list[HG_debug_op_##func]) { \ - hg_dict_remove(sdict, __hg_key); \ - } \ - hg_mem_pool_remove_root_node(pool, __hg_op); \ - hg_mem_free(__hg_op); \ - } \ - hg_mem_free(__hg_key); \ - } G_STMT_END -#define DEFUNC_OP(func) \ - static gboolean \ - _debug_op_##func(HgOperator *op, \ - gpointer data) \ - { \ - HgVM *vm = data; \ - gboolean retval = FALSE; -#define DEFUNC_OP_END \ - return retval; \ - } - -typedef enum { - HG_debug_op_breakpoint = 0, - HG_debug_op_startgc, - HG_debug_op_END -} HgOperatorDebugEncoding; - - -static gboolean plugin_init (void); -static gboolean plugin_finalize (void); -static gboolean plugin_load (HgPlugin *plugin, - HgVM *vm); -static gboolean plugin_unload (HgPlugin *plugin, - HgVM *vm); - - -static HgPluginVTable vtable = { - .init = plugin_init, - .finalize = plugin_finalize, - .load = plugin_load, - .unload = plugin_unload, -}; -HgOperator *__debug_operator_list[HG_debug_op_END]; - - -/* - * Private Functions - */ -DEFUNC_OP (breakpoint) -G_STMT_START -{ - (void)vm; - retval = TRUE; - G_BREAKPOINT(); -} G_STMT_END; -DEFUNC_OP_END - -DEFUNC_OP (startgc) -G_STMT_START -{ - HgMemPool *pool; - HgStack *ostack = hg_vm_get_ostack(vm); - gboolean result, flag = hg_vm_is_global_pool_used(vm); - HgValueNode *node; - - /* do GC for only local pool */ - hg_vm_use_global_pool(vm, FALSE); - pool = hg_vm_get_current_pool(vm); - result = hg_mem_garbage_collection(pool); - HG_VALUE_MAKE_BOOLEAN (pool, node, result); - hg_vm_use_global_pool(vm, flag); - - retval = hg_stack_push(ostack, node); - if (!retval) - _hg_operator_set_error(vm, op, VM_e_stackoverflow); -} G_STMT_END; -DEFUNC_OP_END - -static gboolean -plugin_init(void) -{ - gint i; - - for (i = 0; i < HG_debug_op_END; i++) { - __debug_operator_list[i] = NULL; - } - - return TRUE; -} - -static gboolean -plugin_finalize(void) -{ - return TRUE; -} - -static gboolean -plugin_load(HgPlugin *plugin, - HgVM *vm) -{ - HgDict *systemdict; - HgMemPool *pool; - gboolean is_global; - - g_return_val_if_fail (plugin != NULL, FALSE); - g_return_val_if_fail (vm != NULL, FALSE); - - if (plugin->user_data != NULL) { - hg_log_warning("already loaded."); - return FALSE; - } - systemdict = hg_vm_get_dict_systemdict(vm); - is_global = hg_vm_is_global_pool_used(vm); - hg_vm_use_global_pool(vm, TRUE); - pool = hg_vm_get_current_pool(vm); - - BUILD_OP (vm, pool, systemdict, .breakpoint, breakpoint); - BUILD_OP (vm, pool, systemdict, .startgc, startgc); - - hg_vm_use_global_pool(vm, is_global); - - plugin->user_data = systemdict; - - return TRUE; -} - -static gboolean -plugin_unload(HgPlugin *plugin, - HgVM *vm) -{ - HgMemPool *pool; - HgDict *systemdict; - gboolean is_global; - - g_return_val_if_fail (plugin != NULL, FALSE); - g_return_val_if_fail (vm != NULL, FALSE); - - if (plugin->user_data != NULL) { - hg_log_warning("not yet loaded."); - return FALSE; - } - - systemdict = hg_vm_get_dict_systemdict(vm); - is_global = hg_vm_is_global_pool_used(vm); - hg_vm_use_global_pool(vm, TRUE); - pool = hg_vm_get_current_pool(vm); - - REMOVE_OP (pool, systemdict, .startgc, startgc); - hg_vm_use_global_pool(vm, is_global); - - plugin->user_data = NULL; - - return TRUE; -} - -/* - * Public Functions - */ -HgPlugin * -plugin_new(HgMemPool *pool) -{ - HgPlugin *retval; - - g_return_val_if_fail (pool != NULL, NULL); - - retval = hg_plugin_new(pool, HG_PLUGIN_EXTENSION); - retval->version = HG_PLUGIN_VERSION; - retval->vtable = &vtable; - - return retval; -} diff --git a/plugins/libedit/Makefile.am b/plugins/libedit/Makefile.am deleted file mode 100644 index ab18388..0000000 --- a/plugins/libedit/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -NULL = - -INCLUDES = \ - $(HG_CFLAGS) \ - $(NULL) - -LIBS = \ - @LDFLAGS@ \ - -export-dynamic \ - $(HG_LIBS) \ - $(LIBEDIT_LIBS) \ - $(NULL) -LDADDS = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) - -plugindir = $(HIEROGLYPH_PLUGINDIR) -plugin_LTLIBRARIES = \ - libext-libedit.la \ - $(NULL) - -libext_libedit_la_SOURCES = \ - libedit-main.c \ - $(NULL) -libext_libedit_la_CFLAGS = \ - -DHG_LOG_DOMAIN="\"Libedit-Extension\"" \ - $(CFLAGS) \ - $(NULL) -libext_libedit_la_LDFLAGS = \ - -avoid-version \ - -module \ - $(LDFLAGS) \ - $(NULL) -libext_libedit_la_LIBADD = \ - $(LDADDS) \ - $(NULL) diff --git a/plugins/libedit/libedit-main.c b/plugins/libedit/libedit-main.c deleted file mode 100644 index f3be90c..0000000 --- a/plugins/libedit/libedit-main.c +++ /dev/null @@ -1,414 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * libedit-main.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#ifndef USE_LIBEDIT -#error Please install libedit and run configure again. This plugin is for libedit only. -#endif /* !USE_LIBEDIT */ - -#include <editline/readline.h> -#include <hieroglyph/hgdict.h> -#include <hieroglyph/hgfile.h> -#include <hieroglyph/hglineedit.h> -#include <hieroglyph/hglog.h> -#include <hieroglyph/hgmem.h> -#include <hieroglyph/hgplugins.h> -#include <hieroglyph/hgstack.h> -#include <hieroglyph/hgstring.h> -#include <hieroglyph/hgvaluenode.h> -#include <hieroglyph/operator.h> -#include <hieroglyph/vm.h> - - -#define BUILD_OP(vm, pool, sdict, name, func) \ - G_STMT_START { \ - HgOperator *__hg_op; \ - \ - hg_operator_build_operator__inline(_libedit_op_, vm, pool, sdict, name, func, __hg_op); \ - if (__hg_op != NULL) { \ - __libedit_operator_list[HG_libedit_op_##func] = __hg_op; \ - hg_mem_pool_add_root_node(pool, __hg_op); \ - } \ - } G_STMT_END -#define REMOVE_OP(pool, sdict, name, func) \ - G_STMT_START { \ - HgValueNode *__hg_node, *__hg_key; \ - HgOperator *__hg_op; \ - \ - HG_VALUE_MAKE_NAME_STATIC (pool, __hg_key, #name); \ - if ((__hg_node = hg_dict_lookup(sdict, __hg_key)) != NULL) { \ - __hg_op = HG_VALUE_GET_OPERATOR (__hg_node); \ - if (__hg_op == __libedit_operator_list[HG_libedit_op_##func]) { \ - hg_dict_remove(sdict, __hg_key); \ - } \ - hg_mem_pool_remove_root_node(pool, __hg_op); \ - hg_mem_free(__hg_op); \ - } \ - hg_mem_free(__hg_key); \ - } G_STMT_END -#define DEFUNC_OP(func) \ - static gboolean \ - _libedit_op_##func(HgOperator *op, \ - gpointer data) \ - { \ - HgVM *vm = data; \ - gboolean retval = FALSE; -#define DEFUNC_OP_END \ - return retval; \ - } - -typedef enum { - HG_libedit_op_loadhistory = 0, - HG_libedit_op_statementedit, - HG_libedit_op_savehistory, - HG_libedit_op_END -} HgOperatorLibeditEncoding; - - -static gboolean plugin_init (void); -static gboolean plugin_finalize (void); -static gboolean plugin_load (HgPlugin *plugin, - HgVM *vm); -static gboolean plugin_unload (HgPlugin *plugin, - HgVM *vm); -static gchar *_hg_line_edit__libedit_real_get_line (HgLineEdit *lineedit, - const gchar *prompt); -static void _hg_line_edit__libedit_real_add_history (HgLineEdit *lineedit, - const gchar *strings); -static void _hg_line_edit__libedit_real_load_history(HgLineEdit *lineedit, - const gchar *filename); -static void _hg_line_edit__libedit_real_save_history(HgLineEdit *lineedit, - const gchar *filename); - - -static HgPluginVTable vtable = { - .init = plugin_init, - .finalize = plugin_finalize, - .load = plugin_load, - .unload = plugin_unload, -}; - -static const HgLineEditVTable lineedit_vtable = { - .get_line = _hg_line_edit__libedit_real_get_line, - .add_history = _hg_line_edit__libedit_real_add_history, - .load_history = _hg_line_edit__libedit_real_load_history, - .save_history = _hg_line_edit__libedit_real_save_history, -}; -HgOperator *__libedit_operator_list[HG_libedit_op_END]; - -/* - * Operators - */ -DEFUNC_OP (loadhistory) -G_STMT_START -{ - HgStack *ostack = hg_vm_get_ostack(vm); - guint depth = hg_stack_depth(ostack); - HgValueNode *node; - HgString *hs; - gchar *filename, *histfile; - const gchar *env; - - while (1) { - if (depth < 1) { - _hg_operator_set_error(vm, op, VM_e_stackunderflow); - break; - } - node = hg_stack_index(ostack, 0); - if (!HG_IS_VALUE_STRING (node)) { - _hg_operator_set_error(vm, op, VM_e_typecheck); - break; - } - hs = HG_VALUE_GET_STRING (node); - env = g_getenv("HOME"); - filename = g_path_get_basename(hg_string_get_string(hs)); - if (env != NULL) { - histfile = g_build_filename(env, filename, NULL); - } else { - histfile = g_strdup(filename); - } - retval = hg_line_edit_load_history(hg_vm_get_line_editor(vm), - histfile); - g_free(histfile); - g_free(filename); - hg_stack_pop(ostack); - break; - } -} G_STMT_END; -DEFUNC_OP_END - -DEFUNC_OP (statementedit) -G_STMT_START -{ - HgStack *ostack = hg_vm_get_ostack(vm); - guint depth = hg_stack_depth(ostack); - HgValueNode *node; - HgMemPool *pool = hg_vm_get_current_pool(vm); - HgString *hs; - HgFileObject *file; - gchar *line, *prompt; - - while (1) { - if (depth < 1) { - _hg_operator_set_error(vm, op, VM_e_stackunderflow); - break; - } - node = hg_stack_index(ostack, 0); - if (!HG_IS_VALUE_STRING (node)) { - _hg_operator_set_error(vm, op, VM_e_typecheck); - break; - } - hs = HG_VALUE_GET_STRING (node); - prompt = g_strndup(hg_string_get_string(hs), hg_string_maxlength(hs)); - line = hg_line_edit_get_statement(hg_vm_get_line_editor(vm), - prompt); - g_free(prompt); - if (line == NULL || line[0] == 0) { - _hg_operator_set_error(vm, op, VM_e_undefinedfilename); - if (line) - g_free(line); - break; - } - file = hg_file_object_new(pool, HG_FILE_TYPE_BUFFER, - HG_FILE_MODE_READ, - "%statementedit", - line, -1); - g_free(line); - if (file == NULL) { - _hg_operator_set_error(vm, op, VM_e_VMerror); - break; - } - HG_VALUE_MAKE_FILE (node, file); - if (node == NULL) { - _hg_operator_set_error(vm, op, VM_e_VMerror); - break; - } - hg_stack_pop(ostack); - retval = hg_stack_push(ostack, node); - /* it must be true */ - break; - } -} G_STMT_END; -DEFUNC_OP_END - -DEFUNC_OP (savehistory) -G_STMT_START -{ - HgStack *ostack = hg_vm_get_ostack(vm); - guint depth = hg_stack_depth(ostack); - HgValueNode *node; - HgString *hs; - gchar *filename, *histfile; - const gchar *env; - - while (1) { - if (depth < 1) { - _hg_operator_set_error(vm, op, VM_e_stackunderflow); - break; - } - node = hg_stack_index(ostack, 0); - if (!HG_IS_VALUE_STRING (node)) { - _hg_operator_set_error(vm, op, VM_e_typecheck); - break; - } - hs = HG_VALUE_GET_STRING (node); - env = g_getenv("HOME"); - filename = g_path_get_basename(hg_string_get_string(hs)); - if (env != NULL) { - histfile = g_build_filename(env, filename, NULL); - } else { - histfile = g_strdup(filename); - } - retval = hg_line_edit_save_history(hg_vm_get_line_editor(vm), - histfile); - g_free(histfile); - g_free(filename); - hg_stack_pop(ostack); - break; - } -} G_STMT_END; -DEFUNC_OP_END - -/* - * Private Functions - */ -static gboolean -plugin_init(void) -{ - gint i; - - for (i = 0; i < HG_libedit_op_END; i++) { - __libedit_operator_list[i] = NULL; - } - - return TRUE; -} - -static gboolean -plugin_finalize(void) -{ - return TRUE; -} - -static gboolean -plugin_load(HgPlugin *plugin, - HgVM *vm) -{ - HgDict *systemdict; - HgMemPool *pool; - gboolean is_global, error; - HgLineEdit *editor; - HgStack *estack; - - g_return_val_if_fail (plugin != NULL, FALSE); - g_return_val_if_fail (vm != NULL, FALSE); - - if (plugin->user_data != NULL) { - hg_log_warning("already loaded."); - return FALSE; - } - plugin->user_data = hg_vm_get_line_editor(vm); - - editor = hg_line_edit_new(hg_vm_get_current_pool(vm), - &lineedit_vtable, - __hg_file_stdin, - __hg_file_stdout); - hg_vm_set_line_editor(vm, editor); - - systemdict = hg_vm_get_dict_systemdict(vm); - is_global = hg_vm_is_global_pool_used(vm); - hg_vm_use_global_pool(vm, TRUE); - pool = hg_vm_get_current_pool(vm); - - BUILD_OP (vm, pool, systemdict, .loadhistory, loadhistory); - BUILD_OP (vm, pool, systemdict, .statementedit, statementedit); - BUILD_OP (vm, pool, systemdict, .savehistory, savehistory); - - estack = hg_stack_new(pool, 256); - hg_vm_eval(vm, "/.libedit.old..statementedit /..statementedit load def /..statementedit {.promptmsg //null exch .statementedit exch pop} bind def", - NULL, estack, NULL, &error); - hg_mem_free(estack); - hg_vm_use_global_pool(vm, is_global); - - return TRUE; -} - -static gboolean -plugin_unload(HgPlugin *plugin, - HgVM *vm) -{ - HgMemPool *pool; - HgDict *systemdict; - gboolean is_global, error; - HgStack *estack; - - g_return_val_if_fail (plugin != NULL, FALSE); - g_return_val_if_fail (vm != NULL, FALSE); - - if (plugin->user_data != NULL) { - hg_log_warning("not yet loaded."); - return FALSE; - } - hg_vm_set_line_editor(vm, plugin->user_data); - - systemdict = hg_vm_get_dict_systemdict(vm); - is_global = hg_vm_is_global_pool_used(vm); - hg_vm_use_global_pool(vm, TRUE); - pool = hg_vm_get_current_pool(vm); - - REMOVE_OP (pool, systemdict, .loadhistory, loadhistory); - REMOVE_OP (pool, systemdict, .statementedit, statementedit); - REMOVE_OP (pool, systemdict, .savehistory, savehistory); - - estack = hg_stack_new(pool, 256); - hg_vm_eval(vm, "/..statementedit /.libedit.old..statementedit load def", - NULL, estack, NULL, &error); - hg_mem_free(estack); - - hg_vm_use_global_pool(vm, is_global); - - plugin->user_data = NULL; - - return TRUE; -} - -static gchar * -_hg_line_edit__libedit_real_get_line(HgLineEdit *lineedit, - const gchar *prompt) -{ - gchar *retval; - - if (prompt == NULL) - retval = readline(""); - else - retval = readline(prompt); - - return retval; -} - -static void -_hg_line_edit__libedit_real_add_history(HgLineEdit *lineedit, - const gchar *strings) -{ - g_return_if_fail (strings != NULL); - - add_history(strings); -} - -static void -_hg_line_edit__libedit_real_load_history(HgLineEdit *lineedit, - const gchar *filename) -{ - g_return_if_fail (filename != NULL); - - read_history(filename); -} - -static void -_hg_line_edit__libedit_real_save_history(HgLineEdit *lineedit, - const gchar *filename) -{ - g_return_if_fail (filename != NULL); - - write_history(filename); -} - -/* - * Public Functions - */ -HgPlugin * -plugin_new(HgMemPool *pool) -{ - HgPlugin *retval; - - g_return_val_if_fail (pool != NULL, NULL); - - retval = hg_plugin_new(pool, HG_PLUGIN_EXTENSION); - retval->version = HG_PLUGIN_VERSION; - retval->vtable = &vtable; - - return retval; -} diff --git a/plugins/test/Makefile.am b/plugins/test/Makefile.am deleted file mode 100644 index 24d098e..0000000 --- a/plugins/test/Makefile.am +++ /dev/null @@ -1,44 +0,0 @@ -NULL = - -INCLUDES = \ - $(HG_CFLAGS) \ - $(NULL) - -LIBS = \ - @LDFLAGS@ \ - -export-dynamic \ - $(HG_LIBS) \ - $(NULL) -LDADDS = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) - -plugindir = $(HIEROGLYPH_PLUGINDIR) -plugin_LTLIBRARIES = \ - libext-test.la \ - $(NULL) - -libext_test_la_SOURCES = \ - test-main.c \ - $(NULL) -libext_test_la_CFLAGS = \ - -DHG_LOG_DOMAIN="\"Test-Extension\"" \ - $(CFLAGS) \ - $(NULL) -libext_test_la_LDFLAGS = \ - -avoid-version \ - -module \ - $(LDFLAGS) \ - $(NULL) -libext_test_la_LIBADD = \ - $(LDADDS) \ - $(NULL) - -hgpslibdir = $(HIEROGLYPH_LIBDIR) -hgpslib_DATA = \ - hg_unittest.ps \ - $(NULL) - -EXTRA_DIST = \ - $(hgpslib_DATA) \ - $(NULL) diff --git a/plugins/test/hg_unittest.ps b/plugins/test/hg_unittest.ps deleted file mode 100644 index 55f9e9d..0000000 --- a/plugins/test/hg_unittest.ps +++ /dev/null @@ -1,249 +0,0 @@ -% initialize unittest dictionary -19 dict dup begin - /nunit 0 def - /nsuccess 0 def - /nfailure 0 def - /.ostack null def - /expectederror null def - /expectedostack null def - /actualerror null def - /actualostack null def - /verbose true def - /expression null def - /operator null def - /arguments null def - /testargs null def - /testargssymbol null def - /typecheckresult false def - /expectedtypecheckresult false def - /anytypes [/booleantype /integertype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] readonly def - /attributes << - /readable 1 - /writable 2 - /executable 4 - /executeonly 8 - /accessible 16 - >> readonly def - /attrsmask 0 def -end /.unittestdict exch def - -% - initunittest - -/initunittest { - .unittestdict begin - /nunit 0 def - /nsuccess 0 def - /nfailure 0 def - end - .promptmsg length 2 add dup string 1 1 4 -1 roll 2 sub {1 index exch 32 put} for - dup 0 13 put - dup dup length 1 sub 13 put =only -} bind odef - -% -array- -name- -bool- initunittestdict - -/initunittestdict { - .unittestdict begin - /verbose exch def - /expectederror exch def - /expectedostack exch def - /attrsmask 0 def - end -} bind odef - -% -name- ... n setunittestmask -integer- -/setunittestmask { - .unittestdict begin - /attrsmask 0 def - { - attributes exch get - attrsmask or /attrsmask exch def - } repeat - end -} bind odef - -/.updateunittestprogress { - [(|) (/) (-) (\\)] - .unittestdict /nunit get 4 mod - get (\r) .concatstring =only flush -} bind odef - -% proc unittest -bool- -/unittest { - .dounittest - .unittestdict .validateunittest - .unittestdict begin - /nunit nunit 1 add def - { - /nsuccess nsuccess 1 add def - } { - /nfailure nfailure 1 add def - } ifelse - end -} bind odef - -% proc .dounittest - -/.dounittest { - .updateunittestprogress - % back the ostack up into dict - count copy pop count 1 sub 2 idiv array astore .unittestdict /.ostack 3 -1 roll put - dup .unittestdict /expression 3 -1 roll put - {exec} stopped { - $error /newerror get { - $error /errorname get .unittestdict /actualerror 3 -1 roll put - } { - .unittestdict /actualerror /stop put - } ifelse - } { - .unittestdict /actualerror null put - } ifelse - count .unittestdict /.ostack get length sub copy - count .unittestdict /.ostack get length sub 2 idiv array astore - .unittestdict /actualostack 3 -1 roll put - % recover - clear .clearerror - .unittestdict /.ostack get aload pop -} bind odef - -% bool name [[type ...] ...] typecheck - -/typecheck { - .unittestdict begin - /arguments exch def - /operator exch def - /testargs arguments length array def - /testargssymbol arguments length array def - dup /expectedtypecheckresult exch def - /typecheckresult exch def - arguments length 1 sub .dotypecheck - expectedtypecheckresult typecheckresult ne { - 1 .quit - } if - end -} bind def - -% -num- .dotypecheck - -/.dotypecheck { - arguments 1 index get { - dup /booleantype eq { - testargs 2 index true put - testargssymbol 2 index 3 -1 roll put - } { - dup /integertype eq { - testargs 2 index 0 put - testargssymbol 2 index 3 -1 roll put - } { - dup /realtype eq { - testargs 2 index 0.1 put - testargssymbol 2 index 3 -1 roll put - } { - dup /nametype eq { - testargs 2 index /foo put - testargssymbol 2 index 3 -1 roll put - } { - dup /arraytype eq { - testargs 2 index [] put - testargssymbol 2 index 3 -1 roll put - } { - dup /stringtype eq { - testargs 2 index (foo) put - testargssymbol 2 index 3 -1 roll put - } { - dup /dicttype eq { - testargs 2 index 1 dict put - testargssymbol 2 index 3 -1 roll put - } { - dup /nulltype eq { - testargs 2 index null put - testargssymbol 2 index 3 -1 roll put - } { - dup /operatortype eq { - testargs 2 index /add load put - testargssymbol 2 index 3 -1 roll put - } { - dup /marktype eq { - testargs 2 index mark put - testargssymbol 2 index 3 -1 roll put - } { - dup /filetype eq { - testargs 2 index (.) (r) file put - testargssymbol 2 index 3 -1 roll put - } { - dup /savetype eq { - testargs 2 index save put - testargssymbol 2 index 3 -1 roll put - } { - % this is not correct type. - dup /proctype eq { - testargs 2 index {} put - testargssymbol 2 index 3 -1 roll put - } { - % error - (Unknown type ) ==only - == 1 .quit - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - } ifelse - dup 0 eq { - [testargs /aload load /pop load operator cvx] cvx .dounittest - .unittestdict begin - /nunit nunit 1 add def - actualerror dup /stackunderflow eq - exch dup /typecheck eq - exch dup /limitcheck eq - exch pop - or or { - expectedtypecheckresult { - (ERROR: ) =only - actualerror ==only - ( in ) =only - operator cvx ==only - ( with ) =only - testargssymbol == - /typecheckresult false def - /nfailure nfailure 1 add def - } { - /nsuccess nsuccess 1 add def - } ifelse - } { - expectedtypecheckresult not { - (ERROR: no errors or no expected errors happened in ) =only - operator cvx ==only - ( with ) =only - testargssymbol ==only - ( actualerror was ) =only - actualerror == - /typecheckresult true def - /nfailure nfailure 1 add def - } { - /nsuccess nsuccess 1 add def - } ifelse - } ifelse - end - } { - dup 1 sub .dotypecheck - } ifelse - } forall - pop -} bind def - -% - unittestresult - -/unittestresult { - .unittestdict begin - nunit 128 string cvs ( Unit(s) / ) - nsuccess 128 string cvs ( Success(es) / ) - nfailure 128 string cvs ( Failure(s)) - .concatstring .concatstring .concatstring .concatstring .concatstring - = - nfailure 0 gt { - 1 .quit - } if - end -} bind odef diff --git a/plugins/test/test-main.c b/plugins/test/test-main.c deleted file mode 100644 index eb1f2a2..0000000 --- a/plugins/test/test-main.c +++ /dev/null @@ -1,313 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * test-main.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <hieroglyph/hgarray.h> -#include <hieroglyph/hgdict.h> -#include <hieroglyph/hgfile.h> -#include <hieroglyph/hglog.h> -#include <hieroglyph/hgmem.h> -#include <hieroglyph/hgplugins.h> -#include <hieroglyph/hgstack.h> -#include <hieroglyph/hgstring.h> -#include <hieroglyph/hgvaluenode.h> -#include <hieroglyph/operator.h> -#include <hieroglyph/vm.h> - - -#define BUILD_OP(vm, pool, sdict, name, func) \ - G_STMT_START { \ - HgOperator *__hg_op; \ - \ - hg_operator_build_operator__inline(_test_op_, vm, pool, sdict, name, func, __hg_op); \ - if (__hg_op != NULL) { \ - __test_operator_list[HG_test_op_##func] = __hg_op; \ - hg_mem_pool_add_root_node(pool, __hg_op); \ - } \ - } G_STMT_END -#define REMOVE_OP(pool, sdict, name, func) \ - G_STMT_START { \ - HgValueNode *__hg_node, *__hg_key; \ - HgOperator *__hg_op; \ - \ - HG_VALUE_MAKE_NAME_STATIC (pool, __hg_key, #name); \ - if ((__hg_node = hg_dict_lookup(sdict, __hg_key)) != NULL) { \ - __hg_op = HG_VALUE_GET_OPERATOR (__hg_node); \ - if (__hg_op == __test_operator_list[HG_test_op_##func]) { \ - hg_dict_remove(sdict, __hg_key); \ - } \ - hg_mem_pool_remove_root_node(pool, __hg_op); \ - hg_mem_free(__hg_op); \ - } \ - hg_mem_free(__hg_key); \ - } G_STMT_END -#define DEFUNC_OP(func) \ - static gboolean \ - _test_op_##func(HgOperator *op, \ - gpointer data) \ - { \ - HgVM *vm = data; \ - gboolean retval = FALSE; -#define DEFUNC_OP_END \ - return retval; \ - } - -typedef enum { - HG_test_op_validateunittest = 0, - HG_test_op_END -} HgOperatorTestEncoding; - - -static gboolean plugin_init (void); -static gboolean plugin_finalize(void); -static gboolean plugin_load (HgPlugin *plugin, - HgVM *vm); -static gboolean plugin_unload (HgPlugin *plugin, - HgVM *vm); - - -static HgPluginVTable vtable = { - .init = plugin_init, - .finalize = plugin_finalize, - .load = plugin_load, - .unload = plugin_unload, -}; -HgOperator *__test_operator_list[HG_test_op_END]; - -/* - * Operators - */ -DEFUNC_OP (validateunittest) -G_STMT_START -{ - HgStack *ostack = hg_vm_get_ostack(vm); - guint depth = hg_stack_depth(ostack); - HgValueNode *n, *ndict, *nverbose, *nexp, *nactual, *nexpected, *nattrs; - HgDict *dict; - HgMemPool *pool = hg_vm_get_current_pool(vm); - gboolean result = TRUE, verbose = FALSE; - HgString *sexp; - HgArray *actual, *expected; - guint length, i; - gint32 attrs = 0; - - while (1) { - if (depth < 1) { - _hg_operator_set_error(vm, op, VM_e_stackunderflow); - break; - } - ndict = hg_stack_index(ostack, 0); - if (!HG_IS_VALUE_DICT (ndict)) { - _hg_operator_set_error(vm, op, VM_e_typecheck); - break; - } - dict = HG_VALUE_GET_DICT (ndict); - if (!hg_object_is_readable((HgObject *)dict)) { - _hg_operator_set_error(vm, op, VM_e_invalidaccess); - break; - } - nverbose = hg_dict_lookup_with_string(dict, "verbose"); - if (nverbose != NULL && HG_IS_VALUE_BOOLEAN (nverbose)) { - verbose = HG_VALUE_GET_BOOLEAN (nverbose); - } - nattrs = hg_dict_lookup_with_string(dict, "attrsmask"); - if (nattrs != NULL && HG_IS_VALUE_INTEGER (nattrs)) { - attrs = HG_VALUE_GET_INTEGER (nattrs); - } - nexp = hg_dict_lookup_with_string(dict, "expression"); - sexp = hg_object_to_string((HgObject *)nexp); - nactual = hg_dict_lookup_with_string(dict, "actualerror"); - nexpected = hg_dict_lookup_with_string(dict, "expectederror"); - if (nactual == NULL || nexpected == NULL) { - hg_file_object_printf(hg_vm_get_io(vm, VM_IO_STDERR), - "[BUG] Unknown result happened during testing an exception at `%s'\n", - hg_string_get_string(sexp)); - result = FALSE; - } else if (!hg_value_node_compare(nactual, nexpected)) { - if (verbose) { - HgString *sa, *se; - - sa = hg_object_to_string((HgObject *)nactual); - se = hg_object_to_string((HgObject *)nexpected); - hg_file_object_printf(hg_vm_get_io(vm, VM_IO_STDERR), - "Expression: %s - expected error is %s, but actual error was %s\n", - hg_string_get_string(sexp), - hg_string_get_string(se), - hg_string_get_string(sa)); - hg_mem_free(sa); - hg_mem_free(se); - } - result = FALSE; - } - nactual = hg_dict_lookup_with_string(dict, "actualostack"); - nexpected = hg_dict_lookup_with_string(dict, "expectedostack"); - if (nactual == NULL || nexpected == NULL || - !HG_IS_VALUE_ARRAY (nactual) || - !HG_IS_VALUE_ARRAY (nexpected)) { - hg_file_object_printf(hg_vm_get_io(vm, VM_IO_STDERR), - "[BUG] Uknown result happened during testing the result at `%s'\n", - hg_string_get_string(sexp)); - result = FALSE; - } else { - HgString *sa, *se; - - sa = hg_object_to_string((HgObject *)nactual); - se = hg_object_to_string((HgObject *)nexpected); - actual = HG_VALUE_GET_ARRAY (nactual); - expected = HG_VALUE_GET_ARRAY (nexpected); - if ((length = hg_array_length(actual)) != hg_array_length(expected)) { - if (verbose) { - ostack_mismatch: - hg_file_object_printf(hg_vm_get_io(vm, VM_IO_STDERR), - "Expression: %s - expected ostack is %s, but actual ostack was %s\n", - hg_string_get_string(sexp), - hg_string_get_string(se), - hg_string_get_string(sa)); - } - result = FALSE; - } else { - for (i = 0; i < length; i++) { - HgValueNode *nna = hg_array_index(actual, i); - HgValueNode *nne = hg_array_index(expected, i); - - if (!hg_value_node_compare_content(nna, nne, attrs)) { - goto ostack_mismatch; - } - } - } - hg_mem_free(sa); - hg_mem_free(se); - } - hg_mem_free(sexp); - HG_VALUE_MAKE_BOOLEAN (pool, n, result); - hg_stack_pop(ostack); - retval = hg_stack_push(ostack, n); - /* it must be true */ - break; - } -} G_STMT_END; -DEFUNC_OP_END - -/* - * Private Functions - */ -static gboolean -plugin_init(void) -{ - gint i; - - for (i = 0; i < HG_test_op_END; i++) { - __test_operator_list[i] = NULL; - } - - return TRUE; -} - -static gboolean -plugin_finalize(void) -{ - return TRUE; -} - -static gboolean -plugin_load(HgPlugin *plugin, - HgVM *vm) -{ - HgDict *systemdict; - HgMemPool *pool; - gboolean is_global, error; - HgStack *estack; - - g_return_val_if_fail (plugin != NULL, FALSE); - g_return_val_if_fail (vm != NULL, FALSE); - - if (plugin->user_data != NULL) { - hg_log_warning("already loaded."); - return FALSE; - } - systemdict = hg_vm_get_dict_systemdict(vm); - is_global = hg_vm_is_global_pool_used(vm); - hg_vm_use_global_pool(vm, TRUE); - pool = hg_vm_get_current_pool(vm); - - BUILD_OP (vm, pool, systemdict, .validateunittest, validateunittest); - - estack = hg_stack_new(pool, 256); - hg_vm_eval(vm, "{(hg_unittest.ps) runlibfile} stopped pop", - NULL, estack, NULL, &error); - hg_mem_free(estack); - hg_vm_use_global_pool(vm, is_global); - - plugin->user_data = systemdict; - - return error == FALSE; -} - -static gboolean -plugin_unload(HgPlugin *plugin, - HgVM *vm) -{ - HgMemPool *pool; - HgDict *systemdict; - gboolean is_global; - - g_return_val_if_fail (plugin != NULL, FALSE); - g_return_val_if_fail (vm != NULL, FALSE); - - if (plugin->user_data != NULL) { - hg_log_warning("not yet loaded."); - return FALSE; - } - - systemdict = hg_vm_get_dict_systemdict(vm); - is_global = hg_vm_is_global_pool_used(vm); - hg_vm_use_global_pool(vm, TRUE); - pool = hg_vm_get_current_pool(vm); - - REMOVE_OP (pool, systemdict, .validateunittest, validateunittest); - hg_vm_use_global_pool(vm, is_global); - - plugin->user_data = NULL; - - return TRUE; -} - -/* - * Public Functions - */ -HgPlugin * -plugin_new(HgMemPool *pool) -{ - HgPlugin *retval; - - g_return_val_if_fail (pool != NULL, NULL); - - retval = hg_plugin_new(pool, HG_PLUGIN_EXTENSION); - retval->version = HG_PLUGIN_VERSION; - retval->vtable = &vtable; - - return retval; -} diff --git a/po/ChangeLog b/po/ChangeLog deleted file mode 100644 index 67385f1..0000000 --- a/po/ChangeLog +++ /dev/null @@ -1,8 +0,0 @@ -2006-06-05 Akira TAGOH <at@gclab.org> - - * ja.po: added Japanese translation. - -2005-10-20 Akira TAGOH <at@gclab.org> - - * POTFILES.in: new. - diff --git a/po/POTFILES.in b/po/POTFILES.in deleted file mode 100644 index 2f3de17..0000000 --- a/po/POTFILES.in +++ /dev/null @@ -1,3 +0,0 @@ -src/hgspy.c -src/visualizer.c - diff --git a/po/ja.po b/po/ja.po deleted file mode 100644 index ea57b34..0000000 --- a/po/ja.po +++ /dev/null @@ -1,72 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: hieroglyph 0.0.1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-06-05 02:48+0900\n" -"PO-Revision-Date: 2006-06-05 03:07+0900\n" -"Last-Translator: Akira TAGOH <at@gclab.org>\n" -"Language-Team: Japanese <LL@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../src/hgspy.c:103 -msgid "PostScript file" -msgstr "PostScriptファイル" - -#: ../src/hgspy.c:106 -msgid "Open a PostScript file" -msgstr "PostScriptファイルを開きます。" - -#: ../src/hgspy.c:190 -msgid "V_M" -msgstr "仮想マシン(_M)" - -#: ../src/hgspy.c:198 -msgid "_View" -msgstr "表示(_V)" - -#: ../src/hgspy.c:206 -msgid "_Help" -msgstr "ヘルプ(_H)" - -#: ../src/hgspy.c:217 -msgid "Run VM interactively" -msgstr "対話形式で仮想マシンを実行します。" - -#: ../src/hgspy.c:225 -msgid "Run a PostScript file on VM" -msgstr "仮想マシン上でPostScriptファイルを実行します。" - -#: ../src/hgspy.c:233 -msgid "Quit" -msgstr "終了" - -#: ../src/hgspy.c:240 -msgid "Pool" -msgstr "プール" - -#: ../src/hgspy.c:242 -msgid "Pool to be visualized." -msgstr "表示するためのプール" - -#: ../src/hgspy.c:249 -msgid "None" -msgstr "なし" - -#: ../src/hgspy.c:260 -msgid "About" -msgstr "情報" - -#: ../src/visualizer.c:279 -msgid "Max size of memory pool" -msgstr "メモリプールの最大サイズ" - -#: ../src/visualizer.c:280 -msgid "Max size of memory pool that is now being visualized." -msgstr "表示するメモリプールの最大サイズ" diff --git a/requires b/requires deleted file mode 100644 index 805ecd7..0000000 --- a/requires +++ /dev/null @@ -1,2 +0,0 @@ -GLIB_REQUIRED=2.8.0 -CAIRO_REQUIRED=1.0.0
\ No newline at end of file diff --git a/src/Makefile.am b/src/Makefile.am deleted file mode 100644 index 6574015..0000000 --- a/src/Makefile.am +++ /dev/null @@ -1,82 +0,0 @@ -NULL = - -INCLUDES = \ - $(HG_CFLAGS) \ - $(NULL) -LIBS = \ - @LDFLAGS@ \ - $(HG_LIBS) \ - $(NULL) -DEPS = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) - -bin_PROGRAMS = \ - hgs \ - $(NULL) -noinst_PROGRAMS = \ - hgspy-bin \ - $(NULL) -noinst_LTLIBRARIES = \ - libhgspy.la \ - libhgspy-helper.la \ - $(NULL) - -hgs_SOURCES = \ - hgs.c \ - $(NULL) -hgs_LDADD = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) - -hgspy_bin_SOURCES = \ - hgspy.c \ - $(NULL) -hgspy_bin_CFLAGS = \ - $(GTK2_CFLAGS) \ - $(HG_MODULE_CFLAGS) \ - $(GTHREAD_CFLAGS) \ - $(NULL) -hgspy_bin_LDADD = \ - $(GTK2_LIBS) \ - $(HG_MODULE_LIBS) \ - $(GTHREAD_LIBS) \ - libhgspy.la \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) - -libhgspy_la_SOURCES = \ - visualizer.c \ - visualizer.h \ - $(NULL) -libhgspy_la_CFLAGS = \ - $(GTK2_CFLAGS) \ - $(NULL) -libhgspy_la_LIBADD = \ - $(GTK2_LIBS) \ - $(NULL) -libhgspy.la: $(libhgspy_la_OBJECTS) $(libhgspy_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libhgspy_la_LDFLAGS) $(libhgspy_la_OBJECTS) $(libhgspy_la_LIBADD) $(LIBS) - -libhgspy_helper_la_SOURCES = \ - hgspy_helper.c \ - hgspy_helper.h \ - $(NULL) -libhgspy_helper_la_CFLAGS = \ - $(GTK2_CFLAGS) \ - $(HG_MODULE_CFLAGS) \ - $(NULL) -libhgspy_helper_la_LDFLAGS = \ - -avoid-version \ - -module \ - $(LDFLAGS) \ - $(GTK2_LIBS) \ - $(HG_MODULE_LIBS) \ - libhgspy.la \ - $(NULL) -libhgspy-helper.la: $(libhgspy_helper_la_OBJECTS) $(libhgspy_helper_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libhgspy_helper_la_LDFLAGS) $(libhgspy_helper_la_OBJECTS) $(libhgspy_helper_la_LIBADD) $(LIBS) - -EXTRA_DIST = \ - hgspy.sh \ - $(NULL) diff --git a/src/hgs.c b/src/hgs.c deleted file mode 100644 index fe90d4d..0000000 --- a/src/hgs.c +++ /dev/null @@ -1,170 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgs.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#include <hieroglyph/hgdevice.h> -#include <hieroglyph/hgdict.h> -#include <hieroglyph/hgfile.h> -#include <hieroglyph/hglog.h> -#include <hieroglyph/hgmem.h> -#include <hieroglyph/hgvaluenode.h> -#include <hieroglyph/vm.h> - - -static gboolean -_hgs_arg_define_cb(const char *option_name, - const char *value, - gpointer data) -{ - gboolean retval = FALSE; - HgVM *vm = data; - HgValueNode *n1, *n2; - gboolean mode = hg_vm_is_global_pool_used(vm); - HgMemPool *pool; - HgDict *systemdict = hg_vm_get_dict_systemdict(vm); - - if (value && *value) { - hg_vm_use_global_pool(vm, TRUE); - pool = hg_vm_get_current_pool(vm); - - /* FIXME: validate characters in value */ - n1 = hg_vm_get_name_node(vm, value); - HG_VALUE_MAKE_BOOLEAN (pool, n2, TRUE); - hg_dict_insert(pool, systemdict, n1, n2); - - hg_vm_use_global_pool(vm, mode); - retval = TRUE; - } - - return retval; -} - -static gboolean -_hgs_arg_load_plugin_cb(const char *option_name, - const char *value, - gpointer data) -{ - gboolean retval = FALSE; - HgVM *vm = data; - - if (value && *value) { - retval = hg_vm_load_plugin(vm, value); - } - - return retval; -} - -int -main(int argc, - char **argv) -{ - gchar *device_name = NULL; - gboolean opt_io_sync = FALSE; - HgVM *vm; - HgDevice *device = NULL; - GOptionContext *ctxt = g_option_context_new("<PostScript file>"); - GOptionGroup *group; - GOptionEntry entries[] = { - {"define", 'd', 0, G_OPTION_ARG_CALLBACK, _hgs_arg_define_cb, "Define a variable in systemdict.", "SYMBOL"}, - {"load-plugin", 'l', 0, G_OPTION_ARG_CALLBACK, _hgs_arg_load_plugin_cb, "Load a plugin", "NAME"}, - {"sync-io", 0, 0, G_OPTION_ARG_NONE, &opt_io_sync, "Make I/O calls synchronous", NULL}, - {"device", 0, 0, G_OPTION_ARG_STRING, &device_name, "Output device that the rendering goes to", "DEVICE"}, - {NULL} - }; - GError *error = NULL; - const gchar *psfile = NULL, *env; - gint32 errcode = 0; - - HG_MEM_INIT; - hg_vm_init(); - - /* set debugging flags prior to initialize VM */ - if ((env = g_getenv("HIEROGLYPH_DEBUG")) != NULL) { - gchar **flags = g_strsplit(env, ",:", 0); - int i; - - for (i = 0; flags[i] != NULL; i++) { - gchar *key = g_strdup_printf("DEBUG_%s", flags[i]); - - hg_log_set_flag(key, TRUE); - g_free(key); - } - - g_strfreev(flags); - } - - vm = hg_vm_new(VM_EMULATION_LEVEL_1); - - group = g_option_group_new(NULL, NULL, NULL, vm, NULL); - g_option_context_set_main_group(ctxt, group); - g_option_context_add_main_entries(ctxt, entries, NULL); - if (!g_option_context_parse(ctxt, &argc, &argv, &error)) { - g_print("Option parse error.\n"); - hg_vm_finalize(); - return 1; - } - - if (opt_io_sync) - hg_file_io_synchronous(TRUE); - if (device_name) { - device = hg_device_new(device_name); - if (device == NULL) { - g_print("Failed to open `%s' device.\n", device_name); - return 1; - } - } - if (argc > 1) - psfile = argv[1]; - - if (!hg_vm_startjob(vm, psfile, TRUE)) { - g_print("Failed to start a job.\n"); - return 1; - } - - if (device) { - /* FIXME: need to support asynchronous rendering */ - if (!hg_vm_has_error(vm)) { - HgGraphics *graphics = hg_vm_get_graphics(vm); - GList *l, *prev; - gint i; - - for (l = graphics->pages, i = 1; l != NULL; l = g_list_next(l), i++) { - hg_device_draw(device, l->data); - g_print("%d page\n", i); - sleep(1); - prev = l; - } - if (prev != NULL && - graphics->current_page != prev->data && - graphics->current_page->node) - hg_device_draw(device, graphics->current_page); - sleep(5); - } - } - - errcode = hg_vm_get_error_code(vm); - - hg_vm_finalize(); - g_option_context_free(ctxt); - - return errcode; -} diff --git a/src/hgspy.c b/src/hgspy.c deleted file mode 100644 index 1d90ba9..0000000 --- a/src/hgspy.c +++ /dev/null @@ -1,963 +0,0 @@ -/* - * hgspy.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <string.h> -#include <errno.h> -#include <glib/gi18n.h> -#include <gtk/gtk.h> -#include <hieroglyph/hgmem.h> -#include <hieroglyph/hgfile.h> -#include <hieroglyph/hgdict.h> -#include <hieroglyph/hgstack.h> -#include <hieroglyph/hgvaluenode.h> -#include <hieroglyph/vm.h> -#include <hieroglyph/operator.h> -#include "visualizer.h" - - -typedef struct _HieroGlyphSpy HgSpy; - -struct _HieroGlyphSpy { - GtkWidget *window; - GtkWidget *status; - GtkWidget *visualizer; - GtkWidget *total_vm_size; - GtkWidget *used_vm_size; - GtkWidget *free_vm_size; - GtkWidget *textview; - GtkWidget *entry; - GtkWidget *prompt; - GtkUIManager *ui; - GThread *vm_thread; - HgVM *vm; - gchar *file; - gint error; - gchar *statementedit_buffer; - gboolean destroyed; - guint gc_status_ctxt_id; - guint gc_status_msg_id; -}; - -static void _hgspy_update_vm_status (HgMemoryVisualizer *visual, - HgSpy *spy, - const gchar *name); -static void _hgspy_insert_text_into_textview(HgSpy *spy, - const gchar *text, - gsize length); - -static gpointer __hg_spy_helper_get_widget = NULL; - -/* - * Private Functions - */ -static gboolean -_hgspy_ask_dialog(HgSpy *spy, - const gchar *message) -{ - gboolean retval = TRUE; - GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW (spy->window), - GTK_DIALOG_MODAL, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - _(message)); - gint result = gtk_dialog_run (GTK_DIALOG (dialog)); - - switch (result) { - case GTK_RESPONSE_YES: - retval = FALSE; - break; - case GTK_RESPONSE_NO: - default: - break; - } - - gtk_widget_destroy(dialog); - - return !retval; -} - -static gboolean -_hgspy_op_private_statementedit(HgOperator *op, - gpointer data) -{ - HgVM *vm = data; - gboolean retval = FALSE; - gsize ret; - HgFileObject *stdin = hg_vm_get_io(vm, VM_IO_STDIN), *file; - gchar buffer[1025]; - HgMemPool *pool = hg_vm_get_current_pool(vm); - HgValueNode *node; - HgStack *ostack = hg_vm_get_ostack(vm); - - while (1) { - ret = hg_file_object_read(stdin, buffer, sizeof (gchar), 1024); - if (ret == 0) { - _hg_operator_set_error(vm, op, VM_e_undefinedfilename); - break; - } - file = hg_file_object_new(pool, HG_FILE_TYPE_BUFFER, - HG_FILE_MODE_READ, - "%statementedit", - buffer, -1); - if (file == NULL) { - _hg_operator_set_error(vm, op, VM_e_VMerror); - break; - } - HG_VALUE_MAKE_FILE (node, file); - if (node == NULL) { - _hg_operator_set_error(vm, op, VM_e_VMerror); - break; - } - retval = hg_stack_push(ostack, node); - break; - } - - return retval; -} - -static gsize -_hgspy_file_read_cb(gpointer user_data, - gpointer buffer, - gsize size, - gsize n) -{ - HgSpy *spy = user_data; - gsize retval = 0; - HgStack *ostack = hg_vm_get_ostack(spy->vm); - gchar *prompt; - /* depends on hg_init.ps. */ - guint depth = hg_stack_depth(ostack) - 2; - - if (depth > 0) - prompt = g_strdup_printf("PS[%d]>", depth); - else - prompt = g_strdup("PS>"); - - gdk_threads_enter(); - gtk_label_set_text(GTK_LABEL (spy->prompt), prompt); - gdk_flush(); - gdk_threads_leave(); - - g_free(prompt); - - while (spy->statementedit_buffer == NULL && !spy->destroyed) - sleep(1); - - if (spy->statementedit_buffer) { - size_t len = strlen(spy->statementedit_buffer); - gpointer p; - - if (len > size * n) - retval = size * n; - else - retval = len; - strncpy(buffer, spy->statementedit_buffer, retval); - ((gchar *)buffer)[retval] = 0; - p = spy->statementedit_buffer; - spy->statementedit_buffer = NULL; - g_free(p); - - /* to be thread-safe */ - gdk_threads_enter(); - - gtk_widget_set_sensitive(spy->entry, TRUE); - gtk_widget_grab_focus(spy->entry); - - gdk_flush(); - gdk_threads_leave(); - } - - return retval; -} - -static gsize -_hgspy_file_write_cb(gpointer user_data, - gconstpointer buffer, - gsize size, - gsize n) -{ - HgSpy *spy = user_data; - - /* to be thread-safe */ - gdk_threads_enter(); - - _hgspy_insert_text_into_textview(spy, buffer, size * n); - - gdk_flush(); - gdk_threads_leave(); - - spy->error = 0; - - return size * n; -} - -static gchar -_hgspy_file_getc_cb(gpointer user_data) -{ - g_print("FIXME: getc\n"); - - return 0; -} - -static gboolean -_hgspy_file_flush_cb(gpointer user_data) -{ - g_print("FIXME: flush\n"); - - return FALSE; -} - -static gssize -_hgspy_file_seek_cb(gpointer user_data, - gssize offset, - HgFilePosType whence) -{ - HgSpy *spy = user_data; - - g_print("FIXME: seek.\n"); - spy->error = ESPIPE; - - return -1; -} - -static void -_hgspy_file_close_cb(gpointer user_data) -{ - g_print("FIXME: close.\n"); -} - -static gboolean -_hgspy_file_is_closed_cb(gpointer user_data) -{ - g_print("FIXME: is_closed.\n"); - - return FALSE; -} - -static gboolean -_hgspy_file_is_eof_cb(gpointer user_data) -{ - return FALSE; -} - -static void -_hgspy_file_clear_eof_cb(gpointer user_data) -{ - g_print("FIXME: clear_eof\n"); -} - -static gint -_hgspy_file_get_error_code_cb(gpointer user_data) -{ - HgSpy *spy = user_data; - - return spy->error; -} - -static gpointer -_hgspy_vm_thread(gpointer data) -{ - HG_MEM_INIT; - - HgSpy *spy = data; - HgFileObjectCallback callback = { - .read = _hgspy_file_read_cb, - .write = _hgspy_file_write_cb, - .getc = _hgspy_file_getc_cb, - .flush = _hgspy_file_flush_cb, - .seek = _hgspy_file_seek_cb, - .close = _hgspy_file_close_cb, - .is_closed = _hgspy_file_is_closed_cb, - .is_eof = _hgspy_file_is_eof_cb, - .clear_eof = _hgspy_file_clear_eof_cb, - .get_error_code = _hgspy_file_get_error_code_cb, - }; - HgFileObject * volatile in, * volatile out; - HgMemPool *pool; - HgOperator *op; - HgValueNode *key, *val; - HgDict *dict; - gint fd; - gchar *filename = NULL; - GString *buffer; - - hg_vm_init(); - spy->vm = hg_vm_new(VM_EMULATION_LEVEL_1); - pool = hg_vm_get_current_pool(spy->vm); - dict = hg_vm_get_dict_systemdict(spy->vm); - in = hg_file_object_new(pool, - HG_FILE_TYPE_BUFFER_WITH_CALLBACK, - HG_FILE_MODE_READ, - "stdin with callback", - &callback, - spy); - out = hg_file_object_new(pool, - HG_FILE_TYPE_BUFFER_WITH_CALLBACK, - HG_FILE_MODE_WRITE, - "stdout with callback", - &callback, - spy); - hg_vm_set_io(spy->vm, VM_IO_STDIN, in); - hg_vm_set_io(spy->vm, VM_IO_STDOUT, out); - hg_vm_set_io(spy->vm, VM_IO_STDERR, out); - - op = hg_operator_new(pool, "...statementedit", _hgspy_op_private_statementedit); - if (op == NULL) { - g_warning("Failed to create an operator"); - return NULL; - } - key = hg_vm_get_name_node(spy->vm, "...statementedit"); - HG_VALUE_MAKE_OPERATOR (val, op); - if (val == NULL) { - hg_vm_set_error(spy->vm, key, VM_e_VMerror, FALSE); - } else { - hg_object_executable((HgObject *)val); - hg_dict_insert(pool, dict, key, val); - } - fd = g_file_open_tmp("hgspy-XXXXXX", &filename, NULL); - if (fd == -1) { - g_warning("Failed to create an initialize file."); - return NULL; - } - buffer = g_string_new(NULL); - g_string_append(buffer, "/..statementedit {//null //null ...statementedit exch pop exch pop} bind def "); - if (spy->file != NULL) { - g_string_append_printf(buffer, "(%s) run", spy->file); - } else { - g_string_append(buffer, ".startjobserver executive"); - } - write(fd, buffer->str, buffer->len); - close(fd); - hg_vm_startjob(spy->vm, filename, TRUE); - unlink(filename); - g_free(filename); - hg_mem_free(spy->vm); - spy->vm = NULL; - hg_vm_finalize(); - spy->destroyed = FALSE; - - return NULL; -} - -static void -_hgspy_run_vm(HgSpy *spy, - const gchar *file) -{ - if (spy->vm_thread != NULL) { - if (!_hgspy_ask_dialog(spy, N_("HieroglyphVM is still running.\nAre you sure that you really want to restart?"))) { - return; - } - g_thread_exit(spy->vm_thread); - hg_mem_free(spy->vm); - hg_vm_finalize(); - } - spy->file = g_strdup(file); - spy->vm_thread = g_thread_create(_hgspy_vm_thread, spy, FALSE, NULL); -} - -static gboolean -_hgspy_quit_cb(GtkWidget *widget, - GdkEventAny *event, - gpointer data) -{ - HgSpy *spy = data; - gboolean retval = TRUE; - - if (spy->vm) { - retval = _hgspy_ask_dialog(spy, N_("Hieroglyph VM is still running.\nAre you sure that you really want to quit?")); - if (retval) - hg_vm_shutdown(spy->vm, 0); - } else { - retval = TRUE; - } - if (retval) { - gtk_widget_unrealize(spy->window); - gtk_main_quit(); - } - - return TRUE; -} - -static void -_hgspy_about_email_cb(GtkAboutDialog *about, - const gchar *link, - gpointer data) -{ -} - -static void -_hgspy_about_url_cb(GtkAboutDialog *about, - const gchar *link, - gpointer data) -{ -} - -static void -_hgspy_action_menubar_run_cb(GtkAction *action, - HgSpy *spy) -{ - _hgspy_run_vm(spy, NULL); -} - -static void -_hgspy_action_menubar_open_cb(GtkAction *action, - HgSpy *spy) -{ - GtkWidget *dialog; - gint result; - GtkFileFilter *filter; - - filter = gtk_file_filter_new(); - gtk_file_filter_set_name(filter, _("PostScript file")); - gtk_file_filter_add_mime_type(filter, "application/postscript"); - - dialog = gtk_file_chooser_dialog_new(_("Open a PostScript file"), - GTK_WINDOW (spy->window), - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, - GTK_RESPONSE_OK, - NULL); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); - - result = gtk_dialog_run(GTK_DIALOG (dialog)); - switch (result) { - case GTK_RESPONSE_OK: - _hgspy_run_vm(spy, - gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog))); - break; - case GTK_RESPONSE_CANCEL: - default: - break; - } - gtk_widget_destroy(dialog); -} - -static void -_hgspy_action_menubar_quit_cb(GtkAction *action, - HgSpy *spy) -{ - _hgspy_quit_cb(spy->window, NULL, spy); -} - -static void -_hgspy_action_menubar_about_cb(GtkAction *action, - HgSpy *spy) -{ - const gchar *authors[] = { - "Akira TAGOH", - NULL - }; - const gchar *license = - "This library is free software; you can redistribute it and/or\n" - "modify it under the terms of the GNU Lesser General Public\n" - "License as published by the Free Software Foundation; either\n" - "version 2 of the License, or (at your option) any later version.\n" - "\n" - "This library is distributed in the hope that it will be useful,\n" - "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n" - "Lesser General Public License for more details.\n" - "\n" - "You should have received a copy of the GNU Lesser General Public\n" - "License along with this library; if not, write to the\n" - "Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" - "Boston, MA 02111-1307, USA.\n"; - - gtk_about_dialog_set_email_hook(_hgspy_about_email_cb, NULL, NULL); - gtk_about_dialog_set_url_hook(_hgspy_about_url_cb, NULL, NULL); - gtk_show_about_dialog(GTK_WINDOW (spy->window), - "name", "Memory visualizer", - "version", PACKAGE_VERSION, - "copyright", "(C) 2006 Akira TAGOH", - "license", license, - "website", "http://hieroglyph.freedesktop.org/", - "comments", "for Hieroglyph memory management system", - "authors", authors, - NULL); -} - -static void -_hgspy_radio_menu_pool_activate_cb(GtkMenuItem *menuitem, - gpointer data) -{ - const gchar *name; - HgSpy *spy = data; - - if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) { - name = g_object_get_data(G_OBJECT (menuitem), "user-data"); - hg_memory_visualizer_change_pool(HG_MEMORY_VISUALIZER (spy->visualizer), name); - } -} - -static void -_hgspy_pool_updated_cb(HgMemoryVisualizer *visual, - gpointer list, - gpointer data) -{ - GSList *slist = list, *l, *sigwidget = NULL; - HgSpy *spy = data; - GtkWidget *bin, *menu, *menuitem = NULL; - gulong sigid; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - - bin = gtk_ui_manager_get_widget(spy->ui, "/MenuBar/ViewMenu/PoolMenu"); - menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM (bin)); - sigwidget = (GSList *)g_object_get_data(G_OBJECT (menu), "signal-widget-list"); - for (l = sigwidget; l != NULL; l = g_slist_next(l)) { - sigid = (gulong)g_object_get_data(G_OBJECT (l->data), "signal-id"); - if (sigid > 0) - g_signal_handler_disconnect(l->data, sigid); - } - gtk_menu_item_remove_submenu(GTK_MENU_ITEM (bin)); - menu = gtk_menu_new(); - sigwidget = NULL; - for (l = slist; l != NULL; l = g_slist_next(l)) { - if (menuitem == NULL) { - menuitem = gtk_radio_menu_item_new_with_label(NULL, l->data); - } else { - menuitem = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM (menuitem), l->data); - } - sigid = g_signal_connect(menuitem, "activate", - G_CALLBACK (_hgspy_radio_menu_pool_activate_cb), spy); - sigwidget = g_slist_append(sigwidget, menuitem); - g_object_set_data(G_OBJECT (menuitem), "signal-id", (gpointer)sigid); - g_object_set_data(G_OBJECT (menuitem), "user-data", l->data); - gtk_menu_shell_append(GTK_MENU_SHELL (menu), menuitem); - gtk_widget_show(menuitem); - } - if (sigwidget == NULL) { - menuitem = gtk_menu_item_new_with_label(_("None")); - gtk_menu_shell_append(GTK_MENU_SHELL (menu), menuitem); - gtk_widget_set_sensitive(menuitem, FALSE); - gtk_widget_show(menuitem); - } - g_object_set_data(G_OBJECT (menu), "signal-widget-list", sigwidget); - gtk_menu_item_set_submenu(GTK_MENU_ITEM (bin), menu); -} - -static void -_hgspy_draw_updated_cb(HgMemoryVisualizer *visual, - gpointer data) -{ - HgSpy *spy = data; - const gchar *name; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - g_return_if_fail (data != NULL); - - name = hg_memory_visualizer_get_current_pool_name(visual); - _hgspy_update_vm_status(visual, spy, name); -} - -static void -_hgspy_gc_started_cb(HgMemoryVisualizer *visual, - gpointer data) -{ - HgSpy *spy = data; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - g_return_if_fail (data != NULL); - - spy->gc_status_msg_id = gtk_statusbar_push(GTK_STATUSBAR (spy->status), - spy->gc_status_ctxt_id, - _("Collecting the garbages...")); -} - -static void -_hgspy_gc_finished_cb(HgMemoryVisualizer *visual, - gpointer data) -{ - HgSpy *spy = data; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - g_return_if_fail (data != NULL); - - gtk_statusbar_remove(GTK_STATUSBAR (spy->status), - spy->gc_status_ctxt_id, - spy->gc_status_msg_id); -} - -static void -_hgspy_entry_activate_cb(GtkWidget *widget, - gpointer data) -{ - GtkEntry *entry; - HgSpy *spy = data; - const gchar *text; - gchar *echoback; - - g_return_if_fail (GTK_IS_ENTRY (widget)); - g_return_if_fail (data != NULL); - - entry = GTK_ENTRY (widget); - if (spy->statementedit_buffer) { - g_warning("FIXME: something lost."); - } - text = gtk_entry_get_text(entry); - if (text == NULL || text[0] == 0) - return; - if (spy->vm) { - echoback = g_strdup_printf("%s%s\n", - gtk_label_get_text(GTK_LABEL (spy->prompt)), - text); - _hgspy_insert_text_into_textview(spy, echoback, strlen(echoback)); - g_free(echoback); - spy->statementedit_buffer = g_strdup(text); - gtk_widget_set_sensitive(spy->entry, FALSE); - } - gtk_entry_set_text(entry, ""); -} - -static void -_hgspy_update_vm_status(HgMemoryVisualizer *visual, - HgSpy *spy, - const gchar *name) -{ - gsize total, used; - gchar *p; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - g_return_if_fail (spy != NULL); - - if (name) { - total = hg_memory_visualizer_get_max_size(visual, name); - p = g_strdup_printf("%" G_GSIZE_FORMAT, total); - gtk_entry_set_text(GTK_ENTRY (spy->total_vm_size), p); - g_free(p); - used = hg_memory_visualizer_get_used_size(visual, name); - p = g_strdup_printf("%" G_GSIZE_FORMAT, used); - gtk_entry_set_text(GTK_ENTRY (spy->used_vm_size), p); - g_free(p); - p = g_strdup_printf("%" G_GSIZE_FORMAT, total - used); - gtk_entry_set_text(GTK_ENTRY (spy->free_vm_size), p); - g_free(p); - } else { - gtk_entry_set_text(GTK_ENTRY (spy->total_vm_size), ""); - gtk_entry_set_text(GTK_ENTRY (spy->used_vm_size), ""); - gtk_entry_set_text(GTK_ENTRY (spy->free_vm_size), ""); - } -} - -static void -_hgspy_insert_text_into_textview(HgSpy *spy, - const gchar *text, - gsize length) -{ - GtkTextBuffer *textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW (spy->textview)); - GtkTextIter iter; - gdouble val; - - gtk_text_buffer_get_end_iter(textbuf, &iter); - gtk_text_buffer_insert(textbuf, &iter, text, length); - val = GTK_TEXT_VIEW (spy->textview)->vadjustment->upper; - gtk_adjustment_set_value(GTK_TEXT_VIEW (spy->textview)->vadjustment, - val); -} - -/* - * Public Functions - */ -int -main(int argc, - char **argv) -{ - GModule *module; - HgSpy *spy; - GtkWidget *menubar, *vbox, *none, *table, *label, *hbox, *vbox2, *scrolled, *hbox2; - GtkWidget *vpaned, *vbox3; - GtkActionGroup *actions; - GtkActionEntry action_entries[] = { - /* toplevel menu */ - { - .name = "VMMenu", - .stock_id = NULL, - .label = _("V_M"), - .accelerator = NULL, - .tooltip = NULL, - .callback = NULL - }, - { - .name = "ViewMenu", - .stock_id = NULL, - .label = _("_View"), - .accelerator = NULL, - .tooltip = NULL, - .callback = NULL - }, - { - .name = "HelpMenu", - .stock_id = NULL, - .label = _("_Help"), - .accelerator = NULL, - .tooltip = NULL, - .callback = NULL - }, - /* submenu - VM */ - { - .name = "Run", - .stock_id = GTK_STOCK_EXECUTE, - .label = NULL, - .accelerator = NULL, - .tooltip = _("Run VM interactively"), - .callback = G_CALLBACK (_hgspy_action_menubar_run_cb) - }, - { - .name = "Open", - .stock_id = GTK_STOCK_OPEN, - .label = NULL, - .accelerator = "<control>O", - .tooltip = _("Run a PostScript file on VM"), - .callback = G_CALLBACK (_hgspy_action_menubar_open_cb) - }, - { - .name = "Quit", - .stock_id = GTK_STOCK_QUIT, - .label = NULL, - .accelerator = "<control>Q", - .tooltip = _("Quit"), - .callback = G_CALLBACK (_hgspy_action_menubar_quit_cb) - }, - /* submenu - View */ - { - .name = "PoolMenu", - .stock_id = NULL, - .label = _("Pool"), - .accelerator = NULL, - .tooltip = _("Pool to be visualized."), - .callback = NULL - }, - /* submenu - Pool */ - { - .name = "PoolNone", - .stock_id = NULL, - .label = _("None"), - .accelerator = NULL, - .tooltip = NULL, - .callback = NULL - }, - /* submenu - Help */ - { - .name = "About", - .stock_id = GTK_STOCK_ABOUT, - .label = NULL, - .accelerator = NULL, - .tooltip = _("About"), - .callback = G_CALLBACK (_hgspy_action_menubar_about_cb) - } - }; - gchar *uixml = - "<ui>" - " <menubar name='MenuBar'>" - " <menu action='VMMenu'>" - " <menuitem action='Run'/>" - " <menuitem action='Open'/>" - " <separator/>" - " <menuitem action='Quit'/>" - " </menu>" - " <menu action='ViewMenu'>" - " <menu action='PoolMenu'>" - " <menuitem action='PoolNone'/>" - " </menu>" - " </menu>" - " <menu action='HelpMenu'>" - " <menuitem action='About'/>" - " </menu>" - " </menubar>" - "</ui>"; - guint i = 0; - - if ((module = g_module_open("libhgspy-helper.so", 0)) == NULL) { - g_warning("Failed g_module_open: %s", g_module_error()); - return 1; - } - if (!g_module_symbol(module, "hg_spy_helper_get_widget", &__hg_spy_helper_get_widget)) { - g_warning("Failed g_module_symbol: %s", g_module_error()); - g_module_close(module); - return 1; - } - -#ifdef ENABLE_NLS - bindtextdomain (GETTEXT_PACKAGE, HGSPY_LOCALEDIR); -#ifdef HAVE_BIND_TEXTDOMAIN_CODESET - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); -#endif /* HAVE_BIND_TEXTDOMAIN_CODESET */ - textdomain (GETTEXT_PACKAGE); -#endif /* ENABLE_NLS */ - - g_thread_init(NULL); - gdk_threads_init(); - gtk_init(&argc, &argv); - - spy = g_new(HgSpy, 1); - spy->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - spy->vm_thread = NULL; - spy->vm = NULL; - spy->file = NULL; - spy->error = 0; - spy->statementedit_buffer = NULL; - spy->destroyed = FALSE; - spy->gc_status_ctxt_id = 0; - spy->gc_status_msg_id = 0; - - actions = gtk_action_group_new("MenuBar"); - spy->ui = gtk_ui_manager_new(); - vbox = gtk_vbox_new(FALSE, 0); - vbox2 = gtk_vbox_new(FALSE, 0); - vbox3 = gtk_vbox_new(FALSE, 0); - hbox = gtk_hbox_new(FALSE, 0); - hbox2 = gtk_hbox_new(FALSE, 0); - table = gtk_table_new(3, 2, FALSE); - scrolled = gtk_scrolled_window_new(NULL, NULL); - vpaned = gtk_vpaned_new(); - spy->total_vm_size = gtk_entry_new(); - spy->used_vm_size = gtk_entry_new(); - spy->free_vm_size = gtk_entry_new(); - spy->visualizer = ((GtkWidget * (*) (void))__hg_spy_helper_get_widget) (); - spy->textview = gtk_text_view_new(); - spy->entry = gtk_entry_new(); - spy->prompt = gtk_label_new("PS>"); - spy->status = gtk_statusbar_new(); - - if (spy->visualizer == NULL) { - g_warning("Failed to initialize a helper module."); - return 1; - } - - /* setup action groups */ - gtk_action_group_add_actions(actions, - action_entries, - sizeof (action_entries) / sizeof (GtkActionEntry), - spy); - - /* setup UI */ - gtk_window_set_default_size(GTK_WINDOW (spy->window), 400, 300); - gtk_window_set_title(GTK_WINDOW (spy->window), "Memory Visualizer for Hieroglyph"); - gtk_ui_manager_add_ui_from_string(spy->ui, uixml, strlen(uixml), NULL); - gtk_ui_manager_insert_action_group(spy->ui, actions, 0); - none = gtk_ui_manager_get_widget(spy->ui, "/MenuBar/ViewMenu/PoolMenu/PoolNone"); - gtk_widget_set_sensitive(none, FALSE); - gtk_editable_set_editable(GTK_EDITABLE (spy->total_vm_size), FALSE); - gtk_editable_set_editable(GTK_EDITABLE (spy->used_vm_size), FALSE); - gtk_editable_set_editable(GTK_EDITABLE (spy->free_vm_size), FALSE); - GTK_WIDGET_UNSET_FLAGS (spy->total_vm_size, GTK_CAN_FOCUS); - GTK_WIDGET_UNSET_FLAGS (spy->used_vm_size, GTK_CAN_FOCUS); - GTK_WIDGET_UNSET_FLAGS (spy->free_vm_size, GTK_CAN_FOCUS); - GTK_WIDGET_UNSET_FLAGS (spy->textview, GTK_CAN_FOCUS); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_text_view_set_editable(GTK_TEXT_VIEW (spy->textview), FALSE); - gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW (spy->textview), GTK_WRAP_WORD_CHAR); - spy->gc_status_ctxt_id = gtk_statusbar_get_context_id(GTK_STATUSBAR (spy->status), - "Status for GC"); - - /* setup accelerators */ - gtk_window_add_accel_group(GTK_WINDOW (spy->window), gtk_ui_manager_get_accel_group(spy->ui)); - - /* widget connections */ - menubar = gtk_ui_manager_get_widget(spy->ui, "/MenuBar"); - gtk_box_pack_start(GTK_BOX (vbox), menubar, FALSE, TRUE, 0); - gtk_box_pack_start(GTK_BOX (vbox), spy->visualizer, TRUE, TRUE, 0); - /* total */ - label = gtk_label_new(_("Total memory size:")); - gtk_table_attach(GTK_TABLE (table), label, - 0, 1, i, i + 1, - 0, GTK_FILL, - 0, 0); - gtk_table_attach(GTK_TABLE (table), spy->total_vm_size, - 1, 2, i, i + 1, - GTK_FILL | GTK_EXPAND, GTK_FILL, - 0, 0); - i++; - /* used */ - label = gtk_label_new(_("Used memory size:")); - gtk_table_attach(GTK_TABLE (table), label, - 0, 1, i, i + 1, - 0, GTK_FILL, - 0, 0); - gtk_table_attach(GTK_TABLE (table), spy->used_vm_size, - 1, 2, i, i + 1, - GTK_FILL | GTK_EXPAND, GTK_FILL, - 0, 0); - i++; - /* free */ - label = gtk_label_new(_("Free memory size:")); - gtk_table_attach(GTK_TABLE (table), label, - 0, 1, i, i + 1, - 0, GTK_FILL, - 0, 0); - gtk_table_attach(GTK_TABLE (table), spy->free_vm_size, - 1, 2, i, i + 1, - GTK_FILL | GTK_EXPAND, GTK_FILL, - 0, 0); - i++; - - gtk_container_add(GTK_CONTAINER (scrolled), spy->textview); - gtk_box_pack_start(GTK_BOX (vbox2), scrolled, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX (hbox2), spy->prompt, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX (hbox2), spy->entry, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX (vbox2), hbox2, FALSE, TRUE, 0); - gtk_box_pack_start(GTK_BOX (hbox), vbox2, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX (hbox), table, FALSE, FALSE, 0); - gtk_paned_pack1(GTK_PANED (vpaned), vbox, TRUE, FALSE); - gtk_paned_pack2(GTK_PANED (vpaned), hbox, TRUE, FALSE); - gtk_box_pack_start(GTK_BOX (vbox3), vpaned, TRUE, TRUE, 0); - gtk_box_pack_end(GTK_BOX (vbox3), spy->status, FALSE, FALSE, 0); - gtk_container_add(GTK_CONTAINER (spy->window), vbox3); - - /* setup signals */ - g_signal_connect(spy->visualizer, "pool-updated", - G_CALLBACK (_hgspy_pool_updated_cb), spy); - g_signal_connect(spy->visualizer, "draw-updated", - G_CALLBACK (_hgspy_draw_updated_cb), spy); - g_signal_connect(spy->visualizer, "gc-started", - G_CALLBACK (_hgspy_gc_started_cb), spy); - g_signal_connect(spy->visualizer, "gc-finished", - G_CALLBACK (_hgspy_gc_finished_cb), spy); - g_signal_connect(spy->window, "delete-event", - G_CALLBACK (_hgspy_quit_cb), spy); - g_signal_connect(spy->entry, "activate", - G_CALLBACK (_hgspy_entry_activate_cb), spy); - - gtk_widget_show_all(spy->window); - gtk_widget_grab_focus(spy->entry); - - gdk_threads_enter(); - gtk_main(); - gdk_threads_leave(); - - if (spy->vm) { - spy->destroyed = TRUE; - while (spy->destroyed) - sleep(1); - } - - /* finalize */ - g_module_close(module); - - return 0; -} diff --git a/src/hgspy.sh b/src/hgspy.sh deleted file mode 100755 index 98b3288..0000000 --- a/src/hgspy.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/sh - -topdir=`dirname $0` - -LD_LIBRARY_PATH=$topdir/.libs:$LD_LIBRARY_PATH LD_PRELOAD=$topdir/.libs/libhgspy-helper.so $topdir/.libs/hgspy-bin $@ diff --git a/src/hgspy_helper.c b/src/hgspy_helper.c deleted file mode 100644 index 7c64386..0000000 --- a/src/hgspy_helper.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * hgspy_helper.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdlib.h> -#include <gmodule.h> -#include <hieroglyph/hgtypes.h> -#include <hieroglyph/hgmem.h> -#include "../hieroglyph/hgallocator-private.h" -#include "hgspy_helper.h" -#include "visualizer.h" - - -static gpointer __hg_mem_pool_destroy = NULL; -static gpointer __hg_mem_pool_add_heap = NULL; -static gpointer __hg_mem_alloc_with_flags = NULL; -static gpointer __hg_mem_free = NULL; -static gpointer __hg_mem_resize = NULL; -static gpointer __hg_mem_garbage_collection = NULL; -static GModule *__handle = NULL; -static GtkWidget *visual = NULL; - -/* - * Private Functions - */ -static void __attribute__((constructor)) -helper_init(void) -{ - unsetenv("LD_PRELOAD"); - __handle = g_module_open("libhieroglyph.so", 0); - if (__handle == NULL) { - g_warning("Failed g_module_open: %s", g_module_error()); - exit(1); - } - if (!g_module_symbol(__handle, "hg_mem_pool_destroy", &__hg_mem_pool_destroy)) { - g_warning("Failed g_module_symbol: %s", g_module_error()); - exit(1); - } - if (!g_module_symbol(__handle, "hg_mem_pool_add_heap", &__hg_mem_pool_add_heap)) { - g_warning("Failed g_module_symbol: %s", g_module_error()); - exit(1); - } - if (!g_module_symbol(__handle, "hg_mem_alloc_with_flags", &__hg_mem_alloc_with_flags)) { - g_warning("Failed g_module_symbol: %s", g_module_error()); - exit(1); - } - if (!g_module_symbol(__handle, "hg_mem_free", &__hg_mem_free)) { - g_warning("Failed g_module_symbol: %s", g_module_error()); - exit(1); - } - if (!g_module_symbol(__handle, "hg_mem_resize", &__hg_mem_resize)) { - g_warning("Failed g_module_symbol: %s", g_module_error()); - exit(1); - } - if (!g_module_symbol(__handle, "hg_mem_garbage_collection", &__hg_mem_garbage_collection)) { - g_warning("Failed g_module_symbol: %s", g_module_error()); - exit(1); - } - g_type_init(); - visual = hg_memory_visualizer_new(); -} - -void __attribute__((destructor)) -helper_finalize(void) -{ - if (__handle) - g_module_close(__handle); -} - -/* - * preload functions - */ -void -hg_mem_pool_destroy(HgMemPool *pool) -{ - gchar *pool_name = g_strdup(hg_mem_pool_get_name(pool)); - - ((void (*) (HgMemPool *))__hg_mem_pool_destroy) (pool); - - hg_memory_visualizer_remove_pool(HG_MEMORY_VISUALIZER (visual), - pool_name); - g_free(pool_name); -} - -void -hg_mem_pool_add_heap(HgMemPool *pool, - HgHeap *heap) -{ - ((void (*) (HgMemPool *, HgHeap *))__hg_mem_pool_add_heap) (pool, heap); - hg_memory_visualizer_set_heap_state(HG_MEMORY_VISUALIZER (visual), - hg_mem_pool_get_name(pool), - heap); -} - -gpointer -hg_mem_alloc_with_flags(HgMemPool *pool, - gsize size, - guint flags) -{ - gpointer retval = ((gpointer (*) (HgMemPool *, gsize, guint)) - __hg_mem_alloc_with_flags) (pool, size, flags); - HgMemObject *obj; - - if (retval) { - hg_mem_get_object__inline(retval, obj); - if (obj) { - gint heap_id = HG_MEMOBJ_GET_HEAP_ID (obj); - GPtrArray *a = obj->pool->heap_list; - HgHeap *h; - - if (a && a->len > 0) { - h = g_ptr_array_index(a, heap_id); - hg_memory_visualizer_set_chunk_state(HG_MEMORY_VISUALIZER (visual), - hg_mem_pool_get_name(obj->pool), - heap_id, - (gsize)obj - (gsize)h->heaps, - hg_mem_get_object_size(retval), - HG_CHUNK_USED); - } - } - } - - return retval; -} - -gboolean -hg_mem_free(gpointer data) -{ - HgMemObject *obj; - - hg_mem_get_object__inline(data, obj); - if (obj) { - gint heap_id = HG_MEMOBJ_GET_HEAP_ID (obj); - HgHeap *h = g_ptr_array_index(obj->pool->heap_list, heap_id); - - hg_memory_visualizer_set_chunk_state(HG_MEMORY_VISUALIZER (visual), - hg_mem_pool_get_name(obj->pool), - heap_id, - (gsize)obj - (gsize)h->heaps, - hg_mem_get_object_size(data), - HG_CHUNK_FREE); - } - - return ((gboolean (*) (gpointer))__hg_mem_free) (data); -} - -gpointer -hg_mem_resize(gpointer data, - gsize size) -{ - gpointer retval; - HgMemObject *obj; - - hg_mem_get_object__inline(data, obj); - if (obj) { - gint heap_id = HG_MEMOBJ_GET_HEAP_ID (obj); - HgHeap *h = g_ptr_array_index(obj->pool->heap_list, heap_id); - - hg_memory_visualizer_set_chunk_state(HG_MEMORY_VISUALIZER (visual), - hg_mem_pool_get_name(obj->pool), - heap_id, - (gsize)obj - (gsize)h->heaps, - hg_mem_get_object_size(data), - HG_CHUNK_FREE); - } - - retval = ((gpointer (*) (gpointer, gsize))__hg_mem_resize) (data, size); - - if (retval) { - hg_mem_get_object__inline(retval, obj); - if (obj) { - gint heap_id = HG_MEMOBJ_GET_HEAP_ID (obj); - HgHeap *h = g_ptr_array_index(obj->pool->heap_list, heap_id); - - hg_memory_visualizer_set_chunk_state(HG_MEMORY_VISUALIZER (visual), - hg_mem_pool_get_name(obj->pool), - heap_id, - (gsize)obj - (gsize)h->heaps, - hg_mem_get_object_size(retval), - HG_CHUNK_USED); - } - } - - return retval; -} - -gboolean -hg_mem_garbage_collection(HgMemPool *pool) -{ - gboolean retval; - - hg_memory_visualizer_notify_gc_state(HG_MEMORY_VISUALIZER (visual), FALSE); - retval = ((gboolean (*) (HgMemPool *))__hg_mem_garbage_collection) (pool); - hg_memory_visualizer_notify_gc_state(HG_MEMORY_VISUALIZER (visual), TRUE); - - return retval; -} - -/* - * Public Functions - */ -GtkWidget * -hg_spy_helper_get_widget(void) -{ - return visual; -} diff --git a/src/hgspy_helper.h b/src/hgspy_helper.h deleted file mode 100644 index 974e447..0000000 --- a/src/hgspy_helper.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * hgspy_helper.h - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HG_SPY_HELPER_H__ -#define __HG_SPY_HELPER_H__ - -#include <glib.h> - -G_BEGIN_DECLS - -G_END_DECLS - -#endif /* __HG_SPY_HELPER_H__ */ diff --git a/src/visualizer.c b/src/visualizer.c deleted file mode 100644 index ec276d1..0000000 --- a/src/visualizer.c +++ /dev/null @@ -1,848 +0,0 @@ -/* - * visualizer.c - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <math.h> -#include <string.h> -#include <glib/gi18n.h> -#include <hieroglyph/hgtypes.h> -#include "../hieroglyph/hgallocator-private.h" -#include "visualizer.h" - - -enum { - PROP_0, - PROP_MAX_SIZE, -}; - -enum { - POOL_UPDATED, - DRAW_UPDATED, - GC_STARTED, - GC_FINISHED, - LAST_SIGNAL -}; - -struct _HgMemoryVisualizerClass { - GtkMiscClass parent_class; - - void (* pool_updated) (HgMemoryVisualizer *visual, - gpointer list); - void (* draw_updated) (HgMemoryVisualizer *visual); - void (* gc_started) (HgMemoryVisualizer *visual); - void (* gc_finished) (HgMemoryVisualizer *visual); -}; - -struct Heap2Offset { - gsize *heap2offset; - gchar *bitmaps; - guint alloc; - gsize total_size; -}; - -struct _HgMemoryVisualizer { - GtkMisc parent_instance; - - /*< private >*/ - gdouble block_size; - GHashTable *pool2total_size; - GHashTable *pool2used_size; - GHashTable *pool2array; - GSList *pool_name_list; - gchar *current_pool_name; - struct Heap2Offset *current_h2o; - gboolean need_update; - guint idle_id; - GdkGC *bg_gc; - GdkGC *used_gc; - GdkGC *free_gc; - GdkGC *used_and_free_gc; - GdkPixmap *pixmap; -}; - - -static struct Heap2Offset *_heap2offset_new (guint prealloc); -static void _heap2offset_free (gpointer data); -static void _hg_memory_visualizer_add_idle (HgMemoryVisualizer *visual); -static void _hg_memory_visualizer_remove_idle (HgMemoryVisualizer *visual); -static void _hg_memory_visualizer_create_gc (HgMemoryVisualizer *visual); -static void _hg_memory_visualizer_redraw_in_pixmap(HgMemoryVisualizer *visual); - - -static GtkMiscClass *parent_class = NULL; -static guint signals[LAST_SIGNAL] = { 0 }; - -G_LOCK_DEFINE_STATIC (visualizer); - - -/* - * Signal handlers - */ -/* GObject */ - -/* GtkObject */ -static void -hg_memory_visualizer_real_destroy(GtkObject *object) -{ - HgMemoryVisualizer *visual; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (object)); - - visual = HG_MEMORY_VISUALIZER (object); - if (visual->pool2total_size) { - g_hash_table_destroy(visual->pool2total_size); - visual->pool2total_size = NULL; - } - if (visual->pool2used_size) { - g_hash_table_destroy(visual->pool2used_size); - visual->pool2used_size = NULL; - } - if (visual->pool2array) { - g_hash_table_destroy(visual->pool2array); - visual->pool2array = NULL; - } - if (visual->pool_name_list) { - GSList *l; - - for (l = visual->pool_name_list; l != NULL; l = g_slist_next(l)) - g_free(l->data); - g_slist_free(visual->pool_name_list); - visual->pool_name_list = NULL; - } - visual->current_pool_name = NULL; - visual->current_h2o = NULL; - _hg_memory_visualizer_remove_idle(visual); - - if (visual->bg_gc) { - g_object_unref(visual->bg_gc); - visual->bg_gc = NULL; - } - if (visual->used_gc) { - g_object_unref(visual->used_gc); - visual->used_gc = NULL; - } - if (visual->free_gc) { - g_object_unref(visual->free_gc); - visual->free_gc = NULL; - } - if (visual->used_and_free_gc) { - g_object_unref(visual->used_and_free_gc); - visual->used_and_free_gc = NULL; - } - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - -/* GtkWidget */ -static void -hg_memory_visualizer_real_size_request(GtkWidget *widget, - GtkRequisition *requisition) -{ - GtkWidget *parent = gtk_widget_get_parent(widget); - - requisition->width = widget->requisition.width = parent->requisition.width; - requisition->height = widget->requisition.height = parent->requisition.height; -} - -static void -hg_memory_visualizer_real_size_allocate(GtkWidget *widget, - GtkAllocation *allocation) -{ - HgMemoryVisualizer *visual; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (widget)); - g_return_if_fail (allocation != NULL); - - if (GTK_WIDGET_CLASS (parent_class)->size_allocate) - (* GTK_WIDGET_CLASS (parent_class)->size_allocate) (widget, allocation); - - visual = HG_MEMORY_VISUALIZER (widget); - - G_LOCK (visualizer); - - _hg_memory_visualizer_redraw_in_pixmap(visual); - - G_UNLOCK (visualizer); -} - -static void -hg_memory_visualizer_real_realize(GtkWidget *widget) -{ - HgMemoryVisualizer *visual; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (widget)); - - if (GTK_WIDGET_CLASS (parent_class)->realize) - (* GTK_WIDGET_CLASS (parent_class)->realize) (widget); - - visual = HG_MEMORY_VISUALIZER (widget); - - widget->style = gtk_style_attach(widget->style, widget->window); - gdk_window_set_background(widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]); - - if (visual->bg_gc == NULL || - visual->used_gc == NULL || - visual->free_gc == NULL || - visual->used_and_free_gc == NULL) - _hg_memory_visualizer_create_gc(visual); - - G_LOCK (visualizer); - - _hg_memory_visualizer_redraw_in_pixmap(visual); - - G_UNLOCK (visualizer); -} - -static void -hg_memory_visualizer_real_unrealize(GtkWidget *widget) -{ - HgMemoryVisualizer *visual; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (widget)); - - visual = HG_MEMORY_VISUALIZER (widget); - - _hg_memory_visualizer_remove_idle(visual); - - if (visual->bg_gc) { - g_object_unref(visual->bg_gc); - visual->bg_gc = NULL; - } - if (visual->used_gc) { - g_object_unref(visual->used_gc); - visual->used_gc = NULL; - } - if (visual->free_gc) { - g_object_unref(visual->free_gc); - visual->free_gc = NULL; - } - if (visual->used_and_free_gc) { - g_object_unref(visual->used_and_free_gc); - visual->used_and_free_gc = NULL; - } - - if (GTK_WIDGET_CLASS (parent_class)->unrealize) - (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); -} - -static void -hg_memory_visualizer_real_map(GtkWidget *widget) -{ - HgMemoryVisualizer *visual; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (widget)); - - if (GTK_WIDGET_CLASS (parent_class)->map) - (* GTK_WIDGET_CLASS (parent_class)->map) (widget); - - visual = HG_MEMORY_VISUALIZER (widget); - - if (visual->need_update) - _hg_memory_visualizer_add_idle(visual); -} - -static void -hg_memory_visualizer_real_unmap(GtkWidget *widget) -{ - HgMemoryVisualizer *visual; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (widget)); - - visual = HG_MEMORY_VISUALIZER (widget); - - _hg_memory_visualizer_remove_idle(visual); - - if (GTK_WIDGET_CLASS (parent_class)->unmap) - (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget); -} - -static gboolean -hg_memory_visualizer_real_expose(GtkWidget *widget, - GdkEventExpose *event) -{ - HgMemoryVisualizer *visual; - GtkMisc *misc; - - g_return_val_if_fail (HG_IS_MEMORY_VISUALIZER (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - misc = GTK_MISC (widget); - visual = HG_MEMORY_VISUALIZER (widget); - - if (!GTK_WIDGET_MAPPED (widget)) - return FALSE; - - gdk_draw_drawable(widget->window, - widget->style->fg_gc[GTK_WIDGET_STATE (widget)], - visual->pixmap, - event->area.x, event->area.y, - event->area.x, event->area.y, - event->area.width, event->area.height); - - return FALSE; -} - -/* - * Private Functions - */ -static void -hg_memory_visualizer_class_init(HgMemoryVisualizerClass *klass) -{ - GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - parent_class = g_type_class_peek_parent(klass); - - /* initialize GObject */ - - /* initialize GtkObject */ - object_class->destroy = hg_memory_visualizer_real_destroy; - - /* initialize GtkWidget */ - widget_class->expose_event = hg_memory_visualizer_real_expose; - widget_class->realize = hg_memory_visualizer_real_realize; - widget_class->unrealize = hg_memory_visualizer_real_unrealize; - widget_class->map = hg_memory_visualizer_real_map; - widget_class->unmap = hg_memory_visualizer_real_unmap; - widget_class->size_request = hg_memory_visualizer_real_size_request; - widget_class->size_allocate = hg_memory_visualizer_real_size_allocate; - - /* initialize HgMemoryVisualizer */ - - /* GObject properties */ - - /* signals */ - signals[POOL_UPDATED] = g_signal_new("pool-updated", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (HgMemoryVisualizerClass, pool_updated), - NULL, NULL, - gtk_marshal_VOID__POINTER, - G_TYPE_NONE, 1, - G_TYPE_POINTER); - signals[DRAW_UPDATED] = g_signal_new("draw-updated", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (HgMemoryVisualizerClass, draw_updated), - NULL, NULL, - gtk_marshal_VOID__VOID, - G_TYPE_NONE, 0); - signals[GC_STARTED] = g_signal_new("gc-started", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (HgMemoryVisualizerClass, gc_started), - NULL, NULL, - gtk_marshal_VOID__VOID, - G_TYPE_NONE, 0); - signals[GC_FINISHED] = g_signal_new("gc-finished", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (HgMemoryVisualizerClass, gc_finished), - NULL, NULL, - gtk_marshal_VOID__VOID, - G_TYPE_NONE, 0); -} - -static void -hg_memory_visualizer_instance_init(HgMemoryVisualizer *visual) -{ - visual->pool2total_size = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); - visual->pool2used_size = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); - visual->pool2array = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, _heap2offset_free); - visual->pool_name_list = NULL; - visual->current_pool_name = NULL; - visual->current_h2o = NULL; - visual->need_update = FALSE; - visual->idle_id = 0; - visual->bg_gc = NULL; - visual->used_gc = NULL; - visual->free_gc = NULL; - visual->used_and_free_gc = NULL; - visual->pixmap = NULL; -} - -static struct Heap2Offset * -_heap2offset_new(guint prealloc) -{ - struct Heap2Offset *retval; - - g_return_val_if_fail (prealloc > 0, NULL); - - retval = g_new(struct Heap2Offset, 1); - if (retval != NULL) { - retval->heap2offset = g_new(gsize, prealloc); - retval->bitmaps = NULL; - retval->alloc = prealloc; - retval->total_size = 0; - } - - return retval; -} - -static void -_heap2offset_free(gpointer data) -{ - struct Heap2Offset *p = data; - - if (p->heap2offset) - g_free(p->heap2offset); - if (p->bitmaps) - g_free(p->bitmaps); - g_free(data); -} - -static gboolean -_hg_memory_visualizer_idle_handler_cb(gpointer data) -{ - HgMemoryVisualizer *visual; - - visual = HG_MEMORY_VISUALIZER (data); - - G_LOCK (visualizer); - - _hg_memory_visualizer_redraw_in_pixmap(visual); - - gtk_widget_queue_draw(GTK_WIDGET (visual)); - - visual->idle_id = 0; - visual->need_update = FALSE; - - G_UNLOCK (visualizer); - - g_signal_emit(visual, signals[DRAW_UPDATED], 0); - - return FALSE; -} - -static void -_hg_memory_visualizer_add_idle(HgMemoryVisualizer *visual) -{ - g_return_if_fail (visual->need_update); - - if (!visual->idle_id) { - visual->idle_id = gtk_idle_add(_hg_memory_visualizer_idle_handler_cb, visual); - } -} - -static void -_hg_memory_visualizer_remove_idle(HgMemoryVisualizer *visual) -{ - if (visual->idle_id != 0) { - gtk_idle_remove(visual->idle_id); - visual->idle_id = 0; - } -} - -static void -_hg_memory_visualizer_create_gc(HgMemoryVisualizer *visual) -{ - GdkGCValues values; - - gdk_color_black(gdk_colormap_get_system(), &values.background); - visual->bg_gc = gdk_gc_new_with_values(GTK_WIDGET (visual)->window, &values, - GDK_GC_BACKGROUND); - values.foreground.pixel = 0; - values.foreground.red = 0; - values.foreground.green = 0; - values.foreground.blue = 32768; - gdk_colormap_alloc_color(gdk_colormap_get_system(), &values.foreground, FALSE, FALSE); - visual->free_gc = gdk_gc_new_with_values(GTK_WIDGET (visual)->window, &values, - GDK_GC_FOREGROUND); - values.foreground.pixel = 0; - values.foreground.red = 32768; - values.foreground.green = 0; - values.foreground.blue = 0; - gdk_colormap_alloc_color(gdk_colormap_get_system(), &values.foreground, FALSE, FALSE); - visual->used_gc = gdk_gc_new_with_values(GTK_WIDGET (visual)->window, &values, - GDK_GC_FOREGROUND); - values.foreground.pixel = 0; - values.foreground.red = 32768; - values.foreground.green = 0; - values.foreground.blue = 32768; - gdk_colormap_alloc_color(gdk_colormap_get_system(), &values.foreground, FALSE, FALSE); - visual->used_and_free_gc = gdk_gc_new_with_values(GTK_WIDGET (visual)->window, &values, - GDK_GC_FOREGROUND); -} - -static void -_hg_memory_visualizer_redraw_in_pixmap(HgMemoryVisualizer *visual) -{ - GtkWidget *widget = GTK_WIDGET (visual); - GtkMisc *misc = GTK_MISC (visual); - gint i, j, base_x, base_y, x, y, width, height, base_scale, block_size, area; - - if (GTK_WIDGET_REALIZED (widget)) { - if (visual->pixmap) - g_object_unref(G_OBJECT (visual->pixmap)); - visual->pixmap = gdk_pixmap_new(widget->window, - widget->allocation.width, - widget->allocation.height, - -1); - base_x = x = misc->xpad; - base_y = y = misc->ypad; - width = widget->allocation.width - misc->xpad; - height = widget->allocation.height - misc->ypad; - area = (gdouble)(width - base_x) * (gdouble)(height - base_y); - /* draw a background */ - gdk_draw_rectangle(visual->pixmap, - visual->bg_gc, - TRUE, - x, y, width, height); - /* draw a memory images */ - if (visual->current_h2o) { - struct Heap2Offset *h2o = visual->current_h2o; - gint _used = 0, _free = 0, _scale; - GdkGC *gc; - - if (area >= h2o->total_size) { - block_size = (gint)sqrt(area / h2o->total_size); - base_scale = 1; - } else { - base_scale = (gint)(1 / sqrt((gdouble)area / (gdouble)h2o->total_size)); - base_scale *= base_scale; - block_size = 1; - } - _scale = base_scale; - for (i = 0; i < h2o->total_size / 8; i++) { - for (j = 7; j >= 0; j--) { - if ((x + block_size) > width) { - x = base_x; - y += block_size; - } - if ((h2o->bitmaps[i] & (1 << j)) != 0) { - _used++; - } else { - _free++; - } - _scale--; - if (_scale == 0) { - if (_used > 0 && _free == 0) - gc = visual->used_gc; - else if (_used == 0 && _free > 0) - gc = visual->free_gc; - else - gc = visual->used_and_free_gc; - gdk_draw_rectangle(visual->pixmap, - gc, - TRUE, - x, y, - block_size, block_size); - x += block_size; - _scale = base_scale; - _used = 0; - _free = 0; - } - } - } - } - visual->need_update = TRUE; - _hg_memory_visualizer_add_idle(visual); - } -} - -static gint -_hg_memory_visualizer_compare_pool_name_list(gconstpointer a, - gconstpointer b) -{ - return strcmp(a, b); -} - -/* - * Public Functions - */ -GType -hg_memory_visualizer_get_type(void) -{ - static GType mv_type = 0; - - if (!mv_type) { - static const GTypeInfo mv_info = { - .class_size = sizeof (HgMemoryVisualizerClass), - .base_init = NULL, - .base_finalize = NULL, - .class_init = (GClassInitFunc)hg_memory_visualizer_class_init, - .class_finalize = NULL, - .class_data = NULL, - .instance_size = sizeof (HgMemoryVisualizer), - .n_preallocs = 0, - .instance_init = (GInstanceInitFunc)hg_memory_visualizer_instance_init, - .value_table = NULL, - }; - - mv_type = g_type_register_static(GTK_TYPE_MISC, "HgMemoryVisualizer", - &mv_info, 0); - } - - return mv_type; -} - -GtkWidget * -hg_memory_visualizer_new(void) -{ - return GTK_WIDGET (g_object_new(HG_TYPE_MEMORY_VISUALIZER, NULL)); -} - -void -hg_memory_visualizer_set_max_size(HgMemoryVisualizer *visual, - const gchar *name, - gsize size) -{ - struct Heap2Offset *h2o; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - g_return_if_fail (name != NULL); - - g_hash_table_insert(visual->pool2total_size, g_strdup(name), GSIZE_TO_POINTER (size)); - if ((h2o = g_hash_table_lookup(visual->pool2array, name)) == NULL) { - h2o = _heap2offset_new(256); - g_hash_table_insert(visual->pool2array, g_strdup(name), h2o); - } - if (h2o->bitmaps) { - if (size > h2o->total_size) { - gpointer p = g_realloc(h2o->bitmaps, sizeof (gchar) * ((size + 8) / 8)); - if (p == NULL) { - g_warning("Failed to allocate a memory for bitmaps."); - return; - } - h2o->bitmaps = p; - memset((void *)((gsize)h2o->bitmaps + (h2o->total_size / 8)), - 0, - (size - h2o->total_size) / 8); - } - } else { - h2o->bitmaps = g_new0(gchar, (size + 8) / 8); - } - h2o->total_size = size; -} - -gsize -hg_memory_visualizer_get_max_size(HgMemoryVisualizer *visual, - const gchar *name) -{ - g_return_val_if_fail (HG_IS_MEMORY_VISUALIZER (visual), 0); - g_return_val_if_fail (name != NULL, 0); - - return GPOINTER_TO_SIZE (g_hash_table_lookup(visual->pool2total_size, name)); -} - -void -hg_memory_visualizer_set_heap_state(HgMemoryVisualizer *visual, - const gchar *name, - HgHeap *heap) -{ - gsize current_size; - struct Heap2Offset *h2o; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - g_return_if_fail (name != NULL); - g_return_if_fail (heap != NULL); - - if ((h2o = g_hash_table_lookup(visual->pool2array, name)) == NULL) { - h2o = _heap2offset_new(256); - g_hash_table_insert(visual->pool2array, g_strdup(name), h2o); - } - current_size = hg_memory_visualizer_get_max_size(visual, name); - if (heap->serial >= h2o->alloc) { - gpointer p = g_realloc(h2o->heap2offset, - sizeof (gsize) * (heap->serial + 256)); - - if (p == NULL) { - g_warning("Failed to allocate a memory for heap."); - return; - } - h2o->heap2offset = p; - h2o->alloc = heap->serial + 256; - } - h2o->heap2offset[heap->serial] = current_size; - hg_memory_visualizer_set_max_size(visual, name, current_size + heap->total_heap_size); - if (g_slist_find_custom(visual->pool_name_list, - name, - _hg_memory_visualizer_compare_pool_name_list) == NULL) { - visual->pool_name_list = g_slist_append(visual->pool_name_list, - g_strdup(name)); - } - if (visual->current_pool_name == NULL) { - visual->current_pool_name = g_strdup(name); - visual->current_h2o = h2o; - } - - gdk_threads_enter(); - g_signal_emit(visual, signals[POOL_UPDATED], 0, visual->pool_name_list); - gdk_threads_leave(); -} - -void -hg_memory_visualizer_remove_pool(HgMemoryVisualizer *visual, - const gchar *name) -{ - GSList *l; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - g_return_if_fail (name != NULL); - - if ((l = g_slist_find_custom(visual->pool_name_list, - name, - _hg_memory_visualizer_compare_pool_name_list)) == NULL) { - g_warning("pool %s isn't registered.", name); - return; - } - - G_LOCK (visualizer); - - g_hash_table_remove(visual->pool2total_size, name); - g_hash_table_remove(visual->pool2used_size, name); - g_hash_table_remove(visual->pool2array, name); - g_free(l->data); - visual->pool_name_list = g_slist_delete_link(visual->pool_name_list, l); - - G_UNLOCK (visualizer); - - if (strcmp(name, visual->current_pool_name) == 0) { - const gchar *pool_name; - - if (visual->pool_name_list) - pool_name = visual->pool_name_list->data; - else - pool_name = ""; - hg_memory_visualizer_change_pool(visual, pool_name); - } -} - -void -hg_memory_visualizer_set_chunk_state(HgMemoryVisualizer *visual, - const gchar *name, - gint heap_id, - gsize offset, - gsize size, - HgMemoryChunkState state) -{ - struct Heap2Offset *h2o; - gsize base, location, start, end, i, used_size; - gint bit; - - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - g_return_if_fail (name != NULL); - - h2o = g_hash_table_lookup(visual->pool2array, name); - if (h2o == NULL) { - g_warning("Unknown pool found (pool: %s)\n", name); - return; - } - base = h2o->heap2offset[heap_id]; - start = base + offset; - end = start + size; - - G_LOCK (visualizer); - - used_size = hg_memory_visualizer_get_used_size(visual, name); - for (i = start; i < end; i++) { - location = i / 8; - bit = 7 - (i % 8); - switch (state) { - case HG_CHUNK_FREE: - h2o->bitmaps[location] &= ~(1 << bit); - if (i == start) - used_size -= size; - break; - case HG_CHUNK_USED: - h2o->bitmaps[location] |= (1 << bit); - if (i == start) - used_size += size; - break; - default: - break; - } - } - g_hash_table_insert(visual->pool2used_size, g_strdup(name), GSIZE_TO_POINTER (used_size)); - - if (strcmp(name, visual->current_pool_name) == 0) { - visual->need_update = TRUE; - _hg_memory_visualizer_add_idle(visual); - } - G_UNLOCK (visualizer); -} - -void -hg_memory_visualizer_change_pool(HgMemoryVisualizer *visual, - const gchar *name) -{ - g_return_if_fail (HG_IS_MEMORY_VISUALIZER (visual)); - g_return_if_fail (name != NULL); - - G_LOCK (visualizer); - - if (g_slist_find(visual->pool_name_list, name) != NULL) { - if (visual->current_pool_name) - g_free(visual->current_pool_name); - visual->current_pool_name = g_strdup(name); - visual->current_h2o = g_hash_table_lookup(visual->pool2array, name); - } else { - /* send a signal to update the out of date list */ - if (visual->current_pool_name) - g_free(visual->current_pool_name); - visual->current_pool_name = NULL; - visual->current_h2o = NULL; - - g_signal_emit(visual, signals[POOL_UPDATED], 0, visual->pool_name_list); - } - visual->need_update = TRUE; - _hg_memory_visualizer_add_idle(visual); - - G_UNLOCK (visualizer); -} - -gsize -hg_memory_visualizer_get_used_size(HgMemoryVisualizer *visual, - const gchar *name) -{ - g_return_val_if_fail (HG_IS_MEMORY_VISUALIZER (visual), 0); - g_return_val_if_fail (name != NULL, 0); - - return GPOINTER_TO_SIZE (g_hash_table_lookup(visual->pool2used_size, name)); -} - -const gchar * -hg_memory_visualizer_get_current_pool_name(HgMemoryVisualizer *visual) -{ - return visual->current_pool_name; -} - -void -hg_memory_visualizer_notify_gc_state(HgMemoryVisualizer *visual, - gboolean is_finished) -{ - gdk_threads_enter(); - if (is_finished) - g_signal_emit(visual, signals[GC_FINISHED], 0); - else - g_signal_emit(visual, signals[GC_STARTED], 0); - gdk_threads_leave(); - - G_LOCK (visualizer); - - visual->need_update = TRUE; - _hg_memory_visualizer_add_idle(visual); - - G_UNLOCK (visualizer); -} diff --git a/src/visualizer.h b/src/visualizer.h deleted file mode 100644 index f8e0c3a..0000000 --- a/src/visualizer.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * visualizer.h - * Copyright (C) 2006 Akira TAGOH - * - * Authors: - * Akira TAGOH <at@gclab.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __VISUALIZER_H__ -#define __VISUALIZER_H__ - -#include <gtk/gtk.h> - -G_BEGIN_DECLS - -#define HG_TYPE_MEMORY_VISUALIZER (hg_memory_visualizer_get_type()) -#define HG_MEMORY_VISUALIZER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HG_TYPE_MEMORY_VISUALIZER, HgMemoryVisualizer)) -#define HG_MEMORY_VISUALIZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), HG_TYPE_MEMORY_VISUALIZER, HgMemoryVisualizerClass)) -#define HG_IS_MEMORY_VISUALIZER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HG_TYPE_MEMORY_VISUALIZER)) -#define HG_IS_MEMORY_VISUALIZER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HG_TYPE_MEMORY_VISUALIZER)) -#define HG_MEMORY_VISUALIZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HG_TYPE_MEMORY_VISUALIZER, HgMemoryVisualizerClass)) - - -typedef struct _HgMemoryVisualizerClass HgMemoryVisualizerClass; -typedef struct _HgMemoryVisualizer HgMemoryVisualizer; -typedef enum _HgMemoryChunkState HgMemoryChunkState; - - -enum _HgMemoryChunkState { - HG_CHUNK_FREE, - HG_CHUNK_USED, -}; - - -GType hg_memory_visualizer_get_type (void) G_GNUC_CONST; -GtkWidget *hg_memory_visualizer_new (void); -void hg_memory_visualizer_set_max_size (HgMemoryVisualizer *visual, - const gchar *name, - gsize size); -gsize hg_memory_visualizer_get_max_size (HgMemoryVisualizer *visual, - const gchar *name); -void hg_memory_visualizer_set_heap_state (HgMemoryVisualizer *visual, - const gchar *name, - HgHeap *heap); -void hg_memory_visualizer_remove_pool (HgMemoryVisualizer *visual, - const gchar *name); -void hg_memory_visualizer_set_chunk_state (HgMemoryVisualizer *visual, - const gchar *name, - gint heap_id, - gsize offset, - gsize size, - HgMemoryChunkState state); -void hg_memory_visualizer_change_pool (HgMemoryVisualizer *visual, - const gchar *name); -gsize hg_memory_visualizer_get_used_size (HgMemoryVisualizer *visual, - const gchar *name); -const gchar *hg_memory_visualizer_get_current_pool_name(HgMemoryVisualizer *visual); -void hg_memory_visualizer_notify_gc_state (HgMemoryVisualizer *visual, - gboolean is_finished); - - -G_END_DECLS - -#endif /* __VISUALIZER_H__ */ diff --git a/tests/Makefile.am b/tests/Makefile.am deleted file mode 100644 index 3a742ad..0000000 --- a/tests/Makefile.am +++ /dev/null @@ -1,64 +0,0 @@ -NULL = -SUBDIRS = - -INCLUDES = \ - -I$(top_srcdir)/hieroglyph \ - $(HG_CFLAGS) \ - $(CHECK_CFLAGS) \ - $(NULL) -DEPS = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(NULL) -LDADDS = \ - $(top_builddir)/hieroglyph/libhieroglyph.la \ - $(CHECK_LIBS) \ - $(NULL) - -noinst_PROGRAMS = \ - test-hgobject \ - test-hgarray \ - test-hgdict \ - test-hgfile \ - test-hgstack \ - test-hgstring \ - $(NULL) - -test_hgobject_SOURCES = \ - main.c \ - hgobject.c \ - $(NULL) -test_hgobject_LDADD = $(LDADDS) -test_hgarray_SOURCES = \ - main.c \ - hgarray.c \ - $(NULL) -test_hgarray_LDADD = $(LDADDS) -test_hgdict_SOURCES = \ - main.c \ - hgdict.c \ - $(NULL) -test_hgdict_LDADD = $(LDADDS) -test_hgfile_SOURCES = \ - main.c \ - hgfile.c \ - $(NULL) -test_hgfile_LDADD = $(LDADDS) -test_hgstack_SOURCES = \ - main.c \ - hgstack.c \ - $(NULL) -test_hgstack_LDADD = $(LDADDS) -test_hgstring_SOURCES = \ - main.c \ - hgstring.c \ - $(NULL) -test_hgstring_LDADD = $(LDADDS) - -TESTS = \ - test-hgobject \ - test-hgarray \ - test-hgdict \ - test-hgfile \ - test-hgstack \ - test-hgstring \ - $(NULL) diff --git a/tests/hgarray.c b/tests/hgarray.c deleted file mode 100644 index b933014..0000000 --- a/tests/hgarray.c +++ /dev/null @@ -1,460 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgarray.c - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <hieroglyph/hgarray.h> -#include <hieroglyph/hgobject.h> -#include <hieroglyph/vm.h> -#include "main.h" - - -hg_vm_t *vm; -hg_object_t *obj; - -void -setup(void) -{ - vm = hg_vm_new(); -} - -void -teardown(void) -{ - hg_vm_destroy(vm); -} - -/* array object */ -TDEF (hg_object_array_new) -{ - obj = hg_object_array_new(vm, 10); - - TNUL (obj); - fail_unless(HG_OBJECT_GET_N_OBJECTS (obj) == 1, "The amount of the object is different."); - fail_unless(HG_OBJECT_IS_ARRAY (obj), "Object isn't an array."); - fail_unless(HG_OBJECT_ARRAY (obj)->length == 10, "The amount of the array is different."); - - hg_object_free(vm, obj); - - obj = hg_object_array_new(vm, 0); - - TNUL (obj); - fail_unless(HG_OBJECT_GET_N_OBJECTS (obj) == 1, "The amount of the object is different."); - fail_unless(HG_OBJECT_IS_ARRAY (obj), "Object isn't an array."); - fail_unless(HG_OBJECT_ARRAY (obj)->length == 0, "The amount of the array is different."); - - hg_object_free(vm, obj); -} -TEND - -TDEF (hg_object_array_subarray_new) -{ - gboolean flag; - hg_object_t *obj2; - - obj = hg_object_array_new(vm, 10); - - TNUL (obj); - fail_unless(HG_OBJECT_GET_N_OBJECTS (obj) == 1, "The amount of the object is different."); - fail_unless(HG_OBJECT_IS_ARRAY (obj), "Object isn't an array."); - fail_unless(HG_OBJECT_ARRAY (obj)->length == 10, "The amount of the array is different."); - - obj2 = hg_object_array_subarray_new(vm, obj, 5, 5); - fail_unless(HG_OBJECT_GET_N_OBJECTS (obj2) == 1, "The amount of the object is different."); - fail_unless(HG_OBJECT_IS_ARRAY (obj2), "Object isn't an array."); - fail_unless(HG_OBJECT_ARRAY (obj2)->length == 0, "The amount of the array is different."); - fail_unless(HG_OBJECT_ARRAY (obj2)->real_length == 5, "The amount of the array is different."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - obj = hg_object_new(vm, 1); - - TNUL (obj); - fail_unless(HG_OBJECT_GET_N_OBJECTS (obj) == 1, "The amount of the object is different."); - - if (hg_is_stacktrace_enabled) - flag = hg_is_stacktrace_enabled(); - hg_use_stacktrace(FALSE); - hg_quiet_warning_messages(TRUE); - obj2 = hg_object_array_subarray_new(vm, obj, 0, 0); - if (hg_is_stacktrace_enabled) - hg_use_stacktrace(flag); - hg_quiet_warning_messages(FALSE); - - fail_unless(obj2 == NULL, "Not allowed to create an array object without the parent array object."); - - hg_object_free(vm, obj); -} -TEND - -TDEF (hg_object_array_put) -{ - hg_object_t *obj2, *obj3; - gboolean retval; - - obj = hg_object_array_new(vm, 5); - - TNUL (obj); - - obj2 = hg_object_boolean_new(vm, TRUE); - - TNUL (obj2); - fail_unless(HG_OBJECT_IS_BOOLEAN (obj2), "Failed to create a boolean object"); - - retval = hg_object_array_put(vm, obj, obj2, 0); - fail_unless(retval == TRUE, "Failed to put an object to the array"); - fail_unless(((hg_object_t **)HG_OBJECT_ARRAY_DATA (obj)->array)[0] == obj2, "Failed to put an object to the array expectedly"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - obj = hg_object_array_new(vm, 10); - - TNUL (obj); - - obj2 = hg_object_array_subarray_new(vm, obj, 5, 5); - - TNUL (obj2); - - obj3 = hg_object_boolean_new(vm, TRUE); - - TNUL (obj3); - - retval = hg_object_array_put(vm, obj2, obj3, 0); - fail_unless(retval == TRUE, "Failed to put an object to the sub array"); - fail_unless(((hg_object_t **)HG_OBJECT_ARRAY_DATA (obj2)->array)[0] == obj3, "Failed to put an object to the sub array expectedly"); - fail_unless(((hg_object_t **)HG_OBJECT_ARRAY_DATA (obj)->array)[5] == obj3, "Failed to sync between the array and the sub array on putting an object"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - hg_object_free(vm, obj3); -} -TEND - -TDEF (hg_object_array_get) -{ - hg_object_t *obj2, *obj3; - gboolean retval; - - obj = hg_object_array_new(vm, 10); - TNUL (obj); - - obj2 = hg_object_boolean_new(vm, TRUE); - TNUL (obj2); - - retval = hg_object_array_put(vm, obj, obj2, 0); - fail_unless(retval == TRUE, "Failed to put an object to the array"); - - obj3 = hg_object_array_get(vm, obj, 0); - fail_unless(obj3 != NULL, "Failed to get an object from the array"); - fail_unless(hg_object_compare(obj2, obj3), "Failed to get an expected object from the array"); - fail_unless(obj2 != obj3, "Object has to be new one"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - hg_object_free(vm, obj3); - - obj = hg_object_array_new(vm, 10); - TNUL (obj); - - obj2 = hg_object_array_new(vm, 5); - TNUL (obj2); - - retval = hg_object_array_put(vm, obj, obj2, 0); - fail_unless(retval == TRUE, "Failed to put an object to the array"); - - obj3 = hg_object_array_get(vm, obj, 0); - fail_unless(obj3 != NULL, "Failed to get an object from the array"); - fail_unless(hg_object_compare(obj2, obj3), "Failed to get an expected object from the array"); - fail_unless(obj2 == obj3, "Have to return the same object for the complex object"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); -} -TEND - -TDEF (hg_object_array_get_const) -{ - hg_object_t *obj2, *obj3; - gboolean retval; - - obj = hg_object_array_new(vm, 10); - TNUL (obj); - - obj2 = hg_object_boolean_new(vm, TRUE); - TNUL (obj2); - - retval = hg_object_array_put(vm, obj, obj2, 0); - fail_unless(retval == TRUE, "Failed to put an object to the array"); - - obj3 = hg_object_array_get_const(obj, 0); - fail_unless(obj3 != NULL, "Failed to get an object from the array"); - fail_unless(hg_object_compare(obj2, obj3), "Failed to get an expected object from the array"); - fail_unless(obj2 == obj3, "Object has to be the same"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - obj = hg_object_array_new(vm, 10); - TNUL (obj); - - obj2 = hg_object_array_new(vm, 5); - TNUL (obj2); - - retval = hg_object_array_put(vm, obj, obj2, 0); - fail_unless(retval == TRUE, "Failed to put an object to the array"); - - obj3 = hg_object_array_get_const(obj, 0); - fail_unless(obj3 != NULL, "Failed to get an object from the array"); - fail_unless(hg_object_compare(obj2, obj3), "Failed to get an expected object from the array"); - fail_unless(obj2 == obj3, "Have to return the same object for the complex object"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); -} -TEND - -TDEF (hg_object_array_compare) -{ - hg_object_t *obj_, *obj1, *obj1_, *obj2, *obj2_; - gboolean r, r_; - - obj = hg_object_array_new(vm, 2); - obj_ = hg_object_array_new(vm, 2); - - TNUL (obj); - TNUL (obj_); - - obj1 = hg_object_boolean_new(vm, TRUE); - obj1_ = hg_object_boolean_new(vm, TRUE); - - TNUL (obj1); - TNUL (obj1_); - - obj2 = hg_object_integer_new(vm, 10); - obj2_ = hg_object_integer_new(vm, 10); - - TNUL (obj2); - TNUL (obj2_); - - r = hg_object_array_put(vm, obj, obj1, 0); - r_ = hg_object_array_put(vm, obj_, obj1_, 0); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - r = hg_object_array_put(vm, obj, obj2, 1); - r_ = hg_object_array_put(vm, obj_, obj2_, 1); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - fail_unless(hg_object_array_compare(obj, obj_), "Failed to compare the objects"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj_); - hg_object_free(vm, obj1); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj2); - hg_object_free(vm, obj2_); - - /* check failing pattern */ - obj = hg_object_array_new(vm, 2); - obj_ = hg_object_array_new(vm, 2); - - TNUL (obj); - TNUL (obj_); - - obj1 = hg_object_boolean_new(vm, TRUE); - obj1_ = hg_object_boolean_new(vm, TRUE); - - TNUL (obj1); - TNUL (obj1_); - - obj2 = hg_object_integer_new(vm, 10); - obj2_ = hg_object_integer_new(vm, 1); - - TNUL (obj2); - TNUL (obj2_); - - r = hg_object_array_put(vm, obj, obj1, 0); - r_ = hg_object_array_put(vm, obj_, obj1_, 0); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - r = hg_object_array_put(vm, obj, obj2, 1); - r_ = hg_object_array_put(vm, obj_, obj2_, 1); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - fail_unless(!hg_object_array_compare(obj, obj_), "Failed to compare the objects"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj_); - hg_object_free(vm, obj1); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj2); - hg_object_free(vm, obj2_); - - /* check with the complex object */ - obj = hg_object_array_new(vm, 2); - obj_ = hg_object_array_new(vm, 2); - - TNUL (obj); - TNUL (obj_); - - obj1 = hg_object_boolean_new(vm, TRUE); - obj1_ = hg_object_boolean_new(vm, TRUE); - - TNUL (obj1); - TNUL (obj1_); - - obj2 = hg_object_array_new(vm, 0); - obj2_ = hg_object_array_new(vm, 0); - - TNUL (obj2); - TNUL (obj2_); - - r = hg_object_array_put(vm, obj, obj1, 0); - r_ = hg_object_array_put(vm, obj_, obj1_, 0); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - r = hg_object_array_put(vm, obj, obj2, 1); - r_ = hg_object_array_put(vm, obj_, obj2_, 1); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - fail_unless(hg_object_array_compare(obj, obj_), "Failed to compare the objects"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj_); - hg_object_free(vm, obj1); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj2); - hg_object_free(vm, obj2_); - - /* check the circular reference */ - obj = hg_object_array_new(vm, 2); - obj_ = hg_object_array_new(vm, 2); - - TNUL (obj); - TNUL (obj_); - - obj1 = hg_object_boolean_new(vm, TRUE); - obj1_ = hg_object_boolean_new(vm, TRUE); - - TNUL (obj1); - TNUL (obj1_); - - obj2 = obj; - obj2_ = obj_; - - r = hg_object_array_put(vm, obj, obj1, 0); - r_ = hg_object_array_put(vm, obj_, obj1_, 0); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - r = hg_object_array_put(vm, obj, obj2, 1); - r_ = hg_object_array_put(vm, obj_, obj2_, 1); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - fail_unless(hg_object_array_compare(obj, obj_), "Failed to compare the objects"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj_); - hg_object_free(vm, obj1); - hg_object_free(vm, obj1_); - - /* check the circular reference (failing pattern) */ - obj = hg_object_array_new(vm, 2); - obj_ = hg_object_array_new(vm, 2); - - TNUL (obj); - TNUL (obj_); - - obj1 = hg_object_boolean_new(vm, TRUE); - obj1_ = hg_object_boolean_new(vm, FALSE); - - TNUL (obj1); - TNUL (obj1_); - - obj2 = obj; - obj2_ = obj_; - - r = hg_object_array_put(vm, obj, obj1, 0); - r_ = hg_object_array_put(vm, obj_, obj1_, 0); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - r = hg_object_array_put(vm, obj, obj2, 1); - r_ = hg_object_array_put(vm, obj_, obj2_, 1); - - fail_unless(r, "Failed to put an object to the array"); - fail_unless(r_, "Failed to put an object to the array"); - - fail_unless(!hg_object_array_compare(obj, obj_), "Failed to compare the objects"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj_); - hg_object_free(vm, obj1); - hg_object_free(vm, obj1_); -} -TEND - -TDEF (hg_object_array_dump) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -/************************************************************/ -Suite * -hieroglyph_suite(void) -{ - Suite *s = suite_create("hg_array_t"); - TCase *tc = tcase_create("Generic Functionalities"); - - tcase_add_checked_fixture(tc, setup, teardown); - T (hg_object_array_new); - T (hg_object_array_subarray_new); - T (hg_object_array_put); - T (hg_object_array_get); - T (hg_object_array_get_const); - T (hg_object_array_compare); - T (hg_object_array_dump); - - suite_add_tcase(s, tc); - - return s; -} diff --git a/tests/hgdict.c b/tests/hgdict.c deleted file mode 100644 index 84f1db2..0000000 --- a/tests/hgdict.c +++ /dev/null @@ -1,489 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgdict.c - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <hieroglyph/hgdict.h> -#include <hieroglyph/hgobject.h> -#include <hieroglyph/vm.h> -#include "main.h" - - -hg_vm_t *vm; -hg_object_t *obj; - -void -setup(void) -{ - vm = hg_vm_new(); -} - -void -teardown(void) -{ - hg_vm_destroy(vm); -} - -/* dict object */ -TDEF (hg_object_dict_new) -{ - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - fail_unless(HG_OBJECT_IS_DICT (obj), "Object isn't a dict object"); - - hg_object_free(vm, obj); -} -TEND - -TDEF (hg_object_dict_compare) -{ - hg_object_t *obj2; - - obj = hg_object_dict_new(vm, 10); - obj2 = hg_object_dict_new(vm, 10); - - TNUL (obj); - TNUL (obj2); - fail_unless(!hg_object_dict_compare(obj, obj2), "Different allocation has to be failed"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - obj = hg_object_dict_new(vm, 10); - obj2 = hg_object_dup(vm, obj); - - TNUL (obj); - TNUL (obj2); - fail_unless(hg_object_dict_compare(obj, obj2), "Failed to compare the dict objects"); - - hg_object_free(vm, obj); -} -TEND - -TDEF (hg_object_dict_dump) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -TDEF (hg_object_dict_insert) -{ - hg_object_t *obj1, *obj1_, *obj2, *obj2_, *obj3, *obj3_, *obj4, *obj4_, *obj_; - gboolean allocmode = hg_vm_get_current_allocation_mode(vm); - - /* objects allocated from the global pool */ - hg_vm_set_current_allocation_mode(vm, TRUE); - - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - - obj1 = hg_object_name_new(vm, "bool", FALSE); - obj1_ = hg_object_boolean_new(vm, TRUE); - obj2 = hg_object_name_new(vm, "int", FALSE); - obj2_ = hg_object_integer_new(vm, 10); - obj3 = hg_object_name_new(vm, "name", FALSE); - obj3_ = hg_object_name_new(vm, "foo", FALSE); - TNUL (obj1); - TNUL (obj1_); - TNUL (obj2); - TNUL (obj2_); - TNUL (obj3); - TNUL (obj3_); - - fail_unless(hg_object_dict_insert(obj, obj1, obj1_), "Failed to insert an object (bool)"); - fail_unless(hg_object_dict_insert(obj, obj2, obj2_), "Failed to insert an object (int)"); - fail_unless(hg_object_dict_insert(obj, obj3, obj3_), "Failed to insert an object (named)"); - - fail_unless((obj_ = hg_object_dict_lookup(obj, obj1)) != NULL, "Failed to look up the object (bool)"); - fail_unless(hg_object_compare(obj1_, obj_), "Failed to compare the object after looking up (bool)"); - fail_unless((obj_ = hg_object_dict_lookup(obj, obj2)) != NULL, "Failed to look up the object (int)"); - fail_unless(hg_object_compare(obj2_, obj_), "Failed to compare the object after looking up (int)"); - fail_unless((obj_ = hg_object_dict_lookup(obj, obj3)) != NULL, "Failed to look up the object (named)"); - fail_unless(hg_object_compare(obj3_, obj_), "Failed to compare the object after looking up (named)"); - - /* Insert object allocated in the local pool to the global object */ - hg_vm_set_current_allocation_mode(vm, FALSE); - - obj4 = hg_object_name_new(vm, "bool2", FALSE); - obj4_ = hg_object_boolean_new(vm, TRUE); - TNUL (obj4); - TNUL (obj4_); - fail_unless(!hg_object_dict_insert(obj, obj4, obj4_), "Have to fail inserting the local object into the global object."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj4_); - hg_object_free(vm, obj4); - hg_object_free(vm, obj3_); - hg_object_free(vm, obj3); - hg_object_free(vm, obj2_); - hg_object_free(vm, obj2); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj1); - - /* objects allocated from the local pool */ - hg_vm_set_current_allocation_mode(vm, FALSE); - - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - fail_unless(!HG_OBJECT_ATTR_IS_GLOBAL (obj), "Object wasn't allocated from the local pool."); - - obj1 = hg_object_name_new(vm, "bool", FALSE); - obj1_ = hg_object_boolean_new(vm, TRUE); - obj2 = hg_object_name_new(vm, "int", FALSE); - obj2_ = hg_object_integer_new(vm, 10); - obj3 = hg_object_name_new(vm, "name", FALSE); - obj3_ = hg_object_name_new(vm, "foo", FALSE); - TNUL (obj1); - TNUL (obj1_); - TNUL (obj2); - TNUL (obj2_); - TNUL (obj3); - TNUL (obj3_); - - fail_unless(hg_object_dict_insert(obj, obj1, obj1_), "Failed to insert an object (bool)"); - fail_unless(hg_object_dict_insert(obj, obj2, obj2_), "Failed to insert an object (int)"); - fail_unless(hg_object_dict_insert(obj, obj3, obj3_), "Failed to insert an object (named)"); - - fail_unless((obj_ = hg_object_dict_lookup(obj, obj1)) != NULL, "Failed to look up the object (bool)"); - fail_unless(hg_object_compare(obj1_, obj_), "Failed to compare the object after looking up (bool)"); - fail_unless((obj_ = hg_object_dict_lookup(obj, obj2)) != NULL, "Failed to look up the object (int)"); - fail_unless(hg_object_compare(obj2_, obj_), "Failed to compare the object after looking up (int)"); - fail_unless((obj_ = hg_object_dict_lookup(obj, obj3)) != NULL, "Failed to look up the object (named)"); - fail_unless(hg_object_compare(obj3_, obj_), "Failed to compare the object after looking up (named)"); - - /* Insert object allocated in the global pool to the local object */ - hg_vm_set_current_allocation_mode(vm, TRUE); - - obj4 = hg_object_name_new(vm, "bool2", FALSE); - obj4_ = hg_object_boolean_new(vm, TRUE); - TNUL (obj4); - TNUL (obj4_); - fail_unless(HG_OBJECT_ATTR_IS_GLOBAL (obj4), "Object wasn't allocated from the global pool."); - fail_unless(HG_OBJECT_ATTR_IS_GLOBAL (obj4_), "Object wasn't allocated from the global pool."); - fail_unless(hg_object_dict_insert(obj, obj4, obj4_), "Don't have to fail inserting the global object into the local object."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj4_); - hg_object_free(vm, obj4); - hg_object_free(vm, obj3_); - hg_object_free(vm, obj3); - hg_object_free(vm, obj2_); - hg_object_free(vm, obj2); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj1); - - /* recover the allocation mode */ - hg_vm_set_current_allocation_mode(vm, allocmode); -} -TEND - -TDEF (hg_object_dict_insert_without_consistency) -{ - hg_object_t *obj1, *obj1_; - gboolean allocmode = hg_vm_get_current_allocation_mode(vm); - - /* objects allocated from the global pool */ - hg_vm_set_current_allocation_mode(vm, TRUE); - - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - - /* Insert object allocated in the local pool to the global object */ - hg_vm_set_current_allocation_mode(vm, FALSE); - - obj1 = hg_object_name_new(vm, "bool2", FALSE); - obj1_ = hg_object_boolean_new(vm, TRUE); - TNUL (obj1); - TNUL (obj1_); - fail_unless(hg_object_dict_insert_without_consistency(obj, obj1, obj1_), "Failed to insert the local object into the global object."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj1); - - /* objects allocated from the local pool */ - hg_vm_set_current_allocation_mode(vm, FALSE); - - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - fail_unless(!HG_OBJECT_ATTR_IS_GLOBAL (obj), "Object wasn't allocated from the local pool."); - - /* Insert object allocated in the global pool to the local object */ - hg_vm_set_current_allocation_mode(vm, TRUE); - - obj1 = hg_object_name_new(vm, "bool2", FALSE); - obj1_ = hg_object_boolean_new(vm, TRUE); - TNUL (obj1); - TNUL (obj1_); - fail_unless(HG_OBJECT_ATTR_IS_GLOBAL (obj1), "Object wasn't allocated from the global pool."); - fail_unless(HG_OBJECT_ATTR_IS_GLOBAL (obj1_), "Object wasn't allocated from the global pool."); - fail_unless(hg_object_dict_insert_without_consistency(obj, obj1, obj1_), "Failed to insert the global object into the local object."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj1); - - /* recover the allocation mode */ - hg_vm_set_current_allocation_mode(vm, allocmode); -} -TEND - -TDEF (hg_object_dict_replace) -{ - hg_object_t *obj1, *obj1_, *obj2, *obj2_, *obj3, *obj3_, *obj4, *obj4_, *obj_; - gboolean allocmode = hg_vm_get_current_allocation_mode(vm); - - /* objects allocated from the global pool */ - hg_vm_set_current_allocation_mode(vm, TRUE); - - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - - obj1 = hg_object_name_new(vm, "name", FALSE); - obj1_ = hg_object_name_new(vm, "bar", FALSE); - obj2 = hg_object_name_new(vm, "int", FALSE); - obj2_ = hg_object_integer_new(vm, 10); - TNUL (obj1); - TNUL (obj1_); - TNUL (obj2); - TNUL (obj2_); - - fail_unless(hg_object_dict_insert(obj, obj1, obj1_), "Failed to insert an object (named)"); - fail_unless(hg_object_dict_insert(obj, obj2, obj2_), "Failed to insert an object (int)"); - - fail_unless((obj_ = hg_object_dict_lookup(obj, obj1)) != NULL, "Failed to look up the object (named)"); - fail_unless(hg_object_compare(obj1_, obj_), "Failed to compare the object after looking up (named)"); - fail_unless((obj_ = hg_object_dict_lookup(obj, obj2)) != NULL, "Failed to look up the object (int)"); - fail_unless(hg_object_compare(obj2_, obj_), "Failed to compare the object after looking up (int)"); - - obj3 = hg_object_name_new(vm, "name", FALSE); - obj3_ = hg_object_name_new(vm, "foo", FALSE); - TNUL (obj3); - TNUL (obj3_); - fail_unless(hg_object_dict_replace(obj, obj3, obj3_), "Failed to replace an object (named)"); - fail_unless((obj_ = hg_object_dict_lookup(obj, obj3)) != NULL, "Failed to look up the object (named)"); - fail_unless(hg_object_compare(obj3_, obj_), "Failed to compare the object after looking up (named)"); - - /* Insert object allocated in the local pool to the global object */ - hg_vm_set_current_allocation_mode(vm, FALSE); - - obj4 = hg_object_name_new(vm, "name", FALSE); - obj4_ = hg_object_name_new(vm, "baz", FALSE); - TNUL (obj4); - TNUL (obj4_); - fail_unless(!hg_object_dict_replace(obj, obj4, obj4_), "Have to fail replacing the local object into the global object."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj4_); - hg_object_free(vm, obj4); - hg_object_free(vm, obj3_); - hg_object_free(vm, obj3); - hg_object_free(vm, obj2_); - hg_object_free(vm, obj2); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj1); - - /* objects allocated from the local pool */ - hg_vm_set_current_allocation_mode(vm, FALSE); - - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - fail_unless(!HG_OBJECT_ATTR_IS_GLOBAL (obj), "Object wasn't allocated from the local pool."); - - obj1 = hg_object_name_new(vm, "name", FALSE); - obj1_ = hg_object_name_new(vm, "bar", FALSE); - obj2 = hg_object_name_new(vm, "int", FALSE); - obj2_ = hg_object_integer_new(vm, 10); - TNUL (obj1); - TNUL (obj1_); - TNUL (obj2); - TNUL (obj2_); - - fail_unless(hg_object_dict_insert(obj, obj1, obj1_), "Failed to insert an object (named)"); - fail_unless(hg_object_dict_insert(obj, obj2, obj2_), "Failed to insert an object (int)"); - - fail_unless((obj_ = hg_object_dict_lookup(obj, obj1)) != NULL, "Failed to look up the object (named)"); - fail_unless(hg_object_compare(obj1_, obj_), "Failed to compare the object after looking up (named)"); - fail_unless((obj_ = hg_object_dict_lookup(obj, obj2)) != NULL, "Failed to look up the object (int)"); - fail_unless(hg_object_compare(obj2_, obj_), "Failed to compare the object after looking up (int)"); - - obj3 = hg_object_name_new(vm, "name", FALSE); - obj3_ = hg_object_name_new(vm, "foo", FALSE); - TNUL (obj3); - TNUL (obj3_); - fail_unless(hg_object_dict_replace(obj, obj3, obj3_), "Failed to replace an object (named)"); - fail_unless((obj_ = hg_object_dict_lookup(obj, obj3)) != NULL, "Failed to look up the object (named)"); - fail_unless(hg_object_compare(obj3_, obj_), "Failed to compare the object after looking up (named)"); - - /* Insert object allocated in the global pool to the local object */ - hg_vm_set_current_allocation_mode(vm, TRUE); - - obj4 = hg_object_name_new(vm, "name", FALSE); - obj4_ = hg_object_name_new(vm, "baz", FALSE); - TNUL (obj4); - TNUL (obj4_); - fail_unless(HG_OBJECT_ATTR_IS_GLOBAL (obj4), "Object wasn't allocated from the global pool."); - fail_unless(HG_OBJECT_ATTR_IS_GLOBAL (obj4_), "Object wasn't allocated from the global pool."); - fail_unless(hg_object_dict_replace(obj, obj4, obj4_), "Don't have to fail inserting the global object into the local object."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj4_); - hg_object_free(vm, obj4); - hg_object_free(vm, obj3_); - hg_object_free(vm, obj3); - hg_object_free(vm, obj2_); - hg_object_free(vm, obj2); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj1); - - /* recover the allocation mode */ - hg_vm_set_current_allocation_mode(vm, allocmode); -} -TEND - -TDEF (hg_object_dict_replace_without_consistency) -{ - hg_object_t *obj1, *obj1_; - gboolean allocmode = hg_vm_get_current_allocation_mode(vm); - - /* objects allocated from the global pool */ - hg_vm_set_current_allocation_mode(vm, TRUE); - - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - - /* Insert object allocated in the local pool to the global object */ - hg_vm_set_current_allocation_mode(vm, FALSE); - - obj1 = hg_object_name_new(vm, "bool2", FALSE); - obj1_ = hg_object_name_new(vm, "foo", FALSE); - TNUL (obj1); - TNUL (obj1_); - fail_unless(hg_object_dict_replace_without_consistency(obj, obj1, obj1_), "Failed to insert the local object into the global object."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj1); - - /* objects allocated from the local pool */ - hg_vm_set_current_allocation_mode(vm, FALSE); - - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - fail_unless(!HG_OBJECT_ATTR_IS_GLOBAL (obj), "Object wasn't allocated from the local pool."); - - /* Insert object allocated in the global pool to the local object */ - hg_vm_set_current_allocation_mode(vm, TRUE); - - obj1 = hg_object_name_new(vm, "bool2", FALSE); - obj1_ = hg_object_boolean_new(vm, TRUE); - TNUL (obj1); - TNUL (obj1_); - fail_unless(HG_OBJECT_ATTR_IS_GLOBAL (obj1), "Object wasn't allocated from the global pool."); - fail_unless(HG_OBJECT_ATTR_IS_GLOBAL (obj1_), "Object wasn't allocated from the global pool."); - fail_unless(hg_object_dict_replace_without_consistency(obj, obj1, obj1_), "Failed to insert the global object into the local object."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj1); - - /* recover the allocation mode */ - hg_vm_set_current_allocation_mode(vm, allocmode); -} -TEND - -TDEF (hg_object_dict_remove) -{ - hg_object_t *obj1, *obj1_, *obj2, *obj2_, *obj3, *obj_; - gboolean allocmode = hg_vm_get_current_allocation_mode(vm); - - /* objects allocated from the global pool */ - hg_vm_set_current_allocation_mode(vm, TRUE); - - obj = hg_object_dict_new(vm, 10); - TNUL (obj); - - obj1 = hg_object_name_new(vm, "bool", FALSE); - obj1_ = hg_object_boolean_new(vm, TRUE); - obj2 = hg_object_name_new(vm, "int", FALSE); - obj2_ = hg_object_integer_new(vm, 10); - TNUL (obj1); - TNUL (obj1_); - TNUL (obj2); - TNUL (obj2_); - - fail_unless(hg_object_dict_insert(obj, obj1, obj1_), "Failed to insert an object (bool)"); - fail_unless(hg_object_dict_insert(obj, obj2, obj2_), "Failed to insert an object (int)"); - - fail_unless((obj_ = hg_object_dict_lookup(obj, obj1)) != NULL, "Failed to look up the object (bool)"); - fail_unless(hg_object_compare(obj1_, obj_), "Failed to compare the object after looking up (bool)"); - fail_unless((obj_ = hg_object_dict_lookup(obj, obj2)) != NULL, "Failed to look up the object (int)"); - fail_unless(hg_object_compare(obj2_, obj_), "Failed to compare the object after looking up (int)"); - - obj3 = hg_object_name_new(vm, "int", FALSE); - fail_unless(hg_object_dict_remove(obj, obj3), "Failed to remove the key from the dict."); - fail_unless(hg_object_dict_lookup(obj, obj3) == NULL, "There are still data in the dict."); - - hg_object_free(vm, obj); - hg_object_free(vm, obj3); - hg_object_free(vm, obj2_); - hg_object_free(vm, obj2); - hg_object_free(vm, obj1_); - hg_object_free(vm, obj1); - - /* recover the allocation mode */ - hg_vm_set_current_allocation_mode(vm, allocmode); -} -TEND - -TDEF (hg_object_dict_lookup) -{ - /* all the testcases should be in insert/replace testing. - * so there are nothing we have to do here so far. - */ -} -TEND - -/************************************************************/ -Suite * -hieroglyph_suite(void) -{ - Suite *s = suite_create("hg_dict_t"); - TCase *tc = tcase_create("Generic Functionalities"); - - tcase_add_checked_fixture(tc, setup, teardown); - T (hg_object_dict_new); - T (hg_object_dict_compare); - T (hg_object_dict_dump); - T (hg_object_dict_insert); - T (hg_object_dict_insert_without_consistency); - T (hg_object_dict_replace); - T (hg_object_dict_replace_without_consistency); - T (hg_object_dict_remove); - T (hg_object_dict_lookup); - - suite_add_tcase(s, tc); - - return s; -} diff --git a/tests/hgfile.c b/tests/hgfile.c deleted file mode 100644 index 5a2be10..0000000 --- a/tests/hgfile.c +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgfile.c - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <hieroglyph/hgfile.h> -#include <hieroglyph/vm.h> -#include "main.h" - - -hg_vm_t *vm; -hg_object_t *obj; - -void -setup(void) -{ - vm = hg_vm_new(); -} - -void -teardown(void) -{ - hg_vm_destroy(vm); -} - -/* file object */ -TDEF (hg_object_file_new) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -TDEF (hg_object_file_new_from_string) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -TDEF (hg_object_file_new_with_custom) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -TDEF (hg_object_file_free) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -TDEF (hg_object_file_notify_error) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -TDEF (hg_object_file_compare) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -TDEF (hg_object_file_dump) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -/************************************************************/ -Suite * -hieroglyph_suite(void) -{ - Suite *s = suite_create("hg_file_t"); - TCase *tc = tcase_create("Generic Functionalities"); - - tcase_add_checked_fixture(tc, setup, teardown); - T (hg_object_file_new); - T (hg_object_file_new_from_string); - T (hg_object_file_new_with_custom); - T (hg_object_file_free); - T (hg_object_file_notify_error); - T (hg_object_file_compare); - T (hg_object_file_dump); - - suite_add_tcase(s, tc); - - return s; -} diff --git a/tests/hgobject.c b/tests/hgobject.c deleted file mode 100644 index 53fbc9c..0000000 --- a/tests/hgobject.c +++ /dev/null @@ -1,533 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgobject.c - * Copyright (C) 2007-2009 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <hieroglyph/hgobject.h> -#include <hieroglyph/vm.h> -#include "main.h" - - -hg_vm_t *vm; -hg_object_t *obj; - -void -setup(void) -{ - vm = hg_vm_new(); -} - -void -teardown(void) -{ - hg_vm_destroy(vm); -} - -/* core object */ -TDEF (hg_object_new) -{ - gboolean flag; - - obj = hg_object_new(vm, 1); - - TNUL (obj); - fail_unless(HG_OBJECT_GET_N_OBJECTS (obj) == 1, "The amount of the object is different."); - - hg_object_free(vm, obj); - - obj = hg_object_new(vm, 10); - - TNUL (obj); - fail_unless(HG_OBJECT_GET_N_OBJECTS (obj) == 10, "The amount of the object is different."); - - hg_object_free(vm, obj); - - /* disable stacktrace */ - if (hg_is_stacktrace_enabled) - flag = hg_is_stacktrace_enabled(); - hg_use_stacktrace(FALSE); - /* disable warnings */ - hg_quiet_warning_messages(TRUE); - - obj = hg_object_new(vm, 0); - if (hg_is_stacktrace_enabled) - hg_use_stacktrace(flag); - hg_quiet_warning_messages(FALSE); - - fail_unless(obj == NULL, "Not allowed to create empty object"); -} -TEND - -TDEF (hg_object_sized_new) -{ - obj = hg_object_sized_new(vm, 10); - - TNUL (obj); - fail_unless(HG_OBJECT_GET_N_OBJECTS (obj) == 1, "The amount of the object is different."); - fail_unless(HG_OBJECT_HEADER (obj)->total_length == hg_n_alignof (hg_n_alignof (sizeof (hg_object_header_t) + sizeof (_hg_object_t)) + 10), "The length of the object is different."); - - hg_object_free(vm, obj); - - obj = hg_object_sized_new(vm, 0); - - TNUL (obj); - fail_unless(HG_OBJECT_GET_N_OBJECTS (obj) == 1, "The amount of the object is different."); - fail_unless(HG_OBJECT_HEADER (obj)->total_length == hg_n_alignof (sizeof (hg_object_header_t) + sizeof (_hg_object_t)), "The length of the object is different."); - - hg_object_free(vm, obj); -} -TEND - -TDEF (hg_object_dup) -{ - hg_object_t *obj2; - - obj = hg_object_new(vm, 1); - - TNUL (obj); - /* disable warning messages */ - hg_quiet_warning_messages(TRUE); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 == NULL, "Not allowed to duplicate the uninitialized object"); - hg_quiet_warning_messages(FALSE); - - hg_object_free(vm, obj); - - /* null */ - obj = hg_object_null_new(vm); - - fail_unless(obj != NULL, "Failed to create a null object"); - fail_unless(HG_OBJECT_IS_NULL (obj), "Created object isn't a null object"); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 != NULL, "Failed to duplicate a null object"); - fail_unless(HG_OBJECT_IS_NULL (obj2), "Duplicated object isn't a null object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly duplicated"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* integer */ - obj = hg_object_integer_new(vm, 123); - - fail_unless(obj != NULL, "Failed to create an integer object"); - fail_unless(HG_OBJECT_IS_INTEGER (obj), "Created object isn't an integer object"); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 != NULL, "Failed to duplicate an integer object"); - fail_unless(HG_OBJECT_IS_INTEGER (obj2), "Duplicated object isn't an integer object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly duplicated"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* real */ - obj = hg_object_real_new(vm, 0.01); - - fail_unless(obj != NULL, "Failed to create an real object"); - fail_unless(HG_OBJECT_IS_REAL (obj), "Created object isn't an real object"); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 != NULL, "Failed to duplicate an real object"); - fail_unless(HG_OBJECT_IS_REAL (obj2), "Duplicated object isn't an real object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly duplicated"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* name */ - obj = hg_object_name_new(vm, "foo", FALSE); - - fail_unless(obj != NULL, "Failed to create a name object"); - fail_unless(HG_OBJECT_IS_NAME (obj), "Created object isn't a name object"); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 != NULL, "Failed to duplicate a name object"); - fail_unless(HG_OBJECT_IS_NAME (obj2), "Duplicated object isn't a name object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly duplicated"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* name eval */ - obj = hg_object_name_new(vm, "foo", TRUE); - - fail_unless(obj != NULL, "Failed to create a name(eval) object"); - fail_unless(HG_OBJECT_IS_EVAL (obj), "Created object isn't a name(eval) object"); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 != NULL, "Failed to duplicate a name object"); - fail_unless(HG_OBJECT_IS_EVAL (obj2), "Duplicated object isn't a name(eval) object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly duplicated"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* system encoding */ - obj = hg_object_system_encoding_new(vm, HG_enc_abs, FALSE); - - fail_unless(obj != NULL, "Failed to create a name object"); - fail_unless(HG_OBJECT_IS_NAME (obj), "Created object isn't a name object"); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 != NULL, "Failed to duplicate a name object"); - fail_unless(HG_OBJECT_IS_NAME (obj2), "Duplicated object isn't a name object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly duplicated"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* system encoding eval */ - obj = hg_object_system_encoding_new(vm, HG_enc_abs, TRUE); - - fail_unless(obj != NULL, "Failed to create a name(eval) object"); - fail_unless(HG_OBJECT_IS_EVAL (obj), "Created object isn't a name(eval) object"); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 != NULL, "Failed to duplicate a name(eval) object"); - fail_unless(HG_OBJECT_IS_EVAL (obj2), "Duplicated object isn't a name(eval) object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly duplicated"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* boolean */ - obj = hg_object_boolean_new(vm, TRUE); - - fail_unless(obj != NULL, "Failed to create a boolean object"); - fail_unless(HG_OBJECT_IS_BOOLEAN (obj), "Created object isn't a boolean object"); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 != NULL, "Failed to duplicate a boolean object"); - fail_unless(HG_OBJECT_IS_BOOLEAN (obj2), "Duplicated object isn't a boolean object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly duplicated"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* mark */ - obj = hg_object_mark_new(vm); - - fail_unless(obj != NULL, "Failed to create a mark object"); - fail_unless(HG_OBJECT_IS_MARK (obj), "Created object isn't a mark object"); - obj2 = hg_object_dup(vm, obj); - fail_unless(obj2 != NULL, "Failed to duplicate a mark object"); - fail_unless(HG_OBJECT_IS_MARK (obj2), "Duplicated object isn't a mark object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly duplicated"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); -} -TEND - -TDEF (hg_object_copy) -{ - hg_object_t *obj2; - - obj = hg_object_new(vm, 1); - - TNUL (obj); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy an uninitialized object"); - - hg_object_free(vm, obj); - - /* null */ - obj = hg_object_null_new(vm); - - fail_unless(obj != NULL, "Failed to create a null object"); - fail_unless(HG_OBJECT_IS_NULL (obj), "Created object isn't a null object"); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy a null object"); - fail_unless(HG_OBJECT_IS_NULL (obj2), "Copied object isn't a null object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly copied"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* integer */ - obj = hg_object_integer_new(vm, 123); - - fail_unless(obj != NULL, "Failed to create an integer object"); - fail_unless(HG_OBJECT_IS_INTEGER (obj), "Created object isn't an integer object"); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy an integer object"); - fail_unless(HG_OBJECT_IS_INTEGER (obj2), "Copied object isn't an integer object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly copied"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* real */ - obj = hg_object_real_new(vm, 0.01); - - fail_unless(obj != NULL, "Failed to create an real object"); - fail_unless(HG_OBJECT_IS_REAL (obj), "Created object isn't an real object"); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy an real object"); - fail_unless(HG_OBJECT_IS_REAL (obj2), "Copied object isn't an real object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly copied"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* name */ - obj = hg_object_name_new(vm, "foo", FALSE); - - fail_unless(obj != NULL, "Failed to create a name object"); - fail_unless(HG_OBJECT_IS_NAME (obj), "Created object isn't a name object"); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy a name object"); - fail_unless(HG_OBJECT_IS_NAME (obj2), "Copied object isn't a name object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly copied"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* name eval */ - obj = hg_object_name_new(vm, "foo", TRUE); - - fail_unless(obj != NULL, "Failed to create a name(eval) object"); - fail_unless(HG_OBJECT_IS_EVAL (obj), "Created object isn't a name(eval) object"); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy a name object"); - fail_unless(HG_OBJECT_IS_EVAL (obj2), "Copied object isn't a name(eval) object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly copied"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* system encoding */ - obj = hg_object_system_encoding_new(vm, HG_enc_abs, FALSE); - - fail_unless(obj != NULL, "Failed to create a name object"); - fail_unless(HG_OBJECT_IS_NAME (obj), "Created object isn't a name object"); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy a name object"); - fail_unless(HG_OBJECT_IS_NAME (obj2), "Copied object isn't a name object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly copied"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* system encoding eval */ - obj = hg_object_system_encoding_new(vm, HG_enc_abs, TRUE); - - fail_unless(obj != NULL, "Failed to create a name(eval) object"); - fail_unless(HG_OBJECT_IS_EVAL (obj), "Created object isn't a name(eval) object"); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy a name(eval) object"); - fail_unless(HG_OBJECT_IS_EVAL (obj2), "Copied object isn't a name(eval) object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly copied"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* boolean */ - obj = hg_object_boolean_new(vm, TRUE); - - fail_unless(obj != NULL, "Failed to create a boolean object"); - fail_unless(HG_OBJECT_IS_BOOLEAN (obj), "Created object isn't a boolean object"); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy a boolean object"); - fail_unless(HG_OBJECT_IS_BOOLEAN (obj2), "Copied object isn't a boolean object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly copied"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); - - /* mark */ - obj = hg_object_mark_new(vm); - - fail_unless(obj != NULL, "Failed to create a mark object"); - fail_unless(HG_OBJECT_IS_MARK (obj), "Created object isn't a mark object"); - obj2 = hg_object_copy(vm, obj); - fail_unless(obj2 != NULL, "Failed to copy a mark object"); - fail_unless(HG_OBJECT_IS_MARK (obj2), "Copied object isn't a mark object"); - fail_unless(hg_object_compare(obj, obj2), "Object wasn't exactly copied"); - - hg_object_free(vm, obj); - hg_object_free(vm, obj2); -} -TEND - -TDEF (hg_object_compare) -{ - /* almost test cases has been done at hg_object_dup/copy */ -} -TEND - -TDEF (hg_object_dump) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -/* null object */ -TDEF (hg_object_null_new) -{ - obj = hg_object_null_new(vm); - - fail_unless(obj != NULL, "Failed to create a null object"); - fail_unless(HG_OBJECT_IS_NULL (obj), "Created object isn't a null object."); - - hg_object_free(vm, obj); -} -TEND - -/* integer object */ -TDEF (hg_object_integer_new) -{ - obj = hg_object_integer_new(vm, 1); - - fail_unless(obj != NULL, "Failed to create an integer object"); - fail_unless(HG_OBJECT_IS_INTEGER (obj), "Created object isn't an integer object"); - fail_unless(HG_OBJECT_INTEGER (obj) == 1, "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); - obj = hg_object_integer_new(vm, -1); - - fail_unless(obj != NULL, "Failed to create an integer object"); - fail_unless(HG_OBJECT_IS_INTEGER (obj), "Created object isn't an integer object"); - fail_unless(HG_OBJECT_INTEGER (obj) == -1, "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); -} -TEND - -/* real object */ -TDEF (hg_object_real_new) -{ - obj = hg_object_real_new(vm, 1); - - fail_unless(obj != NULL, "Failed to create an real object"); - fail_unless(HG_OBJECT_IS_REAL (obj), "Created object isn't an real object"); - fail_unless(HG_OBJECT_REAL_IS_EQUAL_TO (obj, 1), "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); - obj = hg_object_real_new(vm, -1); - - fail_unless(obj != NULL, "Failed to create an real object"); - fail_unless(HG_OBJECT_IS_REAL (obj), "Created object isn't an real object"); - fail_unless(HG_OBJECT_REAL_IS_EQUAL_TO (obj, -1), "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); -} -TEND - -/* name object */ -TDEF (hg_object_name_new) -{ - obj = hg_object_name_new(vm, "foo", FALSE); - - fail_unless(obj != NULL, "Failed to create a name object"); - fail_unless(HG_OBJECT_IS_NAME (obj), "Created object isn't a name object"); - fail_unless(hg_object_name_compare_with_raw(obj, "foo"), "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); - - obj = hg_object_name_new(vm, "foo", TRUE); - - fail_unless(obj != NULL, "Failed to create a name object"); - fail_unless(HG_OBJECT_IS_EVAL (obj), "Created object isn't a name object"); - fail_unless(hg_object_name_compare_with_raw(obj, "foo"), "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); -} -TEND - -/* system encoding object */ -TDEF (hg_object_system_encoding_new) -{ - hg_vm_initialize(vm); - obj = hg_object_system_encoding_new(vm, HG_enc_abs, FALSE); - - fail_unless(obj != NULL, "Failed to create a system encoding object"); - fail_unless(HG_OBJECT_IS_NAME (obj), "Created object isn't a system encoding object"); - fail_unless(hg_object_name_compare_with_raw(obj, "abs"), "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); - - obj = hg_object_system_encoding_new(vm, HG_enc_abs, TRUE); - - fail_unless(obj != NULL, "Failed to create a system encoding object"); - fail_unless(HG_OBJECT_IS_EVAL (obj), "Created object isn't a system encoding object"); - fail_unless(hg_object_name_compare_with_raw(obj, "abs"), "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); - hg_vm_finalize(vm); -} -TEND - -/* boolean object */ -TDEF (hg_object_boolean_new) -{ - obj = hg_object_boolean_new(vm, FALSE); - - fail_unless(obj != NULL, "Failed to create a boolean object"); - fail_unless(HG_OBJECT_IS_BOOLEAN (obj), "Created object isn't a boolean object"); - fail_unless(HG_OBJECT_BOOLEAN (obj) == FALSE, "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); - - obj = hg_object_boolean_new(vm, TRUE); - - fail_unless(obj != NULL, "Failed to create a boolean object"); - fail_unless(HG_OBJECT_IS_BOOLEAN (obj), "Created object isn't a boolean object"); - fail_unless(HG_OBJECT_BOOLEAN (obj) == TRUE, "Object isn't set correctly on creation"); - - hg_object_free(vm, obj); -} -TEND - -/* mark object */ -TDEF (hg_object_mark_new) -{ - obj = hg_object_mark_new(vm); - - fail_unless(obj != NULL, "Failed to create a mark object"); - fail_unless(HG_OBJECT_IS_MARK (obj), "Created object isn't a mark object"); - - hg_object_free(vm, obj); -} -TEND - -/************************************************************/ -Suite * -hieroglyph_suite(void) -{ - Suite *s = suite_create("hg_object_t"); - TCase *tc = tcase_create("Generic Functionalities"); - - tcase_add_checked_fixture(tc, setup, teardown); - T (hg_object_new); - T (hg_object_sized_new); - T (hg_object_dup); - T (hg_object_copy); - T (hg_object_compare); - T (hg_object_dump); - T (hg_object_null_new); - T (hg_object_integer_new); - T (hg_object_real_new); - T (hg_object_name_new); - T (hg_object_system_encoding_new); - T (hg_object_boolean_new); - T (hg_object_mark_new); - - suite_add_tcase(s, tc); - - return s; -} diff --git a/tests/hgstack.c b/tests/hgstack.c deleted file mode 100644 index c5c3027..0000000 --- a/tests/hgstack.c +++ /dev/null @@ -1,343 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgstack.c - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <hieroglyph/hgstack.h> -#include <hieroglyph/hgobject.h> -#include <hieroglyph/vm.h> -#include "main.h" - - -hg_vm_t *vm; -hg_stack_t *obj; - -void -setup(void) -{ - vm = hg_vm_new(); -} - -void -teardown(void) -{ - hg_vm_destroy(vm); -} - -/* stack */ -TDEF (hg_stack_new) -{ - gboolean flag; - - obj = hg_stack_new(vm, 10); - - fail_unless(obj != NULL, "Failed to create a stack object"); - fail_unless(obj->stack_depth == 10, "the stack depth isn't expected depth."); - - hg_stack_free(vm, obj); - - /* disable stacktrace */ - if (hg_is_stacktrace_enabled) - flag = hg_is_stacktrace_enabled(); - hg_use_stacktrace(FALSE); - /* disable warnings */ - hg_quiet_warning_messages(TRUE); - - obj = hg_stack_new(vm, 0); - - if (hg_is_stacktrace_enabled) - hg_use_stacktrace(flag); - hg_quiet_warning_messages(FALSE); - - fail_unless(obj == NULL, "depth must be more than 0"); -} -TEND - -TDEF (hg_stack_free) -{ - /* nothing to check here particularly */ -} -TEND - -TDEF (hg_stack_push) -{ - hg_object_t *obj2; - gboolean flag, retval; - - obj = hg_stack_new(vm, 1); - - fail_unless(obj != NULL, "Failed to create a stack object"); - - obj2 = hg_object_boolean_new(vm, TRUE); - fail_unless(obj2 != NULL, "Failed to create a boolean object"); - - fail_unless(hg_stack_push(obj, obj2), "Failed to push an object to stack"); - - /* disable stacktrace */ - if (hg_is_stacktrace_enabled) - flag = hg_is_stacktrace_enabled(); - hg_use_stacktrace(FALSE); - /* disable warnings */ - hg_quiet_warning_messages(TRUE); - - retval = hg_stack_push(obj, obj2); - - if (hg_is_stacktrace_enabled) - hg_use_stacktrace(flag); - hg_quiet_warning_messages(FALSE); - - fail_unless(!retval, "Object has to be unable to be pushed."); - - hg_stack_free(vm, obj); - hg_object_free(vm, obj2); -} -TEND - -TDEF (hg_stack_pop) -{ - hg_object_t *obj2, *obj3; - gboolean flag; - - obj = hg_stack_new(vm, 10); - - fail_unless(obj != NULL, "Failed to create a stack object"); - - obj2 = hg_object_boolean_new(vm, TRUE); - fail_unless(obj2 != NULL, "Failed to create a boolean object"); - - fail_unless(hg_stack_push(obj, obj2), "Failed to push an object to stack"); - - fail_unless((obj3 = hg_stack_pop(obj)) != NULL, "Failed to pop an object from stack"); - fail_unless(obj2 == obj3, "Failed to pop an object from stack (verifying)"); - - /* disable stacktrace */ - if (hg_is_stacktrace_enabled) - flag = hg_is_stacktrace_enabled(); - hg_use_stacktrace(FALSE); - /* disable warnings */ - hg_quiet_warning_messages(TRUE); - - obj3 = hg_stack_pop(obj); - - if (hg_is_stacktrace_enabled) - hg_use_stacktrace(flag); - hg_quiet_warning_messages(FALSE); - - fail_unless(obj3 == NULL, "stack has to be empty."); - - hg_stack_free(vm, obj); - hg_object_free(vm, obj2); -} -TEND - -TDEF (hg_stack_length) -{ - hg_object_t *obj2; - - obj = hg_stack_new(vm, 10); - - fail_unless(obj != NULL, "Failed to create a stack object"); - fail_unless(hg_stack_length(obj) == 0, "stack has to be empty."); - - obj2 = hg_object_boolean_new(vm, TRUE); - fail_unless(obj2 != NULL, "Failed to create a boolean object"); - - fail_unless(hg_stack_push(obj, obj2), "Failed to push an object to stack"); - fail_unless(hg_stack_length(obj) == 1, "Failed to get current depth"); - - hg_stack_free(vm, obj); - hg_object_free(vm, obj2); -} -TEND - -TDEF (hg_stack_clear) -{ - hg_object_t *obj2; - - obj = hg_stack_new(vm, 10); - - fail_unless(obj != NULL, "Failed to create a stack object"); - - obj2 = hg_object_boolean_new(vm, TRUE); - fail_unless(obj2 != NULL, "Failed to create a boolean object"); - - fail_unless(hg_stack_push(obj, obj2), "Failed to push an object to stack"); - fail_unless(hg_stack_length(obj) == 1, "Failed to get current depth"); - - hg_stack_clear(obj); - - fail_unless(hg_stack_length(obj) == 0, "Failed to clear the stack"); - - hg_stack_free(vm, obj); - hg_object_free(vm, obj2); -} -TEND - -TDEF (hg_stack_index) -{ - hg_object_t *obj2, *obj3, *obj4; - gboolean flag; - - obj = hg_stack_new(vm, 10); - - fail_unless(obj != NULL, "Failed to create a stack object"); - - /* disable stacktrace */ - if (hg_is_stacktrace_enabled) - flag = hg_is_stacktrace_enabled(); - hg_use_stacktrace(FALSE); - /* disable warnings */ - hg_quiet_warning_messages(TRUE); - - obj2 = hg_stack_index(obj, 0); - - if (hg_is_stacktrace_enabled) - hg_use_stacktrace(flag); - hg_quiet_warning_messages(FALSE); - - fail_unless(obj2 == NULL, "index has to be less than the amount of the objects in the stack."); - - obj2 = hg_object_boolean_new(vm, TRUE); - fail_unless(obj2 != NULL, "Failed to create a boolean object"); - - hg_stack_push(obj, obj2); - obj3 = hg_stack_index(obj, 0); - fail_unless(obj2 == obj3, "gotten object isn't an expected object"); - - obj3 = hg_object_integer_new(vm, 10); - fail_unless(obj3 != NULL, "Failed to create an integer object"); - - hg_stack_push(obj, obj3); - obj4 = hg_stack_index(obj, 0); - fail_unless(obj3 == obj4, "gotten object isn't an expected object (integer)"); - obj4 = hg_stack_index(obj, 1); - fail_unless(obj4 == obj2, "gotten object isn't an expected object (boolean)"); - - hg_stack_free(vm, obj); - hg_object_free(vm, obj2); - hg_object_free(vm, obj3); -} -TEND - -TDEF (hg_stack_roll) -{ - hg_object_t *obj2, *obj3, *obj4, *obj5; - gboolean flag, retval; - - obj = hg_stack_new(vm, 1); - fail_unless(obj != NULL, "Failed to create a stack object"); - - /* disable stacktrace */ - if (hg_is_stacktrace_enabled) - flag = hg_is_stacktrace_enabled(); - hg_use_stacktrace(FALSE); - /* disable warnings */ - hg_quiet_warning_messages(TRUE); - - retval = hg_stack_roll(obj, 2, 1); - - if (hg_is_stacktrace_enabled) - hg_use_stacktrace(flag); - hg_quiet_warning_messages(FALSE); - - fail_unless(!retval, "block has to be less than the stack size"); - - hg_stack_free(vm, obj); - - obj = hg_stack_new(vm, 10); - fail_unless(obj != NULL, "Failed to create a stack object"); - - obj2 = hg_object_boolean_new(vm, TRUE); - obj3 = hg_object_integer_new(vm, 1); - obj4 = hg_object_mark_new(vm); - obj5 = hg_object_boolean_new(vm, FALSE); - fail_unless(obj2 != NULL, "Failed to create a boolean object"); - fail_unless(obj3 != NULL, "Failed to create an integer object"); - fail_unless(obj4 != NULL, "Failed to create a mark object"); - fail_unless(obj5 != NULL, "Failed to create a boolean object"); - - hg_stack_push(obj, obj2); - hg_stack_push(obj, obj3); - fail_unless(hg_stack_roll(obj, 0, 1), "Failed to roll the objects"); - fail_unless(hg_stack_index(obj, 0) == obj3, "Failed to verify after rolling (integer) n_blocks == 0"); - fail_unless(hg_stack_index(obj, 1) == obj2, "Failed to verify after rolling (boolean) n_blocks == 0"); - - fail_unless(hg_stack_roll(obj, 2, 0), "Failed to roll the objects"); - fail_unless(hg_stack_index(obj, 0) == obj3, "Failed to verify after rolling (integer) n_times == 0"); - fail_unless(hg_stack_index(obj, 1) == obj2, "Failed to verify after rolling (boolean) n_times == 0"); - - hg_stack_push(obj, obj4); - fail_unless(hg_stack_roll(obj, 3, 2), "Failed to roll the objects"); - fail_unless(hg_stack_index(obj, 0) == obj2, "Failed to verify after rolling (boolean)"); - fail_unless(hg_stack_index(obj, 1) == obj4, "Failed to verify after rolling (mark)"); - fail_unless(hg_stack_index(obj, 2) == obj3, "Failed to verify after rolling (integer)"); - - hg_stack_push(obj, obj5); - fail_unless(hg_stack_roll(obj, 3, -2), "Failed to roll the objects"); - fail_unless(hg_stack_index(obj, 0) == obj2, "Failed to verify after rolling (boolean)"); - fail_unless(hg_stack_index(obj, 1) == obj4, "Failed to verify after rolling (mark)"); - fail_unless(hg_stack_index(obj, 2) == obj5, "Failed to verify after rolling (boolean)"); - fail_unless(hg_stack_index(obj, 3) == obj3, "Failed to verify after rolling (integer)"); - - fail_unless(hg_stack_roll(obj, 4, 3), "Failed to roll the objects"); - fail_unless(hg_stack_index(obj, 0) == obj3, "Failed to verify after rolling (integer)"); - fail_unless(hg_stack_index(obj, 1) == obj2, "Failed to verify after rolling (boolean)"); - fail_unless(hg_stack_index(obj, 2) == obj4, "Failed to verify after rolling (mark)"); - fail_unless(hg_stack_index(obj, 3) == obj5, "Failed to verify after rolling (boolean)"); - - hg_stack_free(vm, obj); - hg_object_free(vm, obj2); - hg_object_free(vm, obj3); - hg_object_free(vm, obj4); -} -TEND - -TDEF (hg_stack_dump) -{ - g_print("FIXME: %s\n", __FUNCTION__); -} -TEND - -/************************************************************/ -Suite * -hieroglyph_suite(void) -{ - Suite *s = suite_create("hg_stack_t"); - TCase *tc = tcase_create("Generic Functionalities"); - - tcase_add_checked_fixture(tc, setup, teardown); - T (hg_stack_new); - T (hg_stack_free); - T (hg_stack_push); - T (hg_stack_pop); - T (hg_stack_clear); - T (hg_stack_length); - T (hg_stack_index); - T (hg_stack_roll); - T (hg_stack_dump); - - suite_add_tcase(s, tc); - - return s; -} diff --git a/tests/hgstring.c b/tests/hgstring.c deleted file mode 100644 index 8331ef1..0000000 --- a/tests/hgstring.c +++ /dev/null @@ -1,151 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * hgstring.c - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <string.h> -#include <hieroglyph/hgstring.h> -#include <hieroglyph/hgobject.h> -#include <hieroglyph/vm.h> -#include "main.h" - - -hg_vm_t *vm; -hg_object_t *obj; - -void -setup(void) -{ - vm = hg_vm_new(); -} - -void -teardown(void) -{ - hg_vm_destroy(vm); -} - -/* string object */ -TDEF (hg_object_string_new) -{ - gchar *p; - - obj = hg_object_string_new(vm, "foo"); - - fail_unless(obj != NULL, "Failed to create a string object"); - fail_unless(HG_OBJECT_IS_STRING (obj), "Created object isn't a string object"); - p = HG_OBJECT_STRING_DATA (obj)->string; - fail_unless(p[0] == 'f' && p[1] == 'o' && p[2] == 'o', "Object isn't set correctly on object creation"); - fail_unless(HG_OBJECT_STRING (obj)->real_length == 3, "Object doesn't have an expected length"); - - hg_object_free(vm, obj); -} -TEND - -TDEF (hg_object_string_sized_new) -{ - obj = hg_object_string_sized_new(vm, 10); - - fail_unless(obj != NULL, "Failed to create a string object"); - fail_unless(HG_OBJECT_IS_STRING (obj), "Created object isn't a string object"); - fail_unless(HG_OBJECT_STRING (obj)->length == 10, "Object doesn't have an expected length"); - - hg_object_free(vm, obj); - - obj = hg_object_string_sized_new(vm, 0); - - fail_unless(obj != NULL, "Failed to create a string object"); - fail_unless(HG_OBJECT_IS_STRING (obj), "Created object isn't a string object"); - fail_unless(HG_OBJECT_STRING_DATA (obj)->string == NULL, "Don't have an allocated space"); - fail_unless(HG_OBJECT_STRING (obj)->length == 0, "Object doesn't have an expected length"); - - hg_object_free(vm, obj); -} -TEND - -TDEF (hg_object_string_substring_new) -{ - hg_object_t *obj2; - - obj = hg_object_string_new(vm, "I like a dog"); - - fail_unless(obj != NULL, "Failed to create a string object"); - fail_unless(HG_OBJECT_IS_STRING (obj), "Created object isn't a string object"); - - obj2 = hg_object_string_substring_new(vm, obj, 9, 3); - - fail_unless(obj2 != NULL, "Failed to create a substring."); - fail_unless(HG_OBJECT_IS_STRING (obj2), "Created substring isn't a string object"); - - memcpy(HG_OBJECT_STRING_DATA (obj2)->string, "cat", 3); - fail_unless(strncmp(HG_OBJECT_STRING_DATA (obj)->string, - "I like a cat", - HG_OBJECT_STRING (obj)->real_length) == 0, "Failed to modify through a substring"); - - hg_object_free(vm, obj); -} -TEND - -TDEF (hg_object_string_compare) -{ - hg_object_t *obj2; - - obj = hg_object_string_new(vm, "foo"); - obj2 = hg_object_string_new(vm, "foo"); - - fail_unless(obj != NULL, "Failed to create a string object"); - fail_unless(obj2 != NULL, "Failed to create a string object(2)"); - - fail_unless(hg_object_string_compare(obj, obj2), "Failed to compare the string objects"); - - hg_object_free(vm, obj2); - - obj2 = hg_object_string_new(vm, "bar"); - - fail_unless(obj2 != NULL, "Failed to create a string object(3)"); - - fail_unless(!hg_object_string_compare(obj, obj2), "Have to be different."); - - hg_object_free(vm, obj2); - hg_object_free(vm, obj); -} -TEND - -/************************************************************/ -Suite * -hieroglyph_suite(void) -{ - Suite *s = suite_create("hg_string_t"); - TCase *tc = tcase_create("Generic Functionalities"); - - tcase_add_checked_fixture(tc, setup, teardown); - T (hg_object_string_new); - T (hg_object_string_sized_new); - T (hg_object_string_substring_new); - T (hg_object_string_compare); - - suite_add_tcase(s, tc); - - return s; -} diff --git a/tests/main.c b/tests/main.c deleted file mode 100644 index 916c00a..0000000 --- a/tests/main.c +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * main.c - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#include <stdlib.h> -#include <check.h> - -extern Suite *hieroglyph_suite(void); - -int -main(void) -{ - int number_failed; - Suite *s = hieroglyph_suite(); - SRunner *sr = srunner_create(s); - - srunner_run_all(sr, CK_NORMAL); - number_failed = srunner_ntests_failed(sr); - srunner_free(sr); - - return (number_failed == 0 ? EXIT_SUCCESS : EXIT_FAILURE); -} diff --git a/tests/main.h b/tests/main.h deleted file mode 100644 index e65bae2..0000000 --- a/tests/main.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * main.h - * Copyright (C) 2007 Akira TAGOH - * - * Authors: - * Akira TAGOH <akira@tagoh.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __HIEROGLYPH_TEST_MAIN_H__ -#define __HIEROGLYPH_TEST_MAIN_H__ - -#include <check.h> - -#define TDEF(fn) START_TEST (test_ ## fn) -#define TEND END_TEST -#define T(fn) tcase_add_test(tc, test_ ## fn) -#define TNUL(obj) fail_unless((obj) != NULL, "Failed to create an object") - -#endif /* __HIEROGLYPH_TEST_MAIN_H__ */ diff --git a/tests/ps/Makefile.am b/tests/ps/Makefile.am deleted file mode 100644 index 240d81e..0000000 --- a/tests/ps/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ -NULL = - -DEPS = \ - $(top_builddir)/src/hgs \ - $(NULL) - -EXTRA_DIST = \ - test-ps.sh \ - *.ps \ - $(NULL) - -check: - $(srcdir)/test-ps.sh
\ No newline at end of file diff --git a/tests/ps/arc.ps b/tests/ps/arc.ps deleted file mode 100644 index c8b1358..0000000 --- a/tests/ps/arc.ps +++ /dev/null @@ -1,2 +0,0 @@ -0 0 50 0 90 arc pathbbox pstack -clear closepath newpath 0 0 50 45 90 arc pathbbox pstack diff --git a/tests/ps/concat.ps b/tests/ps/concat.ps deleted file mode 100644 index d60ef57..0000000 --- a/tests/ps/concat.ps +++ /dev/null @@ -1 +0,0 @@ -[1 0 0 1 0 0] setmatrix [76 0 0 76 0 0] concat 6 array currentmatrix == diff --git a/tests/ps/currentpoint.ps b/tests/ps/currentpoint.ps deleted file mode 100644 index db436b1..0000000 --- a/tests/ps/currentpoint.ps +++ /dev/null @@ -1,2 +0,0 @@ -100 0 moveto -currentpoint pstack diff --git a/tests/ps/curveto.ps b/tests/ps/curveto.ps deleted file mode 100644 index 73f8de1..0000000 --- a/tests/ps/curveto.ps +++ /dev/null @@ -1 +0,0 @@ -0 0 1 1 2 2 curveto diff --git a/tests/ps/doretree.ps b/tests/ps/doretree.ps deleted file mode 100644 index aecbb4a..0000000 --- a/tests/ps/doretree.ps +++ /dev/null @@ -1,2485 +0,0 @@ -%!PS-Adobe-1.0 -%%Title: dore.ps -%%Creator: Dore' Postscript Device Driver -%%For: Jesse Don Hickson III -%%CreationDate: Sat Apr 11 18:26:44 1998 -%%Pages: (atend) -%%DocumentFonts: -%%BoundingBox: 0 0 612 612 -%%EndComments -/doretreesave save def % prevent left over effects -% The author, Jesse Don Hickson III, hereby places this file into -% the public domain on this day 23 Feb 2000. -/Dore 20 dict def -Dore begin -/Prgb { moveto -1 -1 rmoveto 2 0 rlineto - 0 2 rlineto -2 0 rlineto - closepath setrgbcolor fill } def -/Lrgb { moveto lineto setrgbcolor stroke } def -/Trgb { moveto lineto lineto closepath - setrgbcolor fill } def -/BGrgb { dup 3 -1 roll dup 5 -1 roll dup - 7 -1 roll dup 3 -1 roll moveto - 6 -1 roll lineto exch 4 -1 roll - lineto lineto closepath - setrgbcolor - fill } def -/Pgray { moveto -1 -1 rmoveto 2 0 rlineto - 0 2 rlineto -2 0 rlineto - closepath setgray fill } def -/Lgray { moveto lineto setgray stroke } def -/Tgray { moveto lineto lineto closepath - setgray fill } def -/BGgray { dup 3 -1 roll dup 5 -1 roll dup - 7 -1 roll dup 3 -1 roll moveto - 6 -1 roll lineto exch 4 -1 roll - lineto lineto closepath setgray - fill } def -/BDR { dup 3 -1 roll dup 5 -1 roll dup - 7 -1 roll dup 3 -1 roll moveto - 6 -1 roll lineto exch 4 -1 roll - lineto lineto closepath - setgray 40 setlinewidth - stroke } def -%%EndProlog -%%Page: 1 1 - -gsave -0.400000 0.400000 0.400000 0 0 612 612 BGrgb - -0.25028 0.20022 0.15028 66 73 545 73 478 350 Trgb -0.25028 0.20022 0.15028 66 73 478 350 133 350 Trgb -0.312849 0.250279 0.312849 69 61 542 61 545 73 Trgb -0.312849 0.250279 0.312849 69 61 545 73 66 73 Trgb - -0.000000 0.699172 0.209751 308 254 305 260 302 254 Trgb -0.000000 0.699172 0.209751 305 260 299 260 302 254 Trgb -0.000000 0.699172 0.209751 299 260 296 255 302 254 Trgb -0.000000 0.699172 0.209751 296 255 299 249 302 254 Trgb -0.000000 0.699172 0.209751 299 249 305 249 302 254 Trgb -0.000000 0.699172 0.209751 305 249 308 254 302 254 Trgb -0.000000 0.000000 0.000000 303 225 299 249 296 255 Trgb -0.000000 0.000000 0.000000 303 225 296 255 300 230 Trgb -0.000000 0.006800 0.002040 308 225 305 249 299 249 Trgb -0.000000 0.003400 0.001020 308 225 299 249 303 225 Trgb -0.000000 0.025554 0.007666 311 230 308 254 305 249 Trgb -0.000000 0.017877 0.005363 311 230 305 249 308 225 Trgb -0.000000 0.698504 0.209551 318 220 315 223 313 218 Trgb -0.000000 0.698504 0.209551 315 223 310 222 313 218 Trgb -0.000000 0.698504 0.209551 310 222 309 217 313 218 Trgb -0.000000 0.698504 0.209551 309 217 312 214 313 218 Trgb -0.000000 0.698504 0.209551 312 214 317 215 313 218 Trgb -0.000000 0.698504 0.209551 317 215 318 220 313 218 Trgb -0.000000 0.039441 0.011832 303 258 315 223 318 220 Trgb -0.000000 0.039755 0.011926 303 258 318 220 306 256 Trgb -0.000000 0.013042 0.003913 299 257 310 222 315 223 Trgb -0.000000 0.026084 0.007825 299 257 315 223 303 258 Trgb -0.000000 0.000000 0.000000 298 253 309 217 310 222 Trgb -0.000000 0.000000 0.000000 298 253 310 222 299 257 Trgb -0.000000 0.696509 0.208953 351 168 348 168 348 166 Trgb -0.000000 0.696509 0.208953 348 168 346 166 348 166 Trgb -0.000000 0.696509 0.208953 346 166 345 164 348 166 Trgb -0.000000 0.696509 0.208953 345 164 348 164 348 166 Trgb -0.000000 0.696509 0.208953 348 164 351 166 348 166 Trgb -0.000000 0.696509 0.208953 351 166 351 168 348 166 Trgb -0.000000 0.059893 0.017968 314 220 348 168 351 168 Trgb -0.000000 0.060927 0.018278 314 220 351 168 316 221 Trgb -0.000000 0.019620 0.005886 311 218 346 166 348 168 Trgb -0.000000 0.039239 0.011772 311 218 348 168 314 220 Trgb -0.000000 0.000000 0.000000 311 216 345 164 346 166 Trgb -0.000000 0.000000 0.000000 311 216 346 166 311 218 Trgb -0.000000 0.000000 0.000000 350 168 349 168 348 166 Trgb -0.000000 0.000000 0.000000 349 168 347 166 348 166 Trgb -0.000000 0.000000 0.000000 347 166 346 164 348 166 Trgb -0.000000 0.000000 0.000000 346 164 347 164 348 166 Trgb -0.000000 0.000000 0.000000 347 164 349 166 348 166 Trgb -0.000000 0.000000 0.000000 349 166 350 168 348 166 Trgb -0.000000 0.238723 0.071617 349 166 385 141 386 143 Trgb -0.000000 0.241460 0.072438 349 166 386 143 350 168 Trgb -0.000000 0.078662 0.023599 347 164 384 140 385 141 Trgb -0.000000 0.157324 0.047197 347 164 385 141 349 166 Trgb -0.000000 0.000000 0.000000 346 164 383 140 384 140 Trgb -0.000000 0.000000 0.000000 346 164 384 140 347 164 Trgb -0.340732 0.248642 0.117875 397 153 395 142 402 143 Trgb -0.278657 0.203344 0.096400 395 127 402 143 395 142 Trgb -0.247789 0.180819 0.085722 395 142 386 130 395 127 Trgb -0.119439 0.087158 0.041319 386 130 377 126 395 127 Trgb -0.106393 0.077638 0.036806 376 140 383 156 371 151 Trgb -0.318775 0.232620 0.110279 395 142 397 153 383 156 Trgb -0.234743 0.171299 0.081209 383 156 376 140 395 142 Trgb -0.225832 0.164797 0.078126 386 130 395 142 376 140 Trgb -0.033948 0.024773 0.011744 366 140 376 140 371 151 Trgb -0.000000 0.000000 0.000000 372 130 377 126 366 140 Trgb -0.033948 0.024773 0.011744 376 140 366 140 377 126 Trgb -0.097482 0.071136 0.033724 377 126 386 130 376 140 Trgb -0.072446 0.052866 0.025062 383 156 373 156 371 151 Trgb -0.228924 0.167052 0.079195 397 153 391 158 383 156 Trgb -0.110944 0.080959 0.038381 373 156 383 156 391 158 Trgb -0.000000 0.699929 0.209979 390 172 391 170 391 172 Trgb -0.000000 0.699929 0.209979 391 170 392 170 391 172 Trgb -0.000000 0.699929 0.209979 392 170 393 172 391 172 Trgb -0.000000 0.699929 0.209979 393 172 392 174 391 172 Trgb -0.000000 0.699929 0.209979 392 174 391 174 391 172 Trgb -0.000000 0.699929 0.209979 391 174 390 172 391 172 Trgb -0.000000 0.004526 0.001358 348 164 391 170 390 172 Trgb -0.000000 0.006998 0.002099 348 164 390 172 347 166 Trgb -0.000000 0.000685 0.000205 349 164 392 170 391 170 Trgb -0.000000 0.001370 0.000411 349 164 391 170 348 164 Trgb -0.000000 0.008785 0.002635 347 166 390 172 391 174 Trgb -0.000000 0.008100 0.002430 347 166 391 174 347 168 Trgb -0.315444 0.255254 0.114140 397 175 404 160 408 174 Trgb -0.160986 0.130268 0.058251 383 174 386 160 397 175 Trgb -0.207378 0.167808 0.075037 404 160 397 175 386 160 Trgb -0.095933 0.077628 0.034712 386 160 393 153 404 160 Trgb -0.267978 0.216844 0.096964 404 160 409 172 408 174 Trgb -0.330957 0.267806 0.119752 402 187 397 175 408 174 Trgb -0.176499 0.142820 0.063864 384 186 383 174 397 175 Trgb -0.238403 0.192912 0.086263 397 175 402 187 384 186 Trgb -0.137926 0.111608 0.049907 390 190 384 186 402 187 Trgb -0.049541 0.040088 0.017926 386 160 383 174 374 172 Trgb -0.015977 0.012928 0.005781 374 172 381 157 386 160 Trgb -0.015977 0.012928 0.005781 393 153 386 160 381 157 Trgb -0.283490 0.229397 0.102577 409 172 402 187 408 174 Trgb -0.065053 0.052640 0.023539 383 174 384 186 374 172 Trgb -0.031489 0.025481 0.011394 379 183 374 172 384 186 Trgb -0.042458 0.034357 0.015363 384 186 390 190 379 183 Trgb -0.000000 0.697723 0.209317 341 150 344 149 343 152 Trgb -0.000000 0.697723 0.209317 344 149 346 151 343 152 Trgb -0.000000 0.697723 0.209317 346 151 345 153 343 152 Trgb -0.000000 0.697723 0.209317 345 153 343 154 343 152 Trgb -0.000000 0.697723 0.209317 343 154 341 152 343 152 Trgb -0.000000 0.697723 0.209317 341 152 341 150 343 152 Trgb -0.000000 0.049494 0.014848 350 168 345 153 346 151 Trgb -0.000000 0.044068 0.013220 350 168 346 151 350 165 Trgb -0.000000 0.029160 0.008748 348 168 343 154 345 153 Trgb -0.000000 0.042040 0.012612 348 168 345 153 350 168 Trgb -0.000000 0.005426 0.001628 346 167 341 152 343 154 Trgb -0.000000 0.010853 0.003256 346 167 343 154 348 168 Trgb -0.041998 0.199607 0.048321 336 144 348 143 342 148 Trgb -0.000000 0.000000 0.000000 334 144 343 140 336 144 Trgb -0.020666 0.098222 0.023778 348 143 336 144 343 140 Trgb -0.028561 0.135744 0.032861 343 140 351 143 348 143 Trgb -0.080827 0.384157 0.092997 348 143 349 154 342 148 Trgb -0.101740 0.483551 0.117058 356 151 352 159 349 154 Trgb -0.088824 0.422164 0.102198 349 154 348 143 356 151 Trgb -0.057889 0.275137 0.066605 351 143 356 151 348 143 Trgb -0.030833 0.146542 0.035475 337 155 336 144 342 148 Trgb -0.000000 0.000000 0.000000 331 153 334 144 336 144 Trgb -0.009501 0.045158 0.010932 336 144 337 155 331 153 Trgb -0.009501 0.045158 0.010932 335 161 331 153 337 155 Trgb -0.069662 0.331092 0.080151 349 154 337 155 342 148 Trgb -0.090575 0.430486 0.104212 352 159 344 163 349 154 Trgb -0.066494 0.316036 0.076506 337 155 349 154 344 163 Trgb -0.027665 0.131486 0.031830 344 163 335 161 337 155 Trgb -0.000000 0.699775 0.209933 370 210 368 207 370 207 Trgb -0.000000 0.699775 0.209933 368 207 369 204 370 207 Trgb -0.000000 0.699775 0.209933 369 204 370 203 370 207 Trgb -0.000000 0.699775 0.209933 370 203 372 206 370 207 Trgb -0.000000 0.699775 0.209933 372 206 372 209 370 207 Trgb -0.000000 0.699775 0.209933 372 209 370 210 370 207 Trgb -0.000000 0.011674 0.003502 312 219 368 207 370 210 Trgb -0.000000 0.014707 0.004412 312 219 370 210 313 222 Trgb -0.000000 0.002881 0.000864 312 216 369 204 368 207 Trgb -0.000000 0.005761 0.001728 312 216 368 207 312 219 Trgb -0.000000 0.014859 0.004458 313 222 370 210 372 209 Trgb -0.000000 0.011978 0.003594 313 222 372 209 315 221 Trgb -0.000000 0.000000 0.000000 369 208 369 209 370 207 Trgb -0.000000 0.000000 0.000000 369 209 369 207 370 207 Trgb -0.000000 0.000000 0.000000 369 207 371 205 370 207 Trgb -0.000000 0.000000 0.000000 371 205 372 205 370 207 Trgb -0.000000 0.000000 0.000000 372 205 371 206 370 207 Trgb -0.000000 0.000000 0.000000 371 206 369 208 370 207 Trgb -0.000000 0.033825 0.010148 371 206 410 235 409 237 Trgb -0.000000 0.027366 0.008210 371 206 409 237 369 208 Trgb -0.000000 0.026347 0.007904 372 205 411 234 410 235 Trgb -0.000000 0.033316 0.009995 372 205 410 235 371 206 Trgb -0.000000 0.013938 0.004181 369 208 409 237 408 237 Trgb -0.000000 0.006969 0.002091 369 208 408 237 369 209 Trgb -0.402052 0.138238 0.108058 417 254 429 236 426 248 Trgb -0.324052 0.111419 0.087094 402 249 413 237 417 254 Trgb -0.415721 0.142938 0.111732 429 236 417 254 413 237 Trgb -0.399297 0.137291 0.107317 413 237 421 224 429 236 Trgb -0.303041 0.104195 0.081447 421 224 422 218 429 236 Trgb -0.196628 0.067607 0.052847 397 253 402 249 417 254 Trgb -0.000000 0.000000 0.000000 405 218 392 236 392 223 Trgb -0.195487 0.067215 0.052540 413 237 402 249 392 236 Trgb -0.127423 0.043812 0.034247 392 236 405 218 413 237 Trgb -0.239564 0.082370 0.064387 421 224 413 237 405 218 Trgb -0.000000 0.000000 0.000000 402 218 405 218 392 223 Trgb -0.031167 0.010716 0.008377 405 218 402 218 422 218 Trgb -0.143308 0.049274 0.038516 422 218 421 224 405 218 Trgb -0.000000 0.000000 0.000000 392 236 390 235 392 223 Trgb -0.068063 0.023402 0.018293 402 249 397 253 392 236 Trgb -0.000000 0.000000 0.000000 390 235 392 236 397 253 Trgb -0.000000 0.699725 0.209917 388 238 390 237 389 239 Trgb -0.000000 0.699725 0.209917 390 237 392 238 389 239 Trgb -0.000000 0.699725 0.209917 392 238 391 240 389 239 Trgb -0.000000 0.699725 0.209917 391 240 388 241 389 239 Trgb -0.000000 0.699725 0.209917 388 241 387 240 389 239 Trgb -0.000000 0.699725 0.209917 387 240 388 238 389 239 Trgb -0.000000 0.011031 0.003309 371 205 390 237 388 238 Trgb -0.000000 0.005515 0.001655 371 205 388 238 369 206 Trgb -0.000000 0.017121 0.005136 372 206 392 238 390 237 Trgb -0.000000 0.016834 0.005050 372 206 390 237 371 205 Trgb -0.000000 0.000000 0.000000 369 206 388 238 387 240 Trgb -0.000000 0.000000 0.000000 369 206 387 240 368 207 Trgb -0.349698 0.218700 0.113680 387 242 406 239 397 252 Trgb -0.133776 0.083663 0.043488 379 231 393 224 387 242 Trgb -0.271918 0.170056 0.088395 406 239 387 242 393 224 Trgb -0.255724 0.159929 0.083131 393 224 405 226 406 239 Trgb -0.354064 0.221431 0.115099 406 239 402 254 397 252 Trgb -0.280651 0.175518 0.091234 402 254 406 239 407 236 Trgb -0.260091 0.162660 0.084550 405 226 407 236 406 239 Trgb -0.250481 0.156650 0.081426 384 257 387 242 397 252 Trgb -0.086350 0.054003 0.028071 371 242 379 231 387 242 Trgb -0.125275 0.078347 0.040724 387 242 384 257 371 242 Trgb -0.038925 0.024344 0.012654 374 251 371 242 384 257 Trgb -0.047425 0.029660 0.015417 393 224 379 231 376 224 Trgb -0.047425 0.029660 0.015417 376 224 394 221 393 224 Trgb -0.117582 0.073536 0.038224 405 226 393 224 394 221 Trgb -0.254847 0.159381 0.082846 402 254 384 257 397 252 Trgb -0.000000 0.000000 0.000000 379 231 371 242 376 224 Trgb -0.000000 0.682373 0.204712 391 162 392 163 390 162 Trgb -0.000000 0.682373 0.204712 392 163 391 163 390 162 Trgb -0.000000 0.682373 0.204712 391 163 389 162 390 162 Trgb -0.000000 0.682373 0.204712 389 162 388 161 390 162 Trgb -0.000000 0.682373 0.204712 388 161 389 161 390 162 Trgb -0.000000 0.682373 0.204712 389 161 391 162 390 162 Trgb -0.000000 0.137665 0.041299 371 208 391 163 392 163 Trgb -0.000000 0.128141 0.038442 371 208 392 163 372 208 Trgb -0.000000 0.068110 0.020433 369 207 389 162 391 163 Trgb -0.000000 0.107649 0.032295 369 207 391 163 371 208 Trgb -0.000000 0.009524 0.002857 368 206 388 161 389 162 Trgb -0.000000 0.019047 0.005714 368 206 389 162 369 207 Trgb -0.163081 0.086165 0.049849 403 150 407 155 399 143 Trgb -0.357741 0.189016 0.109351 408 169 406 171 407 155 Trgb -0.201687 0.106563 0.061650 407 155 389 148 399 143 Trgb -0.192638 0.101782 0.058884 394 168 380 161 389 148 Trgb -0.292072 0.154319 0.089278 389 148 407 155 394 168 Trgb -0.396347 0.209413 0.121152 406 171 394 168 407 155 Trgb -0.311639 0.164657 0.095259 406 171 408 169 395 181 Trgb -0.074953 0.039602 0.022911 389 148 385 143 399 143 Trgb -0.069652 0.036801 0.021291 380 161 372 155 389 148 Trgb -0.042354 0.022378 0.012946 385 143 389 148 372 155 Trgb -0.080631 0.042602 0.024647 377 174 395 181 382 180 Trgb -0.150284 0.079404 0.045937 380 161 394 168 377 174 Trgb -0.203616 0.107582 0.062240 395 181 377 174 394 168 Trgb -0.350245 0.185055 0.107060 394 168 406 171 395 181 Trgb -0.027298 0.014423 0.008344 372 155 380 161 377 174 Trgb -0.000000 0.000000 0.000000 377 174 374 169 372 155 Trgb -0.000000 0.697969 0.209391 293 250 295 248 296 251 Trgb -0.000000 0.697969 0.209391 295 248 299 249 296 251 Trgb -0.000000 0.697969 0.209391 299 249 299 253 296 251 Trgb -0.000000 0.697969 0.209391 299 253 297 254 296 251 Trgb -0.000000 0.697969 0.209391 297 254 293 253 296 251 Trgb -0.000000 0.697969 0.209391 293 253 293 250 296 251 Trgb -0.000000 0.000000 0.000000 313 215 295 248 293 250 Trgb -0.000000 0.000000 0.000000 313 215 293 250 310 217 Trgb -0.000000 0.029354 0.008806 316 217 299 249 295 248 Trgb -0.000000 0.014677 0.004403 316 217 295 248 313 215 Trgb -0.000000 0.046680 0.014004 317 220 299 253 299 249 Trgb -0.000000 0.045355 0.013607 317 220 299 249 316 217 Trgb -0.156998 0.121144 0.055628 280 252 297 247 291 260 Trgb -0.000000 0.000000 0.000000 279 244 288 235 280 252 Trgb -0.084838 0.065463 0.030060 297 247 280 252 288 235 Trgb -0.132657 0.102362 0.047004 288 235 302 236 297 247 Trgb -0.278211 0.214675 0.098577 297 247 305 263 291 260 Trgb -0.324474 0.250373 0.114969 312 246 313 259 305 263 Trgb -0.310052 0.239244 0.109859 305 263 297 247 312 246 Trgb -0.236658 0.182612 0.083854 302 236 312 246 297 247 Trgb -0.089372 0.068962 0.031667 289 268 280 252 291 260 Trgb -0.000000 0.000000 0.000000 280 256 279 244 280 252 Trgb -0.017212 0.013281 0.006099 280 252 289 268 280 256 Trgb -0.047819 0.036898 0.016943 302 236 288 235 303 235 Trgb -0.210585 0.162493 0.074615 305 263 289 268 291 260 Trgb -0.256848 0.198191 0.091008 313 259 304 267 305 263 Trgb -0.174799 0.134880 0.061936 289 268 305 263 304 267 Trgb -0.151820 0.117148 0.053794 312 246 302 236 303 235 Trgb -0.000000 0.699942 0.209983 348 304 347 302 351 301 Trgb -0.000000 0.699942 0.209983 347 302 349 298 351 301 Trgb -0.000000 0.699942 0.209983 349 298 353 297 351 301 Trgb -0.000000 0.699942 0.209983 353 297 355 300 351 301 Trgb -0.000000 0.699942 0.209983 355 300 352 303 351 301 Trgb -0.000000 0.699942 0.209983 352 303 348 304 351 301 Trgb -0.000000 0.000000 0.000000 298 255 347 302 348 304 Trgb -0.000000 0.000000 0.000000 298 255 348 304 300 258 Trgb -0.000000 0.001821 0.000546 301 252 349 298 347 302 Trgb -0.000000 0.000911 0.000273 301 252 347 302 298 255 Trgb -0.000000 0.006793 0.002038 304 251 353 297 349 298 Trgb -0.000000 0.004762 0.001429 304 251 349 298 301 252 Trgb -0.000000 0.018322 0.005497 350 301 386 356 384 357 Trgb -0.000000 0.009161 0.002748 350 301 384 357 348 302 Trgb -0.000000 0.035636 0.010691 353 299 389 354 386 356 Trgb -0.000000 0.031560 0.009468 353 299 386 356 350 301 Trgb -0.000000 0.021390 0.006417 353 299 390 354 389 354 Trgb -0.000000 0.030551 0.009165 353 299 389 354 353 299 Trgb -0.000000 0.677885 0.203366 386 356 385 355 387 356 Trgb -0.000000 0.677885 0.203366 385 355 386 354 387 356 Trgb -0.000000 0.677885 0.203366 386 354 388 355 387 356 Trgb -0.000000 0.677885 0.203366 388 355 389 356 387 356 Trgb -0.000000 0.677885 0.203366 389 356 388 357 387 356 Trgb -0.000000 0.677885 0.203366 388 357 386 356 387 356 Trgb -0.000000 0.144797 0.043439 388 357 369 396 367 395 Trgb -0.000000 0.115047 0.034514 388 357 367 395 386 356 Trgb -0.000000 0.117682 0.035305 389 356 369 395 369 396 Trgb -0.000000 0.146114 0.043834 389 356 369 396 388 357 Trgb -0.000000 0.056865 0.017059 386 356 367 395 365 394 Trgb -0.000000 0.028432 0.008530 386 356 365 394 385 355 Trgb -0.009232 0.148327 0.031512 363 401 370 403 364 402 Trgb -0.022270 0.357806 0.076015 365 397 371 399 363 401 Trgb -0.022149 0.355867 0.075603 370 403 363 401 371 399 Trgb -0.031065 0.499105 0.106034 371 399 375 399 370 403 Trgb -0.009353 0.150267 0.031924 360 393 365 397 363 401 Trgb -0.002795 0.044900 0.009539 363 401 359 396 360 393 Trgb -0.000000 0.000000 0.000000 360 390 360 393 359 396 Trgb -0.019209 0.308621 0.065566 376 392 369 391 371 387 Trgb -0.025955 0.417018 0.088595 371 399 365 397 369 391 Trgb -0.029520 0.474291 0.100762 369 391 376 392 371 399 Trgb -0.034750 0.558317 0.118613 375 399 371 399 376 392 Trgb -0.009086 0.145981 0.031013 369 391 365 386 371 387 Trgb -0.013038 0.209479 0.044503 365 397 360 393 369 391 Trgb -0.006480 0.104112 0.022118 365 386 369 391 360 393 Trgb -0.000000 0.000000 0.000000 360 393 360 390 365 386 Trgb -0.000000 0.698602 0.209581 389 395 390 396 387 396 Trgb -0.000000 0.698602 0.209581 390 396 388 397 387 396 Trgb -0.000000 0.698602 0.209581 388 397 386 397 387 396 Trgb -0.000000 0.698602 0.209581 386 397 385 396 387 396 Trgb -0.000000 0.698602 0.209581 385 396 387 395 387 396 Trgb -0.000000 0.698602 0.209581 387 395 389 395 387 396 Trgb -0.000000 0.037233 0.011170 389 356 390 396 389 395 Trgb -0.000000 0.038872 0.011662 389 356 389 395 389 355 Trgb -0.000000 0.003278 0.000983 386 354 387 395 385 396 Trgb -0.000000 0.001639 0.000492 386 354 385 396 385 355 Trgb -0.000000 0.028646 0.008594 389 355 389 395 387 395 Trgb -0.000000 0.016781 0.005034 389 355 387 395 386 354 Trgb -0.404995 0.114698 0.103939 398 404 399 414 388 415 Trgb -0.435739 0.123405 0.111829 402 388 409 395 398 404 Trgb -0.425131 0.120400 0.109106 399 414 398 404 409 395 Trgb -0.324162 0.091805 0.083193 376 404 398 404 388 415 Trgb -0.354905 0.100512 0.091083 386 385 402 388 398 404 Trgb -0.263463 0.074615 0.067616 398 404 376 404 386 385 Trgb -0.091315 0.025861 0.023435 371 389 386 385 376 404 Trgb -0.276324 0.078257 0.070916 409 395 402 388 397 377 Trgb -0.152013 0.043051 0.039013 377 414 376 404 388 415 Trgb -0.039290 0.011127 0.010084 376 404 377 414 366 396 Trgb -0.039290 0.011127 0.010084 366 396 371 389 376 404 Trgb -0.195491 0.055364 0.050171 402 388 386 385 397 377 Trgb -0.064759 0.018340 0.016620 376 378 397 377 386 385 Trgb -0.052024 0.014734 0.013352 386 385 371 389 376 378 Trgb -0.000000 0.000000 0.000000 371 389 366 396 376 378 Trgb -0.000000 0.699996 0.209999 421 374 420 376 419 375 Trgb -0.000000 0.699996 0.209999 420 376 419 377 419 375 Trgb -0.000000 0.699996 0.209999 419 377 418 376 419 375 Trgb -0.000000 0.699996 0.209999 418 376 418 374 419 375 Trgb -0.000000 0.699996 0.209999 418 374 420 373 419 375 Trgb -0.000000 0.699996 0.209999 420 373 421 374 419 375 Trgb -0.000000 0.000000 0.000000 385 357 418 376 419 377 Trgb -0.000000 0.000000 0.000000 385 357 419 377 386 358 Trgb -0.000000 0.000000 0.000000 386 355 418 374 418 376 Trgb -0.000000 0.000000 0.000000 386 355 418 376 385 357 Trgb -0.000000 0.001176 0.000353 388 354 420 373 418 374 Trgb -0.000000 0.000588 0.000176 388 354 418 374 386 355 Trgb -0.289362 0.280459 0.113964 436 374 429 389 431 382 Trgb -0.278122 0.269564 0.109537 429 389 419 386 431 382 Trgb -0.077960 0.075561 0.030704 412 390 407 384 419 386 Trgb -0.159921 0.155000 0.062984 419 386 429 389 412 390 Trgb -0.292601 0.283598 0.115240 426 371 436 374 431 382 Trgb -0.104389 0.101177 0.041113 426 360 431 366 436 374 Trgb -0.181640 0.176051 0.071538 436 374 426 371 426 360 Trgb -0.094729 0.091814 0.037309 417 362 426 360 426 371 Trgb -0.281360 0.272703 0.110813 419 386 426 371 431 382 Trgb -0.077960 0.075561 0.030704 407 384 409 372 419 386 Trgb -0.163159 0.158139 0.064260 426 371 419 386 409 372 Trgb -0.087489 0.084798 0.034457 409 372 417 362 426 371 Trgb -0.009530 0.009236 0.003753 426 360 417 362 410 361 Trgb -0.000000 0.000000 0.000000 409 372 407 384 403 376 Trgb -0.000000 0.000000 0.000000 403 376 410 361 409 372 Trgb -0.002290 0.002219 0.000902 417 362 409 372 410 361 Trgb -0.000000 0.697280 0.209184 347 363 350 363 349 364 Trgb -0.000000 0.697280 0.209184 350 363 352 364 349 364 Trgb -0.000000 0.697280 0.209184 352 364 351 365 349 364 Trgb -0.000000 0.697280 0.209184 351 365 348 365 349 364 Trgb -0.000000 0.697280 0.209184 348 365 346 364 349 364 Trgb -0.000000 0.697280 0.209184 346 364 347 363 349 364 Trgb -0.000000 0.034648 0.010394 352 300 350 363 347 363 Trgb -0.000000 0.017324 0.005197 352 300 347 363 349 300 Trgb -0.000000 0.053795 0.016138 354 301 352 364 350 363 Trgb -0.000000 0.052883 0.015865 354 301 350 363 352 300 Trgb -0.000000 0.000000 0.000000 349 300 347 363 346 364 Trgb -0.000000 0.000000 0.000000 349 300 346 364 348 301 Trgb -0.308371 0.106028 0.082880 340 375 360 376 349 384 Trgb -0.157725 0.054231 0.042391 336 359 352 359 340 375 Trgb -0.324928 0.111721 0.087330 360 376 340 375 352 359 Trgb -0.420222 0.144486 0.112941 352 359 366 361 360 376 Trgb -0.317849 0.109287 0.085427 360 376 358 381 349 384 Trgb -0.343885 0.118239 0.092425 358 381 360 376 369 365 Trgb -0.429700 0.147745 0.115489 366 361 369 365 360 376 Trgb -0.141167 0.048538 0.037941 337 380 340 375 349 384 Trgb -0.055697 0.019150 0.014970 329 363 336 359 340 375 Trgb -0.055697 0.019150 0.014970 340 375 337 380 329 363 Trgb -0.046330 0.015930 0.012452 361 348 341 347 350 344 Trgb -0.102027 0.035080 0.027422 352 359 336 359 341 347 Trgb -0.148358 0.051010 0.039874 341 347 361 348 352 359 Trgb -0.299349 0.102926 0.080455 366 361 352 359 361 348 Trgb -0.308827 0.106185 0.083002 369 365 366 361 361 348 Trgb -0.000000 0.000000 0.000000 336 359 329 363 341 347 Trgb -0.000000 0.698661 0.209598 356 291 357 294 353 293 Trgb -0.000000 0.698661 0.209598 357 294 354 296 353 293 Trgb -0.000000 0.698661 0.209598 354 296 351 295 353 293 Trgb -0.000000 0.698661 0.209598 351 295 350 292 353 293 Trgb -0.000000 0.698661 0.209598 350 292 353 290 353 293 Trgb -0.000000 0.698661 0.209598 353 290 356 291 353 293 Trgb -0.000000 0.033302 0.009991 352 304 354 296 357 294 Trgb -0.000000 0.037838 0.011351 352 304 357 294 354 302 Trgb -0.000000 0.009589 0.002877 348 303 351 295 354 296 Trgb -0.000000 0.019177 0.005753 348 303 354 296 352 304 Trgb -0.000000 0.000000 0.000000 348 300 350 292 351 295 Trgb -0.000000 0.000000 0.000000 348 300 351 295 348 303 Trgb -0.000000 0.000000 0.000000 328 260 328 261 326 261 Trgb -0.000000 0.000000 0.000000 328 261 326 263 326 261 Trgb -0.000000 0.000000 0.000000 326 263 324 263 326 261 Trgb -0.000000 0.000000 0.000000 324 263 324 262 326 261 Trgb -0.000000 0.000000 0.000000 324 262 326 260 326 261 Trgb -0.000000 0.000000 0.000000 326 260 328 260 326 261 Trgb -0.000000 0.115033 0.034510 355 293 328 261 328 260 Trgb -0.000000 0.073975 0.022192 355 293 328 260 355 291 Trgb -0.000000 0.134147 0.040244 354 295 326 263 328 261 Trgb -0.000000 0.145119 0.043536 354 295 328 261 355 293 Trgb -0.000000 0.041058 0.012317 352 295 324 263 326 263 Trgb -0.000000 0.082116 0.024635 352 295 326 263 354 295 Trgb -0.012930 0.111978 0.024982 327 251 325 259 320 255 Trgb -0.024464 0.211872 0.047267 334 254 335 258 327 251 Trgb -0.032663 0.282874 0.063107 325 259 327 251 335 258 Trgb -0.055838 0.483582 0.107884 335 258 331 265 325 259 Trgb -0.012930 0.111978 0.024982 325 259 317 262 320 255 Trgb -0.013042 0.112948 0.025198 324 269 319 269 317 262 Trgb -0.025972 0.224926 0.050180 317 262 325 259 324 269 Trgb -0.049147 0.425634 0.094956 331 265 324 269 325 259 Trgb -0.000000 0.000000 0.000000 319 254 327 251 320 255 Trgb -0.046381 0.401681 0.089613 336 261 334 269 335 258 Trgb -0.062754 0.543471 0.121245 331 265 335 258 334 269 Trgb -0.000000 0.000000 0.000000 317 262 319 254 320 255 Trgb -0.013154 0.113918 0.025414 319 269 324 269 325 272 Trgb -0.032999 0.285785 0.063757 334 269 325 272 324 269 Trgb -0.056063 0.485523 0.108317 324 269 331 265 334 269 Trgb -0.000000 0.677401 0.203220 372 250 370 250 370 249 Trgb -0.000000 0.677401 0.203220 370 250 368 249 370 249 Trgb -0.000000 0.677401 0.203220 368 249 367 248 370 249 Trgb -0.000000 0.677401 0.203220 367 248 369 248 370 249 Trgb -0.000000 0.677401 0.203220 369 248 371 249 370 249 Trgb -0.000000 0.677401 0.203220 371 249 372 250 370 249 Trgb -0.000000 0.155473 0.046642 354 294 370 250 372 250 Trgb -0.000000 0.146657 0.043997 354 294 372 250 356 294 Trgb -0.000000 0.072397 0.021719 352 293 368 249 370 250 Trgb -0.000000 0.118344 0.035503 352 293 370 250 354 294 Trgb -0.000000 0.008817 0.002645 351 292 367 248 368 249 Trgb -0.000000 0.017634 0.005290 351 292 368 249 352 293 Trgb -0.253712 0.080223 0.066787 390 240 373 240 377 229 Trgb -0.428856 0.135602 0.112892 390 257 383 259 390 240 Trgb -0.393311 0.124363 0.103535 373 240 390 240 383 259 Trgb -0.382168 0.120840 0.100601 383 259 367 256 373 240 Trgb -0.133898 0.042338 0.035247 373 240 360 230 377 229 Trgb -0.000000 0.000000 0.000000 353 248 349 241 360 230 Trgb -0.100475 0.031770 0.026449 360 230 373 240 353 248 Trgb -0.209145 0.066131 0.055055 367 256 353 248 373 240 Trgb -0.125755 0.039763 0.033104 363 268 379 268 362 269 Trgb -0.381589 0.120657 0.100449 383 259 390 257 379 268 Trgb -0.298777 0.094472 0.078650 379 268 363 268 383 259 Trgb -0.334900 0.105894 0.088159 367 256 383 259 363 268 Trgb -0.053208 0.016824 0.014006 350 258 363 268 362 269 Trgb -0.000000 0.000000 0.000000 349 241 353 248 350 258 Trgb -0.053208 0.016824 0.014006 363 268 350 258 353 248 Trgb -0.161878 0.051185 0.042613 353 248 367 256 363 268 Trgb -0.000000 0.699775 0.209932 374 329 375 328 376 328 Trgb -0.000000 0.699775 0.209932 375 328 377 327 376 328 Trgb -0.000000 0.699775 0.209932 377 327 378 327 376 328 Trgb -0.000000 0.699775 0.209932 378 327 378 329 376 328 Trgb -0.000000 0.699775 0.209932 378 329 375 330 376 328 Trgb -0.000000 0.699775 0.209932 375 330 374 329 376 328 Trgb -0.000000 0.000000 0.000000 352 292 375 328 374 329 Trgb -0.000000 0.000000 0.000000 352 292 374 329 351 294 Trgb -0.000000 0.010089 0.003027 354 291 377 327 375 328 Trgb -0.000000 0.005044 0.001513 354 291 375 328 352 292 Trgb -0.000000 0.015452 0.004635 356 292 378 327 377 327 Trgb -0.000000 0.015292 0.004588 356 292 377 327 354 291 Trgb -0.251815 0.220453 0.094454 371 344 380 331 385 342 Trgb -0.043448 0.038037 0.016297 360 337 362 328 371 344 Trgb -0.140870 0.123326 0.052839 380 331 371 344 362 328 Trgb -0.124253 0.108778 0.046606 362 328 373 319 380 331 Trgb -0.321818 0.281738 0.120711 380 331 393 331 385 342 Trgb -0.216925 0.189909 0.081367 385 315 392 319 393 331 Trgb -0.264847 0.231862 0.099342 393 331 380 331 385 315 Trgb -0.178226 0.156030 0.066851 373 319 385 315 380 331 Trgb -0.213871 0.187235 0.080221 384 344 371 344 385 342 Trgb -0.000000 0.000000 0.000000 362 328 360 337 359 325 Trgb -0.000000 0.000000 0.000000 359 325 368 312 362 328 Trgb -0.026831 0.023489 0.010064 373 319 362 328 368 312 Trgb -0.283874 0.248520 0.106479 393 331 384 344 385 342 Trgb -0.103473 0.090587 0.038812 392 319 385 315 381 313 Trgb -0.053974 0.047252 0.020245 368 312 381 313 385 315 Trgb -0.080804 0.070741 0.030309 385 315 373 319 368 312 Trgb -0.000000 0.665402 0.199621 241 278 244 280 242 282 Trgb -0.000000 0.665402 0.199621 244 280 245 284 242 282 Trgb -0.000000 0.665402 0.199621 245 284 243 286 242 282 Trgb -0.000000 0.665402 0.199621 243 286 240 284 242 282 Trgb -0.000000 0.665402 0.199621 240 284 239 280 242 282 Trgb -0.000000 0.665402 0.199621 239 280 241 278 242 282 Trgb -0.000000 0.101649 0.030495 305 252 244 280 241 278 Trgb -0.000000 0.050824 0.015247 305 252 241 278 301 250 Trgb -0.000000 0.191076 0.057323 305 257 245 284 244 280 Trgb -0.000000 0.171775 0.051532 305 257 244 280 305 252 Trgb -0.000000 0.108729 0.032619 303 259 243 286 245 284 Trgb -0.000000 0.159553 0.047866 303 259 245 284 305 257 Trgb -0.000000 0.000000 0.000000 183 257 182 260 181 259 Trgb -0.000000 0.000000 0.000000 182 260 180 262 181 259 Trgb -0.000000 0.000000 0.000000 180 262 180 261 181 259 Trgb -0.000000 0.000000 0.000000 180 261 181 258 181 259 Trgb -0.000000 0.000000 0.000000 181 258 182 256 181 259 Trgb -0.000000 0.000000 0.000000 182 256 183 257 181 259 Trgb -0.000000 0.058545 0.017564 243 283 182 260 183 257 Trgb -0.000000 0.052058 0.015618 243 283 183 257 243 280 Trgb -0.000000 0.034650 0.010395 241 285 180 262 182 260 Trgb -0.000000 0.049841 0.014952 241 285 182 260 243 283 Trgb -0.000000 0.030381 0.009114 243 280 183 257 182 256 Trgb -0.000000 0.015191 0.004557 243 280 182 256 243 279 Trgb -0.000000 0.699531 0.209859 182 258 183 258 181 259 Trgb -0.000000 0.699531 0.209859 183 258 182 259 181 259 Trgb -0.000000 0.699531 0.209859 182 259 180 260 181 259 Trgb -0.000000 0.699531 0.209859 180 260 179 260 181 259 Trgb -0.000000 0.699531 0.209859 179 260 180 259 181 259 Trgb -0.000000 0.699531 0.209859 180 259 182 258 181 259 Trgb -0.000000 0.018127 0.005438 180 259 158 222 160 221 Trgb -0.000000 0.021833 0.006550 180 259 160 221 182 258 Trgb -0.000000 0.004807 0.001442 179 260 157 224 158 222 Trgb -0.000000 0.009615 0.002884 179 260 158 222 180 259 Trgb -0.000000 0.020731 0.006219 182 258 160 221 161 221 Trgb -0.000000 0.015923 0.004777 182 258 161 221 183 258 Trgb -0.000000 0.000000 0.000000 158 206 144 215 151 210 Trgb -0.125687 0.116237 0.048385 165 212 154 217 158 206 Trgb -0.054272 0.050191 0.020893 144 215 158 206 154 217 Trgb -0.059609 0.055128 0.022947 154 217 145 225 144 215 Trgb -0.005337 0.004936 0.002055 145 225 145 232 144 215 Trgb -0.118139 0.109256 0.045479 173 213 165 212 158 206 Trgb -0.290405 0.268570 0.111795 155 233 169 224 167 235 Trgb -0.245347 0.226900 0.094449 154 217 165 212 169 224 Trgb -0.246867 0.228306 0.095035 169 224 155 233 154 217 Trgb -0.132545 0.122579 0.051025 145 225 154 217 155 233 Trgb -0.189409 0.175168 0.072915 160 239 155 233 167 235 Trgb -0.091599 0.084712 0.035262 155 233 160 239 145 232 Trgb -0.078273 0.072388 0.030132 145 232 145 225 155 233 Trgb -0.282857 0.261589 0.108889 169 224 174 230 167 235 Trgb -0.237798 0.219919 0.091543 165 212 173 213 169 224 Trgb -0.231771 0.214345 0.089223 174 230 169 224 173 213 Trgb -0.000000 0.687742 0.206322 155 248 154 246 156 245 Trgb -0.000000 0.687742 0.206322 154 246 155 244 156 245 Trgb -0.000000 0.687742 0.206322 155 244 157 243 156 245 Trgb -0.000000 0.687742 0.206322 157 243 158 244 156 245 Trgb -0.000000 0.687742 0.206322 158 244 157 247 156 245 Trgb -0.000000 0.687742 0.206322 157 247 155 248 156 245 Trgb -0.000000 0.066457 0.019937 183 258 158 244 157 243 Trgb -0.000000 0.033228 0.009969 183 258 157 243 182 257 Trgb -0.000000 0.115018 0.034505 183 261 157 247 158 244 Trgb -0.000000 0.107351 0.032205 183 261 158 244 183 258 Trgb -0.000000 0.056227 0.016868 181 261 155 248 157 247 Trgb -0.000000 0.089455 0.026837 181 261 157 247 183 261 Trgb -0.095233 0.034446 0.025936 143 255 136 238 145 239 Trgb -0.080765 0.029213 0.021996 149 265 139 256 143 255 Trgb -0.051549 0.018645 0.014039 136 238 143 255 139 256 Trgb -0.053915 0.019501 0.014683 136 238 153 226 145 239 Trgb -0.010230 0.003700 0.002786 153 226 136 238 149 228 Trgb -0.241449 0.087332 0.065756 160 244 143 255 145 239 Trgb -0.216750 0.078399 0.059030 163 263 149 265 143 255 Trgb -0.333750 0.120718 0.090894 143 255 160 244 163 263 Trgb -0.445297 0.161065 0.121272 173 250 163 263 160 244 Trgb -0.200131 0.072388 0.054504 153 226 160 244 145 239 Trgb -0.104898 0.037942 0.028568 163 225 173 234 153 226 Trgb -0.251114 0.090828 0.068388 160 244 153 226 173 234 Trgb -0.403979 0.146120 0.110020 173 234 173 250 160 244 Trgb -0.165202 0.059754 0.044991 149 265 163 263 159 264 Trgb -0.383518 0.138719 0.104448 163 263 173 250 176 253 Trgb -0.342200 0.123775 0.093195 173 250 173 234 176 253 Trgb -0.000000 0.000000 0.000000 138 279 137 277 139 279 Trgb -0.000000 0.000000 0.000000 137 277 138 277 139 279 Trgb -0.000000 0.000000 0.000000 138 277 139 279 139 279 Trgb -0.000000 0.000000 0.000000 139 279 140 281 139 279 Trgb -0.000000 0.000000 0.000000 140 281 139 281 139 279 Trgb -0.000000 0.000000 0.000000 139 281 138 279 139 279 Trgb -0.000000 0.007901 0.002370 181 257 138 277 137 277 Trgb -0.000000 0.003951 0.001185 181 257 137 277 180 257 Trgb -0.000000 0.086361 0.025908 182 259 139 279 138 277 Trgb -0.000000 0.049106 0.014732 182 259 138 277 181 257 Trgb -0.000000 0.115714 0.034714 182 261 140 281 139 279 Trgb -0.000000 0.119664 0.035899 182 261 139 279 182 259 Trgb -0.103705 0.001023 0.020945 115 270 125 287 116 290 Trgb -0.383332 0.003780 0.077422 134 263 143 280 125 287 Trgb -0.180283 0.001778 0.036412 125 287 115 270 134 263 Trgb -0.076578 0.000755 0.015467 128 256 134 263 115 270 Trgb -0.130831 0.001290 0.026424 125 287 130 303 116 290 Trgb -0.517330 0.005102 0.104486 143 280 149 296 125 287 Trgb -0.341407 0.003367 0.068955 130 303 125 287 149 296 Trgb -0.332454 0.003279 0.067146 149 296 149 301 130 303 Trgb -0.239839 0.002365 0.048441 158 272 147 256 161 269 Trgb -0.463077 0.004567 0.093529 143 280 134 263 158 272 Trgb -0.260028 0.002564 0.052519 147 256 158 272 134 263 Trgb -0.076578 0.000755 0.015467 134 263 128 256 147 256 Trgb -0.346710 0.003419 0.070026 162 287 158 272 161 269 Trgb -0.597075 0.005888 0.120593 149 296 143 280 158 272 Trgb -0.500898 0.004940 0.101168 158 272 162 287 149 296 Trgb -0.412199 0.004065 0.083253 149 301 149 296 162 287 Trgb -0.000000 0.698970 0.209691 239 286 235 285 237 282 Trgb -0.000000 0.698970 0.209691 235 285 233 282 237 282 Trgb -0.000000 0.698970 0.209691 233 282 235 279 237 282 Trgb -0.000000 0.698970 0.209691 235 279 239 279 237 282 Trgb -0.000000 0.698970 0.209691 239 279 241 283 237 282 Trgb -0.000000 0.698970 0.209691 241 283 239 286 237 282 Trgb -0.000000 0.004282 0.001285 244 279 239 279 235 279 Trgb -0.000000 0.002141 0.000642 244 279 235 279 241 279 Trgb -0.000000 0.025877 0.007763 245 282 241 283 239 279 Trgb -0.000000 0.016150 0.004845 245 282 239 279 244 279 Trgb -0.000000 0.031322 0.009397 244 285 239 286 241 283 Trgb -0.000000 0.033463 0.010039 244 285 241 283 245 282 Trgb -0.000000 0.699983 0.209995 269 294 268 292 270 291 Trgb -0.000000 0.699983 0.209995 268 292 269 290 270 291 Trgb -0.000000 0.699983 0.209995 269 290 270 289 270 291 Trgb -0.000000 0.699983 0.209995 270 289 272 290 270 291 Trgb -0.000000 0.699983 0.209995 272 290 271 293 270 291 Trgb -0.000000 0.699983 0.209995 271 293 269 294 270 291 Trgb -0.000000 0.002735 0.000821 235 283 268 292 269 294 Trgb -0.000000 0.003769 0.001131 235 283 269 294 236 285 Trgb -0.000000 0.000567 0.000170 236 281 269 290 268 292 Trgb -0.000000 0.001134 0.000340 236 281 268 292 235 283 Trgb -0.000000 0.000000 0.000000 238 280 270 289 269 290 Trgb -0.000000 0.000000 0.000000 238 280 269 290 236 281 Trgb -0.376135 0.200455 0.115318 276 308 269 291 284 295 Trgb -0.154087 0.082118 0.047241 265 311 256 303 276 308 Trgb -0.237541 0.126594 0.072827 269 291 276 308 256 303 Trgb -0.116308 0.061985 0.035659 256 303 255 288 269 291 Trgb -0.346879 0.184863 0.106348 269 291 283 279 284 295 Trgb -0.091976 0.049017 0.028199 263 274 275 271 283 279 Trgb -0.196118 0.104518 0.060127 283 279 269 291 263 274 Trgb -0.104142 0.055501 0.031929 255 288 263 274 269 291 Trgb -0.381060 0.203080 0.116828 290 296 276 308 284 295 Trgb -0.012166 0.006484 0.003730 255 288 256 303 250 286 Trgb -0.351803 0.187488 0.107858 283 279 290 296 284 295 Trgb -0.091976 0.049017 0.028199 275 271 284 279 283 279 Trgb -0.201042 0.107142 0.061637 290 296 283 279 284 279 Trgb -0.000000 0.000000 0.000000 263 274 255 288 250 286 Trgb -0.000000 0.696680 0.209004 220 322 221 321 222 322 Trgb -0.000000 0.696680 0.209004 221 321 224 322 222 322 Trgb -0.000000 0.696680 0.209004 224 322 225 323 222 322 Trgb -0.000000 0.696680 0.209004 225 323 223 324 222 322 Trgb -0.000000 0.696680 0.209004 223 324 221 323 222 322 Trgb -0.000000 0.696680 0.209004 221 323 220 322 222 322 Trgb -0.000000 0.003836 0.001151 236 281 221 321 220 322 Trgb -0.000000 0.001918 0.000575 236 281 220 322 235 282 Trgb -0.000000 0.043010 0.012903 238 282 224 322 221 321 Trgb -0.000000 0.024382 0.007315 238 282 221 321 236 281 Trgb -0.000000 0.057802 0.017341 239 283 225 323 224 322 Trgb -0.000000 0.059720 0.017916 239 283 224 322 238 282 Trgb -0.032130 0.233204 0.053067 212 326 221 325 219 331 Trgb -0.000000 0.000000 0.000000 212 319 216 316 212 326 Trgb -0.019262 0.139807 0.031814 221 325 212 326 216 316 Trgb -0.033635 0.244129 0.055553 216 316 223 317 221 325 Trgb -0.055827 0.405196 0.092205 221 325 227 331 219 331 Trgb -0.069102 0.501547 0.114130 231 321 233 326 227 331 Trgb -0.067720 0.491517 0.111847 227 331 221 325 231 321 Trgb -0.058397 0.423846 0.096448 223 317 231 321 221 325 Trgb -0.012868 0.093396 0.021253 219 333 212 326 219 331 Trgb -0.000000 0.000000 0.000000 216 316 212 319 217 314 Trgb -0.001064 0.007725 0.001758 217 314 225 312 216 316 Trgb -0.015437 0.112046 0.025497 223 317 216 316 225 312 Trgb -0.036565 0.265389 0.060391 227 331 219 333 219 331 Trgb -0.050904 0.369464 0.084074 233 326 231 321 232 318 Trgb -0.031324 0.227352 0.051735 225 312 232 318 231 321 Trgb -0.040198 0.291763 0.066392 231 321 223 317 225 312 Trgb -0.000000 0.000000 0.000000 194 295 195 296 195 297 Trgb -0.000000 0.000000 0.000000 195 296 196 298 195 297 Trgb -0.000000 0.000000 0.000000 196 298 196 299 195 297 Trgb -0.000000 0.000000 0.000000 196 299 194 299 195 297 Trgb -0.000000 0.000000 0.000000 194 299 193 296 195 297 Trgb -0.000000 0.000000 0.000000 193 296 194 295 195 297 Trgb -0.000000 0.120080 0.036024 238 281 195 296 194 295 Trgb -0.000000 0.060040 0.018012 238 281 194 295 236 280 Trgb -0.000000 0.307224 0.092167 238 283 196 298 195 296 Trgb -0.000000 0.243672 0.073102 238 283 195 296 238 281 Trgb -0.000000 0.250695 0.075208 238 285 196 299 196 298 Trgb -0.000000 0.310735 0.093220 238 285 196 298 238 283 Trgb -0.017736 0.110162 0.025580 185 292 191 298 185 301 Trgb -0.007836 0.048670 0.011301 191 286 195 288 185 292 Trgb -0.025572 0.158832 0.036881 191 298 185 292 195 288 Trgb -0.053236 0.330662 0.076779 195 288 199 295 191 298 Trgb -0.027636 0.171654 0.039858 191 298 191 307 185 301 Trgb -0.057770 0.358825 0.083319 201 303 199 308 191 307 Trgb -0.058923 0.365987 0.084982 191 307 191 298 201 303 Trgb -0.076687 0.476325 0.110603 199 295 201 303 191 298 Trgb -0.000000 0.000000 0.000000 185 301 185 292 185 301 Trgb -0.007836 0.048670 0.011301 195 288 191 286 199 287 Trgb -0.029223 0.181512 0.042147 199 287 205 293 195 288 Trgb -0.056887 0.353342 0.082046 199 295 195 288 205 293 Trgb -0.009900 0.061492 0.014278 191 307 185 301 185 301 Trgb -0.061421 0.381505 0.088585 199 308 201 303 204 302 Trgb -0.066226 0.411348 0.095515 205 293 204 302 201 303 Trgb -0.080339 0.499005 0.115869 201 303 199 295 205 293 Trgb -0.000000 0.000000 0.000000 204 336 203 336 206 337 Trgb -0.000000 0.000000 0.000000 203 336 206 337 206 337 Trgb -0.000000 0.000000 0.000000 206 337 208 339 206 337 Trgb -0.000000 0.000000 0.000000 208 339 208 339 206 337 Trgb -0.000000 0.000000 0.000000 208 339 206 337 206 337 Trgb -0.000000 0.000000 0.000000 206 337 204 336 206 337 Trgb -0.000000 0.287100 0.086130 242 282 206 337 203 336 Trgb -0.000000 0.143550 0.043065 242 282 203 336 240 280 Trgb -0.000000 0.549999 0.165000 244 283 208 339 206 337 Trgb -0.000000 0.490325 0.147098 244 283 206 337 242 282 Trgb -0.000000 0.322574 0.096772 244 284 208 339 208 339 Trgb -0.000000 0.466124 0.139837 244 284 208 339 244 283 Trgb -0.000000 0.698197 0.209459 204 336 205 335 206 337 Trgb -0.000000 0.698197 0.209459 205 335 207 337 206 337 Trgb -0.000000 0.698197 0.209459 207 337 208 339 206 337 Trgb -0.000000 0.698197 0.209459 208 339 206 339 206 337 Trgb -0.000000 0.698197 0.209459 206 339 204 338 206 337 Trgb -0.000000 0.698197 0.209459 204 338 204 336 206 337 Trgb -0.000000 0.008040 0.002412 204 338 183 364 182 362 Trgb -0.000000 0.004020 0.001206 204 338 182 362 204 336 Trgb -0.000000 0.036178 0.010854 206 339 185 365 183 364 Trgb -0.000000 0.024119 0.007236 206 339 183 364 204 338 Trgb -0.000000 0.040198 0.012059 208 339 186 364 185 365 Trgb -0.000000 0.044218 0.013265 208 339 185 365 206 339 Trgb -0.000000 0.000000 0.000000 166 351 166 365 164 363 Trgb -0.000000 0.000000 0.000000 172 382 164 363 166 365 Trgb -0.121419 0.011415 0.026567 166 365 177 378 172 382 Trgb -0.296498 0.027876 0.064875 177 378 193 382 172 382 Trgb -0.293709 0.027614 0.064265 187 364 178 346 195 351 Trgb -0.000000 0.000000 0.000000 166 365 166 351 178 346 Trgb -0.171952 0.016166 0.037624 178 346 187 364 166 365 Trgb -0.293371 0.027582 0.064191 177 378 166 365 187 364 Trgb -0.469028 0.044097 0.102625 205 363 187 364 195 351 Trgb -0.476578 0.044806 0.104277 203 375 193 382 205 363 Trgb -0.522349 0.049110 0.114292 187 364 205 363 193 382 Trgb -0.468450 0.044042 0.102498 193 382 177 378 187 364 Trgb -0.121997 0.011470 0.026693 178 346 197 344 195 351 Trgb -0.000000 0.000000 0.000000 166 351 176 345 178 346 Trgb -0.000239 0.000023 0.000052 197 344 178 346 176 345 Trgb -0.297315 0.027953 0.065054 197 344 205 363 195 351 Trgb -0.000000 0.699742 0.209923 205 337 206 335 206 337 Trgb -0.000000 0.699742 0.209923 206 335 207 336 206 337 Trgb -0.000000 0.699742 0.209923 207 336 207 338 206 337 Trgb -0.000000 0.699742 0.209923 207 338 206 340 206 337 Trgb -0.000000 0.699742 0.209923 206 340 205 339 206 337 Trgb -0.000000 0.699742 0.209923 205 339 205 337 206 337 Trgb -0.000000 0.015210 0.004563 205 339 165 339 165 337 Trgb -0.000000 0.011503 0.003451 205 339 165 337 205 337 Trgb -0.000000 0.013720 0.004116 206 340 167 340 165 339 Trgb -0.000000 0.016319 0.004896 206 340 165 339 205 339 Trgb -0.000000 0.005197 0.001559 205 337 165 337 166 335 Trgb -0.000000 0.002599 0.000780 205 337 166 335 206 335 Trgb -0.058239 0.091602 0.029968 159 333 159 344 153 334 Trgb -0.040484 0.063676 0.020832 156 347 153 334 159 344 Trgb -0.079983 0.125802 0.041157 159 344 164 351 156 347 Trgb -0.017755 0.027926 0.009136 163 325 159 333 153 334 Trgb -0.232855 0.366250 0.119821 173 347 170 334 178 337 Trgb -0.127138 0.199970 0.065422 159 344 159 333 170 334 Trgb -0.193657 0.304596 0.099650 170 334 173 347 159 344 Trgb -0.164256 0.258353 0.084522 164 351 159 344 173 347 Trgb -0.207746 0.326757 0.106901 180 341 173 347 178 337 Trgb -0.139147 0.218860 0.071601 170 350 164 351 173 347 Trgb -0.176996 0.278391 0.091077 170 334 177 328 178 337 Trgb -0.086654 0.136294 0.044590 159 333 163 325 170 334 Trgb -0.097313 0.153061 0.050075 177 328 170 334 163 325 Trgb -0.028415 0.044692 0.014621 163 325 169 324 177 328 Trgb -0.151887 0.238897 0.078157 177 328 180 341 178 337 Trgb -0.000000 0.698962 0.209689 220 381 218 381 220 381 Trgb -0.000000 0.698962 0.209689 218 381 217 381 220 381 Trgb -0.000000 0.698962 0.209689 217 381 219 380 220 381 Trgb -0.000000 0.698962 0.209689 219 380 221 380 220 381 Trgb -0.000000 0.698962 0.209689 221 380 222 380 220 381 Trgb -0.000000 0.698962 0.209689 222 380 220 381 220 381 Trgb -0.000000 0.016514 0.004954 205 337 219 380 217 381 Trgb -0.000000 0.008257 0.002477 205 337 217 381 204 338 Trgb -0.000000 0.033230 0.009969 207 336 221 380 219 380 Trgb -0.000000 0.029001 0.008700 207 336 219 380 205 337 Trgb -0.000000 0.020944 0.006283 208 337 222 380 221 380 Trgb -0.000000 0.029201 0.008760 208 337 221 380 207 336 Trgb -0.307148 0.060281 0.073486 210 400 221 393 226 401 Trgb -0.252761 0.049607 0.060474 201 384 214 377 221 393 Trgb -0.175305 0.034406 0.041942 221 393 210 400 201 384 Trgb -0.015997 0.003140 0.003827 199 388 201 384 210 400 Trgb -0.461610 0.090596 0.110441 221 393 239 390 226 401 Trgb -0.396072 0.077734 0.094761 214 377 231 373 221 393 Trgb -0.473078 0.092847 0.113185 239 390 221 393 231 373 Trgb -0.422991 0.083017 0.101202 231 373 240 373 239 390 Trgb -0.000000 0.000000 0.000000 211 364 201 371 213 360 Trgb -0.093452 0.018341 0.022359 214 377 201 384 211 364 Trgb -0.000000 0.000000 0.000000 201 371 211 364 201 384 Trgb -0.000000 0.000000 0.000000 201 384 199 388 201 371 Trgb -0.000000 0.000000 0.000000 229 361 211 364 213 360 Trgb -0.236764 0.046468 0.056646 231 373 214 377 211 364 Trgb -0.143312 0.028127 0.034288 211 364 229 361 231 373 Trgb -0.252533 0.049563 0.060419 240 373 231 373 229 361 Trgb -0.000000 0.699663 0.209899 381 310 379 311 383 307 Trgb -0.000000 0.699663 0.209899 379 311 381 307 383 307 Trgb -0.000000 0.699663 0.209899 381 307 385 304 383 307 Trgb -0.000000 0.699663 0.209899 385 304 387 303 383 307 Trgb -0.000000 0.699663 0.209899 387 303 385 307 383 307 Trgb -0.000000 0.699663 0.209899 385 307 381 310 383 307 Trgb -0.000000 0.009326 0.002798 303 230 381 307 379 311 Trgb -0.000000 0.004663 0.001399 303 230 379 311 301 233 Trgb -0.000000 0.018911 0.005673 307 226 385 304 381 307 Trgb -0.000000 0.016450 0.004935 307 226 381 307 303 230 Trgb -0.000000 0.012047 0.003614 310 226 387 303 385 304 Trgb -0.000000 0.016710 0.005013 310 226 385 304 307 226 Trgb -0.000000 0.000000 0.000000 381 310 381 307 383 307 Trgb -0.000000 0.000000 0.000000 381 307 384 304 383 307 Trgb -0.000000 0.000000 0.000000 384 304 386 304 383 307 Trgb -0.000000 0.000000 0.000000 386 304 385 307 383 307 Trgb -0.000000 0.000000 0.000000 385 307 383 310 383 307 Trgb -0.000000 0.000000 0.000000 383 310 381 310 383 307 Trgb -0.000000 0.025647 0.007694 383 310 439 357 437 357 Trgb -0.000000 0.012824 0.003847 383 310 437 357 381 310 Trgb -0.000000 0.054647 0.016394 385 307 442 354 439 357 Trgb -0.000000 0.046559 0.013968 385 307 439 357 383 310 Trgb -0.000000 0.037089 0.011127 386 304 442 352 442 354 Trgb -0.000000 0.049912 0.014974 386 304 442 354 385 307 Trgb -0.000000 0.687787 0.206336 438 356 437 353 440 355 Trgb -0.000000 0.687787 0.206336 437 353 439 352 440 355 Trgb -0.000000 0.687787 0.206336 439 352 442 353 440 355 Trgb -0.000000 0.687787 0.206336 442 353 442 356 440 355 Trgb -0.000000 0.687787 0.206336 442 356 440 357 440 355 Trgb -0.000000 0.687787 0.206336 440 357 438 356 440 355 Trgb -0.000000 0.101740 0.030522 442 356 464 346 462 348 Trgb -0.000000 0.074722 0.022417 442 356 462 348 440 357 Trgb -0.000000 0.096953 0.029086 442 353 463 344 464 346 Trgb -0.000000 0.112855 0.033857 442 353 464 346 442 356 Trgb -0.000000 0.027017 0.008105 439 352 461 343 463 344 Trgb -0.000000 0.054034 0.016210 439 352 463 344 442 353 Trgb -0.000000 0.691825 0.207548 460 345 460 344 461 345 Trgb -0.000000 0.691825 0.207548 460 344 462 345 461 345 Trgb -0.000000 0.691825 0.207548 462 345 463 345 461 345 Trgb -0.000000 0.691825 0.207548 463 345 463 346 461 345 Trgb -0.000000 0.691825 0.207548 463 346 461 346 461 345 Trgb -0.000000 0.691825 0.207548 461 346 460 345 461 345 Trgb -0.000000 0.075590 0.022677 462 345 472 314 474 314 Trgb -0.000000 0.090975 0.027293 462 345 474 314 463 345 Trgb -0.000000 0.020068 0.006020 460 344 471 313 472 314 Trgb -0.000000 0.040137 0.012041 460 344 472 314 462 345 Trgb -0.000000 0.000000 0.000000 460 345 470 314 471 313 Trgb -0.000000 0.000000 0.000000 460 345 471 313 460 344 Trgb -0.009659 0.007219 0.003376 468 307 460 308 472 301 Trgb -0.060429 0.045167 0.021119 484 307 472 301 476 303 Trgb -0.283462 0.211871 0.099067 485 316 478 310 484 307 Trgb -0.156813 0.117208 0.054804 472 301 484 307 478 310 Trgb -0.106043 0.079261 0.037061 478 310 468 307 472 301 Trgb -0.182166 0.136158 0.063665 478 324 472 327 468 326 Trgb -0.328054 0.245201 0.114651 485 316 483 320 478 324 Trgb -0.077145 0.057661 0.026961 460 321 467 317 468 326 Trgb -0.000000 0.000000 0.000000 459 313 460 308 460 321 Trgb -0.035955 0.026874 0.012566 467 317 460 321 460 308 Trgb -0.045614 0.034094 0.015942 460 308 468 307 467 317 Trgb -0.195825 0.146368 0.068439 467 317 478 324 468 326 Trgb -0.341713 0.255410 0.119425 478 310 485 316 478 324 Trgb -0.251020 0.187622 0.087728 478 324 467 317 478 310 Trgb -0.141998 0.106135 0.049627 468 307 478 310 467 317 Trgb -0.000000 0.000000 0.000000 463 344 462 346 461 345 Trgb -0.000000 0.000000 0.000000 462 346 461 347 461 345 Trgb -0.000000 0.000000 0.000000 461 347 460 346 461 345 Trgb -0.000000 0.000000 0.000000 460 346 460 345 461 345 Trgb -0.000000 0.000000 0.000000 460 345 462 344 461 345 Trgb -0.000000 0.000000 0.000000 462 344 463 344 461 345 Trgb -0.000000 0.014411 0.004323 461 347 485 367 485 366 Trgb -0.000000 0.007206 0.002162 461 347 485 366 460 346 Trgb -0.000000 0.054003 0.016201 462 346 487 366 485 367 Trgb -0.000000 0.037810 0.011343 462 346 485 367 461 347 Trgb -0.000000 0.055784 0.016735 463 344 487 364 487 366 Trgb -0.000000 0.062990 0.018897 463 344 487 366 462 346 Trgb -0.117681 0.406254 0.104787 491 366 493 361 495 366 Trgb -0.126551 0.436877 0.112686 495 366 491 373 491 366 Trgb -0.122641 0.423379 0.109204 487 372 491 366 491 373 Trgb -0.006385 0.022042 0.005685 481 358 487 358 480 360 Trgb -0.038254 0.132061 0.034063 491 358 493 361 487 358 Trgb -0.006385 0.022042 0.005685 487 358 481 358 491 358 Trgb -0.077571 0.267788 0.069072 481 373 487 372 491 373 Trgb -0.000000 0.000000 0.000000 477 365 481 358 480 360 Trgb -0.014824 0.051177 0.013200 487 358 482 366 480 360 Trgb -0.085380 0.294746 0.076025 493 361 491 366 487 358 Trgb -0.061950 0.213861 0.055162 482 366 487 358 491 366 Trgb -0.090341 0.311871 0.080442 491 366 487 372 482 366 Trgb -0.008440 0.029135 0.007515 482 366 477 365 480 360 Trgb -0.002055 0.007094 0.001830 481 373 479 370 477 365 Trgb -0.010495 0.036229 0.009345 477 365 482 366 481 373 Trgb -0.045270 0.156280 0.040310 487 372 481 373 482 366 Trgb -0.000000 0.000000 0.000000 461 344 461 344 461 345 Trgb -0.000000 0.000000 0.000000 461 344 462 346 461 345 Trgb -0.000000 0.000000 0.000000 462 346 462 347 461 345 Trgb -0.000000 0.000000 0.000000 462 347 461 346 461 345 Trgb -0.000000 0.000000 0.000000 461 346 460 344 461 345 Trgb -0.000000 0.000000 0.000000 460 344 461 344 461 345 Trgb -0.000000 0.074013 0.022204 462 346 495 335 494 336 Trgb -0.000000 0.062494 0.018748 462 346 494 336 462 347 Trgb -0.000000 0.051548 0.015464 461 344 494 333 495 335 Trgb -0.000000 0.068539 0.020562 461 344 495 335 462 346 Trgb -0.000000 0.011519 0.003456 461 344 493 332 494 333 Trgb -0.000000 0.023037 0.006911 461 344 494 333 461 344 Trgb -0.094155 0.178202 0.054471 504 331 498 324 503 331 Trgb -0.011283 0.021354 0.006527 494 326 490 324 498 324 Trgb -0.075245 0.142413 0.043532 498 324 504 331 494 326 Trgb -0.135510 0.256474 0.078397 498 333 494 326 504 331 Trgb -0.000000 0.000000 0.000000 484 337 485 329 484 337 Trgb -0.170934 0.323519 0.098891 497 344 499 341 503 339 Trgb -0.190588 0.360716 0.110261 504 331 503 339 499 341 Trgb -0.198172 0.375072 0.114649 499 341 498 333 504 331 Trgb -0.021265 0.040247 0.012302 485 329 490 336 484 337 Trgb -0.011283 0.021354 0.006527 490 324 494 326 485 329 Trgb -0.032547 0.061601 0.018830 490 336 485 329 494 326 Trgb -0.092812 0.175662 0.053695 494 326 498 333 490 336 Trgb -0.031247 0.059140 0.018077 490 336 490 344 484 337 Trgb -0.128236 0.242707 0.074189 499 341 497 344 490 344 Trgb -0.105192 0.199092 0.060857 490 344 490 336 499 341 Trgb -0.155475 0.294260 0.089947 498 333 499 341 490 336 Trgb -0.000000 0.698488 0.209546 453 408 454 408 451 408 Trgb -0.000000 0.698488 0.209546 454 408 452 409 451 408 Trgb -0.000000 0.698488 0.209546 452 409 449 409 451 408 Trgb -0.000000 0.698488 0.209546 449 409 448 409 451 408 Trgb -0.000000 0.698488 0.209546 448 409 450 408 451 408 Trgb -0.000000 0.698488 0.209546 450 408 453 408 451 408 Trgb -0.000000 0.035029 0.010509 442 354 454 408 453 408 Trgb -0.000000 0.040113 0.012034 442 354 453 408 441 354 Trgb -0.000000 0.010168 0.003050 439 354 450 408 448 409 Trgb -0.000000 0.005084 0.001525 439 354 448 409 437 355 Trgb -0.000000 0.035216 0.010565 441 354 453 408 450 408 Trgb -0.000000 0.025234 0.007570 441 354 450 408 439 354 Trgb -0.000000 0.696558 0.208967 443 433 443 434 441 433 Trgb -0.000000 0.696558 0.208967 443 434 441 435 441 433 Trgb -0.000000 0.696558 0.208967 441 435 439 434 441 433 Trgb -0.000000 0.696558 0.208967 439 434 439 432 441 433 Trgb -0.000000 0.696558 0.208967 439 432 441 432 441 433 Trgb -0.000000 0.696558 0.208967 441 432 443 433 441 433 Trgb -0.000000 0.059446 0.017834 453 409 443 434 443 433 Trgb -0.000000 0.060519 0.018156 453 409 443 433 453 408 Trgb -0.000000 0.002147 0.000644 451 407 441 432 439 432 Trgb -0.000000 0.001074 0.000322 451 407 439 432 449 407 Trgb -0.000000 0.042136 0.012641 453 408 443 433 441 432 Trgb -0.000000 0.022679 0.006804 453 408 441 432 451 407 Trgb -0.329826 0.121701 0.090305 449 438 444 450 437 444 Trgb -0.430194 0.158735 0.117786 456 429 458 440 449 438 Trgb -0.398450 0.147022 0.109094 444 450 449 438 458 440 Trgb -0.318627 0.117568 0.087239 458 440 450 446 444 450 Trgb -0.180059 0.066439 0.049300 444 450 428 444 437 444 Trgb -0.230910 0.085202 0.063223 432 432 449 438 437 444 Trgb -0.331278 0.122236 0.090703 445 421 456 429 449 438 Trgb -0.200618 0.074025 0.054929 449 438 432 432 445 421 Trgb -0.050851 0.018763 0.013923 432 420 445 421 432 432 Trgb -0.081143 0.029941 0.022217 428 444 432 432 437 444 Trgb -0.004639 0.001712 0.001270 432 432 428 444 425 427 Trgb -0.004639 0.001712 0.001270 425 427 432 420 432 432 Trgb -0.223084 0.082315 0.061080 456 429 445 421 455 423 Trgb -0.087786 0.032392 0.024036 438 416 455 423 445 421 Trgb -0.046212 0.017052 0.012653 445 421 432 420 438 416 Trgb -0.000000 0.699959 0.209988 485 427 484 429 484 427 Trgb -0.000000 0.699959 0.209988 484 429 483 429 484 427 Trgb -0.000000 0.699959 0.209988 483 429 484 427 484 427 Trgb -0.000000 0.699959 0.209988 484 427 485 425 484 427 Trgb -0.000000 0.699959 0.209988 485 425 485 426 484 427 Trgb -0.000000 0.699959 0.209988 485 426 485 427 484 427 Trgb -0.000000 0.005578 0.001673 450 408 484 427 483 429 Trgb -0.000000 0.003816 0.001145 450 408 483 429 450 410 Trgb -0.000000 0.005972 0.001792 451 407 485 425 484 427 Trgb -0.000000 0.006656 0.001997 451 407 484 427 450 408 Trgb -0.000000 0.001762 0.000529 452 407 485 426 485 425 Trgb -0.000000 0.003525 0.001057 452 407 485 425 451 407 Trgb -0.371114 0.204675 0.115158 489 443 491 432 498 435 Trgb -0.172821 0.095313 0.053627 475 436 479 426 491 432 Trgb -0.240382 0.132574 0.074591 491 432 489 443 475 436 Trgb -0.114646 0.063229 0.035575 477 441 475 436 489 443 Trgb -0.382205 0.210792 0.118599 491 432 499 422 498 435 Trgb -0.183911 0.101430 0.057068 479 426 486 416 491 432 Trgb -0.262562 0.144807 0.081474 499 422 491 432 486 416 Trgb -0.144668 0.079787 0.044891 486 416 492 413 499 422 Trgb -0.000000 0.000000 0.000000 471 421 470 432 471 419 Trgb -0.047085 0.025968 0.014611 479 426 475 436 471 421 Trgb -0.016255 0.008965 0.005044 470 432 471 421 475 436 Trgb -0.016255 0.008965 0.005044 475 436 477 441 470 432 Trgb -0.000000 0.000000 0.000000 480 412 471 421 471 419 Trgb -0.058175 0.032084 0.018052 486 416 479 426 471 421 Trgb -0.027345 0.015081 0.008485 471 421 480 412 486 416 Trgb -0.035187 0.019406 0.010919 492 413 486 416 480 412 Trgb -0.000000 0.668910 0.200673 449 408 449 407 451 408 Trgb -0.000000 0.668910 0.200673 449 407 451 407 451 408 Trgb -0.000000 0.668910 0.200673 451 407 452 408 451 408 Trgb -0.000000 0.668910 0.200673 452 408 453 409 451 408 Trgb -0.000000 0.668910 0.200673 453 409 451 409 451 408 Trgb -0.000000 0.668910 0.200673 451 409 449 408 451 408 Trgb -0.000000 0.099272 0.029782 451 409 439 442 437 441 Trgb -0.000000 0.049636 0.014891 451 409 437 441 449 408 Trgb -0.000000 0.181706 0.054512 453 409 441 441 439 442 Trgb -0.000000 0.165307 0.049592 453 409 439 442 451 409 Trgb -0.000000 0.000000 0.000000 449 408 437 441 437 440 Trgb -0.000000 0.000000 0.000000 449 408 437 440 449 407 Trgb -0.004375 0.127388 0.026353 433 445 440 448 437 446 Trgb -0.003962 0.115366 0.023866 433 441 438 444 433 445 Trgb -0.008337 0.242754 0.050218 440 448 433 445 438 444 Trgb -0.015764 0.459008 0.094954 438 444 443 445 440 448 Trgb -0.018343 0.534106 0.110490 443 445 446 443 440 448 Trgb -0.000000 0.000000 0.000000 432 438 433 441 433 445 Trgb -0.007368 0.214543 0.044382 443 439 436 437 441 435 Trgb -0.003962 0.115366 0.023866 438 444 433 441 436 437 Trgb -0.010090 0.293808 0.060780 436 437 443 439 438 444 Trgb -0.017517 0.510062 0.105516 443 445 438 444 443 439 Trgb -0.009534 0.277619 0.057431 445 436 443 439 441 435 Trgb -0.014836 0.431982 0.089364 443 439 445 436 446 443 Trgb -0.020096 0.585160 0.121051 446 443 443 445 443 439 Trgb -0.001240 0.036101 0.007468 436 437 438 433 441 435 Trgb -0.000000 0.000000 0.000000 433 441 432 438 436 437 Trgb -0.000000 0.000000 0.000000 438 433 436 437 432 438 Trgb -0.000000 0.699421 0.209826 496 351 496 354 496 353 Trgb -0.000000 0.699421 0.209826 496 354 496 355 496 353 Trgb -0.000000 0.699421 0.209826 496 355 496 354 496 353 Trgb -0.000000 0.699421 0.209826 496 354 496 351 496 353 Trgb -0.000000 0.699421 0.209826 496 351 496 350 496 353 Trgb -0.000000 0.699421 0.209826 496 350 496 351 496 353 Trgb -0.000000 0.023624 0.007087 439 356 496 354 496 355 Trgb -0.000000 0.018777 0.005633 439 356 496 355 440 357 Trgb -0.000000 0.019183 0.005755 439 354 496 351 496 354 Trgb -0.000000 0.023827 0.007148 439 354 496 354 439 356 Trgb -0.000000 0.004847 0.001454 439 352 496 350 496 351 Trgb -0.000000 0.009693 0.002908 439 352 496 351 439 354 Trgb -0.000000 0.172605 0.051782 496 353 494 352 496 353 Trgb -0.000000 0.172605 0.051782 494 352 494 351 496 353 Trgb -0.000000 0.172605 0.051782 494 351 496 352 496 353 Trgb -0.000000 0.172605 0.051782 496 352 497 353 496 353 Trgb -0.000000 0.172605 0.051782 497 353 497 354 496 353 Trgb -0.000000 0.172605 0.051782 497 354 496 353 496 353 Trgb -0.000000 0.589120 0.176736 497 353 517 321 517 322 Trgb -0.000000 0.508333 0.152500 497 353 517 322 497 354 Trgb -0.000000 0.384877 0.115463 496 352 516 320 517 321 Trgb -0.000000 0.527393 0.158218 496 352 517 321 497 353 Trgb -0.000000 0.080787 0.024236 494 351 515 320 516 320 Trgb -0.000000 0.161575 0.048472 494 351 516 320 496 352 Trgb -0.147652 0.061182 0.041767 532 317 522 307 524 308 Trgb -0.249743 0.103485 0.070645 526 322 516 315 522 307 Trgb -0.298271 0.123593 0.084373 522 307 532 317 526 322 Trgb -0.412156 0.170783 0.116588 531 329 526 322 532 317 Trgb -0.040189 0.016653 0.011368 522 307 512 306 524 308 Trgb -0.099123 0.041073 0.028039 516 315 506 311 522 307 Trgb -0.040189 0.016653 0.011368 512 306 522 307 506 311 Trgb -0.000000 0.000000 0.000000 506 311 502 313 512 306 Trgb -0.155686 0.064511 0.044039 510 326 520 336 507 334 Trgb -0.252711 0.104714 0.071485 516 315 526 322 510 326 Trgb -0.304207 0.126053 0.086052 520 336 510 326 526 322 Trgb -0.415124 0.172013 0.117427 526 322 531 329 520 336 Trgb -0.045255 0.018752 0.012802 500 325 510 326 507 334 Trgb -0.102091 0.042303 0.028879 506 311 516 315 510 326 Trgb -0.043157 0.017883 0.012208 510 326 500 325 506 311 Trgb -0.000000 0.000000 0.000000 502 313 506 311 500 325 Trgb -0.000000 0.000000 0.000000 496 354 495 352 496 353 Trgb -0.000000 0.000000 0.000000 495 352 494 351 496 353 Trgb -0.000000 0.000000 0.000000 494 351 496 351 496 353 Trgb -0.000000 0.000000 0.000000 496 351 497 353 496 353 Trgb -0.000000 0.000000 0.000000 497 353 497 354 496 353 Trgb -0.000000 0.000000 0.000000 497 354 496 354 496 353 Trgb -0.000000 0.192098 0.057629 497 353 525 330 525 331 Trgb -0.000000 0.177366 0.053210 497 353 525 331 497 354 Trgb -0.000000 0.098407 0.029522 496 351 523 328 525 330 Trgb -0.000000 0.152618 0.045785 496 351 525 330 497 353 Trgb -0.000000 0.014732 0.004420 494 351 522 328 523 328 Trgb -0.000000 0.029463 0.008839 494 351 523 328 496 351 Trgb -0.180153 0.097673 0.055565 540 329 531 317 535 320 Trgb -0.192968 0.104621 0.059518 532 329 523 320 531 317 Trgb -0.282334 0.153073 0.087081 531 317 540 329 532 329 Trgb -0.391187 0.212089 0.120655 535 338 532 329 540 329 Trgb -0.087413 0.047393 0.026961 524 342 516 342 512 339 Trgb -0.315976 0.171312 0.097458 535 338 532 342 524 342 Trgb -0.067950 0.036840 0.020958 523 320 515 317 531 317 Trgb -0.092721 0.050270 0.028598 515 330 524 342 512 339 Trgb -0.160670 0.087110 0.049556 523 320 532 329 515 330 Trgb -0.217739 0.118051 0.067158 524 342 515 330 532 329 Trgb -0.358889 0.194578 0.110694 532 329 535 338 524 342 Trgb -0.005308 0.002878 0.001637 508 330 515 330 512 339 Trgb -0.035652 0.019330 0.010996 515 317 523 320 515 330 Trgb -0.005308 0.002878 0.001637 515 330 508 330 515 317 Trgb -0.000000 0.000000 0.000000 512 321 515 317 508 330 Trgb -0.000000 0.000000 0.000000 496 353 495 354 496 353 Trgb -0.000000 0.000000 0.000000 495 354 495 354 496 353 Trgb -0.000000 0.000000 0.000000 495 354 496 352 496 353 Trgb -0.000000 0.000000 0.000000 496 352 497 351 496 353 Trgb -0.000000 0.000000 0.000000 497 351 497 352 496 353 Trgb -0.000000 0.000000 0.000000 497 352 496 353 496 353 Trgb -0.000000 0.028228 0.008468 497 352 526 379 524 380 Trgb -0.000000 0.027588 0.008276 497 352 524 380 496 353 Trgb -0.000000 0.010903 0.003271 497 351 526 378 526 379 Trgb -0.000000 0.019885 0.005966 497 351 526 379 497 352 Trgb -0.000000 0.017965 0.005390 496 353 524 380 523 381 Trgb -0.000000 0.008983 0.002695 496 353 523 381 495 354 Trgb -0.553377 0.015557 0.113787 535 393 545 380 539 394 Trgb -0.488126 0.013722 0.100370 525 384 535 373 535 393 Trgb -0.537456 0.015109 0.110513 545 380 535 393 535 373 Trgb -0.413448 0.011623 0.085014 535 373 539 366 545 380 Trgb -0.433488 0.012186 0.089135 525 399 535 393 539 394 Trgb -0.368237 0.010352 0.075718 514 393 525 384 535 393 Trgb -0.297677 0.008368 0.061209 535 393 525 399 514 393 Trgb -0.088894 0.002499 0.018279 510 393 514 393 525 399 Trgb -0.000000 0.000000 0.000000 524 360 514 373 510 366 Trgb -0.279343 0.007853 0.057439 535 373 525 384 514 373 Trgb -0.150823 0.004240 0.031012 514 373 524 360 535 373 Trgb -0.235597 0.006623 0.048444 539 366 535 373 524 360 Trgb -0.000000 0.000000 0.000000 514 373 504 380 510 366 Trgb -0.159453 0.004483 0.032787 525 384 514 393 514 373 Trgb -0.030933 0.000870 0.006360 504 380 514 373 514 393 Trgb -0.030933 0.000870 0.006360 514 393 510 393 504 380 Trgb -0.000000 0.698638 0.209592 397 383 401 383 397 384 Trgb -0.000000 0.698638 0.209592 401 383 400 384 397 384 Trgb -0.000000 0.698638 0.209592 400 384 396 385 397 384 Trgb -0.000000 0.698638 0.209592 396 385 393 385 397 384 Trgb -0.000000 0.698638 0.209592 393 385 393 384 397 384 Trgb -0.000000 0.698638 0.209592 393 384 397 383 397 384 Trgb -0.000000 0.038092 0.011428 387 306 401 383 397 383 Trgb -0.000000 0.033330 0.009999 387 306 397 383 384 306 Trgb -0.000000 0.000000 0.000000 380 307 393 384 393 385 Trgb -0.000000 0.000000 0.000000 380 307 393 385 380 308 Trgb -0.000000 0.019045 0.005714 384 306 397 383 393 384 Trgb -0.000000 0.009523 0.002857 384 306 393 384 380 307 Trgb -0.000000 0.617376 0.185213 369 434 371 436 369 435 Trgb -0.000000 0.617376 0.185213 371 436 371 437 369 435 Trgb -0.000000 0.617376 0.185213 371 437 369 436 369 435 Trgb -0.000000 0.617376 0.185213 369 436 367 434 369 435 Trgb -0.000000 0.617376 0.185213 367 434 367 434 369 435 Trgb -0.000000 0.617376 0.185213 367 434 369 434 369 435 Trgb -0.000000 0.264623 0.079387 399 385 371 436 369 434 Trgb -0.000000 0.200825 0.060247 399 385 369 434 397 383 Trgb -0.000000 0.237071 0.071121 399 386 371 437 371 436 Trgb -0.000000 0.282747 0.084824 399 386 371 436 399 385 Trgb -0.000000 0.091351 0.027405 397 383 369 434 367 434 Trgb -0.000000 0.045675 0.013703 397 383 367 434 394 383 Trgb -0.000000 0.698748 0.209624 369 435 369 433 369 435 Trgb -0.000000 0.698748 0.209624 369 433 369 434 369 435 Trgb -0.000000 0.698748 0.209624 369 434 369 435 369 435 Trgb -0.000000 0.698748 0.209624 369 435 370 437 369 435 Trgb -0.000000 0.698748 0.209624 370 437 369 437 369 435 Trgb -0.000000 0.698748 0.209624 369 437 369 435 369 435 Trgb -0.000000 0.035263 0.010579 369 437 329 445 329 443 Trgb -0.000000 0.028701 0.008610 369 437 329 443 369 435 Trgb -0.000000 0.027065 0.008120 370 437 329 445 329 445 Trgb -0.000000 0.034445 0.010334 370 437 329 445 369 437 Trgb -0.000000 0.014759 0.004428 369 435 329 443 328 442 Trgb -0.000000 0.007380 0.002214 369 435 328 442 369 433 Trgb -0.000793 0.000950 0.000349 318 443 321 455 315 446 Trgb -0.122526 0.146716 0.053848 327 441 329 451 318 443 Trgb -0.080197 0.096030 0.035245 321 455 318 443 329 451 Trgb -0.149369 0.178859 0.065646 329 451 331 457 321 455 Trgb -0.000000 0.000000 0.000000 318 436 318 443 315 446 Trgb -0.043122 0.051635 0.018951 326 432 327 441 318 443 Trgb -0.000000 0.000000 0.000000 318 443 318 436 326 432 Trgb -0.000000 0.000000 0.000000 326 430 326 432 318 436 Trgb -0.243693 0.291804 0.107100 340 451 337 439 342 441 Trgb -0.201137 0.240847 0.088397 329 451 327 441 337 439 Trgb -0.255047 0.305399 0.112089 337 439 340 451 329 451 Trgb -0.245608 0.294097 0.107941 331 457 329 451 340 451 Trgb -0.146662 0.175617 0.064456 337 439 337 432 342 441 Trgb -0.121733 0.145766 0.053500 327 441 326 432 337 439 Trgb -0.078611 0.094131 0.034548 337 432 337 439 326 432 Trgb -0.000000 0.000000 0.000000 326 432 326 430 337 432 Trgb -0.000000 0.696899 0.209070 360 448 358 449 358 447 Trgb -0.000000 0.696899 0.209070 358 449 356 448 358 447 Trgb -0.000000 0.696899 0.209070 356 448 356 446 358 447 Trgb -0.000000 0.696899 0.209070 356 446 358 445 358 447 Trgb -0.000000 0.696899 0.209070 358 445 360 446 358 447 Trgb -0.000000 0.696899 0.209070 360 446 360 448 358 447 Trgb -0.000000 0.000000 0.000000 369 433 358 445 356 446 Trgb -0.000000 0.000000 0.000000 369 433 356 446 367 434 Trgb -0.000000 0.028512 0.008554 371 434 360 446 358 445 Trgb -0.000000 0.014256 0.004277 371 434 358 445 369 433 Trgb -0.000000 0.057393 0.017218 371 436 360 448 360 446 Trgb -0.000000 0.050081 0.015024 371 436 360 446 371 434 Trgb -0.031196 0.349100 0.076059 362 452 354 455 356 450 Trgb -0.044298 0.495717 0.108003 366 452 361 456 362 452 Trgb -0.031814 0.356014 0.077566 354 455 362 452 361 456 Trgb -0.013721 0.153545 0.033453 361 456 355 455 354 455 Trgb -0.013103 0.146631 0.031947 354 455 351 446 356 450 Trgb -0.000000 0.000000 0.000000 350 450 350 443 351 446 Trgb -0.004147 0.046407 0.010111 351 446 354 455 350 450 Trgb -0.035568 0.398023 0.086718 359 444 362 452 356 450 Trgb -0.048670 0.544640 0.118662 366 445 366 452 362 452 Trgb -0.040558 0.453861 0.098884 362 452 359 444 366 445 Trgb -0.025556 0.285986 0.062308 362 440 366 445 359 444 Trgb -0.017475 0.195555 0.042606 351 446 359 444 356 450 Trgb -0.000000 0.000000 0.000000 350 443 355 439 351 446 Trgb -0.008519 0.095331 0.020770 359 444 351 446 355 439 Trgb -0.011610 0.129925 0.028307 355 439 362 440 359 444 Trgb -0.017037 0.190656 0.041539 366 445 362 440 362 440 Trgb -0.000000 0.000000 0.000000 367 434 369 434 369 435 Trgb -0.000000 0.000000 0.000000 369 434 371 435 369 435 Trgb -0.000000 0.000000 0.000000 371 435 371 436 369 435 Trgb -0.000000 0.000000 0.000000 371 436 369 436 369 435 Trgb -0.000000 0.000000 0.000000 369 436 367 436 369 435 Trgb -0.000000 0.000000 0.000000 367 436 367 434 369 435 Trgb -0.000000 0.242861 0.072858 369 436 372 469 370 468 Trgb -0.000000 0.121430 0.036429 369 436 370 468 367 436 Trgb -0.000000 0.537282 0.161185 371 436 374 468 372 469 Trgb -0.000000 0.450787 0.135236 371 436 372 469 369 436 Trgb -0.000000 0.380917 0.114275 371 435 374 467 374 468 Trgb -0.000000 0.502347 0.150704 371 435 374 468 371 436 Trgb -0.023187 0.019364 0.008510 357 469 363 475 366 481 Trgb -0.316349 0.264191 0.116108 374 477 384 473 381 480 Trgb -0.200748 0.167650 0.073679 381 480 366 481 374 477 Trgb -0.121324 0.101321 0.044529 363 475 374 477 366 481 Trgb -0.006442 0.005380 0.002364 365 465 363 456 371 456 Trgb -0.006442 0.005380 0.002364 363 456 365 465 357 469 Trgb -0.018714 0.015629 0.006869 363 475 357 469 365 465 Trgb -0.298993 0.249697 0.109738 384 473 387 466 381 480 Trgb -0.093666 0.078222 0.034378 379 463 365 465 371 456 Trgb -0.311877 0.260456 0.114467 384 473 374 477 379 463 Trgb -0.191803 0.160180 0.070397 365 465 379 463 374 477 Trgb -0.116852 0.097586 0.042888 374 477 363 475 365 465 Trgb -0.000000 0.000000 0.000000 363 456 378 454 371 456 Trgb -0.087224 0.072843 0.032013 378 454 379 463 371 456 Trgb -0.294521 0.245962 0.108097 387 466 384 473 379 463 Trgb -0.168006 0.140306 0.061662 379 463 378 454 387 466 Trgb -0.000000 0.699893 0.209968 443 419 441 421 443 419 Trgb -0.000000 0.699893 0.209968 441 421 441 420 443 419 Trgb -0.000000 0.699893 0.209968 441 420 442 418 443 419 Trgb -0.000000 0.699893 0.209968 442 418 444 416 443 419 Trgb -0.000000 0.699893 0.209968 444 416 444 417 443 419 Trgb -0.000000 0.699893 0.209968 444 417 443 419 443 419 Trgb -0.000000 0.001169 0.000351 395 386 441 420 441 421 Trgb -0.000000 0.000585 0.000175 395 386 441 421 396 386 Trgb -0.000000 0.008146 0.002444 396 383 442 418 441 420 Trgb -0.000000 0.004950 0.001485 396 383 441 420 395 386 Trgb -0.000000 0.010173 0.003052 398 382 444 416 442 418 Trgb -0.000000 0.010758 0.003227 398 382 442 418 396 383 Trgb -0.000000 0.699690 0.209907 475 413 475 415 474 414 Trgb -0.000000 0.699690 0.209907 475 415 474 416 474 414 Trgb -0.000000 0.699690 0.209907 474 416 473 415 474 414 Trgb -0.000000 0.699690 0.209907 473 415 473 412 474 414 Trgb -0.000000 0.699690 0.209907 473 412 474 412 474 414 Trgb -0.000000 0.699690 0.209907 474 412 475 413 474 414 Trgb -0.000000 0.009727 0.002918 441 419 473 415 474 416 Trgb -0.000000 0.014819 0.004446 441 419 474 416 443 421 Trgb -0.000000 0.001545 0.000463 441 417 473 412 473 415 Trgb -0.000000 0.003090 0.000927 441 417 473 415 441 419 Trgb -0.000000 0.000000 0.000000 442 416 474 412 473 412 Trgb -0.000000 0.000000 0.000000 442 416 473 412 441 417 Trgb -0.444852 0.102658 0.109502 492 406 490 425 489 411 Trgb -0.475371 0.109701 0.117014 490 425 477 419 489 411 Trgb -0.234152 0.054035 0.057637 472 433 463 423 477 419 Trgb -0.394626 0.091068 0.097139 477 419 490 425 472 433 Trgb -0.358772 0.082794 0.088313 482 431 472 433 490 425 Trgb -0.311095 0.071791 0.076577 479 399 492 406 489 411 Trgb -0.148213 0.034203 0.036483 492 406 479 399 476 395 Trgb -0.048297 0.011145 0.011888 466 396 476 395 479 399 Trgb -0.341613 0.078834 0.084089 477 419 479 399 489 411 Trgb -0.152014 0.035080 0.037419 463 423 461 407 477 419 Trgb -0.178731 0.041246 0.043995 479 399 477 419 461 407 Trgb -0.048297 0.011145 0.011888 461 407 466 396 479 399 Trgb -0.103718 0.023935 0.025530 463 423 472 433 456 422 Trgb -0.021580 0.004980 0.005312 461 407 463 423 456 422 Trgb -0.000000 0.000000 0.000000 456 422 458 403 461 407 Trgb -0.000000 0.000000 0.000000 466 396 461 407 458 403 Trgb -0.000000 0.000000 0.000000 442 419 441 419 443 419 Trgb -0.000000 0.000000 0.000000 441 419 441 419 443 419 Trgb -0.000000 0.000000 0.000000 441 419 443 418 443 419 Trgb -0.000000 0.000000 0.000000 443 418 445 418 443 419 Trgb -0.000000 0.000000 0.000000 445 418 444 418 443 419 Trgb -0.000000 0.000000 0.000000 444 418 442 419 443 419 Trgb -0.000000 0.045400 0.013620 444 418 452 460 450 460 Trgb -0.000000 0.030855 0.009257 444 418 450 460 442 419 Trgb -0.000000 0.049070 0.014721 445 418 453 460 452 460 Trgb -0.000000 0.054507 0.016352 445 418 452 460 444 418 Trgb -0.000000 0.010874 0.003262 442 419 450 460 449 460 Trgb -0.000000 0.005437 0.001631 442 419 449 460 441 419 Trgb -0.353693 0.099034 0.090545 448 476 466 472 455 479 Trgb -0.272514 0.076304 0.069763 443 463 458 461 448 476 Trgb -0.402283 0.112639 0.102985 466 472 448 476 458 461 Trgb -0.462817 0.129589 0.118481 458 461 468 458 466 472 Trgb -0.182115 0.050992 0.046621 442 475 448 476 455 479 Trgb -0.134561 0.037677 0.034448 434 464 443 463 448 476 Trgb -0.092752 0.025971 0.023745 448 476 442 475 434 464 Trgb -0.045201 0.012656 0.011571 461 445 443 449 447 441 Trgb -0.179761 0.050333 0.046019 458 461 443 463 443 449 Trgb -0.183153 0.051283 0.046887 443 449 461 445 458 461 Trgb -0.336439 0.094203 0.086129 468 458 458 461 461 445 Trgb -0.277313 0.077648 0.070992 469 456 468 458 461 445 Trgb -0.000000 0.000000 0.000000 443 449 437 448 447 441 Trgb -0.041809 0.011706 0.010703 443 463 434 464 443 449 Trgb -0.000000 0.000000 0.000000 437 448 443 449 434 464 Trgb -0.000000 0.698795 0.209638 443 439 445 440 442 440 Trgb -0.000000 0.698795 0.209638 445 440 444 442 442 440 Trgb -0.000000 0.698795 0.209638 444 442 441 442 442 440 Trgb -0.000000 0.698795 0.209638 441 442 440 440 442 440 Trgb -0.000000 0.698795 0.209638 440 440 441 439 442 440 Trgb -0.000000 0.698795 0.209638 441 439 443 439 442 440 Trgb -0.000000 0.031657 0.009497 445 418 445 440 443 439 Trgb -0.000000 0.022869 0.006861 445 418 443 439 444 417 Trgb -0.000000 0.000000 0.000000 441 417 441 439 440 440 Trgb -0.000000 0.000000 0.000000 441 417 440 440 440 419 Trgb -0.000000 0.009388 0.002816 444 417 443 439 441 439 Trgb -0.000000 0.004694 0.001408 444 417 441 439 441 417 Trgb -0.464524 0.061662 0.105237 449 436 456 454 442 452 Trgb -0.328483 0.043604 0.074417 452 424 463 435 449 436 Trgb -0.473280 0.062825 0.107221 456 454 449 436 463 435 Trgb -0.488213 0.064807 0.110604 463 435 462 449 456 454 Trgb -0.388439 0.051563 0.088000 456 454 436 460 442 452 Trgb -0.321110 0.042625 0.072747 436 460 456 454 449 458 Trgb -0.265926 0.035300 0.060245 428 442 449 436 442 452 Trgb -0.186236 0.024722 0.042191 435 423 452 424 449 436 Trgb -0.132435 0.017580 0.030003 449 436 428 442 435 423 Trgb -0.000000 0.000000 0.000000 423 432 435 423 428 442 Trgb -0.196048 0.026024 0.044414 463 435 452 424 449 421 Trgb -0.189841 0.025200 0.043008 436 460 428 442 442 452 Trgb -0.056350 0.007480 0.012766 428 442 436 460 422 446 Trgb -0.000000 0.000000 0.000000 422 446 423 432 428 442 Trgb -0.053800 0.007142 0.012188 452 424 435 423 449 421 Trgb -0.000000 0.000000 0.000000 435 423 423 432 429 427 Trgb -0.000000 0.000000 0.000000 394 385 396 383 397 384 Trgb -0.000000 0.000000 0.000000 396 383 398 382 397 384 Trgb -0.000000 0.000000 0.000000 398 382 399 383 397 384 Trgb -0.000000 0.000000 0.000000 399 383 398 385 397 384 Trgb -0.000000 0.000000 0.000000 398 385 395 386 397 384 Trgb -0.000000 0.000000 0.000000 395 386 394 385 397 384 Trgb -0.000000 0.009095 0.002729 395 386 418 431 417 430 Trgb -0.000000 0.004548 0.001364 395 386 417 430 394 385 Trgb -0.000000 0.072128 0.021639 398 385 420 430 418 431 Trgb -0.000000 0.042886 0.012866 398 385 418 431 395 386 Trgb -0.000000 0.092276 0.027683 399 383 422 429 420 430 Trgb -0.000000 0.096823 0.029047 399 383 420 430 398 385 Trgb -0.000000 0.697133 0.209140 418 430 418 428 419 429 Trgb -0.000000 0.697133 0.209140 418 428 419 427 419 429 Trgb -0.000000 0.697133 0.209140 419 427 421 428 419 429 Trgb -0.000000 0.697133 0.209140 421 428 421 430 419 429 Trgb -0.000000 0.697133 0.209140 421 430 419 431 419 429 Trgb -0.000000 0.697133 0.209140 419 431 418 430 419 429 Trgb -0.000000 0.020589 0.006177 419 431 420 435 418 434 Trgb -0.000000 0.010295 0.003088 419 431 418 434 418 430 Trgb -0.000000 0.052480 0.015744 421 430 422 435 420 435 Trgb -0.000000 0.041682 0.012505 421 430 420 435 419 431 Trgb -0.000000 0.042689 0.012807 421 428 422 433 422 435 Trgb -0.000000 0.052984 0.015895 421 428 422 435 421 430 Trgb -0.291762 0.030182 0.064389 426 444 408 438 420 431 Trgb -0.050562 0.005231 0.011159 415 452 403 442 408 438 Trgb -0.235211 0.024332 0.051909 408 438 426 444 415 452 Trgb -0.389230 0.040265 0.085899 429 450 415 452 426 444 Trgb -0.425848 0.044053 0.093980 432 426 426 444 420 431 Trgb -0.413548 0.042781 0.091266 437 425 438 439 432 426 Trgb -0.503383 0.052074 0.111092 426 444 432 426 438 439 Trgb -0.523316 0.054136 0.115491 438 439 429 450 426 444 Trgb -0.107113 0.011081 0.023639 408 438 413 420 420 431 Trgb -0.005095 0.000527 0.001124 403 442 402 428 408 438 Trgb -0.005095 0.000527 0.001124 413 420 408 438 402 428 Trgb -0.000000 0.000000 0.000000 402 428 411 417 413 420 Trgb -0.241200 0.024952 0.053230 413 420 432 426 420 431 Trgb -0.233994 0.024206 0.051640 426 416 437 425 432 426 Trgb -0.139181 0.014398 0.030716 432 426 413 420 426 416 Trgb -0.000000 0.000000 0.000000 411 417 426 416 413 420 Trgb -0.000000 0.697171 0.209151 417 467 417 468 415 467 Trgb -0.000000 0.697171 0.209151 417 468 415 468 415 467 Trgb -0.000000 0.697171 0.209151 415 468 414 467 415 467 Trgb -0.000000 0.697171 0.209151 414 467 414 467 415 467 Trgb -0.000000 0.697171 0.209151 414 467 415 467 415 467 Trgb -0.000000 0.697171 0.209151 415 467 417 467 415 467 Trgb -0.000000 0.044776 0.013433 421 430 417 468 417 467 Trgb -0.000000 0.053715 0.016115 421 430 417 467 421 429 Trgb -0.000000 0.017878 0.005364 419 428 415 467 414 467 Trgb -0.000000 0.008939 0.002682 419 428 414 467 418 429 Trgb -0.000000 0.050709 0.015213 421 429 417 467 415 467 Trgb -0.000000 0.038763 0.011629 421 429 415 467 419 428 Trgb -0.398748 0.030157 0.085781 427 480 421 486 413 487 Trgb -0.541936 0.040987 0.116584 433 466 435 471 427 480 Trgb -0.376526 0.028477 0.081001 407 476 427 480 413 487 Trgb -0.519713 0.039306 0.111804 421 461 433 466 427 480 Trgb -0.393916 0.029792 0.084742 427 480 407 476 421 461 Trgb -0.185847 0.014056 0.039980 405 460 421 461 407 476 Trgb -0.393176 0.029736 0.084582 435 471 433 466 429 453 Trgb -0.168457 0.012740 0.036239 401 482 407 476 413 487 Trgb -0.063268 0.004785 0.013611 407 476 401 482 396 463 Trgb -0.063268 0.004785 0.013611 396 463 405 460 407 476 Trgb -0.059310 0.004486 0.012759 429 453 410 449 417 448 Trgb -0.370954 0.028055 0.079802 433 466 421 461 429 453 Trgb -0.181888 0.013756 0.039129 410 449 429 453 421 461 Trgb -0.122578 0.009271 0.026370 421 461 405 460 410 449 Trgb -0.000000 0.000000 0.000000 405 460 396 463 410 449 Trgb -0.000000 0.013103 0.003931 419 430 457 446 456 446 Trgb -0.000000 0.006551 0.001965 419 430 456 446 419 431 Trgb -0.000000 0.020230 0.006069 420 429 457 444 457 446 Trgb -0.000000 0.019942 0.005983 420 429 457 446 419 430 Trgb -0.000000 0.007416 0.002225 420 427 458 443 457 444 Trgb -0.000000 0.013967 0.004190 420 427 457 444 420 429 Trgb -0.105394 0.247297 0.070538 453 455 455 452 463 453 Trgb -0.099335 0.233080 0.066483 463 453 462 453 453 455 Trgb -0.076087 0.178532 0.050924 460 437 461 434 467 442 Trgb -0.177850 0.417308 0.119032 463 453 467 442 468 449 Trgb -0.134392 0.315339 0.089946 455 452 458 444 463 453 Trgb -0.157331 0.369162 0.105299 467 442 463 453 458 444 Trgb -0.113669 0.266714 0.076077 458 444 460 437 467 442 Trgb -0.000000 0.000000 0.000000 448 446 447 447 447 440 Trgb -0.041228 0.096737 0.027593 455 452 453 455 448 446 Trgb -0.008584 0.020141 0.005745 447 447 448 446 453 455 Trgb -0.000000 0.000000 0.000000 451 436 452 436 447 440 Trgb -0.020505 0.048112 0.013723 461 434 460 437 452 436 Trgb -0.000000 0.000000 0.000000 452 436 448 446 447 440 Trgb -0.070226 0.164778 0.047001 458 444 455 452 448 446 Trgb -0.037582 0.088182 0.025153 448 446 452 436 458 444 Trgb -0.058087 0.136295 0.038876 460 437 458 444 452 436 Trgb -0.000000 0.699414 0.209824 398 361 400 364 396 364 Trgb -0.000000 0.699414 0.209824 400 364 398 366 396 364 Trgb -0.000000 0.699414 0.209824 398 366 394 367 396 364 Trgb -0.000000 0.699414 0.209824 394 367 392 364 396 364 Trgb -0.000000 0.699414 0.209824 392 364 394 361 396 364 Trgb -0.000000 0.699414 0.209824 394 361 398 361 396 364 Trgb -0.000000 0.025252 0.007576 387 307 400 364 398 361 Trgb -0.000000 0.023246 0.006974 387 307 398 361 385 304 Trgb -0.000000 0.000000 0.000000 381 305 394 361 392 364 Trgb -0.000000 0.000000 0.000000 381 305 392 364 379 307 Trgb -0.000000 0.014159 0.004248 385 304 398 361 394 361 Trgb -0.000000 0.007080 0.002124 385 304 394 361 381 305 Trgb -0.000000 0.670057 0.201017 363 403 365 405 363 405 Trgb -0.000000 0.670057 0.201017 365 405 366 407 363 405 Trgb -0.000000 0.670057 0.201017 366 407 364 407 363 405 Trgb -0.000000 0.670057 0.201017 364 407 361 406 363 405 Trgb -0.000000 0.670057 0.201017 361 406 361 404 363 405 Trgb -0.000000 0.670057 0.201017 361 404 363 403 363 405 Trgb -0.000000 0.126608 0.037982 398 364 365 405 363 403 Trgb -0.000000 0.070797 0.021239 398 364 363 403 396 362 Trgb -0.000000 0.172428 0.051728 399 366 366 407 365 405 Trgb -0.000000 0.177423 0.053227 399 366 365 405 398 364 Trgb -0.000000 0.009991 0.002997 396 362 363 403 361 404 Trgb -0.000000 0.004996 0.001499 396 362 361 404 394 362 Trgb -0.000000 0.000000 0.000000 321 398 321 400 321 399 Trgb -0.000000 0.000000 0.000000 321 400 320 401 321 399 Trgb -0.000000 0.000000 0.000000 320 401 320 400 321 399 Trgb -0.000000 0.000000 0.000000 320 400 320 397 321 399 Trgb -0.000000 0.000000 0.000000 320 397 321 396 321 399 Trgb -0.000000 0.000000 0.000000 321 396 321 398 321 399 Trgb -0.000000 0.039172 0.011752 363 407 321 400 321 398 Trgb -0.000000 0.034938 0.010481 363 407 321 398 364 405 Trgb -0.000000 0.022937 0.006881 363 408 320 401 321 400 Trgb -0.000000 0.033171 0.009951 363 408 321 400 363 407 Trgb -0.000000 0.020469 0.006141 364 405 321 398 321 396 Trgb -0.000000 0.010235 0.003070 364 405 321 396 363 403 Trgb -0.000000 0.000000 0.000000 316 395 314 403 312 397 Trgb -0.027860 0.282235 0.062019 323 395 322 402 316 395 Trgb -0.016503 0.167185 0.036738 314 403 316 395 322 402 Trgb -0.028485 0.288569 0.063411 322 402 320 407 314 403 Trgb -0.012424 0.125863 0.027657 320 407 319 407 314 403 Trgb -0.000000 0.000000 0.000000 315 392 316 395 312 397 Trgb -0.011357 0.115051 0.025282 322 390 323 395 316 395 Trgb -0.000000 0.000000 0.000000 316 395 315 392 322 390 Trgb -0.047694 0.483162 0.106171 326 405 328 397 329 400 Trgb -0.045026 0.456136 0.100232 322 402 323 395 328 397 Trgb -0.051278 0.519465 0.114148 328 397 326 405 322 402 Trgb -0.046094 0.466948 0.102608 320 407 322 402 326 405 Trgb -0.030749 0.311499 0.068450 328 397 327 394 329 400 Trgb -0.028523 0.288951 0.063495 323 395 322 390 328 397 Trgb -0.017829 0.180617 0.039689 327 394 328 397 322 390 Trgb -0.000000 0.699487 0.209846 371 439 368 439 370 437 Trgb -0.000000 0.699487 0.209846 368 439 368 437 370 437 Trgb -0.000000 0.699487 0.209846 368 437 370 436 370 437 Trgb -0.000000 0.699487 0.209846 370 436 372 436 370 437 Trgb -0.000000 0.699487 0.209846 372 436 372 438 370 437 Trgb -0.000000 0.699487 0.209846 372 438 371 439 370 437 Trgb -0.000000 0.000605 0.000182 363 404 370 436 368 437 Trgb -0.000000 0.000303 0.000091 363 404 368 437 361 405 Trgb -0.000000 0.016071 0.004821 365 404 372 436 370 436 Trgb -0.000000 0.008489 0.002547 365 404 370 436 363 404 Trgb -0.000000 0.023048 0.006914 365 406 372 438 372 436 Trgb -0.000000 0.023350 0.007005 365 406 372 436 365 404 Trgb -0.065732 0.277683 0.068683 373 448 364 445 372 445 Trgb -0.067033 0.283180 0.070043 364 445 370 438 372 445 Trgb -0.026637 0.112527 0.027833 361 434 368 430 370 438 Trgb -0.031584 0.133427 0.033002 370 438 364 445 361 434 Trgb -0.005867 0.024787 0.006131 360 440 361 434 364 445 Trgb -0.104129 0.439892 0.108804 379 441 373 448 372 445 Trgb -0.089964 0.380052 0.094003 381 435 379 440 379 441 Trgb -0.105430 0.445389 0.110164 370 438 379 441 372 445 Trgb -0.046486 0.196380 0.048573 368 430 376 430 370 438 Trgb -0.089831 0.379489 0.093864 379 441 370 438 376 430 Trgb -0.091265 0.385549 0.095363 376 430 381 435 379 441 Trgb -0.000920 0.003887 0.000961 368 430 361 434 367 427 Trgb -0.000000 0.000000 0.000000 361 434 367 427 361 434 Trgb -0.020769 0.087740 0.021702 376 430 368 430 367 427 Trgb -0.019849 0.083853 0.020740 367 427 376 430 376 430 Trgb -0.047000 0.198553 0.049111 381 435 376 430 376 430 Trgb -0.000000 0.699497 0.209849 381 445 379 445 381 444 Trgb -0.000000 0.699497 0.209849 379 445 380 444 381 444 Trgb -0.000000 0.699497 0.209849 380 444 382 443 381 444 Trgb -0.000000 0.699497 0.209849 382 443 383 443 381 444 Trgb -0.000000 0.699497 0.209849 383 443 383 444 381 444 Trgb -0.000000 0.699497 0.209849 383 444 381 445 381 444 Trgb -0.000000 0.000696 0.000209 362 406 380 444 379 445 Trgb -0.000000 0.000348 0.000104 362 406 379 445 361 406 Trgb -0.000000 0.016007 0.004802 364 405 382 443 380 444 Trgb -0.000000 0.008525 0.002558 364 405 380 444 362 406 Trgb -0.000000 0.022792 0.006838 365 404 383 443 382 443 Trgb -0.000000 0.023140 0.006942 365 404 382 443 364 405 Trgb -0.310982 0.003067 0.062810 384 465 374 464 391 465 Trgb -0.084174 0.000830 0.017001 363 455 361 451 374 464 Trgb -0.485793 0.004791 0.098117 374 464 393 453 391 465 Trgb -0.382596 0.003773 0.077274 371 443 388 435 393 453 Trgb -0.343159 0.003384 0.069309 393 453 374 464 371 443 Trgb -0.125602 0.001239 0.025368 361 451 371 443 374 464 Trgb -0.577749 0.005698 0.116689 393 453 403 454 391 465 Trgb -0.474551 0.004680 0.095846 388 435 400 433 393 453 Trgb -0.527070 0.005198 0.106454 403 454 393 453 400 433 Trgb -0.374535 0.003694 0.075646 400 433 401 437 403 454 Trgb -0.000000 0.000000 0.000000 379 423 360 435 372 424 Trgb -0.165038 0.001628 0.033333 388 435 371 443 379 423 Trgb -0.041428 0.000409 0.008367 360 435 379 423 371 443 Trgb -0.041428 0.000409 0.008367 371 443 361 451 360 435 Trgb -0.256994 0.002534 0.051906 400 433 388 435 379 423 Trgb -0.133383 0.001315 0.026940 379 423 389 425 400 433 Trgb -0.000000 0.699868 0.209960 440 368 438 370 438 367 Trgb -0.000000 0.699868 0.209960 438 370 436 368 438 367 Trgb -0.000000 0.699868 0.209960 436 368 436 365 438 367 Trgb -0.000000 0.699868 0.209960 436 365 438 363 438 367 Trgb -0.000000 0.699868 0.209960 438 363 440 365 438 367 Trgb -0.000000 0.699868 0.209960 440 365 440 368 438 367 Trgb -0.000000 0.005175 0.001553 394 366 436 368 438 370 Trgb -0.000000 0.008820 0.002646 394 366 438 370 396 367 Trgb -0.000000 0.000510 0.000153 394 363 436 365 436 368 Trgb -0.000000 0.001020 0.000306 394 363 436 368 394 366 Trgb -0.000000 0.000000 0.000000 396 361 438 363 436 365 Trgb -0.000000 0.000000 0.000000 396 361 436 365 394 363 Trgb -0.130763 0.477881 0.121729 448 370 441 374 446 367 Trgb -0.101991 0.372731 0.094944 441 374 448 370 440 377 Trgb -0.069415 0.253681 0.064619 440 377 434 377 441 374 Trgb -0.110114 0.402415 0.102506 441 374 438 363 446 367 Trgb -0.022716 0.083017 0.021147 430 370 431 362 438 363 Trgb -0.063387 0.231649 0.059007 438 363 441 374 430 370 Trgb -0.051461 0.188065 0.047905 434 377 430 370 441 374 Trgb -0.115504 0.422115 0.107524 446 360 448 370 446 367 Trgb -0.094854 0.346649 0.088301 438 363 446 360 446 367 Trgb -0.022716 0.083017 0.021147 431 362 435 356 438 363 Trgb -0.048127 0.175883 0.044802 446 360 438 363 435 356 Trgb -0.025411 0.092867 0.023656 435 356 442 357 446 360 Trgb -0.000000 0.000000 0.000000 431 362 430 370 427 363 Trgb -0.000000 0.000000 0.000000 430 373 427 363 430 370 Trgb -0.010790 0.039432 0.010044 430 370 434 377 430 373 Trgb -0.000000 0.000000 0.000000 435 356 431 362 427 363 Trgb -0.000000 0.697531 0.209259 400 424 402 424 403 424 Trgb -0.000000 0.697531 0.209259 402 424 405 424 403 424 Trgb -0.000000 0.697531 0.209259 405 424 406 424 403 424 Trgb -0.000000 0.697531 0.209259 406 424 404 424 403 424 Trgb -0.000000 0.697531 0.209259 404 424 401 425 403 424 Trgb -0.000000 0.697531 0.209259 401 425 400 424 403 424 Trgb -0.000000 0.010115 0.003035 395 364 402 424 400 424 Trgb -0.000000 0.005058 0.001517 395 364 400 424 393 364 Trgb -0.000000 0.042881 0.012864 398 363 405 424 402 424 Trgb -0.000000 0.029027 0.008708 398 363 402 424 395 364 Trgb -0.000000 0.046621 0.013986 399 364 406 424 405 424 Trgb -0.000000 0.051678 0.015503 399 364 405 424 398 363 Trgb -0.000000 0.692681 0.207804 401 424 402 423 403 424 Trgb -0.000000 0.692681 0.207804 402 423 404 423 403 424 Trgb -0.000000 0.692681 0.207804 404 423 405 424 403 424 Trgb -0.000000 0.692681 0.207804 405 424 405 426 403 424 Trgb -0.000000 0.692681 0.207804 405 426 403 426 403 424 Trgb -0.000000 0.692681 0.207804 403 426 401 424 403 424 Trgb -0.000000 0.033284 0.009985 403 426 395 452 393 450 Trgb -0.000000 0.016642 0.004993 403 426 393 450 401 424 Trgb -0.000000 0.083949 0.025185 405 426 397 451 395 452 Trgb -0.000000 0.066938 0.020081 405 426 395 452 403 426 Trgb -0.000000 0.067677 0.020303 405 424 397 450 397 451 Trgb -0.000000 0.084319 0.025296 405 424 397 451 405 426 Trgb -0.009477 0.046295 0.011154 386 451 390 456 387 455 Trgb -0.023261 0.113633 0.027379 396 460 387 455 390 456 Trgb -0.055621 0.271710 0.065466 390 456 398 458 396 460 Trgb -0.082430 0.402675 0.097021 398 458 403 455 396 460 Trgb -0.044843 0.219063 0.052781 398 451 390 446 397 444 Trgb -0.009477 0.046295 0.011154 390 456 386 451 390 446 Trgb -0.041455 0.202511 0.048793 390 446 398 451 390 456 Trgb -0.073815 0.360588 0.086881 398 458 390 456 398 451 Trgb -0.067345 0.328984 0.079266 403 445 398 451 397 444 Trgb -0.077745 0.379787 0.091506 404 449 403 455 403 445 Trgb -0.090766 0.443397 0.106833 398 451 403 445 403 455 Trgb -0.100624 0.491553 0.118435 403 455 398 458 398 451 Trgb -0.012865 0.062846 0.015142 390 446 395 440 397 444 Trgb -0.000000 0.000000 0.000000 386 451 387 445 390 446 Trgb -0.000000 0.000000 0.000000 395 440 390 446 387 445 Trgb -0.035367 0.172767 0.041627 395 440 403 445 397 444 Trgb -0.000000 0.637740 0.191322 379 451 379 452 377 451 Trgb -0.000000 0.637740 0.191322 379 452 378 452 377 451 Trgb -0.000000 0.637740 0.191322 378 452 376 451 377 451 Trgb -0.000000 0.637740 0.191322 376 451 376 449 377 451 Trgb -0.000000 0.637740 0.191322 376 449 377 449 377 451 Trgb -0.000000 0.637740 0.191322 377 449 379 451 377 451 Trgb -0.000000 0.252303 0.075691 405 426 379 452 379 451 Trgb -0.000000 0.246714 0.074014 405 426 379 451 404 424 Trgb -0.000000 0.000000 0.000000 403 423 377 449 376 449 Trgb -0.000000 0.000000 0.000000 403 423 376 449 402 423 Trgb -0.000000 0.160749 0.048225 404 424 379 451 377 449 Trgb -0.000000 0.080375 0.024112 404 424 377 449 403 423 Trgb -0.017498 0.271496 0.057799 377 454 377 459 372 456 Trgb -0.034877 0.541162 0.115208 382 450 384 455 377 454 Trgb -0.029698 0.460799 0.098099 377 459 377 454 384 455 Trgb -0.028021 0.434774 0.092559 384 455 382 458 377 459 Trgb -0.008105 0.125751 0.026771 377 459 370 455 372 456 Trgb -0.010945 0.169818 0.036153 370 450 377 454 372 456 Trgb -0.023966 0.371853 0.079164 378 445 382 450 377 454 Trgb -0.012233 0.189812 0.040409 377 454 370 450 378 445 Trgb -0.002840 0.044067 0.009382 373 444 378 445 370 450 Trgb -0.032683 0.507117 0.107960 384 455 382 450 385 447 Trgb -0.025310 0.392708 0.083604 385 447 384 452 384 455 Trgb -0.001552 0.024074 0.005125 370 455 370 450 372 456 Trgb -0.000000 0.000000 0.000000 371 447 373 444 370 450 Trgb -0.021771 0.337807 0.071916 382 450 378 445 385 447 Trgb -0.010039 0.155767 0.033161 378 442 385 447 378 445 Trgb -0.002840 0.044067 0.009382 378 445 373 444 378 442 Trgb -0.000000 0.699962 0.209989 436 449 434 451 435 449 Trgb -0.000000 0.699962 0.209989 434 451 433 451 435 449 Trgb -0.000000 0.699962 0.209989 433 451 434 449 435 449 Trgb -0.000000 0.699962 0.209989 434 449 435 447 435 449 Trgb -0.000000 0.699962 0.209989 435 447 436 447 435 449 Trgb -0.000000 0.699962 0.209989 436 447 436 449 435 449 Trgb -0.000000 0.002331 0.000699 402 424 434 449 433 451 Trgb -0.000000 0.001165 0.000350 402 424 433 451 402 426 Trgb -0.000000 0.006038 0.001812 404 423 435 447 434 449 Trgb -0.000000 0.004767 0.001430 404 423 434 449 402 424 Trgb -0.000000 0.004978 0.001494 405 423 436 447 435 447 Trgb -0.000000 0.006144 0.001843 405 423 435 447 404 423 Trgb -0.240590 0.297323 0.107583 437 464 437 455 445 458 Trgb -0.089658 0.110800 0.040092 424 458 427 449 437 455 Trgb -0.138434 0.171078 0.061902 437 455 437 464 424 458 Trgb -0.058982 0.072890 0.026374 428 461 424 458 437 464 Trgb -0.252665 0.312245 0.112982 447 446 447 455 445 458 Trgb -0.110270 0.136273 0.049309 442 437 445 440 447 446 Trgb -0.267098 0.330082 0.119436 437 455 447 446 445 458 Trgb -0.110128 0.136097 0.049245 427 449 434 441 437 455 Trgb -0.185412 0.229133 0.082909 447 446 437 455 434 441 Trgb -0.124703 0.154109 0.055763 434 441 442 437 447 446 Trgb -0.010206 0.012612 0.004564 427 449 424 458 422 443 Trgb -0.000000 0.000000 0.000000 422 452 422 443 424 458 Trgb -0.000000 0.000000 0.000000 432 435 422 443 424 441 Trgb -0.030676 0.037910 0.013717 434 441 427 449 422 443 Trgb -0.020470 0.025297 0.009154 422 443 432 435 434 441 Trgb -0.039214 0.048461 0.017535 442 437 434 441 432 435 Trgb -0.000000 0.675208 0.202562 239 301 244 305 240 305 Trgb -0.000000 0.675208 0.202562 244 305 244 309 240 305 Trgb -0.000000 0.675208 0.202562 244 309 241 309 240 305 Trgb -0.000000 0.675208 0.202562 241 309 236 305 240 305 Trgb -0.000000 0.675208 0.202562 236 305 236 301 240 305 Trgb -0.000000 0.675208 0.202562 236 301 239 301 240 305 Trgb -0.000000 0.139589 0.041877 309 230 244 305 239 301 Trgb -0.000000 0.098494 0.029548 309 230 239 301 305 226 Trgb -0.000000 0.142419 0.042726 310 234 244 309 244 305 Trgb -0.000000 0.161552 0.048465 310 234 244 305 309 230 Trgb -0.000000 0.038266 0.011480 305 226 239 301 236 301 Trgb -0.000000 0.019133 0.005740 305 226 236 301 301 226 Trgb -0.000000 0.697893 0.209368 237 302 239 302 240 305 Trgb -0.000000 0.697893 0.209368 239 302 242 305 240 305 Trgb -0.000000 0.697893 0.209368 242 305 243 308 240 305 Trgb -0.000000 0.697893 0.209368 243 308 241 308 240 305 Trgb -0.000000 0.697893 0.209368 241 308 238 305 240 305 Trgb -0.000000 0.697893 0.209368 238 305 237 302 240 305 Trgb -0.000000 0.017023 0.005107 238 305 176 350 175 346 Trgb -0.000000 0.008512 0.002553 238 305 175 346 237 302 Trgb -0.000000 0.044670 0.013401 241 308 179 352 176 350 Trgb -0.000000 0.035103 0.010531 241 308 176 350 238 305 Trgb -0.000000 0.037215 0.011165 243 308 181 352 179 352 Trgb -0.000000 0.045727 0.013718 243 308 179 352 241 308 Trgb -0.000000 0.699920 0.209976 176 348 178 347 178 349 Trgb -0.000000 0.699920 0.209976 178 347 180 348 178 349 Trgb -0.000000 0.699920 0.209976 180 348 180 351 178 349 Trgb -0.000000 0.699920 0.209976 180 351 178 352 178 349 Trgb -0.000000 0.699920 0.209976 178 352 176 351 178 349 Trgb -0.000000 0.699920 0.209976 176 351 176 348 178 349 Trgb -0.000000 0.001914 0.000574 176 351 145 347 145 344 Trgb -0.000000 0.000957 0.000287 176 351 145 344 176 348 Trgb -0.000000 0.007792 0.002337 178 352 147 348 145 347 Trgb -0.000000 0.005332 0.001599 178 352 145 347 176 351 Trgb -0.000000 0.000000 0.000000 176 348 145 344 147 343 Trgb -0.000000 0.000000 0.000000 176 348 147 343 178 347 Trgb -0.000000 0.699197 0.209759 146 344 148 344 147 345 Trgb -0.000000 0.699197 0.209759 148 344 149 345 147 345 Trgb -0.000000 0.699197 0.209759 149 345 148 347 147 345 Trgb -0.000000 0.699197 0.209759 148 347 146 347 147 345 Trgb -0.000000 0.699197 0.209759 146 347 145 345 147 345 Trgb -0.000000 0.699197 0.209759 145 345 146 344 147 345 Trgb -0.000000 0.000000 0.000000 145 345 151 323 151 321 Trgb -0.000000 0.000000 0.000000 145 345 151 321 146 344 Trgb -0.000000 0.025417 0.007625 148 344 153 321 154 322 Trgb -0.000000 0.029199 0.008760 148 344 154 322 149 345 Trgb -0.000000 0.007212 0.002163 146 344 151 321 153 321 Trgb -0.000000 0.014423 0.004327 146 344 153 321 148 344 Trgb -0.041504 0.027267 0.013754 155 311 144 313 148 310 Trgb -0.041504 0.027267 0.013754 148 310 162 312 155 311 Trgb -0.133196 0.087504 0.044140 164 317 155 311 162 312 Trgb -0.157254 0.103310 0.052113 143 333 145 322 150 331 Trgb -0.048551 0.031896 0.016089 138 320 144 313 145 322 Trgb -0.055597 0.036525 0.018424 145 322 143 333 138 320 Trgb -0.007046 0.004629 0.002335 141 328 138 320 143 333 Trgb -0.203918 0.133965 0.067577 157 336 143 333 150 331 Trgb -0.286927 0.188499 0.095085 145 322 159 325 150 331 Trgb -0.090055 0.059162 0.029843 144 313 155 311 145 322 Trgb -0.226774 0.148981 0.075151 159 325 145 322 155 311 Trgb -0.269915 0.177323 0.089448 155 311 164 317 159 325 Trgb -0.333590 0.219155 0.110549 159 325 157 336 150 331 Trgb -0.216378 0.142151 0.071706 167 325 161 332 157 336 Trgb -0.320101 0.210293 0.106079 157 336 159 325 167 325 Trgb -0.316578 0.207979 0.104911 164 317 167 325 159 325 Trgb -0.000000 0.698678 0.209603 147 347 147 346 147 345 Trgb -0.000000 0.698678 0.209603 147 346 147 344 147 345 Trgb -0.000000 0.698678 0.209603 147 344 147 344 147 345 Trgb -0.000000 0.698678 0.209603 147 344 147 345 147 345 Trgb -0.000000 0.698678 0.209603 147 345 147 346 147 345 Trgb -0.000000 0.698678 0.209603 147 346 147 347 147 345 Trgb -0.000000 0.018415 0.005524 147 344 109 337 110 336 Trgb -0.000000 0.009207 0.002762 147 344 110 336 147 344 Trgb -0.000000 0.037448 0.011234 147 346 109 338 109 337 Trgb -0.000000 0.032535 0.009761 147 346 109 337 147 344 Trgb -0.000000 0.023946 0.007184 147 347 109 339 109 338 Trgb -0.000000 0.033154 0.009946 147 347 109 338 147 346 Trgb -0.013745 0.002545 0.003258 96 334 94 347 91 334 Trgb -0.190914 0.035354 0.045254 106 349 105 355 94 347 Trgb -0.152290 0.028202 0.036098 94 347 96 334 106 349 Trgb -0.295853 0.054788 0.070128 108 336 106 349 96 334 Trgb -0.013745 0.002545 0.003258 99 323 96 334 91 334 Trgb -0.064484 0.011941 0.015285 113 320 111 324 99 323 Trgb -0.078229 0.014487 0.018543 96 334 99 323 111 324 Trgb -0.221792 0.041073 0.052573 111 324 108 336 96 334 Trgb -0.438208 0.081150 0.103872 119 353 121 339 127 341 Trgb -0.315714 0.058466 0.074836 105 355 106 349 119 353 Trgb -0.452629 0.083820 0.107290 121 339 119 353 106 349 Trgb -0.471392 0.087295 0.111737 106 349 108 336 121 339 Trgb -0.364147 0.067435 0.086316 121 339 125 328 127 341 Trgb -0.115222 0.021337 0.027312 111 324 113 320 125 328 Trgb -0.304506 0.056390 0.072179 125 328 121 339 111 324 Trgb -0.397330 0.073580 0.094182 108 336 111 324 121 339 Trgb -0.000000 0.691781 0.207534 149 346 148 347 147 345 Trgb -0.000000 0.691781 0.207534 148 347 147 346 147 345 Trgb -0.000000 0.691781 0.207534 147 346 145 345 147 345 Trgb -0.000000 0.691781 0.207534 145 345 146 344 147 345 Trgb -0.000000 0.691781 0.207534 146 344 147 345 147 345 Trgb -0.000000 0.691781 0.207534 147 345 149 346 147 345 Trgb -0.000000 0.000000 0.000000 145 345 131 375 131 374 Trgb -0.000000 0.000000 0.000000 145 345 131 374 146 344 Trgb -0.000000 0.058813 0.017644 147 346 132 376 131 375 Trgb -0.000000 0.029406 0.008822 147 346 131 375 145 345 Trgb -0.000000 0.093726 0.028118 148 347 134 376 132 376 Trgb -0.000000 0.090973 0.027292 148 347 132 376 147 346 Trgb -0.000000 0.000000 0.000000 124 370 125 375 124 380 Trgb -0.107475 0.388264 0.099148 136 381 141 379 133 384 Trgb -0.029201 0.105490 0.026938 133 366 141 370 136 368 Trgb -0.031304 0.113090 0.028879 125 375 130 379 124 380 Trgb -0.054230 0.195912 0.050028 133 384 124 380 130 379 Trgb -0.102218 0.369274 0.094298 130 379 136 381 133 384 Trgb -0.023944 0.086500 0.022089 129 369 133 366 136 368 Trgb -0.008378 0.030267 0.007729 125 375 124 370 129 369 Trgb -0.008378 0.030267 0.007729 133 366 129 369 124 370 Trgb -0.074140 0.267838 0.068396 141 370 138 374 136 368 Trgb -0.095135 0.343686 0.087764 138 374 141 370 141 379 Trgb -0.129488 0.467789 0.119455 141 379 136 381 138 374 Trgb -0.068883 0.248847 0.063546 138 374 129 369 136 368 Trgb -0.039682 0.143357 0.036608 130 379 125 375 129 369 Trgb -0.084621 0.305704 0.078065 129 369 138 374 130 379 Trgb -0.124231 0.448798 0.114606 136 381 130 379 138 374 Trgb -0.000000 0.000000 0.000000 133 384 131 383 131 381 Trgb -0.000000 0.000000 0.000000 131 383 130 380 131 381 Trgb -0.000000 0.000000 0.000000 130 380 129 379 131 381 Trgb -0.000000 0.000000 0.000000 129 379 131 380 131 381 Trgb -0.000000 0.000000 0.000000 131 380 132 382 131 381 Trgb -0.000000 0.000000 0.000000 132 382 133 384 131 381 Trgb -0.000000 0.087931 0.026379 178 348 131 380 129 379 Trgb -0.000000 0.043965 0.013190 178 348 129 379 176 347 Trgb -0.000000 0.299857 0.089957 179 350 132 382 131 380 Trgb -0.000000 0.215876 0.064763 179 350 131 380 178 348 Trgb -0.000000 0.295907 0.088772 179 352 133 384 132 382 Trgb -0.000000 0.339872 0.101962 179 352 132 382 179 350 Trgb -0.000000 0.691585 0.207476 106 387 105 387 105 385 Trgb -0.000000 0.691585 0.207476 105 387 103 386 105 385 Trgb -0.000000 0.691585 0.207476 103 386 104 384 105 385 Trgb -0.000000 0.691585 0.207476 104 384 105 383 105 385 Trgb -0.000000 0.691585 0.207476 105 383 107 385 105 385 Trgb -0.000000 0.691585 0.207476 107 385 106 387 105 385 Trgb -0.000000 0.038905 0.011671 131 383 105 387 106 387 Trgb -0.000000 0.068470 0.020541 131 383 106 387 132 383 Trgb -0.000000 0.059130 0.017739 133 381 107 385 105 383 Trgb -0.000000 0.029565 0.008870 133 381 105 383 131 379 Trgb -0.000000 0.094922 0.028477 132 383 106 387 107 385 Trgb -0.000000 0.091809 0.027543 132 383 107 385 133 381 Trgb -0.036557 0.227068 0.052725 105 391 97 391 99 386 Trgb -0.065148 0.404652 0.093960 111 392 105 395 105 391 Trgb -0.037225 0.231217 0.053688 97 391 105 391 105 395 Trgb -0.009849 0.061174 0.014205 97 391 97 381 99 386 Trgb -0.052749 0.327638 0.076077 104 381 105 391 99 386 Trgb -0.083603 0.519279 0.120576 113 385 111 392 105 391 Trgb -0.071872 0.446414 0.103657 105 391 104 381 113 385 Trgb -0.058213 0.361574 0.083957 110 379 113 385 104 381 Trgb -0.026041 0.161745 0.037557 97 381 104 381 99 386 Trgb -0.000000 0.000000 0.000000 100 378 105 376 97 381 Trgb -0.016192 0.100570 0.023352 104 381 97 381 105 376 Trgb -0.029241 0.181624 0.042173 105 376 110 379 104 381 Trgb -0.069674 0.432765 0.100488 111 392 113 385 113 389 Trgb -0.044015 0.273387 0.063480 113 380 113 389 113 385 Trgb -0.044284 0.275061 0.063869 113 385 110 379 113 380 Trgb -0.015313 0.095110 0.022085 110 379 105 376 113 380 Trgb -0.000000 0.698498 0.209550 130 380 132 380 131 381 Trgb -0.000000 0.698498 0.209550 132 380 133 381 131 381 Trgb -0.000000 0.698498 0.209550 133 381 132 383 131 381 Trgb -0.000000 0.698498 0.209550 132 383 130 383 131 381 Trgb -0.000000 0.698498 0.209550 130 383 129 381 131 381 Trgb -0.000000 0.698498 0.209550 129 381 130 380 131 381 Trgb -0.000000 0.000000 0.000000 129 381 111 401 111 400 Trgb -0.000000 0.000000 0.000000 129 381 111 400 130 380 Trgb -0.000000 0.023294 0.006988 130 383 112 403 111 401 Trgb -0.000000 0.011647 0.003494 130 383 111 401 129 381 Trgb -0.000000 0.040413 0.012124 132 383 113 403 112 403 Trgb -0.000000 0.037677 0.011303 132 383 112 403 130 383 Trgb -0.019290 0.043219 0.012502 102 398 104 406 103 408 Trgb -0.112959 0.253086 0.073209 111 411 119 410 113 412 Trgb -0.059036 0.132271 0.038261 113 412 103 408 111 411 Trgb -0.071059 0.159208 0.046053 104 406 111 411 103 408 Trgb -0.088148 0.197496 0.057129 110 400 111 391 118 396 Trgb -0.000000 0.000000 0.000000 102 398 106 393 111 391 Trgb -0.044502 0.099707 0.028842 111 391 110 400 102 398 Trgb -0.063792 0.142926 0.041344 104 406 102 398 110 400 Trgb -0.157140 0.352073 0.101843 121 404 110 400 118 396 Trgb -0.174684 0.391380 0.113213 119 410 111 411 121 404 Trgb -0.165263 0.370273 0.107107 110 400 121 404 111 411 Trgb -0.115561 0.258915 0.074895 111 411 104 406 110 400 Trgb -0.060868 0.136376 0.039449 111 391 121 395 118 396 Trgb -0.129860 0.290952 0.084162 121 395 121 404 118 396 Trgb -0.147404 0.330260 0.095533 122 405 119 410 121 404 Trgb -0.110704 0.248032 0.071747 121 404 121 395 122 405 Trgb -0.000000 0.699554 0.209866 131 380 131 379 131 381 Trgb -0.000000 0.699554 0.209866 131 379 132 380 131 381 Trgb -0.000000 0.699554 0.209866 132 380 132 382 131 381 Trgb -0.000000 0.699554 0.209866 132 382 131 383 131 381 Trgb -0.000000 0.699554 0.209866 131 383 130 382 131 381 Trgb -0.000000 0.699554 0.209866 130 382 131 380 131 381 Trgb -0.000000 0.019279 0.005784 130 382 92 378 93 376 Trgb -0.000000 0.013935 0.004181 130 382 93 376 131 380 Trgb -0.000000 0.018894 0.005668 131 383 93 380 92 378 Trgb -0.000000 0.021758 0.006527 131 383 92 378 130 382 Trgb -0.000000 0.005728 0.001718 131 380 93 376 94 376 Trgb -0.000000 0.002864 0.000859 131 380 94 376 131 379 Trgb -0.000000 0.000000 0.000000 83 371 82 384 82 377 Trgb -0.062639 0.107049 0.033938 90 370 88 379 83 371 Trgb -0.045424 0.077629 0.024611 82 384 83 371 88 379 Trgb -0.092448 0.157993 0.050088 88 379 89 387 82 384 Trgb -0.068102 0.116386 0.036898 89 387 93 390 82 384 Trgb -0.017215 0.029420 0.009327 94 365 90 370 83 371 Trgb -0.214613 0.366772 0.116277 98 385 99 373 105 379 Trgb -0.124366 0.212540 0.067381 88 379 90 370 99 373 Trgb -0.189956 0.324634 0.102918 99 373 98 385 88 379 Trgb -0.175253 0.299506 0.094952 89 387 88 379 98 385 Trgb -0.190267 0.325166 0.103087 104 384 98 385 105 379 Trgb -0.141265 0.241421 0.076537 98 385 104 384 93 390 Trgb -0.150908 0.257900 0.081762 93 390 89 387 98 385 Trgb -0.148111 0.253120 0.080246 99 373 104 372 105 379 Trgb -0.078942 0.134911 0.042771 90 370 94 365 99 373 Trgb -0.078030 0.133353 0.042277 104 372 99 373 94 365 Trgb -0.000000 0.651830 0.195549 178 348 180 348 178 349 Trgb -0.000000 0.651830 0.195549 180 348 180 350 178 349 Trgb -0.000000 0.651830 0.195549 180 350 178 351 178 349 Trgb -0.000000 0.651830 0.195549 178 351 175 350 178 349 Trgb -0.000000 0.651830 0.195549 175 350 175 349 178 349 Trgb -0.000000 0.651830 0.195549 175 349 178 348 178 349 Trgb -0.000000 0.136743 0.041023 178 351 181 395 179 394 Trgb -0.000000 0.068371 0.020511 178 351 179 394 175 350 Trgb -0.000000 0.224390 0.067317 180 350 184 394 181 395 Trgb -0.000000 0.214752 0.064426 180 350 181 395 178 351 Trgb -0.000000 0.097284 0.029185 180 348 184 392 184 394 Trgb -0.000000 0.165656 0.049697 180 348 184 394 180 350 Trgb -0.000000 0.000000 0.000000 181 392 182 391 181 393 Trgb -0.000000 0.000000 0.000000 182 391 183 393 181 393 Trgb -0.000000 0.000000 0.000000 183 393 182 394 181 393 Trgb -0.000000 0.000000 0.000000 182 394 181 395 181 393 Trgb -0.000000 0.000000 0.000000 181 395 180 394 181 393 Trgb -0.000000 0.000000 0.000000 180 394 181 392 181 393 Trgb -0.000000 0.098567 0.029570 182 394 210 409 209 410 Trgb -0.000000 0.058014 0.017404 182 394 209 410 181 395 Trgb -0.000000 0.127481 0.038244 183 393 211 408 210 409 Trgb -0.000000 0.133301 0.039990 183 393 210 409 182 394 Trgb -0.000000 0.040554 0.012166 182 391 211 407 211 408 Trgb -0.000000 0.081108 0.024332 182 391 211 408 183 393 Trgb -0.449781 0.027005 0.095357 204 426 214 420 223 422 Trgb -0.000000 0.000000 0.000000 191 412 197 394 196 401 Trgb -0.570312 0.034242 0.120911 214 420 222 408 223 422 Trgb -0.467717 0.028082 0.099160 228 405 223 422 222 408 Trgb -0.379352 0.022777 0.080426 222 408 222 395 228 405 Trgb -0.105134 0.006312 0.022289 203 412 191 412 196 401 Trgb -0.381323 0.022895 0.080844 214 420 204 426 203 412 Trgb -0.184233 0.011062 0.039059 191 412 203 412 204 426 Trgb -0.079098 0.004749 0.016769 204 426 198 421 191 412 Trgb -0.026036 0.001563 0.005520 197 394 209 394 196 401 Trgb -0.026036 0.001563 0.005520 209 394 197 394 216 391 Trgb -0.111265 0.006680 0.023589 216 391 222 395 209 394 Trgb -0.131171 0.007876 0.027809 209 394 203 412 196 401 Trgb -0.501854 0.030132 0.106397 222 408 214 420 203 412 Trgb -0.330800 0.019862 0.070132 203 412 209 394 222 408 Trgb -0.310894 0.018666 0.065912 222 395 222 408 209 394 Trgb -0.000000 0.699809 0.209943 180 394 180 392 181 393 Trgb -0.000000 0.699809 0.209943 180 392 182 391 181 393 Trgb -0.000000 0.699809 0.209943 182 391 183 392 181 393 Trgb -0.000000 0.699809 0.209943 183 392 183 394 181 393 Trgb -0.000000 0.699809 0.209943 183 394 181 395 181 393 Trgb -0.000000 0.699809 0.209943 181 395 180 394 181 393 Trgb -0.000000 0.006766 0.002030 181 395 168 392 166 391 Trgb -0.000000 0.003383 0.001015 181 395 166 391 180 394 Trgb -0.000000 0.000000 0.000000 180 392 167 389 168 388 Trgb -0.000000 0.000000 0.000000 180 392 168 388 182 391 Trgb -0.000000 0.000000 0.000000 180 394 166 391 167 389 Trgb -0.000000 0.000000 0.000000 180 394 167 389 180 392 Trgb -0.168457 0.380906 0.109873 173 398 164 393 172 391 Trgb -0.049902 0.112835 0.032547 164 400 159 394 164 393 Trgb -0.115650 0.261502 0.075430 164 393 173 398 164 400 Trgb -0.105923 0.239508 0.069086 171 400 164 400 173 398 Trgb -0.184304 0.416738 0.120208 177 388 173 398 172 391 Trgb -0.147343 0.333164 0.096101 173 398 177 388 177 395 Trgb -0.121770 0.275339 0.079422 177 395 171 400 173 398 Trgb -0.128611 0.290809 0.083884 164 393 169 384 172 391 Trgb -0.037902 0.085702 0.024721 159 394 159 386 164 393 Trgb -0.063804 0.144271 0.041615 169 384 164 393 159 386 Trgb -0.025902 0.058569 0.016894 159 386 165 380 169 384 Trgb -0.144458 0.326640 0.094220 169 384 177 388 172 391 Trgb -0.064954 0.146870 0.042365 173 381 177 387 177 388 Trgb -0.079651 0.180103 0.051951 177 388 169 384 173 381 Trgb -0.025902 0.058569 0.016894 165 380 173 381 169 384 Trgb -0.000000 0.694743 0.208423 182 394 181 393 181 393 Trgb -0.000000 0.694743 0.208423 181 393 180 392 181 393 Trgb -0.000000 0.694743 0.208423 180 392 181 392 181 393 Trgb -0.000000 0.694743 0.208423 181 392 182 393 181 393 Trgb -0.000000 0.694743 0.208423 182 393 183 394 181 393 Trgb -0.000000 0.694743 0.208423 183 394 182 394 181 393 Trgb -0.000000 0.065286 0.019586 183 394 157 420 156 420 Trgb -0.000000 0.074712 0.022413 183 394 156 420 182 394 Trgb -0.000000 0.018852 0.005655 181 393 154 418 154 417 Trgb -0.000000 0.009426 0.002828 181 393 154 417 180 392 Trgb -0.000000 0.065517 0.019655 182 394 156 420 154 418 Trgb -0.000000 0.046897 0.014069 182 394 154 418 181 393 Trgb -0.365097 0.114210 0.095861 159 429 167 431 150 434 Trgb -0.067185 0.021017 0.017640 139 421 150 434 144 430 Trgb -0.321781 0.100660 0.084488 149 421 159 429 150 434 Trgb -0.159955 0.050037 0.041999 150 434 139 421 149 421 Trgb -0.092770 0.029020 0.024358 143 411 149 421 139 421 Trgb -0.297384 0.093028 0.078082 172 416 166 418 167 407 Trgb -0.459583 0.143767 0.120670 167 431 159 429 166 418 Trgb -0.366658 0.114698 0.096271 166 418 172 416 167 431 Trgb -0.000000 0.000000 0.000000 144 406 143 411 139 421 Trgb -0.254068 0.079478 0.066709 166 418 155 406 167 407 Trgb -0.416267 0.130217 0.109297 159 429 149 421 166 418 Trgb -0.280026 0.087598 0.073525 155 406 166 418 149 421 Trgb -0.118355 0.037024 0.031076 149 421 143 411 155 406 Trgb -0.092397 0.028904 0.024260 155 406 161 403 167 407 Trgb -0.025585 0.008004 0.006718 161 403 155 406 144 406 Trgb -0.025585 0.008004 0.006718 143 411 144 406 155 406 Trgb -0.000000 0.699458 0.209837 243 351 238 351 240 348 Trgb -0.000000 0.699458 0.209837 238 351 236 348 240 348 Trgb -0.000000 0.699458 0.209837 236 348 238 345 240 348 Trgb -0.000000 0.699458 0.209837 238 345 243 345 240 348 Trgb -0.000000 0.699458 0.209837 243 345 245 348 240 348 Trgb -0.000000 0.699458 0.209837 245 348 243 351 240 348 Trgb -0.000000 0.000000 0.000000 238 302 238 345 236 348 Trgb -0.000000 0.000000 0.000000 238 302 236 348 236 305 Trgb -0.000000 0.010118 0.003035 242 302 243 345 238 345 Trgb -0.000000 0.005059 0.001518 242 302 238 345 238 302 Trgb -0.000000 0.023392 0.007018 244 305 245 348 243 345 Trgb -0.000000 0.019284 0.005785 244 305 243 345 242 302 Trgb -0.000000 0.699769 0.209931 279 344 276 345 277 342 Trgb -0.000000 0.699769 0.209931 276 345 274 343 277 342 Trgb -0.000000 0.699769 0.209931 274 343 274 340 277 342 Trgb -0.000000 0.699769 0.209931 274 340 277 338 277 342 Trgb -0.000000 0.699769 0.209931 277 338 279 340 277 342 Trgb -0.000000 0.699769 0.209931 279 340 279 344 277 342 Trgb -0.000000 0.006306 0.001892 238 349 274 343 276 345 Trgb -0.000000 0.011255 0.003376 238 349 276 345 240 351 Trgb -0.000000 0.000452 0.000136 238 346 274 340 274 343 Trgb -0.000000 0.000904 0.000271 238 346 274 343 238 349 Trgb -0.000000 0.000000 0.000000 241 345 277 338 274 340 Trgb -0.000000 0.000000 0.000000 241 345 274 340 238 346 Trgb -0.000000 0.582895 0.174869 282 300 282 301 280 301 Trgb -0.000000 0.582895 0.174869 282 301 280 302 280 301 Trgb -0.000000 0.582895 0.174869 280 302 278 301 280 301 Trgb -0.000000 0.582895 0.174869 278 301 278 300 280 301 Trgb -0.000000 0.582895 0.174869 278 300 279 299 280 301 Trgb -0.000000 0.582895 0.174869 279 299 282 300 280 301 Trgb -0.000000 0.335109 0.100533 277 343 280 302 282 301 Trgb -0.000000 0.336208 0.100862 277 343 282 301 279 342 Trgb -0.000000 0.111337 0.033401 275 342 278 301 280 302 Trgb -0.000000 0.222674 0.066802 275 342 280 302 277 343 Trgb -0.000000 0.000000 0.000000 275 341 278 300 278 301 Trgb -0.000000 0.000000 0.000000 275 341 278 301 275 342 Trgb -0.156119 0.052040 0.041632 292 284 290 293 281 282 Trgb -0.267437 0.089146 0.071317 290 293 292 284 300 303 Trgb -0.431611 0.143870 0.115096 300 303 293 309 290 293 Trgb -0.154020 0.051340 0.041072 290 293 269 291 281 282 Trgb -0.130571 0.043524 0.034819 278 310 264 306 269 291 Trgb -0.263240 0.087747 0.070197 269 291 290 293 278 310 Trgb -0.429512 0.143171 0.114537 293 309 278 310 290 293 Trgb -0.413054 0.137685 0.110148 293 309 300 303 288 319 Trgb -0.021351 0.007117 0.005694 269 291 271 282 281 282 Trgb -0.008229 0.002743 0.002194 264 306 259 298 269 291 Trgb -0.008229 0.002743 0.002194 271 282 269 291 259 298 Trgb -0.114112 0.038037 0.030430 267 317 288 319 278 319 Trgb -0.122342 0.040781 0.032624 264 306 278 310 267 317 Trgb -0.236454 0.078818 0.063054 288 319 267 317 278 310 Trgb -0.410955 0.136985 0.109588 278 310 293 309 288 319 Trgb -0.000000 0.000000 0.000000 259 298 264 306 267 317 Trgb -0.000000 0.699650 0.209895 320 357 320 355 320 355 Trgb -0.000000 0.699650 0.209895 320 355 321 353 320 355 Trgb -0.000000 0.699650 0.209895 321 353 321 353 320 355 Trgb -0.000000 0.699650 0.209895 321 353 321 355 320 355 Trgb -0.000000 0.699650 0.209895 321 355 320 357 320 355 Trgb -0.000000 0.699650 0.209895 320 357 320 357 320 355 Trgb -0.000000 0.019057 0.005717 276 342 320 355 320 357 Trgb -0.000000 0.016121 0.004836 276 342 320 357 276 344 Trgb -0.000000 0.013204 0.003961 277 340 321 353 320 355 Trgb -0.000000 0.017599 0.005280 277 340 320 355 276 342 Trgb -0.000000 0.002937 0.000881 277 340 321 353 321 353 Trgb -0.000000 0.005873 0.001762 277 340 321 353 277 340 Trgb -0.051513 0.547915 0.119886 325 363 327 354 330 358 Trgb -0.033489 0.356204 0.077939 317 363 318 358 325 363 Trgb -0.045176 0.480506 0.105136 327 354 325 363 318 358 Trgb -0.037293 0.396663 0.086791 318 358 320 351 327 354 Trgb -0.042482 0.451858 0.098868 327 354 329 351 330 358 Trgb -0.009041 0.096168 0.021042 322 346 324 347 329 351 Trgb -0.027114 0.288393 0.063101 329 351 327 354 322 346 Trgb -0.028262 0.300606 0.065774 320 351 322 346 327 354 Trgb -0.022883 0.243388 0.053254 319 364 317 363 325 363 Trgb -0.000000 0.000000 0.000000 314 350 312 359 311 352 Trgb -0.016992 0.180738 0.039546 318 358 317 363 312 359 Trgb -0.010607 0.112815 0.024684 312 359 314 350 318 358 Trgb -0.019221 0.204438 0.044732 320 351 318 358 314 350 Trgb -0.000000 0.000000 0.000000 316 347 314 350 311 352 Trgb -0.001576 0.016759 0.003667 314 350 316 347 322 346 Trgb -0.010190 0.108381 0.023714 322 346 320 351 314 350 Trgb -0.000000 0.698163 0.209449 265 347 268 347 266 349 Trgb -0.000000 0.698163 0.209449 268 347 268 350 266 349 Trgb -0.000000 0.698163 0.209449 268 350 267 351 266 349 Trgb -0.000000 0.698163 0.209449 267 351 265 351 266 349 Trgb -0.000000 0.698163 0.209449 265 351 264 348 266 349 Trgb -0.000000 0.698163 0.209449 264 348 265 347 266 349 Trgb -0.000000 0.014969 0.004491 278 340 268 347 265 347 Trgb -0.000000 0.007485 0.002245 278 340 265 347 276 339 Trgb -0.000000 0.041203 0.012361 279 342 268 350 268 347 Trgb -0.000000 0.031829 0.009549 279 342 268 347 278 340 Trgb -0.000000 0.035609 0.010683 277 344 267 351 268 350 Trgb -0.000000 0.043093 0.012928 277 344 268 350 279 342 Trgb -0.005581 0.351590 0.071434 263 344 271 348 264 350 Trgb -0.000872 0.054960 0.011166 264 340 270 341 263 344 Trgb -0.004101 0.258361 0.052492 271 348 263 344 270 341 Trgb -0.006315 0.397826 0.080828 270 341 274 347 271 348 Trgb -0.007937 0.500031 0.101594 271 348 267 356 264 350 Trgb -0.007251 0.456807 0.092812 274 353 269 357 267 356 Trgb -0.008813 0.555244 0.112812 267 356 271 348 274 353 Trgb -0.008671 0.546267 0.110988 274 347 274 353 271 348 Trgb -0.002352 0.148188 0.030108 259 351 263 344 264 350 Trgb -0.000284 0.017904 0.003638 259 345 264 340 263 344 Trgb -0.000284 0.017904 0.003638 263 344 259 351 259 345 Trgb -0.000000 0.000000 0.000000 258 351 259 345 259 351 Trgb -0.004708 0.296630 0.060268 267 356 259 351 264 350 Trgb -0.004307 0.271310 0.055123 269 357 262 356 267 356 Trgb -0.002640 0.166346 0.033797 259 351 267 356 262 356 Trgb -0.000000 0.000000 0.000000 262 356 258 351 259 351 Trgb -0.000000 0.699555 0.209867 274 400 274 399 276 398 Trgb -0.000000 0.699555 0.209867 274 399 276 397 276 398 Trgb -0.000000 0.699555 0.209867 276 397 279 396 276 398 Trgb -0.000000 0.699555 0.209867 279 396 279 397 276 398 Trgb -0.000000 0.699555 0.209867 279 397 276 399 276 398 Trgb -0.000000 0.699555 0.209867 276 399 274 400 276 398 Trgb -0.000000 0.001828 0.000548 238 349 274 399 274 400 Trgb -0.000000 0.000914 0.000274 238 349 274 400 238 350 Trgb -0.000000 0.016145 0.004843 240 347 276 397 274 399 Trgb -0.000000 0.009443 0.002833 240 347 274 399 238 349 Trgb -0.000000 0.021019 0.006306 243 346 279 396 276 397 Trgb -0.000000 0.021933 0.006580 243 346 276 397 240 347 Trgb -0.000000 0.000000 0.000000 275 399 275 398 276 398 Trgb -0.000000 0.000000 0.000000 275 398 277 396 276 398 Trgb -0.000000 0.000000 0.000000 277 396 278 397 276 398 Trgb -0.000000 0.000000 0.000000 278 397 278 398 276 398 Trgb -0.000000 0.000000 0.000000 278 398 276 400 276 398 Trgb -0.000000 0.000000 0.000000 276 400 275 399 276 398 Trgb -0.000000 0.040083 0.012025 276 400 304 426 303 425 Trgb -0.000000 0.020042 0.006012 276 400 303 425 275 399 Trgb -0.000000 0.090960 0.027288 278 398 305 424 304 426 Trgb -0.000000 0.075542 0.022663 278 398 304 426 276 400 Trgb -0.000000 0.066294 0.019888 278 397 306 422 305 424 Trgb -0.000000 0.086336 0.025901 278 397 305 424 278 398 Trgb -0.082512 0.183187 0.053140 311 434 303 434 299 434 Trgb -0.144624 0.321084 0.093142 299 434 307 431 311 434 Trgb -0.131873 0.292775 0.084930 313 423 314 416 316 424 Trgb -0.161712 0.359021 0.104147 316 424 311 434 313 423 Trgb -0.186888 0.414915 0.120361 307 431 313 423 311 434 Trgb -0.028116 0.062421 0.018107 300 424 292 424 296 417 Trgb -0.022788 0.050592 0.014676 299 434 295 431 292 424 Trgb -0.050904 0.113013 0.032783 292 424 300 424 299 434 Trgb -0.113016 0.250910 0.072785 307 431 299 434 300 424 Trgb -0.033444 0.074249 0.021539 305 413 300 424 296 417 Trgb -0.100265 0.222601 0.064573 314 416 313 423 305 413 Trgb -0.098496 0.218673 0.063434 300 424 305 413 313 423 Trgb -0.155280 0.344741 0.100004 313 423 307 431 300 424 Trgb -0.000000 0.000000 0.000000 292 424 297 414 296 417 Trgb -0.005328 0.011829 0.003431 297 414 305 413 296 417 Trgb -0.035213 0.078177 0.022678 309 414 314 416 305 413 Trgb -0.000000 0.000000 0.000000 276 398 274 397 276 398 Trgb -0.000000 0.000000 0.000000 274 397 275 397 276 398 Trgb -0.000000 0.000000 0.000000 275 397 277 398 276 398 Trgb -0.000000 0.000000 0.000000 277 398 278 399 276 398 Trgb -0.000000 0.000000 0.000000 278 399 278 399 276 398 Trgb -0.000000 0.000000 0.000000 278 399 276 398 276 398 Trgb -0.000000 0.456347 0.136904 278 399 262 440 260 440 Trgb -0.000000 0.340193 0.102058 278 399 260 440 276 398 Trgb -0.000000 0.423140 0.126942 278 399 263 440 262 440 Trgb -0.000000 0.497820 0.149346 278 399 262 440 278 399 Trgb -0.000000 0.149360 0.044808 276 398 260 440 259 439 Trgb -0.000000 0.074680 0.022404 276 398 259 439 274 397 Trgb -0.212339 0.022980 0.047064 249 455 269 460 253 460 Trgb -0.339481 0.036740 0.075244 252 441 268 447 249 455 Trgb -0.400003 0.043290 0.088659 269 460 249 455 268 447 Trgb -0.531030 0.057471 0.117700 268 447 280 448 269 460 Trgb -0.070112 0.007588 0.015540 242 448 249 455 253 460 Trgb -0.144590 0.015648 0.032048 241 434 252 441 249 455 Trgb -0.062885 0.006806 0.013938 249 455 242 448 241 434 Trgb -0.184671 0.019986 0.040931 280 431 260 426 268 419 Trgb -0.329260 0.035634 0.072979 268 447 252 441 260 426 Trgb -0.379562 0.041078 0.084128 260 426 280 431 268 447 Trgb -0.520810 0.056365 0.115435 280 448 268 447 280 431 Trgb -0.052664 0.005700 0.011673 260 426 253 419 268 419 Trgb -0.134369 0.014542 0.029782 252 441 241 434 260 426 Trgb -0.052664 0.005700 0.011673 253 419 260 426 241 434 Trgb -0.000000 0.000000 0.000000 241 434 242 431 253 419 Trgb -0.000000 0.699838 0.209951 305 398 304 400 303 399 Trgb -0.000000 0.699838 0.209951 304 400 303 401 303 399 Trgb -0.000000 0.699838 0.209951 303 401 301 400 303 399 Trgb -0.000000 0.699838 0.209951 301 400 301 398 303 399 Trgb -0.000000 0.699838 0.209951 301 398 303 397 303 399 Trgb -0.000000 0.699838 0.209951 303 397 305 398 303 399 Trgb -0.000000 0.004567 0.001370 275 399 301 400 303 401 Trgb -0.000000 0.008870 0.002661 275 399 303 401 276 400 Trgb -0.000000 0.000088 0.000026 275 397 301 398 301 400 Trgb -0.000000 0.000176 0.000053 275 397 301 400 275 399 Trgb -0.000000 0.000000 0.000000 277 396 303 397 301 398 Trgb -0.000000 0.000000 0.000000 277 396 301 398 275 397 Trgb -0.222606 0.358895 0.116300 316 395 312 409 312 399 Trgb -0.223481 0.360306 0.116757 312 409 301 403 312 399 Trgb -0.084475 0.136195 0.044134 299 413 292 405 301 403 Trgb -0.166838 0.268984 0.087164 301 403 312 409 299 413 Trgb -0.143692 0.231666 0.075072 307 412 299 413 312 409 Trgb -0.172674 0.278393 0.090214 306 390 316 395 312 399 Trgb -0.090628 0.146114 0.047348 316 395 306 390 307 386 Trgb -0.033050 0.053284 0.017267 298 386 307 386 306 390 Trgb -0.173550 0.279804 0.090671 301 403 306 390 312 399 Trgb -0.059072 0.095239 0.030862 292 405 292 394 301 403 Trgb -0.091503 0.147525 0.047806 306 390 301 403 292 394 Trgb -0.033050 0.053284 0.017267 292 394 298 386 306 390 Trgb -0.026022 0.041954 0.013595 292 405 299 413 289 403 Trgb -0.000619 0.000998 0.000323 292 394 292 405 289 403 Trgb -0.000000 0.000000 0.000000 298 386 292 394 294 389 Trgb -0.000000 0.683893 0.205168 199 372 201 375 199 375 Trgb -0.000000 0.683893 0.205168 201 375 201 378 199 375 Trgb -0.000000 0.683893 0.205168 201 378 199 378 199 375 Trgb -0.000000 0.683893 0.205168 199 378 197 376 199 375 Trgb -0.000000 0.683893 0.205168 197 376 197 373 199 375 Trgb -0.000000 0.683893 0.205168 197 373 199 372 199 375 Trgb -0.000000 0.091401 0.027420 243 347 201 375 199 372 Trgb -0.000000 0.049695 0.014909 243 347 199 372 240 345 Trgb -0.000000 0.127779 0.038334 243 350 201 378 201 375 Trgb -0.000000 0.130442 0.039133 243 350 201 375 243 347 Trgb -0.000000 0.005327 0.001598 240 345 199 372 197 373 Trgb -0.000000 0.002663 0.000799 240 345 197 373 238 346 Trgb -0.144027 0.150940 0.058993 191 371 200 384 189 382 Trgb -0.110751 0.116067 0.045364 199 362 207 369 191 371 Trgb -0.201210 0.210868 0.082416 200 384 191 371 207 369 Trgb -0.289919 0.303835 0.118751 207 369 211 381 200 384 Trgb -0.135622 0.142131 0.055551 200 384 192 390 189 382 Trgb -0.184399 0.193250 0.075530 192 390 200 384 208 388 Trgb -0.281513 0.295026 0.115308 211 381 208 388 200 384 Trgb -0.047625 0.049911 0.019507 183 377 191 371 189 382 Trgb -0.028132 0.029483 0.011523 190 362 199 362 191 371 Trgb -0.022189 0.023254 0.009088 191 371 183 377 190 362 Trgb -0.088563 0.092814 0.036275 207 369 199 362 206 361 Trgb -0.143049 0.149916 0.058593 206 361 215 374 207 369 Trgb -0.253947 0.266136 0.104017 211 381 207 369 215 374 Trgb -0.039219 0.041102 0.016064 192 390 183 377 189 382 Trgb -0.245542 0.257328 0.100574 208 388 211 381 215 374 Trgb -0.005944 0.006229 0.002434 199 362 190 362 206 361 Trgb -0.000000 0.663069 0.198921 237 303 239 304 240 305 Trgb -0.000000 0.663069 0.198921 239 304 243 306 240 305 Trgb -0.000000 0.663069 0.198921 243 306 243 307 240 305 Trgb -0.000000 0.663069 0.198921 243 307 241 306 240 305 Trgb -0.000000 0.663069 0.198921 241 306 237 304 240 305 Trgb -0.000000 0.663069 0.198921 237 304 237 303 240 305 Trgb -0.000000 0.004603 0.001381 237 304 193 373 193 372 Trgb -0.000000 0.002302 0.000690 237 304 193 372 237 303 Trgb -0.000000 0.134078 0.040224 241 306 197 375 193 373 Trgb -0.000000 0.070492 0.021148 241 306 193 373 237 304 Trgb -0.000000 0.193062 0.057919 243 307 199 376 197 375 Trgb -0.000000 0.195363 0.058609 243 307 197 375 241 306 Trgb -0.000000 0.000000 0.000000 195 373 198 373 196 374 Trgb -0.000000 0.000000 0.000000 198 373 199 374 196 374 Trgb -0.000000 0.000000 0.000000 199 374 197 375 196 374 Trgb -0.000000 0.000000 0.000000 197 375 194 376 196 374 Trgb -0.000000 0.000000 0.000000 194 376 193 374 196 374 Trgb -0.000000 0.000000 0.000000 193 374 195 373 196 374 Trgb -0.000000 0.116215 0.034865 194 376 202 423 201 422 Trgb -0.000000 0.058108 0.017432 194 376 201 422 193 374 Trgb -0.000000 0.468066 0.140420 197 375 204 423 202 423 Trgb -0.000000 0.321194 0.096358 197 375 202 423 194 376 Trgb -0.000000 0.498723 0.149617 199 374 206 422 204 423 Trgb -0.000000 0.556831 0.167049 199 374 204 423 197 375 Trgb -0.000000 0.011484 0.003445 202 423 231 450 230 451 Trgb -0.000000 0.005742 0.001723 202 423 230 451 202 423 Trgb -0.000000 0.027990 0.008397 204 422 232 449 231 450 Trgb -0.000000 0.022608 0.006782 204 422 231 450 202 423 Trgb -0.000000 0.021887 0.006566 205 420 233 448 232 449 Trgb -0.000000 0.027629 0.008289 205 420 232 449 204 422 Trgb -0.140855 0.120441 0.052259 222 460 224 457 234 462 Trgb -0.240544 0.205683 0.089245 244 451 244 451 242 459 Trgb -0.170476 0.145769 0.063249 244 451 244 451 242 439 Trgb -0.212239 0.181480 0.078744 238 442 242 439 244 451 Trgb -0.303940 0.259891 0.112766 234 462 244 451 242 459 Trgb -0.225159 0.192527 0.083537 224 457 231 450 234 462 Trgb -0.297267 0.254185 0.110290 244 451 234 462 231 450 Trgb -0.275635 0.235688 0.102265 231 450 238 442 244 451 Trgb -0.044827 0.038331 0.016632 224 457 222 460 219 448 Trgb -0.000000 0.000000 0.000000 230 437 229 437 221 439 Trgb -0.020908 0.017878 0.007757 229 437 230 437 242 439 Trgb -0.095304 0.081492 0.035359 242 439 238 442 229 437 Trgb -0.000000 0.000000 0.000000 229 437 219 448 221 439 Trgb -0.129131 0.110416 0.047909 231 450 224 457 219 448 Trgb -0.084303 0.072086 0.031278 219 448 229 437 231 450 Trgb -0.158699 0.135699 0.058880 238 442 231 450 229 437 Trgb -0.000000 0.697205 0.209161 203 423 202 421 203 422 Trgb -0.000000 0.697205 0.209161 202 421 202 420 203 422 Trgb -0.000000 0.697205 0.209161 202 420 203 421 203 422 Trgb -0.000000 0.697205 0.209161 203 421 205 422 203 422 Trgb -0.000000 0.697205 0.209161 205 422 205 423 203 422 Trgb -0.000000 0.697205 0.209161 205 423 203 423 203 422 Trgb -0.000000 0.053582 0.016075 205 423 177 446 175 445 Trgb -0.000000 0.054544 0.016363 205 423 175 445 203 423 Trgb -0.000000 0.001924 0.000577 202 421 174 444 174 443 Trgb -0.000000 0.000962 0.000289 202 421 174 443 202 420 Trgb -0.000000 0.037965 0.011390 203 423 175 445 174 444 Trgb -0.000000 0.020425 0.006128 203 423 174 444 202 421 Trgb -0.316256 0.106519 0.084555 174 454 183 458 166 458 Trgb -0.035608 0.011993 0.009520 158 444 166 458 164 454 Trgb -0.217204 0.073158 0.058072 166 444 174 454 166 458 Trgb -0.081816 0.027557 0.021875 166 458 158 444 166 444 Trgb -0.046208 0.015564 0.012354 163 434 166 444 158 444 Trgb -0.350542 0.118068 0.093722 193 445 183 444 188 434 Trgb -0.436507 0.147022 0.116706 183 458 174 454 183 444 Trgb -0.410770 0.138353 0.109825 183 444 193 445 183 458 Trgb -0.324951 0.109448 0.086880 188 454 183 458 193 445 Trgb -0.251490 0.084706 0.067239 183 444 175 430 188 434 Trgb -0.337456 0.113660 0.090223 174 454 166 444 183 444 Trgb -0.212668 0.071630 0.056859 175 430 183 444 166 444 Trgb -0.056808 0.019134 0.015188 166 444 163 434 175 430 Trgb -0.095631 0.032210 0.025568 175 430 185 430 188 434 Trgb -0.010600 0.003570 0.002834 163 434 168 430 175 430 Trgb -0.000000 0.699705 0.209912 228 451 227 452 227 452 Trgb -0.000000 0.699705 0.209912 227 452 226 453 227 452 Trgb -0.000000 0.699705 0.209912 226 453 225 453 227 452 Trgb -0.000000 0.699705 0.209912 225 453 226 451 227 452 Trgb -0.000000 0.699705 0.209912 226 451 228 450 227 452 Trgb -0.000000 0.699705 0.209912 228 450 228 451 227 452 Trgb -0.000000 0.012277 0.003683 203 421 226 451 225 453 Trgb -0.000000 0.006561 0.001968 203 421 225 453 202 423 Trgb -0.000000 0.017430 0.005229 204 421 228 450 226 451 Trgb -0.000000 0.017712 0.005313 204 421 226 451 203 421 Trgb -0.000000 0.005716 0.001715 205 421 228 451 228 450 Trgb -0.000000 0.011432 0.003430 205 421 228 450 204 421 Trgb -0.039036 0.368851 0.081578 229 459 226 459 232 458 Trgb -0.014453 0.136564 0.030203 221 457 220 456 226 459 Trgb -0.054216 0.512286 0.113300 232 453 235 454 232 458 Trgb -0.042493 0.401514 0.088801 235 454 232 453 233 446 Trgb -0.040366 0.381422 0.084358 229 448 233 446 232 453 Trgb -0.054876 0.518519 0.114679 226 459 232 453 232 458 Trgb -0.022702 0.214515 0.047443 220 456 223 452 226 459 Trgb -0.043812 0.413980 0.091559 232 453 226 459 223 452 Trgb -0.041026 0.387655 0.085736 223 452 229 448 232 453 Trgb -0.007590 0.071717 0.015861 225 444 228 445 233 446 Trgb -0.018790 0.177548 0.039268 233 446 229 448 225 444 Trgb -0.000000 0.000000 0.000000 225 444 219 450 222 445 Trgb -0.008716 0.082358 0.018215 223 452 220 456 219 450 Trgb -0.008250 0.077951 0.017240 219 450 225 444 223 452 Trgb -0.019450 0.183782 0.040646 229 448 223 452 225 444 Trgb -0.000000 0.675852 0.202756 157 401 155 402 154 399 Trgb -0.000000 0.675852 0.202756 155 402 153 400 154 399 Trgb -0.000000 0.675852 0.202756 153 400 152 397 154 399 Trgb -0.000000 0.675852 0.202756 152 397 154 396 154 399 Trgb -0.000000 0.675852 0.202756 154 396 156 398 154 399 Trgb -0.000000 0.675852 0.202756 156 398 157 401 154 399 Trgb -0.000000 0.082884 0.024865 197 377 155 402 157 401 Trgb -0.000000 0.128084 0.038425 197 377 157 401 198 376 Trgb -0.000000 0.090401 0.027120 198 373 156 398 154 396 Trgb -0.000000 0.045200 0.013560 198 373 154 396 195 371 Trgb -0.000000 0.160724 0.048217 198 376 157 401 156 398 Trgb -0.000000 0.148162 0.044449 198 376 156 398 198 373 Trgb -0.000000 0.624566 0.187370 133 381 132 382 132 381 Trgb -0.000000 0.624566 0.187370 132 382 130 382 132 381 Trgb -0.000000 0.624566 0.187370 130 382 130 380 132 381 Trgb -0.000000 0.624566 0.187370 130 380 132 379 132 381 Trgb -0.000000 0.624566 0.187370 132 379 134 379 132 381 Trgb -0.000000 0.624566 0.187370 134 379 133 381 132 381 Trgb -0.000000 0.236481 0.070944 154 401 132 382 133 381 Trgb -0.000000 0.274378 0.082313 154 401 133 381 156 400 Trgb -0.000000 0.066195 0.019858 153 400 130 382 132 382 Trgb -0.000000 0.132389 0.039717 153 400 132 382 154 401 Trgb -0.000000 0.246080 0.073824 156 400 133 381 134 379 Trgb -0.000000 0.179885 0.053966 156 400 134 379 156 398 Trgb -0.190356 0.052692 0.048610 134 378 117 386 121 372 Trgb -0.466388 0.129100 0.119098 146 386 134 397 134 378 Trgb -0.319369 0.088404 0.081555 117 386 134 378 134 397 Trgb -0.207824 0.057527 0.053070 134 397 122 397 117 386 Trgb -0.050611 0.014010 0.012924 117 386 115 370 121 372 Trgb -0.032644 0.009036 0.008336 115 370 117 386 115 388 Trgb -0.060843 0.016842 0.015537 122 397 115 388 117 386 Trgb -0.157712 0.043656 0.040274 132 362 134 378 121 372 Trgb -0.426508 0.118061 0.108914 149 373 146 386 134 378 Trgb -0.246846 0.068329 0.063035 134 378 132 362 149 373 Trgb -0.107101 0.029646 0.027349 142 364 149 373 132 362 Trgb -0.440979 0.122066 0.112609 134 397 146 386 149 391 Trgb -0.268552 0.074337 0.068578 149 391 132 398 134 397 Trgb -0.182415 0.050494 0.046582 122 397 134 397 132 398 Trgb -0.017967 0.004973 0.004588 115 370 132 362 121 372 Trgb -0.401099 0.111028 0.102425 146 386 149 373 149 391 Trgb -0.000000 0.696208 0.208862 150 441 149 441 152 441 Trgb -0.000000 0.696208 0.208862 149 441 151 441 152 441 Trgb -0.000000 0.696208 0.208862 151 441 153 441 152 441 Trgb -0.000000 0.696208 0.208862 153 441 154 441 152 441 Trgb -0.000000 0.696208 0.208862 154 441 152 441 152 441 Trgb -0.000000 0.696208 0.208862 152 441 150 441 152 441 Trgb -0.000000 0.021860 0.006558 154 399 151 441 149 441 Trgb -0.000000 0.010930 0.003279 154 399 149 441 152 399 Trgb -0.000000 0.059363 0.017809 156 399 153 441 151 441 Trgb -0.000000 0.046076 0.013823 156 399 151 441 154 399 Trgb -0.000000 0.050790 0.015237 157 399 154 441 153 441 Trgb -0.000000 0.061719 0.018516 157 399 153 441 156 399 Trgb -0.039530 0.023325 0.012571 135 441 138 440 141 452 Trgb -0.241096 0.142261 0.076671 141 452 158 453 150 458 Trgb -0.358611 0.211603 0.114043 149 440 162 441 158 453 Trgb -0.265973 0.156940 0.084583 158 453 141 452 149 440 Trgb -0.127736 0.075372 0.040622 138 440 149 440 141 452 Trgb -0.000000 0.000000 0.000000 138 440 135 441 143 428 Trgb -0.251597 0.148458 0.080011 158 453 160 454 150 458 Trgb -0.369112 0.217799 0.117382 162 441 168 442 158 453 Trgb -0.286976 0.169334 0.091262 160 454 158 453 168 442 Trgb -0.048676 0.028722 0.015480 160 429 143 428 153 424 Trgb -0.269050 0.158756 0.085561 162 441 149 440 160 429 Trgb -0.136882 0.080769 0.043530 143 428 160 429 149 440 Trgb -0.088206 0.052047 0.028051 149 440 138 440 143 428 Trgb -0.279552 0.164953 0.088901 168 442 162 441 160 429 Trgb -0.147384 0.086966 0.046870 160 429 162 430 168 442 Trgb -0.000000 0.698453 0.209536 154 397 154 397 154 399 Trgb -0.000000 0.698453 0.209536 154 397 155 399 154 399 Trgb -0.000000 0.698453 0.209536 155 399 155 401 154 399 Trgb -0.000000 0.698453 0.209536 155 401 155 401 154 399 Trgb -0.000000 0.698453 0.209536 155 401 154 399 154 399 Trgb -0.000000 0.698453 0.209536 154 399 154 397 154 399 Trgb -0.000000 0.024988 0.007496 154 399 112 404 112 402 Trgb -0.000000 0.012494 0.003748 154 399 112 402 154 397 Trgb -0.000000 0.040894 0.012268 155 401 112 406 112 404 Trgb -0.000000 0.039188 0.011756 155 401 112 404 154 399 Trgb -0.000000 0.017612 0.005284 155 401 113 406 112 406 Trgb -0.000000 0.030106 0.009032 155 401 112 406 155 401 Trgb -0.013474 0.018613 0.006417 101 396 102 410 99 405 Trgb -0.048974 0.067653 0.023325 110 392 110 400 101 396 Trgb -0.062448 0.086266 0.029743 102 410 101 396 110 400 Trgb -0.140330 0.193851 0.066836 110 400 111 410 102 410 Trgb -0.074641 0.103109 0.035550 104 413 102 410 113 417 Trgb -0.152523 0.210694 0.072643 111 410 113 417 102 410 Trgb -0.000000 0.000000 0.000000 112 391 110 392 101 396 Trgb -0.190994 0.263838 0.090966 121 407 120 394 126 402 Trgb -0.084474 0.116692 0.040233 110 400 110 392 120 394 Trgb -0.181141 0.250228 0.086274 120 394 121 407 110 400 Trgb -0.223523 0.308773 0.106459 111 410 110 400 121 407 Trgb -0.203187 0.280681 0.096774 123 411 121 407 126 402 Trgb -0.205527 0.283915 0.097888 121 407 123 411 113 417 Trgb -0.235716 0.325617 0.112267 113 417 111 410 121 407 Trgb -0.035500 0.049040 0.016908 110 392 112 391 120 394 Trgb -0.000000 0.000000 0.000000 196 373 198 373 196 374 Trgb -0.000000 0.000000 0.000000 198 373 199 374 196 374 Trgb -0.000000 0.000000 0.000000 199 374 196 375 196 374 Trgb -0.000000 0.000000 0.000000 196 375 194 375 196 374 Trgb -0.000000 0.000000 0.000000 194 375 194 374 196 374 Trgb -0.000000 0.000000 0.000000 194 374 196 373 196 374 Trgb -0.000000 0.058250 0.017475 196 375 211 428 209 428 Trgb -0.000000 0.029125 0.008737 196 375 209 428 194 375 Trgb -0.000000 0.089543 0.026863 199 374 214 427 211 428 Trgb -0.000000 0.088459 0.026538 199 374 211 428 196 375 Trgb -0.000000 0.032377 0.009713 198 373 213 426 214 427 Trgb -0.000000 0.061502 0.018451 198 373 214 427 199 374 Trgb -0.000000 0.030777 0.009233 211 428 250 437 250 438 Trgb -0.000000 0.024674 0.007402 211 428 250 438 211 429 Trgb -0.000000 0.024499 0.007350 211 426 250 435 250 437 Trgb -0.000000 0.030690 0.009207 211 426 250 437 211 428 Trgb -0.000000 0.006103 0.001831 212 425 250 434 250 435 Trgb -0.000000 0.012206 0.003662 212 425 250 435 211 426 Trgb -0.191392 0.316343 0.101547 257 446 258 441 262 439 Trgb -0.197092 0.325763 0.104571 248 447 249 440 258 441 Trgb -0.176218 0.291262 0.093496 258 441 257 446 248 447 Trgb -0.088556 0.146370 0.046985 247 447 248 447 257 446 Trgb -0.191022 0.315731 0.101350 258 441 260 430 262 439 Trgb -0.196721 0.325151 0.104374 249 440 251 431 258 441 Trgb -0.175477 0.290037 0.093103 260 430 258 441 251 431 Trgb -0.087553 0.144712 0.046453 251 431 253 425 260 430 Trgb -0.002361 0.003902 0.001253 241 437 240 442 238 433 Trgb -0.111529 0.184341 0.059174 249 440 248 447 241 437 Trgb -0.047688 0.078822 0.025302 240 442 241 437 248 447 Trgb -0.045589 0.075353 0.024188 248 447 247 447 240 442 Trgb -0.002361 0.003902 0.001253 243 426 241 437 238 433 Trgb -0.111158 0.183728 0.058977 251 431 249 440 241 437 Trgb -0.047318 0.078209 0.025105 241 437 243 426 251 431 Trgb -0.044957 0.074307 0.023853 253 425 251 431 243 426 Trgb -0.000000 0.696159 0.208848 210 428 209 426 211 427 Trgb -0.000000 0.696159 0.208848 209 426 211 426 211 427 Trgb -0.000000 0.696159 0.208848 211 426 212 426 211 427 Trgb -0.000000 0.696159 0.208848 212 426 213 428 211 427 Trgb -0.000000 0.696159 0.208848 213 428 212 429 211 427 Trgb -0.000000 0.696159 0.208848 212 429 210 428 211 427 Trgb -0.000000 0.053681 0.016104 212 429 198 454 197 453 Trgb -0.000000 0.036521 0.010956 212 429 197 453 210 428 Trgb -0.000000 0.057934 0.017380 213 428 200 453 198 454 Trgb -0.000000 0.064388 0.019316 213 428 198 454 212 429 Trgb -0.000000 0.012907 0.003872 210 428 197 453 196 451 Trgb -0.000000 0.006454 0.001936 210 428 196 451 209 426 Trgb -0.154398 0.084429 0.047765 188 459 198 464 187 464 Trgb -0.165493 0.090496 0.051198 202 466 187 464 198 464 Trgb -0.296883 0.162344 0.091845 198 464 209 463 202 466 Trgb -0.036020 0.019697 0.011143 183 449 188 459 187 464 Trgb -0.274719 0.150224 0.084989 209 453 194 450 203 442 Trgb -0.225659 0.123397 0.069811 198 464 188 459 194 450 Trgb -0.328338 0.179544 0.101576 194 450 209 453 198 464 Trgb -0.388466 0.212424 0.120178 209 463 198 464 209 453 Trgb -0.223779 0.122368 0.069229 209 440 209 453 203 442 Trgb -0.226457 0.123833 0.070058 209 453 209 440 213 455 Trgb -0.337526 0.184568 0.104419 213 455 209 463 209 453 Trgb -0.136021 0.074380 0.042080 194 450 194 438 203 442 Trgb -0.107282 0.058665 0.033189 188 459 183 449 194 450 Trgb -0.071262 0.038968 0.022046 194 438 194 450 183 449 Trgb -0.000000 0.000000 0.000000 183 449 187 441 194 438 Trgb -0.085080 0.046524 0.026321 194 438 209 440 203 442 Trgb -0.000000 0.695760 0.208728 202 465 202 466 200 465 Trgb -0.000000 0.695760 0.208728 202 466 201 466 200 465 Trgb -0.000000 0.695760 0.208728 201 466 199 465 200 465 Trgb -0.000000 0.695760 0.208728 199 465 198 464 200 465 Trgb -0.000000 0.695760 0.208728 198 464 200 465 200 465 Trgb -0.000000 0.695760 0.208728 200 465 202 465 200 465 Trgb -0.000000 0.053534 0.016060 213 428 202 466 202 465 Trgb -0.000000 0.065180 0.019554 213 428 202 465 213 427 Trgb -0.000000 0.023293 0.006988 211 427 200 465 198 464 Trgb -0.000000 0.011646 0.003494 211 427 198 464 209 427 Trgb -0.000000 0.062864 0.018859 213 427 202 465 200 465 Trgb -0.000000 0.048901 0.014670 213 427 200 465 211 427 Trgb -0.375597 0.014475 0.078015 207 480 205 484 195 485 Trgb -0.566565 0.021835 0.117680 216 466 220 471 207 480 Trgb -0.435134 0.016770 0.090381 205 484 207 480 220 471 Trgb -0.360499 0.013893 0.074879 187 474 207 480 195 485 Trgb -0.551467 0.021253 0.114544 202 460 216 466 207 480 Trgb -0.404938 0.015606 0.084109 207 480 187 474 202 460 Trgb -0.194920 0.007512 0.040486 187 458 202 460 187 474 Trgb -0.435649 0.016790 0.090488 220 471 216 466 215 452 Trgb -0.150481 0.005799 0.031256 185 479 187 474 195 485 Trgb -0.057909 0.002232 0.012028 187 474 185 479 180 460 Trgb -0.057909 0.002232 0.012028 180 460 187 458 187 474 Trgb -0.079101 0.003049 0.016430 215 452 195 446 206 446 Trgb -0.420551 0.016208 0.087352 216 466 202 460 215 452 Trgb -0.216112 0.008329 0.044888 195 446 215 452 202 460 Trgb -0.137011 0.005280 0.028458 202 460 187 458 195 446 Trgb -0.000000 0.000000 0.000000 187 458 180 460 195 446 Trgb - -0.2 20 20 592 592 BDR - -grestore -showpage -%%Trailer -%%Pages: 1 -end -clear cleardictstack -doretreesave restore -%%EOF diff --git a/tests/ps/ge.ps b/tests/ps/ge.ps deleted file mode 100644 index f092962..0000000 --- a/tests/ps/ge.ps +++ /dev/null @@ -1,4 +0,0 @@ -4.2 4 ge = -(abc) (d) ge = -(aba) (ab) ge = -(aba) (aba) ge = diff --git a/tests/ps/gt.ps b/tests/ps/gt.ps deleted file mode 100644 index 436d7da..0000000 --- a/tests/ps/gt.ps +++ /dev/null @@ -1,7 +0,0 @@ -2 1 gt = -1 2 gt = -.5 .3 gt = -.3 .5 gt = -(a) (b) gt = -(b) (a) gt = -2 .5 gt = diff --git a/tests/ps/idiv.ps b/tests/ps/idiv.ps deleted file mode 100644 index e4dbff8..0000000 --- a/tests/ps/idiv.ps +++ /dev/null @@ -1,3 +0,0 @@ -3 2 idiv = -4 2 idiv = --5 2 idiv = diff --git a/tests/ps/known.ps b/tests/ps/known.ps deleted file mode 100644 index 50fd76f..0000000 --- a/tests/ps/known.ps +++ /dev/null @@ -1,4 +0,0 @@ -/mydict 5 dict def -mydict /total 0 put -mydict /total known = -mydict /badname known = diff --git a/tests/ps/le.ps b/tests/ps/le.ps deleted file mode 100644 index f407c55..0000000 --- a/tests/ps/le.ps +++ /dev/null @@ -1,4 +0,0 @@ -4.2 4 le = -(abc) (d) le = -(aba) (ab) le = -(aba) (aba) le = diff --git a/tests/ps/length.ps b/tests/ps/length.ps deleted file mode 100644 index a14ab73..0000000 --- a/tests/ps/length.ps +++ /dev/null @@ -1,11 +0,0 @@ -[1 2 4] length = -[] length = -/ar 20 array def -ar length = -/mydict 5 dict def -mydict length = -mydict /firstkey (firstvalue) put -mydict length = -(abc\n) length = -() length = -/foo length = diff --git a/tests/ps/loop.ps b/tests/ps/loop.ps deleted file mode 100644 index 06a9d76..0000000 --- a/tests/ps/loop.ps +++ /dev/null @@ -1 +0,0 @@ -{(**) == exit} loop diff --git a/tests/ps/matrix.ps b/tests/ps/matrix.ps deleted file mode 100644 index e8f8356..0000000 --- a/tests/ps/matrix.ps +++ /dev/null @@ -1 +0,0 @@ -matrix pstack diff --git a/tests/ps/mod.ps b/tests/ps/mod.ps deleted file mode 100644 index 9b022b5..0000000 --- a/tests/ps/mod.ps +++ /dev/null @@ -1,4 +0,0 @@ -1 3 mod = -0 2 mod = -1 -3 mod = -2 0 mod = diff --git a/tests/ps/mul.ps b/tests/ps/mul.ps deleted file mode 100644 index 0eec1fa..0000000 --- a/tests/ps/mul.ps +++ /dev/null @@ -1 +0,0 @@ -100000 100000 mul pstack diff --git a/tests/ps/ne.ps b/tests/ps/ne.ps deleted file mode 100644 index 48bd2b2..0000000 --- a/tests/ps/ne.ps +++ /dev/null @@ -1,5 +0,0 @@ -4.0 4 ne = -(abc) (abc) ne = -(abc) /abc ne = -[1 2 3] dup ne = -[1 2 3] [1 2 3] ne = diff --git a/tests/ps/neg.ps b/tests/ps/neg.ps deleted file mode 100644 index b4e271d..0000000 --- a/tests/ps/neg.ps +++ /dev/null @@ -1,4 +0,0 @@ -1 neg = --5 neg = -.2 neg = --3.3 neg = diff --git a/tests/ps/not.ps b/tests/ps/not.ps deleted file mode 100644 index 1fc2f25..0000000 --- a/tests/ps/not.ps +++ /dev/null @@ -1,3 +0,0 @@ -true not = -false not = -52 not = diff --git a/tests/ps/or.ps b/tests/ps/or.ps deleted file mode 100644 index 6b97118..0000000 --- a/tests/ps/or.ps +++ /dev/null @@ -1,5 +0,0 @@ -true true or = -true false or = -false true or = -false false or = -17 5 or = diff --git a/tests/ps/pathbbox.ps b/tests/ps/pathbbox.ps deleted file mode 100644 index 096880a..0000000 --- a/tests/ps/pathbbox.ps +++ /dev/null @@ -1,2 +0,0 @@ -clippath -pathbbox pstack diff --git a/tests/ps/pop.ps b/tests/ps/pop.ps deleted file mode 100644 index 5fb8477..0000000 --- a/tests/ps/pop.ps +++ /dev/null @@ -1 +0,0 @@ -1 2 3 pop pop pstack diff --git a/tests/ps/repeat.ps b/tests/ps/repeat.ps deleted file mode 100644 index d99e1da..0000000 --- a/tests/ps/repeat.ps +++ /dev/null @@ -1 +0,0 @@ -mark 3 {(***) =} repeat pstack diff --git a/tests/ps/sin.ps b/tests/ps/sin.ps deleted file mode 100644 index 40327c8..0000000 --- a/tests/ps/sin.ps +++ /dev/null @@ -1,2 +0,0 @@ -0 sin == -90 sin == diff --git a/tests/ps/snowflak.ps b/tests/ps/snowflak.ps deleted file mode 100644 index b177559..0000000 --- a/tests/ps/snowflak.ps +++ /dev/null @@ -1,93 +0,0 @@ -%! -%% Elizabeth D. Zwicky -%% zwicky@erg.sri.com -%% multiflake - -/snowflaksave save def % prevent left over effects -/newflake -{/seed usertime def -seed srand -/strokecolor [rand 99 mod 100 div - rand 99 mod 100 div - 100 rand 22 mod sub 100 div] def -/fillcolor [rand 99 mod 100 div - 100 rand 22 mod sub 100 div - rand 99 mod 100 div] def -/eofillcolor [rand 99 mod 100 div - rand 22 mod 100 div - 100 rand 22 mod sub 100 div] def - -/colorfill {fillcolor aload pop setrgbcolor fill } def -/colorstroke {strokecolor aload pop setrgbcolor stroke } def -/eocolorfill {eofillcolor aload pop setrgbcolor eofill } def -/arm {0 0 moveto - 5 {3 {x y x y x y curveto} repeat} repeat - seed srand - 0 0 moveto - 5 {3 {x neg y x neg y x neg y curveto} repeat} repeat - seed srand -} def - - newpath - -0 0 moveto boxsize 0 rlineto 0 boxsize rlineto boxsize neg 0 rlineto -0 0 lineto - -rand 99 mod 100 div -100 rand 22 mod sub 100 div -100 rand 22 mod sub 100 div - sethsbcolor fill -seed srand -boxsize 2 div boxsize 2 div translate - -%% If the device you are using can handle complex fills, replace the -%% next three lines with: -%% -%6 {arm 60 rotate} repeat -%gsave colorfill grestore gsave eocolorfill grestore colorstroke -%% -%% This will be not only faster, but prettier. On a LaserWriter or a -%% Tektronix Phaser II PS it gives a limitcheck. - -6 {arm 60 rotate colorfill} repeat -6 {arm 60 rotate eocolorfill} repeat -6 {arm 60 rotate} repeat colorstroke -} def - -1 setlinewidth -clippath pathbbox /ury exch def /urx exch def /lly exch def /llx exch def -/minsize 250 def -/pagewidth urx llx sub def -/pageheight ury lly sub def -/inwidth pagewidth minsize div def -/inheight pageheight minsize div def - -/boxsize - inwidth inheight gt - {pagewidth inwidth truncate div} - {pageheight inheight truncate div} - ifelse -def - -/inwidth pagewidth boxsize div cvi def -/inheight pageheight boxsize div cvi def - -/x {rand 70 mod abs} def -/y {rand 120 mod abs} def - -llx lly translate - -inheight { - inwidth { - gsave - newflake - grestore - boxsize 0 translate - } repeat - boxsize inwidth mul neg boxsize translate -} repeat - - -showpage -clear cleardictstack -snowflaksave restore diff --git a/tests/ps/test-0base.ps b/tests/ps/test-0base.ps deleted file mode 100644 index 8883633..0000000 --- a/tests/ps/test-0base.ps +++ /dev/null @@ -1,13 +0,0 @@ -initunittest - -[true] null true initunittestdict {true} unittest -[false] null true initunittestdict {false} unittest -[/foo] null true initunittestdict {/foo} unittest -[0] null true initunittestdict {0} unittest -[-1] null true initunittestdict {-1} unittest -[2147483647] null true initunittestdict {2147483647} unittest -[-2147483648] null true initunittestdict {-2147483648} unittest -[2147483648.0] null true initunittestdict {2147483648} unittest -[-2147483649.0] null true initunittestdict {-2147483649} unittest - -unittestresult diff --git a/tests/ps/test-abs.ps b/tests/ps/test-abs.ps deleted file mode 100644 index 1c12681..0000000 --- a/tests/ps/test-abs.ps +++ /dev/null @@ -1,11 +0,0 @@ -initunittest - -true /abs [[/integertype /realtype]] typecheck -false /abs [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {abs} unittest -[4.5] null true initunittestdict {4.5 abs} unittest -[3] null true initunittestdict {-3 abs} unittest -[0] null true initunittestdict {0 abs} unittest - -unittestresult diff --git a/tests/ps/test-add.ps b/tests/ps/test-add.ps deleted file mode 100644 index d3519aa..0000000 --- a/tests/ps/test-add.ps +++ /dev/null @@ -1,17 +0,0 @@ -initunittest - -true /add [[/integertype /realtype] dup] typecheck -false /add [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] dup] typecheck - -[] /stackunderflow true initunittestdict {add} unittest -[1] /stackunderflow true initunittestdict {1 add} unittest -[7] null true initunittestdict {3 4 add} unittest -[11.0] null true initunittestdict {9.9 1.1 add} unittest -[2147483647] null true initunittestdict {2147483646 1 add} unittest -[-2147483648] null true initunittestdict {-2147483647 -1 add} unittest -[2147483648.0] null true initunittestdict {2147483647 1 add} unittest -[-2147483649.0] null true initunittestdict {-2147483648 -1 add} unittest -%[4.29490176e+09] null true initunittestdict {2147450880 2147450880 add} unittest -%[] null true initunittestdict {2.25176549e+38 2.25176549e+38 add} unittest - -unittestresult diff --git a/tests/ps/test-aload.ps b/tests/ps/test-aload.ps deleted file mode 100644 index 9eef9c9..0000000 --- a/tests/ps/test-aload.ps +++ /dev/null @@ -1,13 +0,0 @@ -initunittest - -true /aload [[/arraytype /proctype]] typecheck -false /aload [[/booleantype /integertype /realtype /nametype /stringtype /dicttype /nulltype /marktype /operatortype /marktype /filetype /savetype]] typecheck - -[] /stackunderflow true initunittestdict {aload} unittest -[[1 2 3] noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {[1 2 3] noaccess aload} unittest -[[1 2 3] executeonly] /invalidaccess true initunittestdict /executeonly /readable /writable 3 setunittestmask {[1 2 3] executeonly aload} unittest -[1 2 3 [1 2 3]] null true initunittestdict {[1 2 3] aload} unittest -[23 (ab) -6 [23 (ab) -6]] null true initunittestdict {[23 (ab) -6] aload} unittest -[23 (ab) -6 {23 (ab) -6}] null true initunittestdict {{23 (ab) -6} aload} unittest - -unittestresult diff --git a/tests/ps/test-anchorsearch.ps b/tests/ps/test-anchorsearch.ps deleted file mode 100644 index 650dc72..0000000 --- a/tests/ps/test-anchorsearch.ps +++ /dev/null @@ -1,19 +0,0 @@ -initunittest - -true /anchorsearch [[/stringtype] dup] typecheck -false /anchorsearch [[/booleantype /integertype /realtype /nametype /arraytype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] dup] typecheck - -[] /stackunderflow true initunittestdict {anchorsearch} unittest -[(foo)] /stackunderflow true initunittestdict {(foo) anchorsearch} unittest -[(abbc) noaccess (ab)] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {(abbc) noaccess (ab) anchorsearch} unittest -[(abbc) (ab) noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {(abbc) (ab) noaccess anchorsearch} unittest -[(abbc) noaccess (ab) noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {(abbc) noaccess (ab) noaccess anchorsearch} unittest -[(abbc) executeonly (ab)] /invalidaccess true initunittestdict /readable /writable /executeonly 3 setunittestmask {(abbc) executeonly (ab) anchorsearch} unittest -[(abbc) (ab) executeonly ] /invalidaccess true initunittestdict /readable /writable /executeonly 3 setunittestmask {(abbc) (ab) executeonly anchorsearch} unittest -[(abbc) executeonly (ab) executeonly] /invalidaccess true initunittestdict /readable /writable /executeonly 3 setunittestmask {(abbc) executeonly (ab) executeonly anchorsearch} unittest -[(bc) (ab) true] null true initunittestdict {(abbc) (ab) anchorsearch} unittest -[(abbc) false] null true initunittestdict {(abbc) (bb) anchorsearch} unittest -[(abbc) false] null true initunittestdict {(abbc) (bc) anchorsearch} unittest -[(abbc) false] null true initunittestdict {(abbc) (B) anchorsearch} unittest - -unittestresult diff --git a/tests/ps/test-and.ps b/tests/ps/test-and.ps deleted file mode 100644 index 33d16e8..0000000 --- a/tests/ps/test-and.ps +++ /dev/null @@ -1,21 +0,0 @@ -initunittest - -true /and [[/booleantype] dup] typecheck -true /and [[/integertype] dup] typecheck -false /and [[/realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] dup] typecheck -false /and [[/booleantype] [/integertype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck -false /and [[/integertype] [/booleantype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck -false /and [[/integertype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] [/booleantype]] typecheck -false /and [[/booleantype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] [/integertype]] typecheck - -[] /stackunderflow true initunittestdict {and} unittest -[1] /stackunderflow true initunittestdict {1 and} unittest -clear -[true] null true initunittestdict {true true and} unittest -[false] null true initunittestdict {true false and} unittest -[false] null true initunittestdict {false true and} unittest -[false] null true initunittestdict {false false and} unittest -[1] null true initunittestdict {99 1 and} unittest -[4] null true initunittestdict {52 7 and} unittest - -unittestresult diff --git a/tests/ps/test-array.ps b/tests/ps/test-array.ps deleted file mode 100644 index 20782af..0000000 --- a/tests/ps/test-array.ps +++ /dev/null @@ -1,11 +0,0 @@ -initunittest - -true /array [[/integertype]] typecheck -false /array [[/booleantype /realtype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {array} unittest -[[null]] null true initunittestdict {1 array} unittest -[65536] /rangecheck true initunittestdict {65536 array} unittest -[-1] /rangecheck true initunittestdict {-1 array} unittest - -unittestresult diff --git a/tests/ps/test-astore.ps b/tests/ps/test-astore.ps deleted file mode 100644 index 279b9d6..0000000 --- a/tests/ps/test-astore.ps +++ /dev/null @@ -1,14 +0,0 @@ -initunittest - -true /astore [.unittestdict /anytypes get [/arraytype /proctype]] typecheck -false /astore [.unittestdict /anytypes get [/booleantype /integertype /realtype /nametype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype]] typecheck - -[] /stackunderflow true initunittestdict {astore} unittest -[1 2 [null null null]] /stackunderflow true initunittestdict {1 2 3 array astore} unittest -[1 [null] noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {1 1 array noaccess astore} unittest -[1 [null] readonly] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {1 1 array readonly astore} unittest -[1 [null] executeonly] /invalidaccess true initunittestdict /executeonly /readable /writable 3 setunittestmask {1 1 array executeonly astore} unittest -[1 [2]] null true initunittestdict {1 2 1 array astore} unittest -[[(a) (bcd) (ef)]] null true initunittestdict {(a) (bcd) (ef) 3 array astore} unittest - -unittestresult diff --git a/tests/ps/test-atan.ps b/tests/ps/test-atan.ps deleted file mode 100644 index 122d7be..0000000 --- a/tests/ps/test-atan.ps +++ /dev/null @@ -1,16 +0,0 @@ -initunittest - -true /atan [[/integertype /realtype] dup] typecheck -false /atan [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] dup] typecheck -false /atan [[/integertype /realtype] [/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck -false /atan [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] [/integertype /realtype]] typecheck - -[] /stackunderflow true initunittestdict {atan} unittest -[1] /stackunderflow true initunittestdict {1 atan} unittest -[0 0] /undefinedresult true initunittestdict {0 0 atan} unittest -[0.0] null true initunittestdict {0 1 atan} unittest -[90.0] null true initunittestdict {1 0 atan} unittest -[270.0] null true initunittestdict {-100 0 atan} unittest -[45.0] null true initunittestdict {4 4 atan} unittest - -unittestresult diff --git a/tests/ps/test-begin.ps b/tests/ps/test-begin.ps deleted file mode 100644 index fd45e1f..0000000 --- a/tests/ps/test-begin.ps +++ /dev/null @@ -1,11 +0,0 @@ -initunittest - -true /begin [[/dicttype]] typecheck -false /begin [[/booleantype /integertype /realtype /nametype /arraytype /stringtype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {begin} unittest -[0 dict] /invalidaccess true initunittestdict {0 dict noaccess begin} unittest -[-1] null true initunittestdict {5 array dictstack length 1 dict begin 5 array dictstack length sub} unittest -% FIXME - -unittestresult diff --git a/tests/ps/test-bind.ps b/tests/ps/test-bind.ps deleted file mode 100644 index 1254013..0000000 --- a/tests/ps/test-bind.ps +++ /dev/null @@ -1,9 +0,0 @@ -initunittest - -true /bind [[/arraytype /proctype]] typecheck -false /bind [[/booleantype /integertype /realtype /nametype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype]] typecheck - -[] /stackunderflow true initunittestdict {bind} unittest -% FIXME - -unittestresult diff --git a/tests/ps/test-bitshift.ps b/tests/ps/test-bitshift.ps deleted file mode 100644 index 0c2fdc3..0000000 --- a/tests/ps/test-bitshift.ps +++ /dev/null @@ -1,13 +0,0 @@ -initunittest - -true /bitshift [[/integertype] dup] typecheck -false /bitshift [[/booleantype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] dup] typecheck -false /bitshift [[/integertype] [/booleantype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck -false /bitshift [[/booleantype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] [/integertype]] typecheck - -[] /stackunderflow true initunittestdict {bitshift} unittest -[1] /stackunderflow true initunittestdict {1 bitshift} unittest -[56] null true initunittestdict {7 3 bitshift} unittest -[17] null true initunittestdict {142 -3 bitshift} unittest - -unittestresult diff --git a/tests/ps/test-ceiling.ps b/tests/ps/test-ceiling.ps deleted file mode 100644 index ed7893c..0000000 --- a/tests/ps/test-ceiling.ps +++ /dev/null @@ -1,11 +0,0 @@ -initunittest - -true /ceiling [[/integertype /realtype]] typecheck -false /ceiling [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {ceiling} unittest -[4.0] null true initunittestdict {3.2 ceiling} unittest -[-4.0] null true initunittestdict {-4.8 ceiling} unittest -[99] null true initunittestdict {99 ceiling} unittest - -unittestresult diff --git a/tests/ps/test-clear.ps b/tests/ps/test-clear.ps deleted file mode 100644 index bade4c6..0000000 --- a/tests/ps/test-clear.ps +++ /dev/null @@ -1,5 +0,0 @@ -initunittest - -[] null true initunittestdict {1 2 3 clear} unittest - -unittestresult diff --git a/tests/ps/test-cleartomark.ps b/tests/ps/test-cleartomark.ps deleted file mode 100644 index c7ab217..0000000 --- a/tests/ps/test-cleartomark.ps +++ /dev/null @@ -1,7 +0,0 @@ -initunittest - -[] /unmatchedmark true initunittestdict {cleartomark} unittest -[] null true initunittestdict {mark 1 2 3 cleartomark} unittest -[1 2 3] null true initunittestdict {1 2 3 mark 1 2 3 cleartomark} unittest - -unittestresult diff --git a/tests/ps/test-closefile.ps b/tests/ps/test-closefile.ps deleted file mode 100644 index 2247718..0000000 --- a/tests/ps/test-closefile.ps +++ /dev/null @@ -1,8 +0,0 @@ -initunittest - -true /closefile [[/filetype]] typecheck -false /closefile [[/booleantype /integertype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /savetype /proctype]] typecheck - -[] null true initunittestdict {(.)(r) file closefile} unittest - -unittestresult diff --git a/tests/ps/test-concatmatrix.ps b/tests/ps/test-concatmatrix.ps deleted file mode 100644 index be6aab5..0000000 --- a/tests/ps/test-concatmatrix.ps +++ /dev/null @@ -1,24 +0,0 @@ -initunittest - -true /concatmatrix [[/arraytype /proctype] dup dup] typecheck -false /concatmatrix [[/booleantype /integertype /realtype /nametype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype] dup dup] typecheck -false /concatmatrix [[/arraytype /proctype] [/booleantype /integertype /realtype /nametype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype] dup] typecheck -false /concatmatrix [[/booleantype /integertype /realtype /nametype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype] [/arraytype /proctype] dup] typecheck -false /concatmatrix [[/booleantype /integertype /realtype /nametype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype] dup [/arraytype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {concatmatrix} unittest -[[]] /stackunderflow true initunittestdict {[] concatmatrix} unittest clear -[[] []] /stackunderflow true initunittestdict {[] [] concatmatrix} unittest -[[] [] []] /rangecheck true initunittestdict {[] [] [] concatmatrix} unittest -[[null null null null null null] [] []] /rangecheck true initunittestdict {6 array [] [] concatmatrix} unittest -[[null null null null null null] [null null null null null null] []] /rangecheck true initunittestdict {6 array 6 array [] concatmatrix} unittest -[[1 0 0 1 0 0] [1 0 0 1 0 0] [null null null null null null]] /invalidaccess true initunittestdict {[1 0 0 1 0 0] noaccess [1 0 0 1 0 0] 6 array concatmatrix} unittest -[[1 0 0 1 0 0] [1 0 0 1 0 0] [null null null null null null]] /invalidaccess true initunittestdict {[1 0 0 1 0 0] [1 0 0 1 0 0] noaccess 6 array concatmatrix} unittest -[[1 0 0 1 0 0] [1 0 0 1 0 0] [null null null null null null]] /invalidaccess true initunittestdict {[1 0 0 1 0 0] [1 0 0 1 0 0] 6 array noaccess concatmatrix} unittest -[[1 0 0 1 0 0] [1 0 0 1 0 0] [null null null null null null]] /invalidaccess true initunittestdict {[1 0 0 1 0 0] executeonly [1 0 0 1 0 0] 6 array concatmatrix} unittest -[[1 0 0 1 0 0] [1 0 0 1 0 0] [null null null null null null]] /invalidaccess true initunittestdict {[1 0 0 1 0 0] [1 0 0 1 0 0] executeonly 6 array concatmatrix} unittest -[[1 0 0 1 0 0] [1 0 0 1 0 0] [null null null null null null]] /invalidaccess true initunittestdict {[1 0 0 1 0 0] [1 0 0 1 0 0] 6 array executeonly concatmatrix} unittest -[[1 0 0 1 0 0] [1 0 0 1 0 0] [null null null null null null]] /invalidaccess true initunittestdict {[1 0 0 1 0 0] [1 0 0 1 0 0] 6 array readonly concatmatrix} unittest -[[.5 .0 .0 .5 5.0 5.0]] null true initunittestdict {[1 0 0 1 10 10] [.5 0 0 .5 0 0] 6 array concatmatrix} unittest - -unittestresult diff --git a/tests/ps/test-copy.ps b/tests/ps/test-copy.ps deleted file mode 100644 index 20616ff..0000000 --- a/tests/ps/test-copy.ps +++ /dev/null @@ -1,33 +0,0 @@ -initunittest - -true /copy [.unittestdict /anytypes get [/integertype]] typecheck -true /copy [[/arraytype /proctype] dup] typecheck -true /copy [[/dicttype] dup] typecheck -true /copy [[/stringtype] dup] typecheck -% FIXME: packedarray -% FIXME: gstate -false /copy [.unittestdict /anytypes get [/booleantype /realtype /nametype /nulltype /operatortype /marktype /filetype /savetype]] typecheck - -[] /stackunderflow true initunittestdict {copy} unittest -[[]] /stackunderflow true initunittestdict {[] copy} unittest -[1 dict] /stackunderflow true initunittestdict {1 dict copy} unittest -[()] /stackunderflow true initunittestdict {() copy} unittest -[[][]] /invalidaccess true initunittestdict {[] noaccess [] copy} unittest -[[][]] /invalidaccess true initunittestdict {[] [] noaccess copy} unittest -[[][]] /invalidaccess true initunittestdict {[] executeonly [] copy} unittest -[[][]] /invalidaccess true initunittestdict {[] [] executeonly copy} unittest -[[][]] /invalidaccess true initunittestdict {[] [] readonly copy} unittest -[1 dict 1 dict] /invalidaccess true initunittestdict {1 dict noaccess 1 dict copy} unittest -[1 dict 1 dict] /invalidaccess true initunittestdict {1 dict 1 dict noaccess copy} unittest -[1 dict 1 dict] /invalidaccess true initunittestdict {1 dict 1 dict readonly copy} unittest -[() ()] /invalidaccess true initunittestdict {() noaccess () copy} unittest -[() ()] /invalidaccess true initunittestdict {() () noaccess copy} unittest -[() ()] /invalidaccess true initunittestdict {() executeonly () copy} unittest -[() ()] /invalidaccess true initunittestdict {() () executeonly copy} unittest -[() ()] /invalidaccess true initunittestdict {() () readonly copy} unittest -[1] /rangecheck true initunittestdict {1 copy} unittest -[[1] []] /rangecheck true initunittestdict {[1] [] copy} unittest -[2 dict 1 dict] /rangecheck true initunittestdict {2 dict 1 dict copy} unittest -[(a) ()] /rangecheck true initunittestdict {(a) () copy} unittest - -unittestresult diff --git a/tests/ps/test-cos.ps b/tests/ps/test-cos.ps deleted file mode 100644 index 933be23..0000000 --- a/tests/ps/test-cos.ps +++ /dev/null @@ -1,10 +0,0 @@ -initunittest - -true /cos [[/integertype /realtype]] typecheck -false /cos [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {cos} unittest -[1.0] null true initunittestdict {0 cos} unittest -[0.0] null true initunittestdict {90 cos} unittest - -unittestresult diff --git a/tests/ps/test-count.ps b/tests/ps/test-count.ps deleted file mode 100644 index 6dc3684..0000000 --- a/tests/ps/test-count.ps +++ /dev/null @@ -1,6 +0,0 @@ -initunittest - -[0] null true initunittestdict {clear count} unittest -[1 2 3 3] null true initunittestdict {1 2 3 count} unittest - -unittestresult diff --git a/tests/ps/test-countdictstack.ps b/tests/ps/test-countdictstack.ps deleted file mode 100644 index 7ee0ae1..0000000 --- a/tests/ps/test-countdictstack.ps +++ /dev/null @@ -1,11 +0,0 @@ -initunittest - -/setglobal where not { - [2] null true initunittestdict {countdictstack} unittest - [3] null true initunittestdict {1 dict begin countdictstack end} unittest -} { - [3] null true initunittestdict {countdictstack} unittest - [4] null true initunittestdict {1 dict begin countdictstack end} unittest -} ifelse - -unittestresult diff --git a/tests/ps/test-counttomark.ps b/tests/ps/test-counttomark.ps deleted file mode 100644 index caa7412..0000000 --- a/tests/ps/test-counttomark.ps +++ /dev/null @@ -1,7 +0,0 @@ -initunittest - -[] /unmatchedmark true initunittestdict {counttomark} unittest -{//mark 0} cvlit null true initunittestdict {mark counttomark} unittest -{//mark 0 1 2} cvlit null true initunittestdict {mark 0 1 counttomark} unittest - -unittestresult diff --git a/tests/ps/test-currentdict.ps b/tests/ps/test-currentdict.ps deleted file mode 100644 index ab58f55..0000000 --- a/tests/ps/test-currentdict.ps +++ /dev/null @@ -1,7 +0,0 @@ -initunittest - -/foo 1 dict def - -[foo] null true initunittestdict {foo begin currentdict end} unittest - -unittestresult diff --git a/tests/ps/test-currentfile.ps b/tests/ps/test-currentfile.ps deleted file mode 100644 index f2dcfa9..0000000 --- a/tests/ps/test-currentfile.ps +++ /dev/null @@ -1,7 +0,0 @@ -initunittest - -/foo (tests/ps/testtest-currentfile.ps) (r) file def - -foo cvx exec - -unittestresult diff --git a/tests/ps/test-cvi.ps b/tests/ps/test-cvi.ps deleted file mode 100644 index e0b22a7..0000000 --- a/tests/ps/test-cvi.ps +++ /dev/null @@ -1,21 +0,0 @@ -initunittest - -true /cvi [[/integertype /realtype]] typecheck -false /cvi [[/booleantype /nametype /arraytype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {cvi} unittest -[(foo) noaccess] /invalidaccess true initunittestdict {(foo) noaccess cvi} unittest -[(foo) noaccess] /invalidaccess true initunittestdict {(foo) executeonly cvi} unittest -[2147483648.0] /rangecheck true initunittestdict {2147483648.0 cvi} unittest -[-2147483649.0] /rangecheck true initunittestdict {-2147483649.0 cvi} unittest -% XXX: what causes /undefinedresult? -[(foo)] /typecheck true initunittestdict {(foo) cvi} unittest -[()] /syntaxerror true initunittestdict {() cvi} unittest -[33] null true initunittestdict {(3.3E1) cvi} unittest -[3] null true initunittestdict {(3 4) cvi} unittest -[-47] null true initunittestdict {-47.8 cvi} unittest -[520] null true initunittestdict {520.9 cvi} unittest -[2147483647] null true initunittestdict {2147483647.0 cvi} unittest -[-2147483648] null true initunittestdict {-2147483648.0 cvi} unittest - -unittestresult diff --git a/tests/ps/test-cvlit.ps b/tests/ps/test-cvlit.ps deleted file mode 100644 index 185976c..0000000 --- a/tests/ps/test-cvlit.ps +++ /dev/null @@ -1,10 +0,0 @@ -initunittest - -true /cvlit [.unittestdict /anytypes get] typecheck - -[] /stackunderflow true initunittestdict {cvlit} unittest -[/moveto] null true initunittestdict /executable 1 setunittestmask {{moveto} 0 get cvlit} unittest -[1] null true initunittestdict {1 cvlit} unittest -[/foo] null true initunittestdict /executable 1 setunittestmask {/foo cvlit} unittest - -unittestresult diff --git a/tests/ps/test-cvn.ps b/tests/ps/test-cvn.ps deleted file mode 100644 index a662b44..0000000 --- a/tests/ps/test-cvn.ps +++ /dev/null @@ -1,14 +0,0 @@ -initunittest - -true /cvn [[/stringtype]] typecheck -false /cvn [[/booleantype /integertype /realtype /nametype /arraytype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {cvn} unittest -[(foo)] /invalidaccess true initunittestdict {(foo) noaccess cvn} unittest -[(foo)] /invalidaccess true initunittestdict {(foo) executeonly cvn} unittest -% XXX: how does /limitcheck happen? -%[(foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo)] /limitcheck true initunittestdict {(foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo) cvn} unittest -[/abc] null true initunittestdict /executable 1 setunittestmask {(abc) cvn} unittest -[{abc} 0 get] null true initunittestdict /executable 1 setunittestmask {(abc) cvx cvn} unittest - -unittestresult diff --git a/tests/ps/test-cvr.ps b/tests/ps/test-cvr.ps deleted file mode 100644 index ba4eb28..0000000 --- a/tests/ps/test-cvr.ps +++ /dev/null @@ -1,18 +0,0 @@ -initunittest - -true /cvr [[/integertype /realtype]] typecheck -false /cvr [[/booleantype /nametype /arraytype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {cvr} unittest -[(foo) noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {(foo) noaccess cvr} unittest -[(foo) executeonly] /invalidaccess true initunittestdict /executeonly /readable /writable 3 setunittestmask {(foo) executeonly cvr} unittest -[(foo)] /typecheck true initunittestdict {(foo) cvr} unittest -[()] /syntaxerror true initunittestdict {() cvr} unittest -[(1e+400)] /limitcheck true initunittestdict {(1e+400) cvr} unittest -% XXX: how does /undefinedresult happen? -[1.0] null true initunittestdict {1 cvr} unittest -[-1.0] null true initunittestdict {-1 cvr} unittest -[3.14] null true initunittestdict {3.14 cvr} unittest -[1e+10] null true initunittestdict {(1e+10) cvr} unittest - -unittestresult diff --git a/tests/ps/test-cvrs.ps b/tests/ps/test-cvrs.ps deleted file mode 100644 index 71f8ad7..0000000 --- a/tests/ps/test-cvrs.ps +++ /dev/null @@ -1,22 +0,0 @@ -initunittest - -true /cvrs [[/integertype /realtype] [/integertype] [/stringtype]] typecheck -false /cvrs [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] [/booleantype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] [/booleantype /integertype /realtype /nametype /arraytype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {cvrs} unittest -[1] /stackunderflow true initunittestdict {1 cvrs} unittest -[1 1] /stackunderflow true initunittestdict {1 1 cvrs} unittest -[1 10 (foo) noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {1 10 (foo) noaccess cvrs} unittest -[1 10 (foo) executeonly] /invalidaccess true initunittestdict /readable /writable /executeonly 3 setunittestmask {1 10 (foo) executeonly cvrs} unittest -[1 10 (foo) readonly] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {1 10 (foo) readonly cvrs} unittest -[100 10 2 string] /rangecheck true initunittestdict {100 10 2 string cvrs} unittest -[1 1 (foo)] /rangecheck true initunittestdict {1 1 (foo) cvrs} unittest -[1 37 (foo)] /rangecheck true initunittestdict {1 37 (foo) cvrs} unittest -[(123)] null true initunittestdict {123 10 12 string cvrs} unittest -[(-123)] null true initunittestdict {-123 10 12 string cvrs} unittest -[(123.4)] null true initunittestdict {123.4 10 12 string cvrs} unittest -[(7B)] null true initunittestdict {123 16 12 string cvrs} unittest -[(FFFFFF85)] null true initunittestdict {-123 16 12 string cvrs} unittest -[(7B)] null true initunittestdict {123.4 16 12 string cvrs} unittest - -unittestresult diff --git a/tests/ps/test-cvs.ps b/tests/ps/test-cvs.ps deleted file mode 100644 index 44a4331..0000000 --- a/tests/ps/test-cvs.ps +++ /dev/null @@ -1,15 +0,0 @@ -initunittest - -true /cvs [.unittestdict /anytypes get [/stringtype]] typecheck -false /cvs [.unittestdict /anytypes get [/booleantype /integertype /realtype /nametype /arraytype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {cvs} unittest -[1] /stackunderflow true initunittestdict {1 cvs} unittest -[1 (foo) noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {1 (foo) noaccess cvs} unittest -[1 (foo) executeonly] /invalidaccess true initunittestdict /readable /writable /executeonly 3 setunittestmask {1 (foo) executeonly cvs} unittest -[1 (foo) readonly] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {1 (foo) readonly cvs} unittest -[100 2 string] /rangecheck true initunittestdict {100 2 string cvs} unittest -[(579)] null true initunittestdict {123 456 add 20 string cvs} unittest -[(--nostringval--)] null true initunittestdict {mark 20 string cvs} unittest - -unittestresult diff --git a/tests/ps/test-cvx.ps b/tests/ps/test-cvx.ps deleted file mode 100644 index 9f25d4d..0000000 --- a/tests/ps/test-cvx.ps +++ /dev/null @@ -1,6 +0,0 @@ -initunittest - -[] /stackunderflow true initunittestdict {cvx} unittest -[{foo} 0 get] null true initunittestdict /executable 1 setunittestmask {/foo cvx} unittest - -unittestresult diff --git a/tests/ps/test-def.ps b/tests/ps/test-def.ps deleted file mode 100644 index b43793b..0000000 --- a/tests/ps/test-def.ps +++ /dev/null @@ -1,23 +0,0 @@ -initunittest - -false .setglobal - -% XXX: how does /typecheck happen? -% XXX: how does /limitcheck happen? - -[] /stackunderflow true initunittestdict {def} unittest -[/foo] /stackunderflow true initunittestdict {/foo def} unittest -1 dict readonly begin -[/foo 1] /invalidaccess true initunittestdict {/foo 1 def} unittest -end /setglobal where { - true setglobal 1 dict begin false setglobal - [/foo (foo)] /invalidaccess true initunittestdict {/foo (foo) def} unittest - end -} { - 0 dict begin - [/foo 1] /dictfull true initunittestdict {/foo 1 def} unittest - end -} ifelse -[1] null true initunittestdict {/foo 1 def foo} unittest - -unittestresult diff --git a/tests/ps/test-dict.ps b/tests/ps/test-dict.ps deleted file mode 100644 index eff7cc5..0000000 --- a/tests/ps/test-dict.ps +++ /dev/null @@ -1,11 +0,0 @@ -initunittest - -true /dict [[/integertype]] typecheck -false /dict [[/booleantype /realtype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {dict} unittest -[-1] /rangecheck true initunittestdict {-1 dict} unittest -[65536] /limitcheck true initunittestdict {65536 dict} unittest -/d 1 dict def [d /foo 1] /dictfull true initunittestdict {//d dup /bar 1 put /foo 1 put} unittest - -unittestresult diff --git a/tests/ps/test-dictstack.ps b/tests/ps/test-dictstack.ps deleted file mode 100644 index 259a7fb..0000000 --- a/tests/ps/test-dictstack.ps +++ /dev/null @@ -1,9 +0,0 @@ -initunittest - -true /dictstack [[/arraytype /proctype]] typecheck -false /dictstack [[/booleantype /integertype /realtype /nametype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype]] typecheck - -[] /stackunderflow true initunittestdict {dictstack} unittest -% XXX: FIXME - -unittestresult diff --git a/tests/ps/test-div.ps b/tests/ps/test-div.ps deleted file mode 100644 index 33a2f10..0000000 --- a/tests/ps/test-div.ps +++ /dev/null @@ -1,14 +0,0 @@ -initunittest - -true /div [[/integertype /realtype] dup] typecheck -false /div [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] dup] typecheck -false /div [[/integertype /realtype] [/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck -false /div [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype] [/integertype /realtype]] typecheck - -[] /stackunderflow true initunittestdict {div} unittest -[1] /stackunderflow true initunittestdict {1 div} unittest -[1 0] /undefinedresult true initunittestdict {1 0 div} unittest -[1.5] null true initunittestdict {3 2 div} unittest -[2.0] null true initunittestdict {4 2 div} unittest - -unittestresult diff --git a/tests/ps/test-dup.ps b/tests/ps/test-dup.ps deleted file mode 100644 index 368ee18..0000000 --- a/tests/ps/test-dup.ps +++ /dev/null @@ -1,7 +0,0 @@ -initunittest - -[] /stackunderflow true initunittestdict {dup} unittest -[true] null true initunittestdict {/foo dup eq} unittest -[(baz)] null true initunittestdict {(bar) dup 2 122 put} unittest - -unittestresult diff --git a/tests/ps/test-end.ps b/tests/ps/test-end.ps deleted file mode 100644 index 18b340a..0000000 --- a/tests/ps/test-end.ps +++ /dev/null @@ -1,6 +0,0 @@ -initunittest - -[] /dictstackunderflow true initunittestdict {end} unittest -[true] null true initunittestdict {5 array dictstack length 1 dict begin end 5 array dictstack length eq} unittest - -unittestresult diff --git a/tests/ps/test-eq.ps b/tests/ps/test-eq.ps deleted file mode 100644 index f0e1379..0000000 --- a/tests/ps/test-eq.ps +++ /dev/null @@ -1,40 +0,0 @@ -initunittest - -[] /stackunderflow true initunittestdict {eq} unittest -[1] /stackunderflow true initunittestdict {1 eq} unittest -[(foo) noaccess (foo)] /invalidaccess true initunittestdict /readable 1 setunittestmask {(foo) noaccess (foo) eq} unittest -[(foo) (foo) noaccess] /invalidaccess true initunittestdict /readable 1 setunittestmask {(foo) (foo) noaccess eq} unittest -[(foo) noaccess (foo) noaccess] /invalidaccess true initunittestdict /readable 1 setunittestmask {(foo) noaccess (foo) noaccess eq} unittest -[true] null true initunittestdict {true true eq} unittest -[false] null true initunittestdict {false true eq} unittest -[true] null true initunittestdict {5 5 eq} unittest -[false] null true initunittestdict {5 5.01 eq} unittest -[true] null true initunittestdict {5 5.0 eq} unittest -[false] null true initunittestdict {5.1 5.0 eq} unittest -[true] null true initunittestdict {/name /name eq} unittest -[false] null true initunittestdict {/namea /name eq} unittest -[true] null true initunittestdict {/name (name) eq} unittest -[true] null true initunittestdict {[1] dup eq} unittest -[false] null true initunittestdict {[1][1] eq} unittest -[true] null true initunittestdict {[1] noaccess dup eq} unittest -[false] null true initunittestdict {[1] noaccess [1] eq} unittest -[true] null true initunittestdict {1 dict dup eq} unittest -[false] null true initunittestdict {1 dict 1 dict eq} unittest -[true] null true initunittestdict {1 dict noaccess dup eq} unittest -[false] null true initunittestdict {1 dict noaccess 1 dict eq} unittest -[true] null true initunittestdict {(foo)(foo) eq} unittest -[false] null true initunittestdict {(foo)(fooo) eq} unittest -[true] null true initunittestdict {null null eq} unittest -[false] null true initunittestdict {null () eq} unittest -[true] null true initunittestdict {{moveto} 0 get {moveto} 0 get eq} unittest -[false] null true initunittestdict {{moveto} 0 get {rmoveto} 0 get eq} unittest -[true] null true initunittestdict {mark mark eq} unittest -[false] null true initunittestdict {mark null eq} unittest -[true] null true initunittestdict {currentfile currentfile eq} unittest -[false] null true initunittestdict {currentfile (.)(r) file eq} unittest -[true] null true initunittestdict {save dup eq} unittest -[false] null true initunittestdict {save save eq} unittest -[true] null true initunittestdict {{foo} dup eq} unittest -[false] null true initunittestdict {{foo} {foo} eq} unittest - -unittestresult diff --git a/tests/ps/test-errordict.ps b/tests/ps/test-errordict.ps deleted file mode 100644 index ae9bc0c..0000000 --- a/tests/ps/test-errordict.ps +++ /dev/null @@ -1,6 +0,0 @@ -initunittest - -[true] null true initunittestdict {errordict type /dicttype eq} unittest -[true] null true initunittestdict {errordict /stackunderflow known} unittest - -unittestresult diff --git a/tests/ps/test-exch.ps b/tests/ps/test-exch.ps deleted file mode 100644 index 00313bd..0000000 --- a/tests/ps/test-exch.ps +++ /dev/null @@ -1,7 +0,0 @@ -initunittest - -[] /stackunderflow true initunittestdict {exch} unittest -[1] /stackunderflow true initunittestdict {1 exch} unittest -[2 1] null true initunittestdict {1 2 exch} unittest - -unittestresult diff --git a/tests/ps/test-exec.ps b/tests/ps/test-exec.ps deleted file mode 100644 index 2f6dd85..0000000 --- a/tests/ps/test-exec.ps +++ /dev/null @@ -1,8 +0,0 @@ -initunittest - -[] /stackunderflow true initunittestdict {exec} unittest -[5] null true initunittestdict {(3 2 add) cvx exec} unittest -[3 2 /add] null true initunittestdict {3 2 /add exec} unittest -[5] null true initunittestdict {3 2 /add cvx exec} unittest - -unittestresult diff --git a/tests/ps/test-execstack.ps b/tests/ps/test-execstack.ps deleted file mode 100644 index dba0737..0000000 --- a/tests/ps/test-execstack.ps +++ /dev/null @@ -1,9 +0,0 @@ -initunittest - -true /execstack [[/arraytype /proctype]] typecheck -false /execstack [[/booleantype /integertype /realtype /nametype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype]] typecheck - -[] /stackunderflow true initunittestdict {execstack} unittest -% XXX: FIXME - -unittestresult diff --git a/tests/ps/test-executeonly.ps b/tests/ps/test-executeonly.ps deleted file mode 100644 index daac19a..0000000 --- a/tests/ps/test-executeonly.ps +++ /dev/null @@ -1,14 +0,0 @@ -initunittest - -true /executeonly [[/arraytype /proctype /filetype /stringtype]] typecheck -false /executeonly [[/booleantype /integertype /realtype /nametype /dicttype /nulltype /operatortype /marktype /savetype]] typecheck - -[] /stackunderflow true initunittestdict {executeonly} unittest -[[] noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {[] noaccess executeonly} unittest -[{} noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {{} noaccess executeonly} unittest -/foo (.)(r) file def -[foo noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {//foo noaccess executeonly} unittest -[(foo) noaccess] /invalidaccess true initunittestdict /readable /writable 2 setunittestmask {(foo) noaccess executeonly} unittest -% XXX: FIXME - -unittestresult diff --git a/tests/ps/test-exit.ps b/tests/ps/test-exit.ps deleted file mode 100644 index 3b7ba11..0000000 --- a/tests/ps/test-exit.ps +++ /dev/null @@ -1,22 +0,0 @@ -initunittest - -{ - % XXX: cshow - % XXX: filenameforall - [1] null true initunittestdict {1 1 10 {exit} for} unittest - [1] null true initunittestdict {[1 2 3] {exit} forall} unittest - % XXX: kshow - [1] null true initunittestdict {{1 exit 2} loop} unittest - % XXX: pathforall - [1] null true initunittestdict {10 {1 exit 2} repeat} unittest - % XXX: resourceforall - [-1] null true initunittestdict {10 array dictstack length {1 dict begin exit} loop 10 array dictstack length sub} unittest - [] /invalidexit true initunittestdict {{exit} stopped {stop} if} unittest - [(tests/ps/testtest-exit.ps)] /invalidexit true initunittestdict {(tests/ps/testtest-exit.ps) run} unittest -} stopped { - % to ensure this unittest works - (unexpected behavior happened during testing /exit.) = - 1 .quit -} if - -unittestresult diff --git a/tests/ps/test-exp.ps b/tests/ps/test-exp.ps deleted file mode 100644 index ac05247..0000000 --- a/tests/ps/test-exp.ps +++ /dev/null @@ -1,12 +0,0 @@ -initunittest - -true /exp [[/integertype /realtype] dup] typecheck -false /exp [[/booleantype /nametype /arraytype /stringtype /dicttype /nulltype /operatortype /marktype /filetype /savetype /proctype]] typecheck - -[] /stackunderflow true initunittestdict {exp} unittest -[1] /stackunderflow true initunittestdict {1 exp} unittest -[0 0] /undefinedresult true initunittestdict {0 0 exp} unittest -[3.0] null true initunittestdict {9 0.5 exp} unittest -[-0.1111111111111111] null true initunittestdict {-9 -1 exp} unittest - -unittestresult diff --git a/tests/ps/test-ps.sh b/tests/ps/test-ps.sh deleted file mode 100755 index 6a4c0c4..0000000 --- a/tests/ps/test-ps.sh +++ /dev/null @@ -1,22 +0,0 @@ -#! /bin/sh - -set -e - -function run_test() { - echo `basename $1`: - ./tests/run.sh ./src/hgs -d QUIET -l test $1 -} - -rootdir=`dirname $0`/../.. -pushd $rootdir -export HIEROGLYPH_LIB_PATH=./plugins/test - -if [ $# -ne 0 ]; then - run_test $1 -else - for i in ./tests/ps/test-*.ps; do - run_test $i - done -fi - -popd diff --git a/tests/ps/testtest-currentfile.ps b/tests/ps/testtest-currentfile.ps deleted file mode 100644 index 5bb2cae..0000000 --- a/tests/ps/testtest-currentfile.ps +++ /dev/null @@ -1 +0,0 @@ -[foo foo] null true initunittestdict {foo currentfile} unittest diff --git a/tests/ps/testtest-exit.ps b/tests/ps/testtest-exit.ps deleted file mode 100644 index a3abe50..0000000 --- a/tests/ps/testtest-exit.ps +++ /dev/null @@ -1 +0,0 @@ -exit diff --git a/tests/ps/toh4.ps b/tests/ps/toh4.ps deleted file mode 100644 index 7ded512..0000000 --- a/tests/ps/toh4.ps +++ /dev/null @@ -1,302 +0,0 @@ -%!PS-Adobe-1.0 -%%Creator: NIIBE Yutaka -%%Title: Towers of Hanoi (PostScript) -%%CreationDate: Wed Mar 24 15:19:30 JST 2004 -%%Pages: 61 -%%DocumentFonts: Times-Roman -%%EndComments - -% Copyright (C) 2004 NIIBE Yutaka <gniibe@fsij.org> -% -% $Id: toh4.ps,v 1.3 2004/03/24 08:17:34 gniibe Exp $ -% -% This program 'Towers of Hanoi (PostScript)' 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 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. - - -% Radius -/R 90 def -/UnitR 17 def -/ConnectionWidth 5 def - -% Number of Disks -/NumDisks 4 def -/MaxDisk NumDisks def - -% -/Direction 3 array def -Direction 0 0 put -Direction 1 1 put -Direction 2 0 put - -% -/Disk NumDisks array def -0 1 MaxDisk 1 sub { Disk exch dup 1 add put } for - -% -/Tower 3 array def -Tower 0 0 put -Tower 1 MaxDisk put -Tower 2 MaxDisk put - -/MovingDisk -1 def - -% (>) -/DrawTower { - dup - gsave - Direction exch get 0 eq {30} {-30} ifelse rotate - 0 0 R 0 360 arc - gsave - .5 setgray fill - 1.0 setgray - 0 0 R 30 180 arc fill - 0 0 R 240 390 arc fill - grestore - stroke - - Tower exch get - { - dup MaxDisk eq { pop exit } if - dup 1 add UnitR mul 0 exch 0 exch 0 360 arc - dup MovingDisk eq {fill} {stroke} ifelse - Disk exch get - } loop - grestore -} def - -/ConnectPair false def -/Hello { /ConnectPair true def } def -/GoodBye { /MovingDisk -1 def /ConnectPair false def } def - -/Turn 0 def - -/DrawConnection { - gsave - 0.1 setgray - 5 setlinewidth - 60 rotate - newpath - 0 ConnectionWidth R add 1 add moveto - 3 sqrt 2 mul R mul ConnectionWidth R add 1 add lineto - stroke - newpath - 0 ConnectionWidth R add 1 add neg moveto - 3 sqrt 2 mul R mul ConnectionWidth R add 1 add neg lineto - stroke - grestore -} def - -/DrawTowers { - 0 1.5 R mul translate - - gsave - 0.7 setgray - newpath - 0 0 moveto - 6.5 R mul 0 lineto - 6.5 R mul 6 R mul lineto - 0 6 R mul lineto closepath fill - grestore - - 1.5 R mul dup translate - - 0 DrawTower - ConnectPair Turn 0 eq and { DrawConnection } if - - gsave - 60 rotate - 3 sqrt 2 mul R mul 0 translate - 180 rotate - 1 DrawTower - ConnectPair Turn 1 eq and { DrawConnection } if - grestore - - gsave - 3 sqrt 2 mul R mul 0 translate - 120 rotate - 2 DrawTower - ConnectPair Turn 2 eq and { DrawConnection } if - grestore -} def - -[ 2 0 1 ] /Rotate201 exch def -[ 1 2 0 ] /Rotate120 exch def - -/MoveDisk { - Turn - dup Tower exch get /disk0 exch def - dup Rotate120 exch get Tower exch get /disk1 exch def - disk0 disk1 gt - { - dup Rotate120 exch get Tower exch Disk disk1 get put - Tower exch disk1 put - Disk disk1 disk0 put - /MovingDisk disk1 def - } - { - dup Tower exch Disk disk0 get put - Rotate120 exch get Tower exch disk0 put - Disk disk0 disk1 put - /MovingDisk disk0 def - } - ifelse -} def - -/ChangeDirs { - Turn - dup - Direction exch 1 put - Rotate120 exch get Direction exch 0 put - Rotate201 Turn get /Turn exch def -} def -%%EndProlog - -%%Page: 1 1 -DrawTowers showpage - -%%Page: 2 2 -Hello DrawTowers showpage -%%Page: 3 3 -MoveDisk DrawTowers showpage -%%Page: 4 4 -GoodBye DrawTowers showpage -%%Page: 5 5 -ChangeDirs DrawTowers showpage - -%%Page: 6 6 -Hello DrawTowers showpage -%%Page: 7 7 -MoveDisk DrawTowers showpage -%%Page: 8 8 -GoodBye DrawTowers showpage -%%Page: 9 9 -ChangeDirs DrawTowers showpage - -%%Page: 10 10 -Hello DrawTowers showpage -%%Page: 11 11 -MoveDisk DrawTowers showpage -%%Page: 12 12 -GoodBye DrawTowers showpage -%%Page: 13 13 -ChangeDirs DrawTowers showpage - -%%Page: 14 14 -Hello DrawTowers showpage -%%Page: 15 15 -MoveDisk DrawTowers showpage -%%Page: 16 16 -GoodBye DrawTowers showpage -%%Page: 17 17 -ChangeDirs DrawTowers showpage - -%%Page: 18 18 -Hello DrawTowers showpage -%%Page: 19 19 -MoveDisk DrawTowers showpage -%%Page: 20 20 -GoodBye DrawTowers showpage -%%Page: 21 21 -ChangeDirs DrawTowers showpage - -%%Page: 22 22 -Hello DrawTowers showpage -%%Page: 23 23 -MoveDisk DrawTowers showpage -%%Page: 24 24 -GoodBye DrawTowers showpage -%%Page: 25 25 -ChangeDirs DrawTowers showpage - -%%Page: 26 26 -Hello DrawTowers showpage -%%Page: 27 27 -MoveDisk DrawTowers showpage -%%Page: 28 28 -GoodBye DrawTowers showpage -%%Page: 29 29 -ChangeDirs DrawTowers showpage - -%%Page: 30 30 -Hello DrawTowers showpage -%%Page: 31 31 -MoveDisk DrawTowers showpage -%%Page: 32 32 -GoodBye DrawTowers showpage -%%Page: 33 33 -ChangeDirs DrawTowers showpage - -%%Page: 34 34 -Hello DrawTowers showpage -%%Page: 35 35 -MoveDisk DrawTowers showpage -%%Page: 36 36 -GoodBye DrawTowers showpage -%%Page: 37 37 -ChangeDirs DrawTowers showpage - -%%Page: 38 38 -Hello DrawTowers showpage -%%Page: 39 39 -MoveDisk DrawTowers showpage -%%Page: 40 40 -GoodBye DrawTowers showpage -%%Page: 41 41 -ChangeDirs DrawTowers showpage - -%%Page: 42 42 -Hello DrawTowers showpage -%%Page: 43 43 -MoveDisk DrawTowers showpage -%%Page: 44 44 -GoodBye DrawTowers showpage -%%Page: 45 45 -ChangeDirs DrawTowers showpage - -%%Page: 46 46 -Hello DrawTowers showpage -%%Page: 47 47 -MoveDisk DrawTowers showpage -%%Page: 48 48 -GoodBye DrawTowers showpage -%%Page: 49 49 -ChangeDirs DrawTowers showpage - -%%Page: 50 50 -Hello DrawTowers showpage -%%Page: 51 51 -MoveDisk DrawTowers showpage -%%Page: 52 52 -GoodBye DrawTowers showpage -%%Page: 53 53 -ChangeDirs DrawTowers showpage - -%%Page: 54 54 -Hello DrawTowers showpage -%%Page: 55 55 -MoveDisk DrawTowers showpage -%%Page: 56 56 -GoodBye DrawTowers showpage -%%Page: 57 57 -ChangeDirs DrawTowers showpage - -%%Page: 58 58 -Hello DrawTowers showpage -%%Page: 59 59 -MoveDisk DrawTowers showpage -%%Page: 60 60 -GoodBye DrawTowers showpage -%%Page: 61 61 -ChangeDirs DrawTowers showpage - -%%%%%%% - -%% Trailer diff --git a/tests/ps/translate.ps b/tests/ps/translate.ps deleted file mode 100644 index 3cf4480..0000000 --- a/tests/ps/translate.ps +++ /dev/null @@ -1 +0,0 @@ -50 50 translate pstack diff --git a/tests/ps/truncate.ps b/tests/ps/truncate.ps deleted file mode 100644 index 899f596..0000000 --- a/tests/ps/truncate.ps +++ /dev/null @@ -1,2 +0,0 @@ -1.2 truncate = -2.9 truncate = diff --git a/tests/ps/type.ps b/tests/ps/type.ps deleted file mode 100644 index 5a43df9..0000000 --- a/tests/ps/type.ps +++ /dev/null @@ -1,13 +0,0 @@ -true type == -0 type == -.1 type == -/foo type == -/bar cvx type == -[] type == -1 dict type == -null type == -systemdict /add get type == -mark type == -(%stdin) (r) file type == -save type == - diff --git a/tests/ps/usertime.ps b/tests/ps/usertime.ps deleted file mode 100644 index 421be69..0000000 --- a/tests/ps/usertime.ps +++ /dev/null @@ -1 +0,0 @@ -{usertime =} loop diff --git a/tests/ps/vasarely.ps b/tests/ps/vasarely.ps deleted file mode 100644 index 9971e06..0000000 --- a/tests/ps/vasarely.ps +++ /dev/null @@ -1,588 +0,0 @@ -%! -% vasarely -% Elizabeth D. Zwicky -% zwicky@sgi.com -/vasarelysave save def % prevent residual side effects -% -% Inspired by Vasarely's experiments with tilting circles and squares -% (for instance "Tlinko" and "Betelgeuse" - -%% circles -/part { circle } def /nnrand false def -%% squares -% /part { ngon } def /nn 4 def /nnrand false def -%% random polygons -% /part { ngon } def /nnrand true def -%% random stars (not my favorite on this program) -% /part { nstar } def /nnrand true def - -%% tilt the base shape a random amount? -/twist false def -% /twist true def - - -/rainbow false def -%% To make rainbows -% /rainbow true def -%% Set this to 1 to go through a full range of colors -/rainrange .25 def - -% number of different designs per page -/inheight 2 def -/inwidth 2 def -% number of repeats in a design -/xtimes 10 def -/ytimes 16 def - -%% This sets the relationship between the two hues: comptwo is maximum contrast -/colorway {comptwo} def -%% monochrome comptwo harmtwo harmfour freecolor compthree closeharm -%% origcolor - -%% This sets the brightness and saturation of the colors; vivid makes -%% them both bright -/colorfam {vivid} def -%% vivid jewel intense medium pastel free orig contrast -%% medjewel medvivid vivpastel medpastel - - -%% Only experts below this point! - -usertime srand -/seed rand def - -/starcompensate false def -/constroke 1 def - - - -/circle { - /radius radius 1.33 mul def - currentpoint /herey exch def /herex exch def - herex herey radius 0 360 arc -} def - -/ngon{ % polygon of n sides, n determined by nn - nside 2 div radius rmoveto - nn cvi { - nside neg 0 rlineto - 360 360 nn div sub neg rotate - } repeat - closepath -} def - -/nstar{ % star of n points, n determined by nstarslider - /radius radius 1.33 mul def - currentpoint /herey exch def /herex exch def - 0 radius rmoveto - 90 nstarangle 2 div add neg rotate - nn cvi {nstarside 0 rlineto - 180 180 nstarangle 2 mul sub sub neg rotate - nstarside 0 rlineto - 180 180 360 nn div sub nstarangle 2 mul sub sub rotate - } repeat - 90 nstarangle 2 div add ptsack rotate - closepath -} def - -/nstarangle {180 360 nn div sub 3 div} def -/nstarside { - 2 - radius - 1 - 180 nn div - sin - div - div - mul - nstarangle sin - mul - 180 - nstarangle 2 mul - sub - sin - div -} def - -/nside { - 2 - radius - 360 nn div 2 div tan - mul - mul -} def - - -/tan { /alpha exch def - alpha sin - 1 alpha sin dup mul sub sqrt - div -} def - - -/pastel { - /backbright high def - /backsat medlow def - /fillbright high def - /fillsat medlow def - /eobright high def - /eosat medlow def - constroke 0 eq { - /strokebright high def - /strokesat medlow def - } - { - /strokebright low def - /strokesat high def - } ifelse -} def - -/jewel { - /fillbright med def - /fillsat high def - /backbright med def - /backsat high def - /eobright med def - /eosat high def - constroke 0 eq { - /strokebright medlow def - /strokesat high def - } - { - /strokebright high def - /strokesat medlow def - } ifelse -} def - -/vivid { - /fillsat 1 def - /fillbright high def - /eosat 1 def - /eobright high def - /backsat 1 def - /backbright high def - constroke 0 eq { - /strokesat 1 def - /strokebright high def - } - { - /strokesat high def - /strokebright medlow def - } ifelse -} def - -/free { - /fillsat anyrand def - /fillbright anyrand def - /eosat anyrand def - /eobright anyrand def - /backsat anyrand def - /backbright anyrand def - /strokesat anyrand def - /strokebright anyrand def -} def - -/contrast { - /sat medhigh def - /bright rand 2 mod 0 eq {medhigh} {medlow} ifelse def - /backsat sat def - /backbright bright def - /eosat sat def - /eobright 1 bright sub def - /fillsat sat def - /fillbright bright def - /strokebright rand 2 mod def - /strokesat rand 2 mod def - -} def -/medium { - /backsat med def - /backbright med def - /eosat med def - /eobright med def - /fillsat med def - /fillbright med def - /strokebright med def - /strokesat med def - -} def -/intense { - /backsat high def - /backbright med def - /eosat high def - /eobright high def - /fillsat high def - /fillbright med def - /strokebright high def - /strokesat high def - -} def -/orig { - /backsat rand 99 mod 55 add 100 div def - /backbright rand 99 mod 35 add 100 div def - /eosat rand 77 mod 22 add 100 div def - /eobright 90 rand 75 mod sub 15 add 100 div def - /fillsat 100 rand 90 mod sub 100 div def - /fillbright 100 rand 45 mod sub 20 add 100 div def - /strokebright 100 rand 55 mod sub 100 div def - /strokesat 100 rand 85 mod sub 100 div def - -} def - -/medjewel { - /alt rand 2 mod def - /backsat alt 0 eq {high} { med} ifelse def - /fillsat alt 0 eq {med} {high} ifelse def - /eosat alt 0 eq {high} {med} ifelse def - /backbright med def - /fillbright med def - /eobright med def - constroke 0 eq { - /strokebright medlow def - /strokesat high def - } - { - /strokebright high def - /strokesat medlow def - } ifelse -} def - -/medvivid { - /alt rand 2 mod def - /backsat alt 0 eq {1} { med} ifelse def - /fillsat alt 0 eq {med} {1} ifelse def - /eosat alt 0 eq {1} {med} ifelse def - /backbright alt 0 eq {high} {med} ifelse def - /eobright alt 0 eq {high} {med} ifelse def - /fillbright alt 0 eq {med} {high} ifelse def - constroke 0 eq { - /strokesat 1 def - /strokebright high def - } - { - /strokesat high def - /strokebright medlow def - } ifelse -} def -/vivpastel { - /backlight rand 2 mod def - /backsat backlight 0 eq {medlow} {1} ifelse def - /eosat backlight 0 eq {medlow} {1} ifelse def - /fillsat backlight 0 eq {1} {medlow} ifelse def - /fillbright high def - /backbright high def - /eobright high def - constroke 0 eq { - /strokesat 1 def - /strokebright high def - } - { - /strokesat high def - /strokebright medlow def - } ifelse -} def - -/medpastel { - /alt rand 2 mod def - /backsat alt 0 eq {medlow} {med} ifelse def - /eosat alt 0 eq {medlow} {med} ifelse def - /fillsat alt 0 eq {med} {medlow} ifelse def - /fillbright alt 0 eq { high } {med} ifelse def - /backbright alt 0 eq {med} { high } ifelse def - /eobright alt 0 eq {med} { high } ifelse def - constroke 0 eq { - /strokebright high def - /strokesat medlow def - } - { - /strokebright low def - /strokesat high def - } ifelse -} def - -/maxcon { - rand 2 mod 1 eq { - /backsat 0 def - /backbright 0 def - /eosat 0 def - /eobright 0 def - /fillsat 0 def - /fillbright 1 def - /strokebright 1 def - /strokesat 0 def - } - { - /backsat 0 def - /backbright 1 def - /eosat 0 def - /eobright 1 def - /fillsat 0 def - /fillbright 0 def - /strokebright 0 def - /strokesat 0 def - } - ifelse -} def - -/monochrome { - /fillhue hue closevary def - /strokehue hue closevary def - /eohue hue closevary def - /backhue hue def -} def - -/blackandwhite { - /fillhue 1 def - /eohue 0 def - /backhue 0 def - /strokehue 1 def -} def - - -/freecolor { - /fillhue anyrand def - /strokehue anyrand def - /eohue anyrand def - /backhue anyrand def -} def - -/purple { - /fillhue rand 15 mod 80 add 100 div def - /backhue rand 15 mod 80 add 100 div def - /strokehue rand 15 mod 80 add 100 div def - /eohue rand 15 mod 80 add 100 div def - /backhue rand 15 mod 80 add 100 div def -} def - -/comptwo { - /fillhue hue closevary def - /strokehue hue .5 add dup 1 gt {1 sub} if def - /backhue strokehue def - /eohue strokehue closevary def -} def - -/compthree { - /backhue hue def - /strokehue hue 1 3 div add dup 1 gt {1 sub} if closevary def - /fillhue strokehue closevary def - /eohue hue 1 3 div sub dup 1 lt { 1 add} if closevary def -} def - -/origcolor { - /backhue hue def - /strokehue - hue 1000 mul cvi 3 mod dup 1 eq - {hue closevary} - {2 eq - {rand 999 mod 1000 div} - {hue .5 add dup 1 gt {1 sub} if } - ifelse - } - ifelse def - /fillhue hue 1000 mul cvi 3 mod dup 1 eq - {hue closevary} - {2 eq - {rand 999 mod 1000 div} - {hue .5 add dup 1 gt {1 sub} if } - ifelse - } - ifelse - def - /eohue hue 1000 mul cvi 2 mod 1 eq - {hue closevary} - {rand 999 mod 1000 div} - ifelse def -} def - -/harmtwo { - /fillhue hue closevary def - /backhue hue def - /strokehue hue .2 add dup 1 gt {1 sub} if closevary def - /eohue strokehue closevary def -} def - -/harmfour { - /fillhue hue closevary def - /backhue hue .1 add dup 1 gt {1 sub} if def - /strokehue hue .2 add dup 1 gt {1 sub} if closevary def - /eohue hue .1 sub dup 1 lt {1 add} if closevary def -} def - -/closeharm { - /fillhue hue def - /backhue hue .05 add dup 1 gt {1 sub} if closevary def - /strokehue hue .1 add dup 1 gt {1 sub} if closevary def - /eohue hue .05 sub dup 0 lt {1 add} if closevary def -} def - - -/high {100 rand 25 mod sub 100 div } def -/med { rand 33 mod 33 add 100 div } def -/medhigh {100 rand 50 mod sub 100 div } def -/medlow {rand 50 mod 100 div } def -/low { rand 25 mod 100 div} def -/anyrand { rand 100 mod 100 div } def -/closevary {rand 70 mod rand 100 mod sub 1000 div add} def - -%rainbow -% {/colorfill {fillhue 1 1 sethsbcolor fill} def} - /colorfill {fillhue fillsat fillbright sethsbcolor fill } def -%ifelse -/colorstroke {strokehue strokesat strokebright sethsbcolor stroke } def -/eocolorfill {eohue eosat eobright sethsbcolor eofill } def -/backfill{ backhue backsat backbright sethsbcolor fill } def - -/xstep { xrange xtimes 1 sub div x 1 sub mul } def -/ystep { yrange ytimes 1 sub div y 1 sub mul} def - -/functionarray [ - {sin abs} - {sin } - {cos } - {cos abs} - {sin dup mul } - {cos dup mul } - {sin abs sqrt } - {cos abs sqrt } -] def - -/range { /top exch def /bottom exch def /number exch def -% number is between -1 and 1 - /rangesize top bottom sub def - number 1 add 2 div - % number is now between 0 and 1 - rangesize mul - bottom add - } def - -/drawone { - /radius - width height lt {width 3 div} {height 3 div} ifelse - def - seed srand - 0 0 moveto - /origmatrix [ 0 0 0 0 0 0 ] currentmatrix def - [ % xstep function ystep function2 add .4 1.3 range - 1 - ystep function xstep function add -.25 .25 range - ystep function3 xstep function2 add -.5 .5 range -% xstep function4 ystep function mul .4 1.3 range - 1 - 0 - 0 - ] - concat - twist {twistdeg rotate} if - part colorfill - origmatrix setmatrix - rainbow - {/fillhue fillhue rainrange xtimes ytimes mul div add dup 1 gt {1 sub} if def} - if - -} def - -/notdrawone { - seed srand - twist {/twistdeg rand 360 mod def} if - nnrand {/nn rand 6 mod 3 add def} if - /x1 rand width 3 div cvi mod width 8 div add def - /y1 rand height 3 div cvi mod height 8 div add def - rand 3 mod dup 1 eq - {pop /x2 rand width 2 div cvi mod def - /y2 rand height 2 div cvi mod def} - { 2 eq - {/x2 y1 def /y2 x1 def} - {/x2 y1 width mul height div def /y2 x1 height mul width div def} - ifelse - } - ifelse - /radius width height gt {width} {height} ifelse 2.5 div def - /stripe rand width 10 div cvi mod 2 add def - starcompensate { /stripe stripe 2 mul def /radius radius 10 nn div mul def } if - /i 1 def - /repeats radius stripe div cvi 1 add def - /nnincr 1 def - repeats { - colorvary {colorfam colorway} if - /i i 1 add def - /radius radius stripe sub def - - } repeat -} def - - -/page { - clippath pathbbox /ury exch def /urx exch def /lly exch def /llx exch -def -/pagewidth urx llx sub def -/pageheight ury lly sub def -0 0 moveto - llx lly translate - /outerwidth - pagewidth inwidth div - def - /outerheight - pageheight inheight div - def - /width - outerwidth xtimes div - def - /height - outerheight ytimes div - def - - - - /size - width height gt {width} {height} ifelse - def - inwidth { - inheight { - - /seed rand def - /hue rand 999 mod 1000 div def - colorway colorfam - /x 1 def /y 1 def - nnrand {/nn rand 6 mod 3 add def} if - /twistdeg rand 360 mod def - - /function functionarray rand functionarray length mod get def - /function2 functionarray rand functionarray length mod get def - /function3 functionarray rand functionarray length mod get def - /function4 functionarray rand functionarray length mod get def - -/xrange [ 90 180 270 360 180 360 ] rand 6 mod get def -/yrange [ 90 180 270 360 180 360 ] rand 6 mod get def - initclip - newpath - 0 0 moveto - outerwidth 0 rlineto - 0 outerheight rlineto - outerwidth neg 0 rlineto - backfill - - xtimes { - ytimes{ - /y y 1 add def - width 2 div height 2 div translate - drawone - width 2 div neg height 2 div neg translate - 0 height translate - } repeat - - /y 1 def - /x x 1 add def - width height ytimes mul neg translate - - } repeat - - width xtimes mul neg outerheight translate - } repeat - outerwidth outerheight inheight mul neg translate - } repeat - - } def - -page showpage -clear cleardictstack -vasarelysave restore diff --git a/tests/ps/where.ps b/tests/ps/where.ps deleted file mode 100644 index 293a8c1..0000000 --- a/tests/ps/where.ps +++ /dev/null @@ -1,2 +0,0 @@ -/add where pstack clear -/foo where pstack diff --git a/tests/run.sh b/tests/run.sh deleted file mode 100755 index c31d179..0000000 --- a/tests/run.sh +++ /dev/null @@ -1,21 +0,0 @@ -#! /bin/sh - -export HIEROGLYPH_DEVICE_PATH= -for i in `dirname $0`/../devices/*; do - if test -d $i && test -d $i/.libs; then - export HIEROGLYPH_DEVICE_PATH=$HIEROGLYPH_DEVICE_PATH:$i/.libs - fi -done -export HIEROGLYPH_PLUGIN_PATH= -for i in `dirname $0`/../plugins/*; do - if test -d $i && test -d $i/.libs; then - export HIEROGLYPH_PLUGIN_PATH=$HIEROGLYPH_PLUGIN_PATH:$i/.libs - fi -done -if [ "x$HIEROGLYPH_LIB_PATH" != "x" ]; then - export HIEROGLYPH_LIB_PATH=$HIEROGLYPH_LIB_PATH:`dirname $0`/../lib:. -else - export HIEROGLYPH_LIB_PATH=`dirname $0`/../lib:. -fi -export LD_LIBRARY_PATH="`dirname $0`/../hieroglyph/.libs:`dirname $0`/../libretto/.libs:$LD_LIBRARY_PATH" -$@ diff --git a/update-version b/update-version deleted file mode 100755 index 352f94f..0000000 --- a/update-version +++ /dev/null @@ -1,7 +0,0 @@ -#! /bin/sh -TOPDIR=`dirname $0` -VERSIONIN=$TOPDIR/hieroglyph/version.h.in.in -VERSION_H=${VERSIONIN//.in.in}.in -UUID=`uuidgen` - -sed -e "s/%%HIEROGLYPH%%/$UUID/" $VERSIONIN > $VERSION_H |